概述:本文主要讲述CentOS 6.5下MYSQL5.7.25实现主从复制(基于日志点和GTID)步骤,是上一篇博文的延申
1、主从复制的用途
2、主从部署必要条件
3、mysql主从复制原理
从库生成两个线程,一个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
结果如下:
(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
结果如下:
(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复制,插入记录时则会执行一个事务
参考链接
https://www.cnblogs.com/Aiapple/p/5792939.html mysql主从复制原理