MySQL主从复制-记录

1、 安装mariadb数据库(mysql),并配置主从信息

查看 系统信息
[[email protected] ~]# cat /etc/redhat-release
MySQL主从复制-记录
安装mariadb数据库
[[email protected] ~]# yum install -y mariadb mariadb-devel mariadb-server

MySQL主从复制-记录
关闭所有服务器的防火墙
[[email protected] ~]# systemctl stop firewalld
MySQL主从复制-记录
启动所有mariadb服务器并查看数据状态
[[email protected] ~]# systemctl start mariadb
[[email protected] ~]# systemctl status mariadb

MySQL主从复制-记录
设置所有服务器上的数据库密码(mariadb默认安装是没有密码的)
[[email protected] ~]# mysqladmin -uroot password
MySQL主从复制-记录
登入数据库并查看版本
[[email protected] ~]# mysql -uroot -padmin
MariaDB [(none)]> select @@version;
±---------------+
| @@version |
±---------------+
| 5.5.60-MariaDB |
±---------------+
1 row in set (0.00 sec)

MySQL主从复制-记录
启用binlog及允许同步,(所有库)
[[email protected] ~]# vim /etc/my.cnf 添加配置信息

MySQL主从复制-记录
从库启用binlog (从库不是必须启动binlog日志文件)
Slave1主机my.cnf配置内容
MySQL主从复制-记录
Slave2主机配置内容

MySQL主从复制-记录
重启数据库(所有主机)
[[email protected] ~]# systemctl restart mariadb

MySQL主从复制-记录

添加admin用户并授权,密码为123456(主库)
MariaDB [(none)]> grant all on . to [email protected]"%" identified by “123456”;
Query OK, 0 rows affected (0.00 sec)
MySQL主从复制-记录
查看授权用户
MariaDB [(none)]> select user,host from mysql.user;
±------±----------+
| user | host |
±------±----------+
| admin | % |
| root | 127.0.0.1 |
| root | ::1 |
| | localhost |
| root | localhost |
| | master |
| root | master |
±------±----------+
7 rows in set (0.00 sec)

MySQL主从复制-记录

查看master服务器的状态
MariaDB [(none)]> show master status;

MySQL主从复制-记录
从机Slave1服务器
MariaDB [(none)]> change master to master_host=‘192.168.31.78’,
-> master_user=‘admin’,
-> master_password=‘123456’,
-> master_log_file=‘master-bin.000001’,
->master_log_pos=372;
MySQL主从复制-记录
从机Slave1启动复制并查看Slave1的状态
MariaDB [(none)]> start slave; #启动复制

MariaDB [(none)]> show slave status\G;

MySQL主从复制-记录

配置从机Slave2同步操作(这个和从机Slave2是一样的操作)

MySQL主从复制-记录

启动复制并查看状态
MariaDB [(none)]> start slave;
MariaDB [(none)]> show slave status\G;

MySQL主从复制-记录
好了 到这 主从就配置好了,下面在主机上创建数据看下效果

主机上查看都是有那些数据库?
MariaDB [(none)]> show databases;
MySQL主从复制-记录

主机上创建YHB库并查看有没有创建成功

MariaDB [(none)]> create database YHB;

MariaDB [(none)]> show databases;

MySQL主从复制-记录

查看从机1有没有同步新建的库过去
MariaDB [(none)]> show databases;

MySQL主从复制-记录
查看从机2有没有同步新建的库过去
MariaDB [(none)]> show databases;

MySQL主从复制-记录

已经同步成功了,说明主从现在已经配置成功了

2、 配置同步模式

同步的模式有三中,分别是异步复制、全同步复制、半同步复制,他们有什么不同?

异步复制:mysql数据库默认就是异步复制,主库在执行完客户端提交的事务后会立马将结果返回给客户端,并不关心从库是否已经接受并处理,这样就回你出现一个问题,主如果宕掉,主处理的事务没有同步到从机上,这个时候强行将从机提升为新的主机,可能导致新的机上的数据不完整

