我想写一个脚本,复制我的当前数据库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'的访问权限。

其他回答

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

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。

使用MySQL实用工具

MySQL实用程序中包含了mysqldbcopy工具,默认情况下,它可以复制一个数据库,包括所有相关对象(“表、视图、触发器、事件、过程、函数和数据库级授权”)和数据,从一个DB服务器到同一个或另一个DB服务器。有许多选项可用于自定义实际复制的内容。

所以,为了回答OP的问题:

mysqldbcopy \
    --source=root:your_password@localhost \
    --destination=root:your_password@localhost \
    sitedb1:sitedb2

首先创建重复的数据库:

CREATE DATABASE duplicateddb;

确保权限等都到位,并且:

mysqldump -u admin -p originaldb | mysql -u backup -p password duplicateddb;

如果你安装了phpmyadmin,有一个简单的方法:

转到你的数据库,选择“operation”选项卡,你可以看到“copy database to”块。使用它,您可以复制数据库。

你可以:

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是正确的方法,但这是一个快速和肮脏的解决方案,在许多情况下有用)