MySQL5.7主从复制(CentOS7)

1.什么是主从复制

MySQL 主从复制是指数据可以从一个MySQL数据库服务器主节点复制到一个或多个从节点。MySQL 默认采用异步复制方式,这样从节点不用一直访问主服务器来更新自己的数据,数据的更新可以在远程连接上进行,从节点可以复制主数据库中的所有数据库或者特定的数据库,或者特定的表。

2.主从复制原理

在这里插入图片描述

1.master服务器的MySQL为主库,主库服务器将数据更改操作写入binary log(二进制日志文件)。

2.slave服务器的MySQL为从库,从库服务器会在一定的时间间隔内对master的二进制日志文件进行探测是否发生改变,如果文件发生改变则会开始一个I/O线程请求master的二进制日志文件。

3.主库会为每一个请求二进制日志文件的I/O线程启动一个dump线程,向从库的I/O发送二进制日志文件。

4.从库的I/O线程会将得到的二进制日志文件内容写入本地的relay-log(中继日志)文件中,SQL线程会读取relay-log文件内容并解析为SQL语句执行,保证从库的数据和主库保持一致。

5.最后I/O线程和SQL线程会处于睡眠状态,等待下一次被唤醒。

注意: 主从复制异步,数据从主库传递到从库需要一定的时间,因此主从同步并不能完全保证数据的安全性,有可能出现少部分数据丢失的情况。

3.主从复制的好处

  • 读写分离
  • 数据备份
  • 架构的拓展

4.MySQL主从复制形式

4.1一主一从

在这里插入图片描述

4.2主主复制

在这里插入图片描述

4.3一主多从

在这里插入图片描述

4.4多主一从

在这里插入图片描述

4.5联级复制

在这里插入图片描述

5.MySQL主从复制集群部署

5.1安装环境

  • Centos7
  • MySQL5.7

部署采用一主一从的方式部署,具体虚拟机配置如下:

主机名 IP 内存 磁盘
master 192.168.56.20 2G 40G
slave 192.168.56.30 2G 40G

5.2基本配置

  • 关闭防火墙
# 两台机器都要关闭防火墙
systemctl stop firewalld
systemctl disable firewalld
  • 时间同步
# 两台机器同时安装NTP服务
yum install -y ntp
# 启动NTP服务并设置为开机自启动
systemctl start ntpd
systemctl enable ntpd
# 由于本机是可以连通外网的,ntp默认会同步centos官方时间服务器的时间,因此不需要对ntp服务进行配置

5.3安装MySQL5.7

软件包下载以及安装参考https://blog.csdn.net/qq_40856560/article/details/106249414

5.4MySQL主从配置

  • Master配置
[mysqld]
# master的id 1 
server-id=1
# binary log
log-bin=mysql-bin
#二进制日志格式,有row、statement、mixed三种格式,row指的是把改变的内容复制过去,而不是把命令在从服务器上执行一遍,statement指的是在主服务器上执行的SQL语句,在从服务器上执行同样的语句。MySQL默认采用基于语句的复制,效率比较高。mixed指的是默认采用基于语句的复制,一旦发现基于语句的无法精确的复制时,就会采用基于行的复制。
binlog-format=ROW 
# 指定需要同步哪些数据库 如果不配置默认为同步所有数据库
# binlog-do-bo=mydb01
# 指定不同步哪些数据库 忽略系统自带数据库
binlog-ignore-db=mysql,information_schema,performance_schema,sys

如果指定了同步的数据库就不需要指定忽略的数据库,反之亦然。

  • Slave配置
[mysqld]
# slave的id
server-id=2
# binary log
log-bin=mysql-bin
binlog-format=ROW 
# 指定同步的数据库 
replicate-do-db=test1
replicate-do-db=test2

修改完配置文件之后需要重启MySQL,使用如下命令

systemctl restart mysqld

5.5创建数据库

两台机器都创建数据库

create database test1;
create database test2;

5.5设置数据库的访问权限

Master机器配置MySQL的数据库

--授权操作
set global validate_password_policy=0;
set global validate_password_length=1;
grant replication slave on *.* to 'root'@'%' identified by 'root';
--刷新权限
flush privileges;

5.6设置主从关系

  • Master机器操作

    登录MySQL,然后查看master服务器的状态

mysql> show master status;

在这里插入图片描述
可以看到log-bin文件的文件名,以及文件在磁盘上的偏移量和忽略的数据库

  • Slave机器操作

mysql >change master to master_host=‘192.168.56.20’,master_user=‘root’,master_password=‘root’,master_port=3306,master_log_file=‘mysql-bin.000001’,master_log_pos=154;
```

master_host: master服务器的IP

master_user:数据库用户名

master_password:密码

master_port:端口

master_log_file和master_log_pos的值一定要和master机器上查询出来的保持一致

5.7验证

  • Slave机器操作
# 开启slave
start slave;
# 验证主从是否成功执行
show slave status \G

在这里插入图片描述

可以看到Slave的I/O线程和SQL线程都是Yes的状态,即代表主从同步没有问题。

测试,在master服务器的MySQL的test1库中创建一个person表,然后插入一些数据。

create table test1.person(id int primary key,name varchar(20) unique);
insert into test1.person values(1,'killer');
insert into test1.person values(2,'xiaoyu');

需要在slave的MySQL数据库中创建person表

-- 停止slave
stop slave;
-- 建表
create table test1.person(id int primary key,name varchar(20) unique);
-- 启动slave
start slave;

然后在slave机器的MySQL中查看数据库,以及查询表中的数据

mysql> select * from test1.person;

在这里插入图片描述

注意事项

  • 主从服务器MySQL的版本必须一致
  • 主从服务器时间需要同步
  • 本配置需要事先创建好数据库和表然后会自动同步表中数据

猜你喜欢

转载自blog.csdn.net/qq_40856560/article/details/114266166