いよいよ MySQL のデータベース配置先の切り替え工事に入ります。
- MySQLに依存するプログラムと、MySQL自身の停止
- 移転先へデータベースをコピーする
- /etc/my.cnf を書き換えて、mysqldが移転先を参照するように設定する
- mysqlを起動して、正しく移転先のデータにアクセスできているかどうか確認する
- 停止しておいたmysqlに依存するプログラムを起動して、復旧させる
これにて完了になります。
まずは mysql を使用しているプログラムが起動しないようにしましょう。
例えば Apache から mysql を使用しているのなら、次のようにして httpd を停止してしまいましょう。
[root@code.zobe.jp]# service httpd stop httpd を停止中: [ OK ]
それらが済んだら次は mysql を停止して、作業を開始します。
[root@code.zobe.jp]# service mysqld stop MySQL を停止中: [ OK ]
前の記事で作成した配置先に、データベースを移転します。
mysqlのデータベースのデフォルトの配置先は /var/lib/mysql ですから、そこからの移転です。
[root@code.zobe.jp]# cp -prf /var/lib/mysql /var/zobe/
データベースが小さければすぐに終わります。大きい場合は…ゆっくり待ちましょう。
なお、オプション「-prf」は、アクセス権限等を変更せずにコピーするためにつけています。
コピーが成功したかどうかを確認します。
[root@code.zobe.jp]# ls -al /var/zobe/mysql 合計 86072 drwxr-xr-x 11 mysql mysql 4096 9月 5 17:14 . drwxr-xr-x 3 root root 4096 9月 5 16:56 .. drwx------ 2 mysql mysql 4096 4月 15 2010 movabletype_pcparts drwx------ 2 mysql mysql 4096 3月 10 17:43 wordpress_code -rw-rw---- 1 mysql mysql 20971520 9月 5 17:14 ib_logfile0 -rw-rw---- 1 mysql mysql 5242880 3月 21 20:03 ib_logfile0.old -rw-rw---- 1 mysql mysql 20971520 3月 21 20:04 ib_logfile1 -rw-rw---- 1 mysql mysql 5242880 3月 21 19:17 ib_logfile1.old -rw-rw---- 1 mysql mysql 35651584 9月 5 17:14 ibdata1 drwx------ 2 mysql mysql 4096 4月 4 2010 mysql drwx------ 2 mysql mysql 4096 4月 4 2010 test
自分が以前に作成したデータベース名のファイルと、その他がだいたいこんな風に転がっていれば成功です。
コピー元と比較してもよいでしょう。
[root@code.zobe.jp]# ls -al /var/lib/mysql
また同時に、旧データベースはそのままの状態で保存しておきましょう。
[root@code.zobe.jp]# mv /var/lib/mysql /var/lib/mysql_backup
このバックアップは気になるようだったらしばらく取っておいて、大丈夫だと思ったら消してください。
移転に失敗した場合は、
[root@code.zobe.jp]# mv /var/lib/mysql_backup /var/lib/mysql
とすれば復旧できます。
次は、mysqlの設定ファイルを書き換えて、mysqldが移転先のデータベースを参照してくれるようにします。
今回は移転先が /var/zobe/mysql ですから、/etc/my.cnf を次のように書き換えます。
編集前 [mysqld] datadir=/var/lib/mysql 編集後 [mysqld] datadir=/var/zobe/mysql
なお、
socket=/var/lib/mysql/mysql.sock
という設定もあるにはあるのですが、これを移動するのはやっかいですので、
いじらないほうがいいです。
また、たとえ /var/lib/mysql ディレクトリを移動したり消したりしてしまっても、mysqldが勝手に作り直してくれるようなので、心配はいりません。
さて、移転に成功したかどうか、確認してみましょう。
まずはmysqldを起動します。
[root@code.zobe.jp]# service mysqld start MySQL を起動中: [ OK ]
そして中身を覗いてみましょう。
[root@code.zobe.jp]# mysql -u root -p Enter password: Welcome to the MySQL monitor. Commands end with ; or \g. Your MySQL connection id is 3 Server version: 5.0.95 Source distribution Copyright (c) 2000, 2011, Oracle and/or its affiliates. All rights reserved. Oracle is a registered trademark of Oracle Corporation and/or its affiliates. Other names may be trademarks of their respective owners. Type 'help;' or '\h' for help. Type '\c' to clear the current input statement. mysql> show databases; +---------------------+ | Database | +---------------------+ | information_schema | | movabletype_pcparts | | wordpress_code | | mysql | | test | +---------------------+ 10 rows in set (0.03 sec)
以前からあるデータベースがきちんと見えれば成功です。
みえないなー、と思ったら、書き間違えていませんか?
もし
+---------------------+ | Database | +---------------------+ | information_schema | | mysql | | test | +---------------------+
これしかなかった場合、たぶん、あなた my.cnf 書き間違えてるか、
データベースのコピー先を間違えているか、どっちかだと思います。
確認してみてください。
こんな風になっちゃってませんか?
/etc/my.cnf: datadir=/var/zobe/machigaeta
この場合、/var/zobe/machigaeta が mysqld によって自動生成され、
からっぽのデータベースが配置されています。
この場合は、いったん service mysqld stop して rm -Rf /var/zobe/machigaeta してから
my.cnf を正しく修正して起動し直してみてください。
移転が確認できたら、停止してあったプログラムも忘れずに状況開始してください。
これですべての作業が終了です。おつかれさまでした!
[root@code.zobe.jp]# service httpd start httpd を起動中: [ OK ]
最近のコメント