MySQL5.7主从复制
- 1.什么是主从复制
- 2.主从复制原理
- 3.主从复制的好处
- 4.MySQL主从复制形式
- 4.1一主一从
- 4.2主主复制
- 4.3一主多从
- 4.4多主一从
- 4.5联级复制
- 5.MySQL主从复制集群部署
- 5.1安装环境
- 5.2基本配置
- 5.3安装MySQL5.7
- 5.4MySQL主从配置
- 5.5创建数据库
- 5.5设置数据库的访问权限
- 5.6设置主从关系
- 5.7验证
- 注意事项
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
软件包下载以及安装参考
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的版本必须一致
- 主从服务器时间需要同步
- 本配置需要事先创建好数据库和表然后会自动同步表中数据