SQLite+PHPで簡単なアプリ作っていたら
「unable to open database file」というエラーが出ました。。
和訳すると「データベースファイルを開く事ができない」です。
エラーメッセージ内にあるパスには確かにデータベースファイル「XX.db」はあるのに。。
ということで、ファイルのパーミッションを変えて見ましたが変わらず。
ということで、ファイルの置かれたディレクトリのパーミッションを変えたらいけた!
以上どぇす。
2009年6月22日月曜日
2009年6月10日水曜日
MySQLでレプリケーション
Webアプリケーションを作成していて、MySQLサーバの負荷が高くなってきた場合、
・サーバスペックUP
・アプリケーションプログラム修正
・クエリ見直し
など色々対処方法はあるかと思います。
ま、一番言いのはサーバスペックUPだと思うのですが、どうしようもないくらい負荷が高くなった場合はMySQLサーバを複数台用意して、負荷を分散させましょう!
という事で、今日はMySQLの機能としてあるレプリケーション(Master-Slave)のやり方を簡単にメモ。
MySQLのレプリケーションはMaster側でバイナリログを取得していないといけないので
次にMasterに対しSlave側からアクセスできる新規ユーザを作成します。
では、Master側のデータをSlaveへ移動させます。
Master側のバイナリログ状態を確認
MySQLのデータコピーをします。
MySQLのロックを解除します。
次にSlave側の設定です。
まず先ほど圧縮したMySQLのデータを展開します。
ではレプリケーション開始します。
めっちゃ簡単ですけど、もしSlaveが落ちて自動再起動とかなった場合にSLAVE STARTってっ誰がやるんだろ。。
・サーバスペックUP
・アプリケーションプログラム修正
・クエリ見直し
など色々対処方法はあるかと思います。
ま、一番言いのはサーバスペックUPだと思うのですが、どうしようもないくらい負荷が高くなった場合はMySQLサーバを複数台用意して、負荷を分散させましょう!
という事で、今日はMySQLの機能としてあるレプリケーション(Master-Slave)のやり方を簡単にメモ。
MySQLのレプリケーションはMaster側でバイナリログを取得していないといけないので
[Master]とします。
# vim /etc/my.cnf
[mysqld]
server-id = 1 ←サーバIDはSlave側と重複しないように!
log-bin=mysql-bin ←バイナリログ取得
expire_logs_days=15 ←バイナリログ保存期間(任意)
binlog-do-db=[DB名] ←特定のデータベースのみバイナリログ取得(任意)
次にMasterに対しSlave側からアクセスできる新規ユーザを作成します。
[Master]
mysql> GRANT REPLICATION SLAVE ON *.* TO slave_user@192.168.0.2(Slave_IP);
では、Master側のデータをSlaveへ移動させます。
[Master]でDBが更新されないようロックします。
mysql> FLUSH TABLES WITH READ LOCK;
Master側のバイナリログ状態を確認
[Master]この「File」と「Position」の値はメモっておきます。コピー中にデータの更新があった場合にこのPositionからの同期をさせるためです。
mysql> SHOW MASTER STATUS;
+-----------------+----------+--------------+------------------+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+-----------------+----------+--------------+------------------+
| mysql-bin.000001| 112 | | |
+-----------------+----------+--------------+------------------+
1 row in set (0.00 sec)
MySQLのデータコピーをします。
[Master]
# tar cvf master.tar /usr/local/mysql/data/[DB名dir]
MySQLのロックを解除します。
[Master]
mysql> UNLOCK TABLES;
次にSlave側の設定です。
まず先ほど圧縮したMySQLのデータを展開します。
[Slave]次にSlaveのmy.cnfの設定です。
# cd /usr/local/mysql/data
# tar xvf master.tar
[Slave]Masterへ接続する設定を書いてもOK(?)です。
# vim /etc/my.cnf
[mysqld]
server-id = 2 ←Master側と重複しないように!
read-only ←Slave側は更新しないように設定。SUPER権限を持つユーザのみが更新クエリを実行できる。
replicate-do-db = [DB名] ←指定したDBだけレプリケートする場合(任意)
[Slave]と、my.cnfに書いても良いか、直接DBをイジった方が早い。
# vim /etc/my.cnf
master-host = 192.168.0.1 ←MasterIP
master-user = slave_user ←REPLICATION SLAVE権限を持つユーザ
[Slave]でOKです。
mysql> CHANGE MASTER TO
MASTER_HOST = '192.168.0.1',
MASTER_USER = 'slave_user',
MASTER_LOG_FILE = 'mysql-bin.000001', ←バイナリログ名
MASTER_LOG_POST = 112; ←先ほどメモったPositionの値
ではレプリケーション開始します。
[Slave]ちなみに終了のときは
mysql> SLAVE START;
[Slave]です。
mysql> SLAVE STOP;
めっちゃ簡単ですけど、もしSlaveが落ちて自動再起動とかなった場合にSLAVE STARTってっ誰がやるんだろ。。
2009年6月9日火曜日
MySQLを同一サーバ上に複数起動
どうも、俺です。
今日はMySQLを一つのサーバ内に複数起動する方法を超簡単にメモします。
OSはLinuxです。
そして、すでにデフォルトポート3306でのMySQLは起動しているものとします。
まず、新しいmy.cnfを作成します。
次にmysql_install_dbを打ちます。
では、MySQL起動します。
このポート3307のMySQLへログインするには
以上!!
今日はMySQLを一つのサーバ内に複数起動する方法を超簡単にメモします。
OSはLinuxです。
そして、すでにデフォルトポート3306でのMySQLは起動しているものとします。
# netstat -tpln | grep mysql
tcp 0 0.0.0.0:3306 0.0.0.0:* LISTEN 30029/mysqld
まず、新しいmy.cnfを作成します。
# vim /etc/my.3307.cnfもう一つのMySQLはポート3307で起動するものとします。
[client]
port = 3307
socket = /tmp/mysql.3307.sock
[mysqld]
pid-file = /usr/local/mysql/var.3307/mysqld.3307.pid
datadir = /usr/local/mysql/var.3307
port = 3307
socket = /tmp/mysql.3307.sock
次にmysql_install_dbを打ちます。
# mysql_install_db --defaults-file=/etc/my.3307.cnf --user=mysqlで/etc/my.3307.cnfを指定します。
では、MySQL起動します。
# /usr/local/mysql/bin/mysqld_safe --defaults-file=/etc/my.3307.cnf &で起動できます。
このポート3307のMySQLへログインするには
# mysql --socket=/tmp/mysql.3307.sockとソケットを指定すればOKです。
以上!!
2009年5月19日火曜日
vimインストールで'os_unix.c:45:30 error: selinux/selinux.h: No such file or directory'というエラーが出る
どうも俺です。
僕は新しいサーバが到着したらまず行うのがログインシェルの設定です。
次にvimのインストール(ソース)なのですが、make でこけまくったのでメモします。
OSはCentOS5.3。vimは7.2です。
まずソースをダウンロード
次に解凍
次に僕はいつもパッチを当てます(※当てなくても良いと思う)
エラー内容は
「ん~面倒くさい、、、」となりました。
一応os_unix.cファイルなど眺めて見たものの長すぎるため5分で終了。
どうもselinux関連のエラーっぽいので、再度configureオプションを確かめる。
というわけでこのオプションを付けてmakeすればインストールできました。
深い原因調査はまた今度、または偉い人に聞いてみてください( ´艸`)
僕は新しいサーバが到着したらまず行うのがログインシェルの設定です。
次にvimのインストール(ソース)なのですが、make でこけまくったのでメモします。
OSはCentOS5.3。vimは7.2です。
まずソースをダウンロード
# wget 'ftp://ftp.vim.org/pub/vim/unix/vim-7.2.tar.bz2'します。
# wget 'ftp://ftp.vim.org/pub/vim/extra/vim-7.2-lang.tar.gz'
# wget 'ftp://ftp.vim.org/pub/vim/extra/vim-7.2-extra.tar.gz'
次に解凍
# tar jxvf vim-7.2.tar.bz2します。
# tar zxvf vim-7.2-lang.tar.gz
# tar zxvf vim-7.2-extra.tar.gz
次に僕はいつもパッチを当てます(※当てなくても良いと思う)
# cd vim72なのですが、今回ここのmakeでずっこけました。
# mkdir patches
# cd patches
# curl -O 'ftp://ftp.vim.org/pub/vim/patches/7.2/7.2.[001-182]'
... ここでパッチファイルをDLするのをしばし待つ ...
# cd ..
# cat patches/7.2.* | patch -p0
# ./configure --enable-multibyte --enable-xim --enable-fontset --with-features=big
# make && make install
エラー内容は
os_unix.c:45:30: error: selinux/selinux.h: No such file or directoryというエラー文言がズラズラと、、。
os_unix.c: In function 'mch_copy_sec':
os_unix.c:2620: warning: implicit declaration of function 'is_selinux_enabled'
os_unix.c:2624: error: 'security_context_t' undeclared (first use in this function)
os_unix.c:2624: error: (Each undeclared identifier is reported only once
os_unix.c:2624: error: for each function it appears in.)....
「ん~面倒くさい、、、」となりました。
一応os_unix.cファイルなど眺めて見たものの長すぎるため5分で終了。
どうもselinux関連のエラーっぽいので、再度configureオプションを確かめる。
# ./configure --help | lessとすると
--disable-selinux Don't check for SELinux support.「ん!」らしきオプションがあるじゃないか!
というわけでこのオプションを付けてmakeすればインストールできました。
深い原因調査はまた今度、または偉い人に聞いてみてください( ´艸`)
2009年5月12日火曜日
linuxで操作ログを残すscriptコマンド
あまり使わないかもしれませんが、ユーザの実行したコマンドの履歴は
これでも十分ですが、もう一つ
ロギングを終了する場合は、
$ historyで確認することが可能です。
これでも十分ですが、もう一つ
$ script log_filename.logとすることで、log_filename.logにログを残すことが可能です。
ロギングを終了する場合は、
$ exitまたは
$ Ctrl + Dで終了します。
登録:
投稿 (Atom)