通过mysqldump生成包含SQL语句的文件,然后将其应用到目标机器的mysql客户端程序。
mysqldump --help 可以获取mysqldump选项以及用法。
如果源服务器上启用了GTID模式,在默认情况下,mysqldump生成的DUMP文件包含GTID信息。如果目标机器没有启用GTID会导致导入出现问题。可以通过--set-gtid-purged 选项做调整。
--set-gtid-purged 选项目前有四个可选值:ON, COMMENTED, OFF 和 AUTO
下面是一些用法,比如:
最简单(尽管不是最快速)的方式在两台机器之间传递数据如下:
mysqladmin -h 'other_hostname' create db_name
mysqldump db_name | mysql -h 'other_hostname' db_name
比如:
mysqldump -uroot -poracle --databases test | mysql -uroot -poracle -h192.168.1.150
如果是从远端数据库传递数据,而且网络比较慢的话,可以通过mysqldump工具提供的压缩选项做一些优化
mysqladmin create db_name
mysqldump -h 'other_hostname' --compress db_name | mysql db_name
比如:
mysqldump -uroot -poracle -h192.168.1.150 --compress --databases test | mysql -uroot -poracle
可以通过在源端,使用mysqldump工具生成DUMP文件,然后拷贝的目标端,再通过mysql客户端程序应用
mysqldump --quick db_name | gzip > db_name.gz
mysqladmin create db_name
gunzip < db_name.gz | mysql db_name
注:--quick 选项:不缓存mysqldump工具生成的query。比如:
mysqldump -uroot -poracle --quick --databases test | gzip > test.gz
scp test.gz [email protected]:~
gunzip < test.gz | mysql -uroot -poracle
通过mysqldump与mysqimport的组合,在处理大表的情况下,比单个的mysqldump更快一些
mkdir DUMPDIR
mysqldump --tab=DUMPDIR db_name
mysql -e "create db_name" # create database
cat DUMPDIR/*.sql | mysql db_name # create tables in database
mysqlimport db_name DUMPDIR/*.txt # load data into tables
比如:
cd /usr/local/mysql-8.0.18-linux-glibc2.12-x86_64/data/
mkdir DUMPDIR
chown mysql:mysql DUMPDIR
mysqldump -uroot -poracle --tab=./DUMPDIR test
scp -r DUMPDIR/ [email protected]:/usr/local/mysql-8.0.18-linux-glibc2.12-x86_64/data/
chown -R mysql:mysql /usr/local/mysql-8.0.18-linux-glibc2.12-x86_64/data/DUMPDIR
mysql -uroot -poracle -e "create database test;"
cat DUMPDIR/*sql | mysql -uroot -poracle test
mysqlimport -uroot -poracle test DUMPDIR/*.txt
注:两端的服务器需要配置secure_file_priv 环境变量。
补充:
有时可能需要拷贝mysql schema,因为mysql schema中标授权表,如果没有数据库没有mysql schema前提下。在导入mysql schema,使用 mysqladmin flush-privileges 使得MySQL Server加载授权表信息。