MySQL 可以通过以下几种方案保证备份数据的一致性,每种方案各有优劣:
- 全库只读:通过设置 read_only=1 将数据库设为只读模式,阻止写操作。但此方法会影响主从库标识,且异常情况下可能导致数据库长时间不可写,风险较高。
- 全局锁:使用 flush tables with read lock (FTWRL) 命令锁定整个数据库,确保备份期间数据不被修改。虽然异常断开时会自动释放锁,但会导致业务停摆,影响系统可用性。
- 事务备份:利用 InnoDB 的事务特性和 MVCC 机制,在可重复读隔离级别下,通过 mysqldump --single-transaction 参数启动一致性备份。此方法允许备份期间继续更新数据,且不会影响备份数据的一致性。
推荐方案:对于支持事务的 InnoDB 引擎,使用事务备份(--single-transaction 参数)是最佳选择,既能保证数据一致性,又允许业务继续运行。对于 MyISAM 等不支持事务的引擎,则需使用全局锁进行备份。