全同步复制:主库在执行完一个事务后,不会立刻返回给客户端,而是确认所有的从库都执行完此事务后,在返回给客户端,这样就会影响复制的性能问题

半同步复制:介于异步和全同步之间,主库在执行完客户端提交的事务后,不是立刻返回给客户端,而是等待至少有一个从库接收到并写入relay log(中继日志)中,才会返给客户端
从。相对于异步复制,半同步复制提高了数据的安全性,同时它也造成了一定程度的延迟,这个延迟最少是一个TCP/IP往返的时间。所以,半同步复制最好在低延时的网络中使用。

mysql5.5版本开始,以插件的形式支持半同步复制

想要使用半同步复制,要满足一下几个条件

1、 数据库是mysql5.5版本及以上版本
[[email protected] ~]# rpm -qa | grep mariadb
MySQL主从复制-记录
2、 查看变量是否允许动态模块加载(默认是开启的)
MariaDB [(none)]> show variables like “have_dynamic_loading”;

MySQL主从复制-记录
安装插件半同步需要的插件

因用户需要执行 install plugin,set global,stop slave和start slave操作,所以用户需要有super权限

Master主机执行命令:
MariaDB [(none)]> install plugin rpl_semi_sync_master soname ‘semisync_master.so’;

MySQL主从复制-记录

Slave1从机 和Slave1从机执行命令:
MariaDB [(none)]> install plugin rpl_semi_sync_slave soname ‘semisync_slave.so’;
MySQL主从复制-记录

在Master和Slavle主机查看插件有没有安装成功:(2种方式)
1、 MariaDB [(none)]> show plugins;
MySQL主从复制-记录
2、MariaDB [(none)]> select plugin_name,plugin_status from information_schema.plugins where plugin_name like ‘%semi%’;
MySQL主从复制-记录

启动半同步复制
在安装完插件后,半同步复制默认是关闭的,需要开启。(两种方式,一种命令行,一种配置文件)
命令行:(命令配置临时配置,重启服务会失效)

Master主机:

MariaDB [(none)]> set global rpl_semi_sync_master_enabled= 1;

MySQL主从复制-记录
Slave1和Slave2主机:
MariaDB [(none)]> set global rpl_semi_sync_slave_enabled = 1;
MySQL主从复制-记录

配置文件:
配置文件永久启用半同步复制
命令配置临时配置,重启服务会失效
写在主配置文件/etc/my.cnf 的[mysqld]下方
修改后需要重启服务

Master主机配置文件:
[[email protected] ~]# vim /etc/my.cnf
plugin-load=rpl_semi_sync_master=semisync_master.so
rpl_semi_sync_master_enabled=1

MySQL主从复制-记录

Slavle1和Slavle2主机文件配置(1和2一致,就不多截图了)
[[email protected] ~]# vim /etc/my.cnf
plugin-load=rpl_semi_sync_slave=semisync_slave.so
rpl_semi_sync_slave_enabled=1

还有中情况是,在高可用架构下,Master和Slave都需要启动,以便在切换能继续使用半同步复制(啥意思那?就主死了,从要提升为新的主,新的主也要开启半同步复制)
在配置文件中添加
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

MySQL主从复制-记录

查看半同步复制是否在运行

Master主机:
MariaDB [(none)]> show status like ‘Rpl_semi_sync_%_status’;

MySQL主从复制-记录
Slave1和Slave2主机:(从机还没有生效,需要重启下IO线程)
MariaDB [(none)]> show status like ‘Rpl_semi_sync_%_status’;
MySQL主从复制-记录

重启从机上线的IO线程
MariaDB [(none)]> STOP SLAVE IO_THREAD; (停止线程)
MariaDB [(none)]> start slave io_thread; (启动线程)
MySQL主从复制-记录

查看 Slave1和Slave2从机上半同步状态

MariaDB [(none)]> show status like ‘rpl_semi_sync_%_status’; (现在开启了)
MySQL主从复制-记录

这两个变量常用来监控主从是否运行在半同步复制模式下。
至此,MySQL半同步复制搭建完毕~