注意,该处“复制”并非主动同步,而是指“在不依赖 Binlog 的情况下,从现有数据库实例中创建具有相同数据集的数据库实例”。
mysqldump + mysql
Cloning a MySQL database on the same MySql instance
halt – Continue SQL query even on errors in MySQL workbench – Stack Overflow
mysql – Any option for mysqldump to ignore databases for backup?
官方推荐做法,而实质还是数据的导出与导入:
# 将 src-db 复制到 dst-db 中 mysqldump -u "<user name>" --password="<pwd>" "<src-db>" | mysql -u "<user name>" -p "<dst-db>" # 如果 dst-db 不存在 mysqldump -u "<user name>" --password="<pwd>" --databases "<src-db>" | mysql -u "<user name>" -p # 仅复制表结构 # https://stackoverflow.com/questions/6175473/export-schema-without-data mysqldump -u "<user name>" --password="<pwd>" --no-data "<src-db>" | mysql -u "<user name>" -p "<dst-db>" # 忽略某些数据库 candidates=$(echo "show databases" | mysql | grep -Ev "^(Database|mysql|performance_schema|information_schema)$") for candidate in $candidates[*]; do mysqldump $candidate done
mysql -f # –force Continue even if we get an sql error.
# 直接导入数据
database – How to import an SQL file using the command line in MySQL? – Stack Overflow
mysql -u username -p database_name < file.sql
mysqldump + mysql + pt-table-sync
sql – Export schema without data – Stack Overflow
MySQL :: MySQL 8.4 Reference Manual :: 9.4.5.2 Copy a Database from one Server to Another
针对 pt-table-sync 工具,其不会同步表结构,即会跳过不存在的表。所以,需要使用 mysqldump + mysql 来完成数据库结构的同步。
mysqldump -h host -u root -p --no-data "src-db" | mysql -u root -p "dst-db" # 如果数据库存在 # 如果 DB 不存在,则通过 --databases 使得导出语句中包含 CREATE DATABASE 与 USE 语句。 # 鉴于 --databases 选项,该命令同样适用于多个 DB 迁移。 mysqldump -h host -u root -p --no-data --databases "src-db" | mysql -u root -p pt-table-sync --execute \ h=master1,P=3306,u=root,p=xxx,D=db,t=tbl \ h=host2,P=3306,u=root,p=xxx,D=db,t=tbl
MySQL 8 Clone Plugin
MySQL 8.4 Reference Manual / … / The Clone Plugin
WIP
Percona XtraBackup
The MySQL Clone Wars: Plugin vs. Percona XtraBackup
WIP
mysqldbcopy(废弃)
Cloning a MySQL database on the same MySql instance
#!/bin/sh apt-get install mysql-utilities mysqldbcopy -vvv --drop-first \ --source=root:your_password@localhost \ --destination=root:your_password@localhost \ sitedb1:sitedb2
附加说明,目前(03/14/2020)MySQL Utilities 已经暂停更新,只支持 Python 2 环境。但是对于 MySQL 8.0 以前的数据库完全可用。
GUI | Navicat
Navicat / Tools / Data Transfer…