⚠この記事はブログ移転前のアーカイブです

MySQLのデータベースを移動するときに属性とか無視してコピーしちゃうと、Warning連発したり

screenshot

こうなる。

恐ろしい。

属性を保持したままコピーしよう

sudo service mysql stop
sudo cp /etc/mysql/my.cnf /etc/mysql/my.cnf.bak

#mysql 停止&設定バックアップ

sudo nano /etc/mysql/my.cnf

my.cnf内で
datadir = var/lib/mysql

となっているのを任意のディレクトリに変えます。設定はバックアップ済みですが、念のため元のdatadirオプションは消さずに「#」を付けてコメント化しておくといいでしょう。

sudo cp -pR /var/lib/mysql /media/usb3/mysql

cp -[オプション] [元のディレクトリ] [移動先ディレクトリ] なわけですが、ディレクトリを再帰的コピーする「R」オプションだけでは不十分です。パーミッションやオーナー情報もコピーしたいので「p」オプションも一緒につけることが必須となります。

ちなみに「R」オプションのみでコピーすると

sudo ls -l /media/usb3/mysql
-rw-r--r-- 1 root root        0 Jun  1 23:18 honyarara
drwx------ 2 root root     4096 Jun  1 23:18 honyarara
-rw-r----- 1 root root 27262976 Jun  1 23:18 honyarara
-rw-r----- 1 root root  5242880 Jun  1 23:18 honyarara
-rw-r----- 1 root root  5242880 Jun  1 23:18 honyarara
drwx------ 2 root root     4096 Jun  1 23:18 honyarara
-rw------- 1 root root        6 Jun  1 23:18 honyarara
drwx------ 2 root root     4096 Jun  1 23:18 honyarara
drwx------ 2 root root     4096 Jun  1 23:18 honyarara

こんな感じでタイムスタンプがコピーした日付に書き換わり、ファイルオーナーもrootになってしまいます。