MySQL:在同一MySQL实例上克隆MySQL数据库
我想编写一个脚本,将当前数据库MySQL:在同一MySQL实例上克隆MySQL数据库,mysql,database,copy,clone,Mysql,Database,Copy,Clone,我想编写一个脚本,将当前数据库sitedb1复制到同一mysql数据库实例上的sitedb2。我知道我可以将sitedb1转储到sql脚本: mysqldump -u root -p sitedb1 >~/db_name.sql 然后将其导入siteb2。 有没有更简单的方法,不将第一个数据库转储到sql文件中?如手册中所述,您可以通过管道将转储直接导入mysql客户端: mysqldump db_name | mysql new_db_name 如果您使用MyISAM,您可以复制这些
sitedb1
复制到同一mysql数据库实例上的sitedb2
。我知道我可以将sitedb1转储到sql脚本:
mysqldump -u root -p sitedb1 >~/db_name.sql
然后将其导入siteb2
。
有没有更简单的方法,不将第一个数据库转储到sql文件中?如手册中所述,您可以通过管道将转储直接导入mysql客户端:
mysqldump db_name | mysql new_db_name
如果您使用MyISAM,您可以复制这些文件,但我不推荐这样做。这有点狡猾
综合了其他各种好答案
mysqldump
和mysql
命令都接受设置连接详细信息的选项(以及更多选项),例如:
mysqldump-u--password=| mysql-u-p
此外,如果新数据库还不存在,您必须事先创建它(例如,使用echo“create database new_db_name”| mysql-u-p
)。您可以使用(伪代码):
我不使用创建表的原因。。。选择。。。语法是为了保留索引。当然,这只复制表。视图和过程不会被复制,尽管可以以相同的方式进行复制
请参阅。mysqladmin创建DB\u名称-u DB\u用户--password=DB\u pass&&\
mysqldump-u DB_user--password=DB_pass DB_name|\
mysql-u DB\u user--password=DB\u pass-h DB\u host DB\u name
首先创建重复数据库:
CREATE DATABASE duplicateddb;
确保权限等均已到位,并且:
mysqldump -u admin -p originaldb | mysql -u backup -p password duplicateddb;
此语句是在MySQL 5.1.7中添加的,但被发现是危险的,并在MySQL 5.1.23中删除。它旨在使5.1之前的数据库能够升级,以便使用5.1中实现的编码将数据库名称映射到数据库目录名称。但是,使用此语句可能会导致数据库内容丢失,这就是它被删除的原因。不要在存在数据库的早期版本中使用重命名数据库 要执行使用新编码升级数据库名称的任务,请改用ALTER database db_name UPGRADE DATA DIRECTORY name:Using MySQL Utilities MySQL实用程序包含一个nice工具,默认情况下,该工具将一个数据库(包括所有相关对象(“表、视图、触发器、事件、过程、函数和数据库级授权”)和数据从一个数据库服务器复制到同一个数据库服务器或另一个数据库服务器。有很多选项可用于自定义实际复制的内容 因此,要回答OP的问题:
mysqldbcopy\
--source=root:您的_password@localhost \
--destination=root:您的_password@localhost \
sitedb1:sitedb2
您需要从终端/命令提示符运行命令
mysqldump -u <user name> -p <pwd> <original db> | mysql -u <user name> <pwd> <new db>
mysqldump-u-p | mysql-u
e、 g:mysqldump-u root test_db1 | mysql-u root test_db2
这将test_db1复制到test_db2,并授予对“root”@“localhost”的访问权。此外,如果新的\u db_名称还不存在,这是最简单、最快的方法:
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
echo“创建数据库新名称”| mysql-u-p
mysqldump-u-pdb_name | mysql-u-p new_db_name
您可以执行以下操作:
mysqldump -u[username] -p[password] database_name_for_clone
| mysql -u[username] -p[password] new_database_name
最好且简单的方法是在终端中输入这些命令,并为根用户设置权限。为我工作
:~$> mysqldump -u root -p db1 > dump.sql
:~$> mysqladmin -u root -p create db2
:~$> mysql -u root -p db2 < dump.sql
:~$>mysqldump-u root-pdb1>dump.sql
:~$>mysqladmin-u root-p创建db2
:~$>mysql-u root-p db2
如果安装了phpmyadmin,则可以使用以下简单方法:
转到您的数据库,选择“操作”选项卡,您可以看到“将数据库复制到”块。使用它,您可以复制数据库。如果原始数据库中有触发器,您可以在导入之前通过管道替换来避免“触发器已存在”错误:
mysqldump -u olddbuser -p -d olddbname | sed "s/`olddbname`./`newdbname`./" | mysql -u newdbuser -p -D newdbname
如中所述,mysqldump db_name | mysql new_db_name
是在数据库之间传输数据的免费、安全且简单的方法。然而,它也很慢
如果您正在寻找备份数据,无法承受数据丢失(在此数据库或其他数据库中),或者正在使用非innodb
的表,那么您应该使用mysqldump
如果您正在寻找用于开发的东西,将所有数据库备份到其他地方,并且在出现问题时轻松地清除和重新安装mysql
(可能是手动),那么我可能会为您提供解决方案
我找不到好的替代方案,所以我自己编写了一个脚本。第一次我花了很多时间让它工作,现在对它进行修改确实让我有点害怕。Innodb数据库不应该像这样复制和粘贴。微小的变化会以惊人的方式导致失败。自从我完成代码后,我就没有遇到过问题,但这并不意味着你不会
在上测试的系统(但仍可能在上失败):
- Ubuntu 16.04,默认mysql,innodb,每个表有单独的文件
- Ubuntu 18.04,默认mysql,innodb,每个表有单独的文件
sudo
权限,并验证您是否有足够的存储空间克隆数据库mysqldump
和mysql
需要40-50分钟。使用此方法,相同的过程只需约8分钟
我们如何使用它
我们已将SQL更改保存在一个单独的系统中
mysqldump -u olddbuser -p -d olddbname | sed "s/`olddbname`./`newdbname`./" | mysql -u newdbuser -p -D newdbname
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