同MongoDB,Redis这样的NoSQL数据库的复制相比,MySQL复制显得相当复杂! 概述 首先主服务器把数据变化记录到主日志,然后从服务器通过I/O线程读取主服务器上的主日志,并且把它写入到从服务器的中继日志中,接着SQL线程读取中继日志,并且在从服务器上重放,从而实现MySQL复制。具体如下图所示: 整个过程反映到从服务器上,对应三套日志信息,可在从服务器上用如下命令查看:
Master_Log_File & Read_Master_Log_Pos:下一个传输的主日志信息。 Relay_Master_Log_File & Exec_Master_Log_Pos:下一个执行的主日志信息。 Relay_Log_File & Relay_Log_Pos:下一个执行的中继日志信息。 理解这些日志信息的含义对于解决故障至关重要,后文会详细阐述。 安装 先在主服务器上创建复制账号:
注:出于安全性和灵活性的考虑,不要把root等具有SUPER权限用户作为复制账号。 然后设置主服务器配置文件(缺省:/etc/my.cnf):
注:一定要保证主从服务器各自的server_id唯一,避免冲突。 注:如果没有指定log_bin的话,缺省会使用主机名作为名字,如此一来一旦主机名发生改变,就会出问题,所以推荐指定log_bin(从服务器的relay_log存在一样的问题)。 注:sync_binlog,innodb_flush_log_at_trx_commit,innodb_support_xa三个选项都是出于安全目 的设置的,不是复制的必须选项。 接着设置从服务器配置文件(缺省:/etc/my.cnf):
注:如果用户有SUPER权限,则read_only无效。 注:有了skip_slave_start,除非使用START SLAVE命令,否则从服务器不会开始复制。 |

