Mysqldump 选项解析
场景描述
1. 导出 db1、db2 两个数据库的所有数据。
mysqldump -uroot -p -P8635 -h192.168.0.199 --hex-blob --set-gtid-purged=OFF --single-transaction --order-by-primary --flush-logs -q --databases db1 db2 >db12.sql
2. 导出 db1 库的 t1 和 t2 表。
mysqldump -uroot -p -P8635 -h192.168.0.199 --hex-blob --set-gtid-purged=OFF --single-transaction --order-by-primary --flush-logs -q --databases db1 --tables t1 t2 >t1_t2.sql
3. 条件导出,导出 db1 表 t1 中 id=1 的数据。
mysqldump -uroot -p -P8635 -h192.168.0.199 --hex-blob --set-gtid-purged=OFF --single-transaction --order-by-primary --flush-logs -q --databases db1 --tables t1 --where='id=1'>t1_id.sql
4. 导出 db1 下所有表结构,而不导出数据。
mysqldump -uroot -p -P8635 -h192.168.0.199 --no-data --set-gtid-purged=OFF --single-transaction --order-by-primary -n --flush-logs -q --databases db1 >db1_table.sql
5. 除 db1 下的表和数据外,其他对象全部导出。
mysqldump -uroot -p -h192.168.0.199 -P8635 --set-gtid-purged=OFF -F -n -t -d -E -R db1> others.sql
使用 Mysqldump 导出大表的注意事项在使用 mysqldump 导出数据时,倘若添加–q(--quick) 参数时,select 出来的结果将不会存放在缓存中,而是直接导出到标准输出中。如果不添加该参数,则会把 select 的结果放在本地缓存中,然后再输出给客户端。
- 如果只是备份小量数据,足以放在空闲内存 buffer 中的话,禁用-q 参数,则导出速度会快一些。
- 对于大数据集,如果没办法完全储存在内存缓存中时,就会产生 swap。对于大数据集的导出,不添加-q 参数,不但会消耗主机的内存,也可能会造成数据库主机因无可用内存继而宕机的严重后果。
因此,如果使用 mysqldump 来备份数据时,建议添加-q 参数。