mysqldump备份机制:通过给定的参数信息和系统表数据,来一张表一张表地获取数据并生成insert语句插入备份文件中,这样由于时间点不一致,就会导致数据不一致,然而对于一个要求强一致性的系统来说,这种方式备份出来的文件完全无效。
所以要想mysqldump备份的数据具有一致性,有以下方法
①,利用事务机制,通过--single-transaction参数来完成数据库的备份
原理:利用事务的一致性,一个事务中所有的数据都处于同一个时间点,适用与innodb或其他有支持事务的引擎
②,利用--lock-tables或--lock-all-tables锁表,使需要备份的数据库处于只读状态。
注意:--lock-tables不是一次锁定所有的数据库库表,而是只锁定一个数据库的库表
--lock-all-tables一次锁定所以数据库的库表
所以需要同时备份多库或需要备份的表处于不同库的话,应该使用--lock-all-tables,且这种方法适用于同时备份不同引擎的数据库
mysqldump同时备份多个数据库:
mysqldump -uroot -p --databases db1 db2 --master-data=1 --lock-all-tables > dump.sql
mysqldump只备份数据库表结构,不备份数据:
mysqldump -uroot -p --databases db1 --no-data > dump.sql