MysqL 主从事务数据安全之sync_binlog详解数据库
sync_binlog=0,当事务提交之后,MySQL不做fsync之类的磁盘同步指令刷新binlog_cache中的信息到磁盘,而让Filesystem自行决定什么时候来做同步,或者cache满了之后才同步到磁盘。这个是性能最好的。
sync_binlog=1,当每进行1次事务提交之后,MySQL将进行一次fsync之类的磁盘同步指令来将binlog_cache中的数据强制写入磁盘。
sync_binlog=n,当每进行n次事务提交之后,MySQL将进行一次fsync之类的磁盘同步指令来将binlog_cache中的数据强制写入磁盘。
如果没有设置它为1,那么崩溃后可能导致二进制日志没有同步事务数据,有可能binlog中最后的语句丢失。要想防止这种情况,你可以使用sync_binlog全局变量(1是最安全的值,但也是最慢的),使binlog在每N次binlog写入后与硬盘 同步。即使sync_binlog设置为1,出现崩溃时,也有可能表内容和binlog内容之间存在不一致性。如果使用InnoDB表,MySQL服务器 处理COMMIT语句,它将整个事务写入binlog并将事务提交到InnoDB中。如果在两次操作之间出现崩溃,重启时,事务被InnoDB回滚,但仍 然存在binlog中。可以用 innodb-safe-binlog选项来增加InnoDB表内容和binlog之间的一致性。(注释:在MySQL 5.1中不需要 innodb-safe-binlog;由于引入了XA事务支持,该选项作废了),该选项可以提供更大程度的安全,使每个事务的 binlog(sync_binlog =1)和(默认情况为真)InnoDB日志与硬盘同步,该选项的效果是崩溃后重启时,在滚回事务后,MySQL服务器从binlog剪切回滚的 InnoDB事务。这样可以确保binlog反馈InnoDB表的确切数据等,并使从服务器保持与主服务器保持同步(不接收 回滚的语句)。
大多数情况下,对数据的一致性并没有很严格的要求,所以并不会把 sync_binlog 配置成 1. 为了追求高并发,提升性能,可以设置为 100 或直接用 0。而和 innodb_flush_log_at_trx_commit 一样,对于支付服务这样的应用,还是比较推荐 sync_binlog = 1.
原创文章,作者:ItWorker,如若转载,请注明出处:https://blog.ytso.com/5696.html
mysql相关文章
- MySQL表缓存:提升数据库性能的可行方案(mysql表缓存)
- MySQL Status Innodb_buffer_pool_write_requests 数据库状态作用意思及如何正确
- 「MySQL联合查询:快速实现复杂检索」(mysql复合语句)
- 如何使用Eclipse连接MySQL数据库(eclipse怎么连接mysql数据库)
- 解锁MySQL数据库:输入安全密码(mysql输入密码)
- MySQL设置默认为当前时间的方法(mysql默认值当前时间)
- MySQL快照备份:一种实现数据保护的新方式(mysql快照备份)
- MySQL命令指南:成为数据库专家(mysql指令大全)
- MySQL 数据库中文乱码问题的解决方法(mysql数据中文乱码)
- MySQL修饰符学会这些常用的修饰符,助您更好地管理数据库(mysql中修饰符)
- 解决MySQL中CVS导入数据乱码问题(cvs导入mysql乱码)
- 如何在 MySQL 中设置两个表的编码(mysql两表设置编码)
- Cento系统下快速安装MySQL数据库(cento安装mysql)
- 使用CMD命令行登录MySQL数据库(cmd里登录mysql)
- 20万条数据成功导入Mysql数据库(20万数据导入mysql)
- MySQL索引一个索引可以包含多少列(mysql一个索引多少列)