在同一个MySql实例上克隆一个MySQL数据库

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

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

然后将其导入到sitedb2 。 有没有更容易的方法,而不是倾倒第一个数据库到一个SQL文件?

正如手册所述,在复制数据库中,您可以将转储直接传送到mysql客户端:

 mysqldump db_name | mysql new_db_name 

如果你使用的是MyISAM,你可以复制这些文件,但我不会推荐它。 这有点狡猾。

从各种好的其他答案综合

mysqldumpmysql命令都接受设置连接细节的选项(以及更多),如下所示:

 mysqldump -u <user name> --password=<pwd> <original db> | mysql -u <user name> -p <new db> 

另外,如果新的数据库还不存在,你必须事先创build它(例如echo "create database new_db_name" | mysql -u <dbuser> -p )。

使用MySQL实用程序

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

所以,要回答OP的问题:

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

您需要从terminal/命令提示符运行命令。

 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 mysqldump -u root test_db1 | mysql -u root test_db2

这将test_db1复制到test_db2并授予对“root”@“localhost”的访问权限

 $ 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 … SELECT语法的原因是保留索引。 当然这只是复制表格。 视图和程序不会被复制,尽pipe它可以以相同的方式完成。

请参阅CREATE TABLE 。

首先创build重复的数据库:

CREATE DATABASE duplicateateddb;

确保权限等全部到位,并且:

mysqldump -u admin -p originaldb | mysql -u备份-p密码duplicateateddb;

mysqldump -u [用户名] -p [密码] database_name_for_clone | mysql -u [username] -p [password] new_database_name

我不认为有这样做的方法。 当PHPMyAdmin执行此操作时,它会转储数据库,然后将其重新插入到新名称下。

这个语句是在MySQL 5.1.7中添加的,但被发现是危险的,在MySQL 5.1.23中被删除。 它旨在启用5.1之前的数据库升级,以使用5.1中实现的编码将数据库名称映射到数据库目录名称。 但是,使用此语句可能会导致数据库内容丢失,这就是为什么它被删除的原因。 不要在其存在的早期版本中使用RENAME DATABASE。

要执行使用新编码升级数据库名称的任务,请改为使用ALTER DATABASE db_name升级数据目录名称: http : //dev.mysql.com/doc/refman/5.1/en/alter-database.html

除了格雷格的答案。
如果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 

最好使用mysqldbcopy命令将数据库从一个服务器复制到另一个服务器或同一台服务器。

 mysqldbcopy --source=root:root@localhost --destination=root:root@localhost database-name:database-name-clone 

[MySQL的]

最简单的方法是在terminal中input这些命令,并为root用户设置权限。 为我工作..!

 :~$> mysqldump -u root -p db1 > dump.sql :~$> mysqladmin -u root -p create db2 :~$> mysql -u root -p db2 < dump.sql