使用从机转储的MySQL增量备份(InnoDB和MyISAM)
假设我已经有一个主数据库服务器和一个从数据库服务器正在运行 我想在混合中引入增量备份/时间点恢复。因为我已经有了用于复制的二进制日志,所以它应该像进行完全备份和存储日志位置一样简单 然而,我的服务器上既有MyISAM表,也有InnoDB表,对于每种情况下如何进行完整备份,似乎都有相互矛盾的建议。如果它是严格意义上的InnoDB,我可以使用--single事务处理mysqldump,但该选项警告我MyISAM可能仍然会被更改 我的问题如下: (1) MySQL手册建议备份以下内容是否合理 mysqldump--单事务--刷新日志--主数据=2--所有数据库>whatever.sql …将不合适,因为MyISAM表可能会更改(表不会用--single transaction锁定),因此新日志文件将启动,但它可能包含对MyISAM表的查询,这些表在进入转储之前实际上已经在服务器上运行过(增量恢复会在不需要查询时尝试重新执行这些查询) (2) 是使用MyISAM和InnoDB表获得“正确”完整备份的唯一方法--锁定所有表?(或者在此时关闭服务器/复制文件,因为所有文件都已锁定) 我假设这些问题的答案是肯定的,但如果我错了,请纠正我,因为我的下一个想法是基于它的 我希望将主服务器上的中断降至最低,因此我正在考虑根据以下说明对从服务器进行完全转储: 这些方向实际上是为了设置一个从机的从机,但我想知道,以下是合理的吗 每天一次:使用从机转储的MySQL增量备份(InnoDB和MyISAM),mysql,backup,replication,innodb,myisam,Mysql,Backup,Replication,Innodb,Myisam,假设我已经有一个主数据库服务器和一个从数据库服务器正在运行 我想在混合中引入增量备份/时间点恢复。因为我已经有了用于复制的二进制日志,所以它应该像进行完全备份和存储日志位置一样简单 然而,我的服务器上既有MyISAM表,也有InnoDB表,对于每种情况下如何进行完整备份,似乎都有相互矛盾的建议。如果它是严格意义上的InnoDB,我可以使用--single事务处理mysqldump,但该选项警告我MyISAM可能仍然会被更改 我的问题如下: (1) MySQL手册建议备份以下内容是否合理 mysq
感谢您的帮助!您的一天一次计划非常合理,原因很简单:您首先停止了从机。不会有新的事务。我想提出一些其他建议 在从机上,请在/etc/my.cnf中设置以下内容
[mysqld]
innodb_max_dirty_pages_pct=0
原因如下:
在从属服务器处理mysqldump时,如果任何表在innodb缓冲池中注册了脏页,则必须将这些页刷新到磁盘。我注意到在mysqldump中,您已经发出了此选项。默认情况下,innodb_max_dirty_pages_pct为90。任何脏页都必须写入磁盘。如果innodb_max_dirty_pages_pct为零l同时,刷新innodb缓冲池更快
您可以在不重新启动mysql的情况下动态设置。只需运行以下命令:
SET GLOBAL innodb_max_dirty_pages_pct = 0;
这将使innodb缓冲池保持精简
我还看到您的mysqldump命令中有--master data=2。这只有在从机上启用二进制日志时才有效。否则,您需要从主机检索主日志和位置,因为mysqldump不能这样做。下面是如何从从从机获取主机日志文件和位置:
步骤1)运行“显示从属状态\G”并重新编辑到ShowSlaveStatus.txt
步骤2)从ShowSlaveStatus.txt获取以下信息中继主机日志文件
执行主日志位置 步骤3)将这两个值写入转储文件的后面 还有一件事:
请在mysqldump命令中添加--routines--triggers。您永远不知道何时会决定编写存储过程和触发器。此外,无需锁定表,因为从机已停止。您的每日一次计划非常合理,原因很简单:您首先停止了从机。不会有新的交易。我想提出一些额外的建议 在从机上,请在/etc/my.cnf中设置以下内容
[mysqld]
innodb_max_dirty_pages_pct=0
原因如下:
在从属服务器处理mysqldump时,如果任何表在innodb缓冲池中注册了脏页,则必须将这些页刷新到磁盘。我注意到在你的mysqldump中你已经发布了这个选项。默认情况下,innodb_max_dirty_pages_pct为90。任何脏页都必须写入磁盘。如果innodb_max_dirty_pages_pct始终为零,则刷新innodb缓冲池会更快
您可以在不重新启动mysql的情况下动态设置。只需运行以下命令:
SET GLOBAL innodb_max_dirty_pages_pct = 0;
这将使innodb缓冲池保持精简
我还看到--master data=2在mysqldump命令中。只有在从机上启用二进制日志时,这才有效。如果没有,则需要从主日志中检索主日志和位置,因为mysqldump不能这样做。以下是如何从从属服务器获取主服务器的日志文件和位置:
步骤1)运行“显示从属状态\G”并重新编辑到ShowSlaveStatus.txt
步骤2)从ShowSlaveStatus.txt获取以下信息中继主机日志文件
执行主日志位置 步骤3)将这两个值写入转储文件的后面 还有一件事: 请在mysqldump命令中添加--routines--triggers。您永远不知道何时会决定编写存储过程和触发器。另外,如果从机停止,则无需锁定表