centos7.2 mysql数据库的主从复制和半同步设置

时间:2022-03-20 06:53:12
 这里记录一下,服务器数据库的主从复制设置和半同步设置。作为web服务的数据提供。
    主库:ip: 172.18.42.192
    从库:ip: 172.18.42.193


首先,两台服务器上都装好mysql,我这里用的是mysql5.6版本。5.7版本类似
第一步,设置主从复制。
 
(1)在 主库上设置:
$ vi /etc/my.cnf               (设置一些配置)
-------------------------------------------
[mysqld]
server-id = 1
 log-bin =
/usr/local/mysql/data/mysql-bin
(指定位置,自定义,这里我放在了mysql的data目录下)
innodb_flush_log_at_trx_commit=1           (暂时还不明所以)
sync_binlog=1                                            (暂时还不明所以)
---------------------------------------------
保存退出,重启服务:
$ systemctl restart mysqld


登陆进主库 的mysql:
$ mysql -u root -p 
mysql > show variables like 'server-id';      (查看变量 ,server-id是否更改且生效)


创建一个用户用于从库复制:
mysql > grant replication slave on *.* to 'slave01'@'%' identified by '123456'       (slave01为你自定义的                                       用户名,123456为你自定义的密码)
mysql > fiush privileges;                           (生效用户和权限)
mysql > select user,host from mysql.user;                  (可查看mysql的用户和host)
mysql > show master status;        (查看主机状态,记下一些参数,后面要用到)
+------------------+----------+--------------+------------------+-------------------+
| File             | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
+------------------+----------+--------------+------------------+-------------------+
| mysql-bin.000001 |      970 |              |                  |                   |
+------------------+----------+--------------+------------------+---------------
(记下file:mysql-bin.000001,position:970)


(2)在 从库上设置:
$ vi /etc/my.cnf                        (修改从库配置)
------------------------------------------------------
server-id = 2
relay-log = /usr/local/mysql/data/relay-bin  (从主库传过来的bin-log被存到从库的relay- log内,自定义位置)
relay-log-info-file = /usr/local/mysql/data/relay-log.info      (日志文件位置,自定义)


重启mysql服务:
$ systemctl restart mysqld
登陆从库,配置信息
$ mysql -u root -p  (进入mysql)
mysql >  CHANGE MASTER TO 
           > MASTER_HOST = '172.18.42.192', (主库的host地址)
   > MASTER_PORT = 3306, (主库的端口)
   > MASTER_USER = 'slave01',                   (刚才创建的用户)
   > MASTER_PASSWORD = '123456',       (刚才创建的用户的密码
     > MASTER_LOG_FILE = 'mysql-bin.000001',         (上面在主库上查询到的file)
     > MASTER_LOG_POS = 970; (上面在主库上查询到的position)


mysql > start slave;  (开启主从复制同步)
好了,到此,就配置完了,然后测试一下,在主库上新建数据库,表,插入数据,在从库上也会有相应同步。


接下来进行半同步的设置:
半同步的设置需要有三个条件:
1. mysql版本在5.5 及以上                         
2.变量have_dynamic_loading为yes   (可以通过show variables like 'have%'来查看)
3.异步复制已经存在   (上一步正是开启复制)


首先(1) 在主库上设置:
$ mysql -u root -p
mysql > INSTALL PLUGIN rpl_semi_sync_master SONAME 'semisync_master.so'; (安装主库插件)
mysql > show plugins; (查看是否安装成功)
-----------------------------------------
rpl_semi_sync_master       | ACTIVE   | REPLICATION        | semisync_master.so | GPL  
-----------------------------------------
有上面的内容,则证明安装OK了
mysql >  SET GLOBAL rpl_semi_sync_master_enabled = 1              (开启主库半同步)


然后 (2) 从库上设置:
$ mysql -u root -p
mysql > mysql> INSTALL PLUGIN rpl_semi_sync_slave SONAME 'semisync_slave.so';    (安装从库插件)
mysql >  SET GLOBAL rpl_semi_sync_slave_enabled = 1;              (开启从库半同步)
mysql > stop slave io_thread; (关闭slave线程)
mysql > start slave io_thread; (开启slave现线程,也就是重启一下slave线程)


好了,这样就已经开启了半同步复制了。
mysql > show variables like 'Rpl%';             (查看把半同步的环境变量)
mysql > show status like 'Rpl%'   (查看状态)
+----------------------------+-------+
| Variable_name              | Value |
+----------------------------+-------+
| Rpl_semi_sync_slave_status | ON    |
+----------------------------+-------+
1 row in set (0.20 sec)
状态为 ON则为开启状态中。


ok,到此为止,不出错的话,则配置完成。
另外,开启半同步的设置,也可以写在配置文件 my.cnf 里:
主库:
plugin-load=rpl_semi_sync_master=semisync_master.so
rpl_semi_sync_master_enabled=1
从库:
plugin-load=rpl_semi_sync_slave=semisync_slave.so

rpl_semi_sync_slave_enabled=1


OK,到此mysql主从配置完成