我想写一个脚本,复制我的当前数据库sitedb1到sitedb2在相同的mysql数据库实例。我知道我可以转储sitedb1到一个sql脚本:

mysqldump -u root -p sitedb1 >~/db_name.sql

然后将它导入sitedb2。 有没有更简单的方法,不用将第一个数据库转储到sql文件?


当前回答

该命令需要在终端/命令提示符下执行。

mysqldump -u <user name> -p <pwd> <original db> | mysql -u <user name> <pwd> <new db>

例如:mysqldump -u root test_db1 | mysql -u root test_db2

这将把test_db1复制到test_db2,并授予'root'@'localhost'的访问权限。

其他回答

mysqladmin create DB_name -u DB_user --password=DB_pass && \
        mysqldump -u DB_user --password=DB_pass DB_name | \
        mysql     -u DB_user --password=DB_pass -h DB_host DB_name

你可以使用(在伪代码中):

FOREACH tbl IN db_a:
    CREATE TABLE db_b.tbl LIKE db_a.tbl;
    INSERT INTO db_b.tbl SELECT * FROM db_a.tbl;

我不使用CREATE TABLE的原因是…选择……语法是保存索引。当然,这只是复制表。视图和过程不会被复制,尽管可以以相同的方式完成。

参见CREATE TABLE。

你可以这样做:

mysqldump -u[username] -p[password] database_name_for_clone 
 | mysql -u[username] -p[password] new_database_name

除了Greg的回答,如果new_db_name还不存在,这是最简单和最快的方法:

echo "create database new_db_name" | mysql -u <user> -p <pwd> 
mysqldump -u <user> -p <pwd> db_name | mysql -u <user> -p <pwd> new_db_name

该命令需要在终端/命令提示符下执行。

mysqldump -u <user name> -p <pwd> <original db> | mysql -u <user name> <pwd> <new db>

例如:mysqldump -u root test_db1 | mysql -u root test_db2

这将把test_db1复制到test_db2,并授予'root'@'localhost'的访问权限。