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

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

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


当前回答

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

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

其他回答

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

你可以这样做:

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

使用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;