我想写一个脚本,复制我的当前数据库sitedb1到sitedb2在相同的mysql数据库实例。我知道我可以转储sitedb1到一个sql脚本:
mysqldump -u root -p sitedb1 >~/db_name.sql
然后将它导入sitedb2。 有没有更简单的方法,不用将第一个数据库转储到sql文件?
我想写一个脚本,复制我的当前数据库sitedb1到sitedb2在相同的mysql数据库实例。我知道我可以转储sitedb1到一个sql脚本:
mysqldump -u root -p sitedb1 >~/db_name.sql
然后将它导入sitedb2。 有没有更简单的方法,不用将第一个数据库转储到sql文件?
当前回答
正如手册中所说的复制数据库,你可以直接管道转储到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 <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'的访问权限。
使用MySQL实用工具
MySQL实用程序中包含了mysqldbcopy工具,默认情况下,它可以复制一个数据库,包括所有相关对象(“表、视图、触发器、事件、过程、函数和数据库级授权”)和数据,从一个DB服务器到同一个或另一个DB服务器。有许多选项可用于自定义实际复制的内容。
所以,为了回答OP的问题:
mysqldbcopy \
--source=root:your_password@localhost \
--destination=root:your_password@localhost \
sitedb1:sitedb2
使用MySQL Workbench,您可以使用数据库>迁移向导将数据库复制到相同或其他服务器实例。我相信它可以在服务器端工作,因此它应该是复制大型数据库的一个很好的解决方案。
正如手册中所说的复制数据库,你可以直接管道转储到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)。
你可以:
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是正确的方法,但这是一个快速和肮脏的解决方案,在许多情况下有用)