CentOS 6.5下MySQL5.7.25的安装、主从复制和读写分离(二)

概述:本文主要讲述CentOS 6.5下MYSQL5.7.25实现主从复制(基于日志点和GTID)步骤,是上一篇博文的延申

1、主从复制的用途

  • 实时灾备,用于故障切换
  • 读写分离,提供查询服务
  • 备份,避免影响业务

2、主从部署必要条件

  • 主库开启binlog日志(设置log-bin参数)
  • 主从server-id不同
  • 从库服务器能连通主库

3、mysql主从复制原理

CentOS 6.5下MySQL5.7.25的安装、主从复制和读写分离(二)CentOS 6.5下MySQL5.7.25的安装、主从复制和读写分离(二)CentOS 6.5下MySQL5.7.25的安装、主从复制和读写分离(二)

从库生成两个线程,一个I/O线程,一个SQL线程;

i/o线程去请求主库 的binlog,并将得到的binlog日志写到relay log(中继日志) 文件中;

主库会生成一个 log dump 线程,用来给从库 i/o线程传binlog;

SQL 线程,会读取relay log文件中的日志,并解析成具体操作,来实现主从的操作一致,而最终数据一致

4、主从复制搭建

(1)准备两台数据库服务器,一台做主库(mater),一台做从库(slave),版本为MYSQL5.7.25

(2)分别修改主库和从库的my.cnf文件

vi /etc/my.cnf

主库增加如下内容

#在[mysqld]下增加下边两行
#主库开启binlog日志
log-bin=mysql-bin
#servi-id可以任意,但必须唯一
server-id=101
#防止因主机名改变导致复制链路中断
relay_log=mysql-relay-bin

从库增加如下内容

#在[mysqld]下增加一行
#log-bin=mysql-bin #没必要启用,除非从服务器要作为其他服务器的主服务器
server-id=11

以上是基于日志点的主从复制,如果使用GTID主从复制,则配置如下

主库my.cnf

log_bin=mysql-bin
server-id=101
#GTID复制
gtid_mode=on
enforce-gtid-consistency=on
#如果mysql版本低于5.7,需要增加
log-slave-updates=on

从库my.cnf

server_id=11
relay_log=/usr/local/mysql/log/relay_log
#集群时每台服务器都要启动gtid模式
gtid_mode=on
enforce-gtid-consistency=on
#保证从库的安全性(以下配置可选)
read_only=on

(3)主库中连接MySQL,并创建复制账号、密码

CREATE USER 'root'@'%' IDENTIFIED BY 'root';       -- '%'意味着所有的终端都可以用这个用户登录
GRANT SELECT,REPLICATION SLAVE ON *.* TO 'root'@'%'; -- SELECT权限是为了让root可以读取到数据

(4)查看主库的SLAVE状态

SHOW MASTER STATUS\G

结果如下:CentOS 6.5下MySQL5.7.25的安装、主从复制和读写分离(二)CentOS 6.5下MySQL5.7.25的安装、主从复制和读写分离(二)CentOS 6.5下MySQL5.7.25的安装、主从复制和读写分离(二)

(5)从库的链路复制

#从库下执行
CHANGE MASTER TO
master_host='192.168.3.101',
master_user='root',
master_log_file='mysql-bin.000001',
master_log_pos=154,
master_port=3306,
master_password='root';

启动基于GTID的复制

CHANGE MASTER TO
master_host='192.168.3.101',
master_user='root',
master_password='root',
master_auto_position=1

(6)查看从库的SLAVE状态

SHOW SLAVE STATUS\G

结果如下:CentOS 6.5下MySQL5.7.25的安装、主从复制和读写分离(二)CentOS 6.5下MySQL5.7.25的安装、主从复制和读写分离(二)CentOS 6.5下MySQL5.7.25的安装、主从复制和读写分离(二)

(7)测试,上述步骤完成后,在主库中创建一个数据库,在从库中就会多出新建的数据库

CREATE DATABASE test_db;
USE test_db;
CREATE TABLE USER(id int,name char(20),password char(65),phone char(12));
INSERT INTO USER(id,name) values('1','aaa'),('2','bbb'),('3','ccc');

如果是GTID复制,插入记录时则会执行一个事务

CentOS 6.5下MySQL5.7.25的安装、主从复制和读写分离(二)

参考链接

https://www.cnblogs.com/Aiapple/p/5792939.html mysql主从复制原理