我想写一个脚本,复制我的当前数据库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文件?
当前回答
如果你在你的原始数据库中有触发器,你可以通过在导入之前管道替换来避免“Trigger already exists”错误:
mysqldump -u olddbuser -p -d olddbname | sed "s/`olddbname`./`newdbname`./" | mysql -u newdbuser -p -D newdbname
其他回答
如果你在你的原始数据库中有触发器,你可以通过在导入之前管道替换来避免“Trigger already exists”错误:
mysqldump -u olddbuser -p -d olddbname | sed "s/`olddbname`./`newdbname`./" | mysql -u newdbuser -p -D newdbname
首先创建重复的数据库:
CREATE DATABASE duplicateddb;
确保权限等都到位,并且:
mysqldump -u admin -p originaldb | mysql -u backup -p password duplicateddb;
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。
除了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