我想写一个脚本,复制我的当前数据库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文件?
当前回答
最好和简单的方法是在终端中输入这些命令,并设置root用户的权限。对我来说很有用!
:~$> mysqldump -u root -p db1 > dump.sql
:~$> mysqladmin -u root -p create db2
:~$> mysql -u root -p db2 < dump.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实用工具
MySQL实用程序中包含了mysqldbcopy工具,默认情况下,它可以复制一个数据库,包括所有相关对象(“表、视图、触发器、事件、过程、函数和数据库级授权”)和数据,从一个DB服务器到同一个或另一个DB服务器。有许多选项可用于自定义实际复制的内容。
所以,为了回答OP的问题:
mysqldbcopy \
--source=root:your_password@localhost \
--destination=root:your_password@localhost \
sitedb1:sitedb2
如果你在你的原始数据库中有触发器,你可以通过在导入之前管道替换来避免“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是正确的方法,但这是一个快速和肮脏的解决方案,在许多情况下有用)
使用Mydumper
sudo apt install mydumper
生成转储
mydumper --user=YOUR_USER --password=YOUR_PASSWORD -B YOUR_CURRENT_DB \
--triggers --routines --events --outputdir YOUR_OUTPUT_DIR
负载转储
myloader --user=YOUR_USER --password=YOUR_PASSWORD --database=YOUR_NEW_DB \
--directory=YOUR_OUTPUT_DIR