我想写一个脚本,复制我的当前数据库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文件?
当前回答
如果你安装了phpmyadmin,有一个简单的方法:
转到你的数据库,选择“operation”选项卡,你可以看到“copy database to”块。使用它,您可以复制数据库。
其他回答
如果你安装了phpmyadmin,有一个简单的方法:
转到你的数据库,选择“operation”选项卡,你可以看到“copy database to”块。使用它,您可以复制数据库。
这个语句是在MySQL 5.1.7中添加的,但被发现是危险的,在MySQL 5.1.23中被删除了。它的目的是使升级5.1之前的数据库能够使用5.1中实现的将数据库名称映射到数据库目录名称的编码。但是,使用此语句可能会导致数据库内容的丢失,这就是删除它的原因。不要在出现RENAME DATABASE的早期版本中使用它。
要执行使用新编码升级数据库名称的任务,请使用ALTER database db_name UPGRADE DATA DIRECTORY NAME: http://dev.mysql.com/doc/refman/5.1/en/alter-database.html
正如手册中所说的复制数据库,你可以直接管道转储到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)。
你可以使用(在伪代码中):
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