MySQL 备份恢复

 

错误备份命令:

使用绝对路径: /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 (事务结束,备份结束)

 

上一篇:JDBC SavePoint


下一篇:事务中savepoint(保存点)的使用