您问题的直接答案是“是”,但这取决于您所运行的MySQL版本。在MySQL 5.5之前,复制操作如下:
- 主执行SQL
- 主记录SQL事件在其二进制日志中
- 从站从主二进制日志读取SQL事件
- 从站通过I / O线程将SQL事件存储在其中继日志中
- 从站通过SQL线程从中继日志中读取下一个SQL事件
- 从站执行SQL
- 从站确认SQL事件已完全执行
从MySQL 5.5开始,使用Semisynchronous Replication,现在复制将按以下方式运行:
- 主执行SQL
- 主记录SQL事件在其二进制日志中
- 从站从主二进制日志读取SQL事件
- 从站确认SQL事件的接收主机
- 从站通过I / O线程将SQL事件存储在其中继日志中
- 从站通过SQL线程从中继日志中读取下一个SQL事件
- 从站执行SQL
- 从站确认SQL事件已完全执行
这个新的范例将使从站与其主站更紧密地同步。
尽管如此,网络内部的延迟可能会阻碍MySQL半同步复制,使其恢复为旧式异步复制。为什么呢 如果发生超时而没有任何从属确认事务,则主控将还原为异步复制。当至少有一个半同步从属服务器赶上时,主服务器将返回到半同步复制。
更新2011-08-08 14:22 EDT
MySQL 5.5半同步复制的配置非常简单
步骤1)将这四(4)行添加到/etc/my.cnf
[mysqld]
plugin-dir=/usr/lib64/mysql/plugin
#rpl_semi_sync_master_enabled
#rpl_semi_sync_master_timeout=5000
#rpl_semi_sync_slave_enabled
步骤2)重新启动MySQL
service mysql restart
步骤3)在MySQL客户端中运行这些命令
INSTALL PLUGIN rpl_semi_sync_master SONAME 'semisync_master.so';
INSTALL PLUGIN rpl_semi_sync_slave SONAME 'semisync_slave.so';
步骤4)在plugin-dir选项之后取消注释三个rpm_semi_sync选项
[mysqld]
plugin-dir=/usr/lib64/mysql/plugin
rpl_semi_sync_master_enabled
rpl_semi_sync_master_timeout=5000
rpl_semi_sync_slave_enabled
步骤5)重新启动MySQL
service mysql restart
全部做完 !!!现在,像往常一样设置MySQL复制。