データベースを同じサーバの MySQL へコピーするコマンド
# データベースをコピー。db1(user1、password1) から db2(user2、password2)に mysqldump -u user1 -ppassword1 -n db1 | mysql -u user2 -ppassword2 db2
データベースを別のサーバの MySQL へコピーするコマンド
# 別サーバにデータベースをコピー。db1(user1、password1) から hostname サーバ(ユーザ名 hostuser)の db2(user2、password2)に mysqldump -u user1 -ppassword1 -n db1 | ssh hostuser@hostname mysql -u user2 -ppassword2 db2
コピー元、コピー先など環境を整理!
ひとつのサーバ(192.168.56.111)の MySQL
- ユーザ:cakeuser、パスワード:cakepass、データベース:cakedb
- ユーザ:cakeuser2、パスワード:cakepass2、データベース:cakedb2
別のサーバ(192.168.56.113)の MySQL
- ユーザ:fueluser、パスワード:fuelpass、データベース:fueldb
小手調べ!まずはひとつの MySQL 内でデータベースをコピーします。
エクスポートで使用します mysqldump コマンドの次に、パイプ「|」を置いて、インポートコマンド mysql でつなげるのです。 そうすれば MySQL データベースをコピーすることができます。
なお、このコマンドは、mysql プロンプトではなく、シェルで行いますことに注意です!
# root ユーザを使えば自由自在 mysqldump -u root -pnaisyo123 cakedb | mysql -u root -pnaisyo123 cakedb2 # DB に設定したユーザを使用してセキュリティに気を使うのが普通 mysqldump -u cakeuser -pcakepass cakedb | mysql -u cakeuser2 -pcakepass2 cakedb2
ここから本番!別のサーバの MySQL にデータベースをコピーします!
考え方は同じサーバ内でのコピーと同様です。mysqldump でエクスポート、パイプでつないで、mysql でインポート。
異なりますのは mysql でインポートする際に、先頭に ssh コマンドを付けて別のサーバに接続する点です。
ssh コマンドは、「ssh ユーザ名@ホスト名 コマンド」で指定します。
mysqldump -u cakeuser -pcakepass cakedb | ssh root@192.168.56.113 mysql -u fueluser -pfuelpass fueldb
実際のコマンドを打ってみました。コピー先のパスワードの入力を求められましたけれども、そこ以外は随分とアッサリですの♪
[root@localhost ~]# mysqldump -u cakeuser -pcakepass cakedb | ssh root@192.168.56.113 mysql -u fueluser -pfuelpass fueldb root@192.168.56.113's password: [root@localhost ~]#
思った以上に簡単に別サーバへコピーすることができました。満足です♪
コマンドの中にパスワードを記入できるため、セキュリティはともかく、シェルには書きやすいですね♪パスワードの入力をどうすればよいか、ここがポイントになりそうです♪
下準備。ユーザ、そのパスワード、データベース、を作成
今回確かめるにあたって、MySQL にデータベースを作ったり、削除する時のコマンドです。これがあれば、気になった時にいつでもすぐに始められます♪
テストを重ねる中で、ユーザやデータベースを削除することもあったので、そのコマンドもしっかり載せておきます。
# データベース、ユーザ、の作成。パスワードの設定 GRANT ALL PRIVILEGES ON cakedb.* TO cakeuser@localhost IDENTIFIED BY 'cakepass'; FLUSH PRIVILEGES; CREATE DATABASE cakedb CHARACTER SET utf8; # 権限、ユーザ、データベースの削除 REVOKE ALL PRIVILEGES, GRANT OPTION FROM cakeuser@localhost; DROP USER cakeuser@localhost; FLUSH PRIVILEGES; DROP DATABASE cakedb;
コピー元の MySQL データベースに予め入れておきますデータも作っておきます。これでコピー後にしっかりと確認ができます♪
CREATE TABLE `groups` ( `id` int(11) NOT NULL AUTO_INCREMENT, `name` varchar(100) NOT NULL, `created` datetime DEFAULT NULL, `modified` datetime DEFAULT NULL, PRIMARY KEY (`id`) ) ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=utf8; INSERT INTO `groups` VALUES (1,'administrators','2013-02-26 23:55:31','2013-02-26 23:55:31'),(2,'managers','2013-02-26 23:55:42','2013-02-26 23:55:42'),(3,'users','2013-02-26 23:56:03','2013-02-26 23:56:03'); CREATE TABLE `posts` ( `id` int(11) NOT NULL AUTO_INCREMENT, `user_id` int(11) NOT NULL, `title` varchar(255) NOT NULL, `body` text, `created` datetime DEFAULT NULL, `modified` datetime DEFAULT NULL, PRIMARY KEY (`id`) ) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8; INSERT INTO `posts` VALUES (1,1,'test Title','test Body','2013-02-27 00:57:14','2013-02-27 00:57:14'); CREATE TABLE `users` ( `id` int(11) NOT NULL AUTO_INCREMENT, `username` varchar(255) NOT NULL, `password` char(40) NOT NULL, `group_id` int(11) NOT NULL, `created` datetime DEFAULT NULL, `modified` datetime DEFAULT NULL, PRIMARY KEY (`id`), UNIQUE KEY `username` (`username`) ) ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=utf8; INSERT INTO `users` VALUES (1,'administrator1','38317e4d85cd3725363ed7d85415a7ace1ce21e4',1,'2013-02-26 23:57:19','2013-02-26 23:57:19'),(2,'manager1','7581f39167455172601a28d8e0d9b5b63774c7db',2,'2013-02-26 23:57:46','2013-02-26 23:57:46'),(3,'user1','0f40cb65bdaf3c9ec78a57e29b0ba3a1b11c18d5',3,'2013-02-26 23:58:07','2013-02-26 23:58:07');
おわりに
今回は、
に関連した投稿となります。PostgreSQL はコマンドにパスワードをどうやって指定するのか、そもそももともとできないのか、よくわかりませんのでまずは一日の長のある MySQL の方を確認いたしました。
その過程で、ssh コマンドを学ぶこともできました。同じ考え方で PostgreSQL に取り組めばよいと存じますので、今回の投稿での勉強によってぐぐっと楽になっていそうですの。
楽しみですの。
なお、ssh コマンドの実践にあたり、次のページが大変参考になりました。ありがとう存じます。
以上です。