在同一个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,你可以复制这些文件,但我不会推荐它。 这有点狡猾。
从各种好的其他答案综合
mysqldump
和mysql
命令都接受设置连接细节的选项(以及更多),如下所示:
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