有人告诉我,在 mysql 同步中,为确保所有内容都被复制并且数据是安全的,syn_binlog 设置(在 my.conf 中)应设置为 1。
这不仅会影响性能,解决这个问题的最佳方法是什么?
我还读到,这主要是 Linux 上 ext3 文件系统的原因。将 sync_binlog 设置为 0 安全吗?
基本上真正的问题是,如果您不想丢失数据,是否需要打开 sync_binlog?
答案1
性能损失是额外寻道和写入的成本。sync_binlog = 1 基本上告诉 MySQL 在将日志写入刷新到磁盘之前要缓冲多少二进制日志写入。如果将其设置为 1,则每次写入都会被刷新。0 告诉 MySQL 让文件系统处理它。因此,如果发生磁盘故障,您可能会丢失上一次事务中不确定数量的二进制日志写入。
根据您的存储设置(带有电池备份缓存的 SAN、直接连接驱动器等),设置为 0 可能是安全的,也可能不安全。您和您的应用程序可以容忍多少数据丢失?
引用 MySQL 参考:
sync_binlog 的默认值为 0,表示不同步到磁盘。值 1 是最安全的选择,因为发生崩溃时,您最多会丢失二进制日志中的一个语句或事务。但是,它也是最慢的选择(除非磁盘具有电池支持的缓存,这使得同步非常快)。