MySql 主从复制及主主复制

一、主从复制

1、主配置

[mysqld]
server-id=11   #任意自然数n,只要保证两台MySQL主机不重复就可以了。
log-bin=mysql-bin   #开启二进制日志
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库【我一般都不写】
replicate-do-db=test #要同步的数据库,默认所有库

2、从配置

[mysqld]
server-id=12
log-bin=mysql-bin
auto_increment_increment=2
auto_increment_offset=2
replicate-do-db=test #要同步的数据库,默认所有库

上面配置后都重启让其生效

3、主执行语句

GRANT REPLICATION SLAVE ON *.* TO '同步账号'@'%' identified by '同步账号密码';
flush privileges; #非常重要否则不生效
SHOW MASTER STATUS;#查看Bin文件及pos信息

4、从执行语句

stop slave;
change master to master_host='ip',master_port=端口,master_user='主账号',master_password='主密码',master_log_file='mysql-bin.000002',master_log_pos=41052;
flush privileges;
start slave;
show slave status;

5、碰到的问题

A、从机 上 Slave_SQL_Runing 会变为No 。

解决:1、从机mysql执行:set GLOBAL SQL_SLAVE_SKIP_COUNTER=1;(这个方法不推荐,错误跳过只是暂时)

2、真正原因是有一个数据库可能程序报错了回滚了数据导致的。所以在同步my.ini文件中排除这个错误的库吧或找到问题所在

注意:如果想在slave上忽略某个库,最用replicate_ignore_db取代binlog_ignore_db

半同步复制

引用:https://www.cnblogs.com/phpstudy2015-6/p/6525275.html

主库

install plugin rpl_semi_sync_master soname 'semisync_master.dll';
show plugins;   #查看是否加载成功
SET GLOBAL rpl_semi_sync_master_enabled = 1;  #开启半同步复制,默认是关闭的
#或配置文件中加 rpl_semi_sync_master_enabled=1  #主库配置文件添加,表示以后启动MySQL将会自动开启半同步复制

flush privileges;
show variables like '%semi%';
#Rpl_semi_sync_master_enabled=ON表示开启半同步复制
#Rpl_semi_sync_master_timeout=1000默认1000毫秒,即10秒超时,将切换为异步复制
#Rpl_semi_sync_master_wait_no_slave表示是否允许master每个事物都要等待slave接收确认,默认为ON
#Rpl_semi_sync_master_trace_level=32表示用于开启半同步复制时的调试级别,默认32
show status like '%semi%';
#Rpl_semi_sync_master_status表示主服务器使用是异步还是半同步复制(ON)
#Rpl_semi_sync_master_client表示从服务器有多少个配置成半同步复制
#Rpl_semi_sync_master_yes_tx表示从服务器确认成功提交的数量
#Rpl_semi_sync_master_no_tx表示从服务器确认失败提交的数量

从库

INSTALL PLUGIN rpl_semi_sync_slave SONAME 'semisync_slave.dll';#linux则为semisync_slave.so
show plugins;   #查看是否加载成功

SET GLOBAL rpl_semi_sync_slave_enabled = 1;  #开启半同步复制,默认是关闭的
#或配置文件中加 rpl_semi_sync_slave_enabled=1  #从库配置文件添加,同上

show variables like '%semi%';
#Rpl_semi_sync_slave_enabled=ON表示在slave已经开始半同步复制模式
#Rpl_semi_sync_slave_trace_level=32表示用于开启半同步复制时的调试级别,默认32
show status like '%semi%'
#Rpl_semi_sync_slave_status表示从服务器开启半同步复制

#重启从服务器IO线程,手动将异步模式切换为半同步模式
STOP SLAVE IO_THREAD;

START SLAVE IO_THREAD;
原文地址:https://www.cnblogs.com/xiaoruilin/p/14514473.html