mysql数据库主从同步复制模式

主从同步复制模式

异步复制模式 全同步复制 半同步复制
Asyncchronous replication Fully syncchronous replication Semisyncchronous replication
主库接受到客户请求后,处理完事务后,立即将结果返给客户端,不去关系从库是否已经接收并处理 当主库执行完一次事务,且所有从库都接受并处理之后,才返回给客户端 介于两种模式之间,主库执行一次事务后,等待至少一个从库接受并写到relay log中才返回给客户端
客户体验度高,访问从库可能没有数据 客户体验度差,数据同步好 目前大多数企业采用的方法

半同步复制模式的配置

准备两台数据库mysql服务器

master(主库) 192.168.4.51          slave(从库) 192.168.4.52

[root@mysql51 ~]#systemctl start mysqld         //确保从库和51上的数据相同
[root@mysql51 ~]# mysql -uroot -p123456
mysql>show databases;
+----------------------+
| Database             |
+----------------------+
| information_schema   |
| mysql                |
| performance_schema   |
| sys                  |
+----------------------+

配置主从关系

mysql> system vim /etc/my.cnf              //配置主库51
[mysqld]
log_bin=master51                           //设置日志名
server_id=51
mysql> system systemctl restart mysqld
mysql> show master status;                 //查看启动的日志
mysql> show master logs;                   //查看当前日志
+-----------------+----------+
| Log_name        | File_size|
+-----------------+----------+
| master51.000001 |      446 |
+-----------------+----------+
mysql>grant replication slave on *.* to repluser@"%" identified by "123456";
//授权给repluser用户, 密码为123456(需符合当前密码权限,本机之前改过权限0)
mysql> system vim /etc/my.cnf                  
[mysqld]
server_id=52
mysql> system systemctl restart mysqld           //配置从库,指定主库信息
mysql> change master to
    -> master_host="192.168.4.51",
    -> master_user="repluser",
    -> master_password="123456",
    -> master_log_file="master51.000001",        //关联主服务器的日志文件
-> master_log_pos=446;                           //关联主服务器的偏移量
mysql> start slave;
mysql> show slave status\G;                      //查看从服务器信息
 ....
            Slave_IO_Running: Yes                //yes为正常
           Slave_SQL_Running: Yes                //yes为正常

查看是否可以自动添加模块

mysql> show  variables  like  'have_dynamic_loading';
+----------------------+-------+
| Variable_name        | Value |
+----------------------+-------+
| have_dynamic_loading | YES   |
+----------------------+-------+
1 row in set (0.01 sec)

主从分别下载对应模块并查看是否启用

mysql> INSTALL PLUGIN rpl_semi_sync_master   SONAME   'semisync_master.so';  //主库

mysql> INSTALL PLUGIN rpl_semi_sync_slave SONAME  'semisync_slave.so';   //从库
mysql> SELECT  PLUGIN_NAME, PLUGIN_STATUS FROM INFORMATION_SCHEMA.PLUGINS  WHERE PLUGIN_NAME LIKE '%semi%';
//查看系统下的表,是否安装成功
+----------------------+---------------+
| PLUGIN_NAME          | PLUGIN_STATUS |
+----------------------+---------------+
| rpl_semi_sync_master | ACTIVE        |
| rpl_semi_sync_slave  | ACTIVE        |
+----------------------+---------------+
2 rows in set (0.00 sec)

启用半同步复制,默认是关闭的,并查看对应库

mysql> SET GLOBAL rpl_semi_sync_master_enabled = 1;     //主库执行
Query OK, 0 rows affected (0.00 sec)
mysql> SET GLOBAL rpl_semi_sync_slave_enabled = 1;     //从库执行
Query OK, 0 rows affected (0.00 sec)
mysql>  show  variables  like  "rpl_semi_sync_%_enabled";    //查看是否启用
+------------------------------+-------+
| Variable_name                | Value |
+------------------------------+-------+
| rpl_semi_sync_master_enabled | ON    |
| rpl_semi_sync_slave_enabled  | ON    |
+------------------------------+-------+
2 rows in set (0.00 sec)

写入配置文件,设置每次启动

[root@master51 ~]# vim /etc/my.cnf           //主库
[mysqld]
plugin-load=rpl_semi_sync_master=semisync_master.so
rpl_semi_sync_master_enabled=1
[root@slave52 ~]# vim /etc/my.cnf            //从库
[mysqld]
plugin-load=rpl_semi_sync_slave=semisync_slave.so
rpl_semi_sync_slave_enabled=1

高可用架构下,master和slave需同时启动,以便在切换后能继续使用半同步复制

[root@master51 ~]# vim /etc/my.cnf
[mysqld]
plugin-load \
="rpl_semi_sync_master=semisync_master.so;rpl_semi_sync_slave=semisync_slave.so"
rpl-semi-sync-master-enabled = 1
rpl-semi-sync-slave-enabled = 1
扫描二维码关注公众号,回复: 5940299 查看本文章

猜你喜欢

转载自blog.csdn.net/weixin_43800781/article/details/84997745