错误备份命令:
使用绝对路径: /usr/local/mysql/bin/mysqldump -uxxxx -p -hxx.xx.xx.xx -Pxxxx -A > all.sql
这个方法会导致锁schema。多个schema的时候会导致数据不一致。
正确备份命令:
/usr/local/mysql/bin/mysqldump -uxxxx -p -hxx.xx.xx.xx -Pxxxx --single-transaction --master-data=2 -A > DbName_Port_Date.sql
为什么会保持数据一致性:
执行该备份语句的步骤:
1. FLASH TABLES (关闭打开的表,刷新查询缓存,防止第二步卡住)
2. FLUSH TABLES WITH READ LOCK (冻结的状态) 只读
3. SET SESSION TRANSACTION ISOLATION LEVEL REPEATABLE READ
4. START TRANSACTION /*!40100 WITH CONSISTENT SNAPSHOT */
5. SHOW VARIABLES LIKE 'gtid\_mode'
6. SHOW MASTER STATUS
7. UNLOCK TABLES (解冻) 1-8,时间很快,几乎不会影响。
8. SAVEPOINT sp (事务内的断点)
9. show tables (开始备份表数据) (备份tb1)
-- show create table 'tb1'
-- select * from 'tb1'
10. ROLLBACK TO SAVEPOINT sp (备份tb2) (rollback是为了释放备份过程中占用的内存)
-- show create table 'tb2'
-- select * from 'tb2'
11. ... 重复10动作。
12. ROLLBACK TO SAVEPOINT sp
13. RELEASE SAVEPOINT sp (释放断点)
14.. quit (事务结束,备份结束)