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

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

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


当前回答

除了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

其他回答

正如手册中所说的复制数据库,你可以直接管道转储到mysql客户端:

mysqldump db_name | mysql new_db_name

如果你正在使用MyISAM,你可以复制文件,但我不建议这样做。这有点可疑。

综合了其他各种好的答案

mysqldump和mysql命令都接受设置连接细节的选项(以及更多),比如:

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

此外,如果新的数据库还不存在,你必须事先创建它(例如echo "create database new_db_name" | mysql -u <dbuser> -p)。

你可以这样做:

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

如果你在你的原始数据库中有触发器,你可以通过在导入之前管道替换来避免“Trigger already exists”错误:

mysqldump -u olddbuser -p -d olddbname | sed "s/`olddbname`./`newdbname`./" | mysql -u newdbuser -p -D newdbname

你可以:

CREATE DATABASE copy_of_db;
create table copy_of_db.table LIKE source_db.table;

If you want to copy data too:
INSERT INTO copy_of_db.table SELECT * FROM source_db.table;

重复所有表、函数、过程等

(mysqldump是正确的方法,但这是一个快速和肮脏的解决方案,在许多情况下有用)

最好和简单的方法是在终端中输入这些命令,并设置root用户的权限。对我来说很有用!

:~$> mysqldump -u root -p db1 > dump.sql
:~$> mysqladmin -u root -p create db2
:~$> mysql -u root -p db2 < dump.sql