mysqldump --databases 导出的时候会有userdatabase xxx 的语句,如果源实例导入到其他的库中,会有覆盖的风险

mysqldump 直接跟库名导出,没有use database xxx的语句。

常用参数:

--no-create-db, -n 只导出数据,而不添加CREATE DATABASE 语句。

 mysqldump  -uroot -p --host=localhost --all-databases --no-create-db

--no-create-info, -t 只导出数据,而不添加CREATE TABLE 语句。

mysqldump  -uroot -p --host=localhost --all-databases --no-create-info

--no-data, -d 不导出任何数据,只导出数据库表结构。

mysqldump  -uroot -p --host=localhost --all-databases --no-data

--single-transaction

--master-data=N

-R

--triggers

--events

--hex-blob

导出GTID的库

--set-gtid-purged=OFF

导出库中所有对象
--all-databases --triggers --routines --events

导入语句中不加LOCK TABLE

--skip-add-locks

mysqldump 遇到的问题

Error 2013

MySQL - MySQLDump problems with large table,The command runs until half-way through the 'responses' table - when we get: Error 2013 - Lost connection to MySQL server during query when dumping table

解决办法:
mysql> SET GLOBAL net_read_timeout = 31536000;
mysql> SET GLOBAL net_write_timeout = 31536000;

参考:https://dba.stackexchange.com/questions/194580/mysql-mysqldump-problems-with-large-table

mysqldump的语句中包含 lock table的语句

--skip-add-locks

mysqldump [...] | grep -v "LOCK TABLE" | mysql [...]
mysqldump -uuid -ppwd --skip-opt --single-transaction --max_allowed_packet=1G -q db | mysql -u root --password=xxx -h localhost db

参考:https://stackoverflow.com/questions/104612/run-mysqldump-without-locking-tables

数据库异机恢复用到的mysqldump命令

mysqldump -uroot -p --skip-add-locks --single-transaction -t -n --where="created_at >= '2019-01-01'" DB TB1 > TB1.sql # 导出没有use database语句

mysqldump -uroot -p --skip-add-locks --single-transaction -t -n --hex-blob --where="created_at >= '2019-01-01'" --databases DB --tables TB1 > TB1.sql #导出会有use database语句