«

»

9月 15

Hyper-V 2.0 に配置した CentOS 5 入りの仮想マシンに、仮想ハードディスクを追加してみる (3) – MySQLデータベースの移転作業

いよいよ 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  ]

 

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

次の HTMLタグおよび属性が使えます: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>