有许多参数可以控制复制,其中一些会对数据的安全和性能产生影响。博主推荐一种“安全” 的配置,可以最小化问题的概率。
在主库上二进制日志最重要的选项是 sync_binlog:
sync_binlog = 1
如果开启此选项,MySQL每次提交事务前会将二进制日志同步到磁盘上,保证在服务器崩溃时不会丢失时间。
如果无法容忍服务器崩溃导致表损坏,推荐使用InnoDB。在表损坏无关紧要时,MyISAM是可以接受的,但在一次备库服务器崩溃重启后,MyISAM表可能已经处于不一致状态。一种可能是语句没有完全应用到一个或多个表上,那么即使修复了表,数据也可能是不一致的。
如果使用InnoDB,强烈建议使用如下配置:
innodb_flush_logs_at_trx_commit #Flush every log write innodb_support_xa = 1 #MySQL5.0 and newer only innodb_safe_binlog #MySQL4.1 only, roughly equivalent to innodb_support_xa
这些是 MySQL5.0以及最新版本中的配置,推荐明确指定二进制日志的名字,以保证二进制日志名在所以服务器上是一致的,避免因为服务器名变化导致的日志文件名变化。
当在服务器间转移文件、克隆新的备库、转储备份或者其他场景下,可能会导致很多问题。为了避免这些问题,需要给log_bin 选项指定一个参数。
log_bin = /var/bin/mysql/mysql-bin
在备库上,我们同样推荐开启如下配置选项,为中继日志指定绝对路径:
relay_log = /path/to/logs/relay_log skip_slave_start read_only
通过设置 relay_log 可以避免中继日志文件基于机器名来命名,防止之前提到过可能存在的问题。
skip_slava_start 选项能够阻止备库在崩溃后自动启动复制。
read_only 选项可以阻止大部分用户更改非临时表,除了复制SQL线程和其他拥有超级权限的用户之外,这也是要尽量避免给正常账号授予超级权限的原因之一。