Centos7 Mysql 集群--之二(双主半同步配置)

  1. 查看my.cnf文件
[root@MYSQLA ~]# cat /etc/my.cnf
---------------------------------------------------------------------------------------------------------------
[mysql]
default-character-set=utf8
prompt=\\u@\\h : \\d【\\r:\\m:\\s】\\c SQL->
[mysqld]
sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES 

# 一般配置选项
basedir = /usr/local/mysql
datadir = /usr/local/mysql/data
port = 3306

#设置 server_id,一般设置为 IP
server_id=101 
auto_increment_increment=2          #步进值auto_imcrement。一般有n台主MySQL就填n
auto_increment_offset=1             #起始值。一般填第n台主MySQL。此时为第一台主MySQL
#binlog-ignore=mysql                #忽略mysql库【我一般都不写】
#binlog-ignore=information_schema   #忽略information_schema库【我一般都不写】
#binlog-ignore-db = performance_schema
#replicate-wild-ignore-table = mysql.%
#replicate-wild-ignore-table = information_schema.%
#replicate-wild-ignore-table = performance_schema.%

replicate-do-db=test                #要同步的数据库,默认所有库
socket = /usr/local/mysql/mysql.sock
character-set-server=utf8
#binlog
log_bin=/usr/local/mysql/binlog/binlog      #开启二进制日志
log-slave-updates                               # 做为从库时,数据库的修改也会写到bin-log里
default-storage-engine=INNODB
log_error=/usr/local/mysql/logs/error.log

#二进制日志自动删除/过期的天数。默认值为 0,表示不自动删除。
expire_logs_days=7
#跳过主从复制中遇到的所有错误或指定类型的错误,避免 slave 端复制中断。
#如: 1062 错误是指一些主键重复, 1032 错误是因为主从数据库数据不一致
slave_skip_errors=1062
---------------------------------------------------------------------------------------------------------------

[root@MYSQL ~]# service mysqld restart

登录:
[root@MiWiFi-R3-srv bin]# mysql -uroot -p123456
mysql> show variables like 'log_slave_updates';
----------------------------------------------------------
ON
----------------------------------------------------------
  1. Semisync半同步配置
#加载semisync_master和semisync_slave插件
#mysqlA和mysqlB上执行
mysql> INSTALL PLUGIN rpl_semi_sync_master SONAME 'semisync_master.so';
mysql> INSTALL PLUGIN rpl_semi_sync_slave SONAME 'semisync_slave.so';
mysql> show variables like '%semi%';

rpl_semi_sync_master_timeout=10000
表示主库在某次事务中,如果等待时间超过10秒,则降级为普通模式,不再等待备库。如果主库再次探测到备库恢复了,则会自动再次回到semisync模式。
rpl_semi_sync_master_wait_point=AFTER_SYNC

这个参数是MySQL5.7新增的,AFTER_SYNC工作流程:
1、客户端提交一个事务,master将事务写入binlog并刷新到磁盘,发送到slave,master等待slave反馈。
2、slave接收master的binlog,写到本地的relaylog里。发送确认信息给master。
3、当接收到slave反馈,master提交事务并返回结果给客户端。这样就保证了主从数据一致。

#开启semisync master和slave
#mysqlA和mysqlB上执行:

mysql> SET GLOBAL rpl_semi_sync_master_enabled = 1;
mysql> SET GLOBAL rpl_semi_sync_slave_enabled = 1;
并修改my.cnf,添加下面两行:
[root@MYSQLA ~]# cat /etc/my.cnf
-----------------------------------------------------------------
rpl_semi_sync_master_enabled = 1
rpl_semi_sync_slave_enabled = 1
-----------------------------------------------------------------
我们看到semi_sync_master_status是ON的,而semi_sync_slave_status是OFF的,下面我们启动它。

#使半同步机制生效
#mysqlA和mysqlB上执行:

mysql> stop slave;start slave;
mysql> show status like '%semi%';
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容