はじめに
MySQLのDBの複製を作りたくて、ダンプとリストアを実施した際に
はまったことのメモです。
ダンプとリストアは以下のサイトを参考に実施しました。
http://blog.flatlabs.net/20100420_061602/
DBのダンプ
まずはDBのダンプを取得します。
以下のコマンドを実行すると/root
直下にdbdump.sqlが作成されます。
console
# mysqldump -A -u user -p > dbdump.sql
DBのリストア
次にDBのリストアをするのですが、今回は複製がしたいので
別途データベースを作成し、そこにリストアします。
console
# mysql -u user -p
Enter password:
...
mysql> CREATE DATABASE `database`;
ERROR 1044 (42000): Access denied for user 'user'@'localhost' to database 'database'
ここでERROR 1044...
よくよく調べてみたところ、'user'@'localhost'
に
CREATE DATABSEの権限が付与されていなかったみたいです。
無理やり権限を付けました。
console
mysql>GRANT ALL PRIVILEGES ON *.* TO 'user'@'localhost' WITH GRANT OPTION;
mysql> show grants for user@localhost;
+---------------------------------------------------------------------+
| Grants for user@localhost |
+---------------------------------------------------------------------+
| GRANT ALL PRIVILEGES ON *.* TO 'user'@'localhost' WITH GRANT OPTION |
+---------------------------------------------------------------------+
1 row in set (0.00 sec)
権限が付与されたので、もう一度データベースを作成してみます。
console
mysql> CREATE DATABASE `database`;
Query OK, 1 row affected (0.00 sec)
mysql> SHOW DATABASES;
+--------------------------------+
| Database |
+--------------------------------+
| database |
+--------------------------------+
1 rows in set (0.00 sec)
できた!!!
リストアします。
console
# mysql -u user -p database < dbdump.sql
Enter password:
#
できた!!!
と思ってdbの中を見てみたらデータベースはできていたがテーブルが1つもできていなかった。
dbdump.sqlを見たところ、複製先のデータベースが違っていた。
old_database
をdatabese
に変えてもう一回リストアしてみたらできました。
dbdump.sql
CREATE DATABASE /*!32312 IF NOT EXISTS*/ `old_database` /*!40100 DEFAULT CHARACTER SET latin1 */;
USE `old_database`;
...