mysql 5.7配置多线程复制,MySQL5.7复制功能实战,基于事务的复制,多源复制和多线程复制配置...

本文介绍MySQL5.7的复制功能,包括异步复制、基于binlog的日志复制及GTID事务复制,并演示了如何在线变更复制类型、实现多源复制及多线程复制。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

这篇是幕课网-MySQL5.7复制功能实战视频教程的学习笔记。http://www.imooc.com/learn/589

第1章 MySQL复制基础

MySQL是异步复制

采取针对特定用户的读写分离,可以实现假无延迟。

MySQL复制是基于binlog日志进行的。存在三种日志格式:

statement格式           存储SQL语句,存储日志量最小

row格式                     存储event数据,日志量大,不能直接进行读取

mixed格式                 建议生产环境使用该格式

MySQL复制可以是整个实例,也可以是实例中的某个库或某个表

Master端:

--binlog-do-db

--binlog-ignore-db

Slave端:

--replicate-do-db

--replicate-ignore-db

--replicate-do-table

--replicate-ignore-table

--replicate-wild-do-table

--replicate-wild-ignore-table

数据过滤控制通常在Slave端进行,因为Master端的修改需要重启数据库实例,而Slave端就会容易操作得多,并且Slave端的控制更细

复制类型:

基于二进制日志的复制,重点关注的是主的二进制日志文件名和复制点,一主多从进行主备互换时,确认日志复制点比较麻烦

使用GTID完成基于事务的复制[MySQL5.7成熟],全局事务标识符,由主机标志和自增ID组成,推荐

MySQL支持半同步复制,通过插件实现,Master阻塞事务的提交,只有当收到Slave确认收到日志的消息后,再进地提交。第一张图为MySQL5.6,第二张图为MySQL5.7

27ed73447d95e35e800f774a2a54c950.png

c9e52b1e20825d246db948954e228dad.png

第2章 实现基于日志点的复制

实验环境:

Node1:192.168.3.100  5.7.9   Master

Node2:192.168.3.101  5.7.9   Slave

A在Master端建立复制用户

grant replication slave on *.* to 'dba'@'192.168.3.%' identified by '123456';    #老式写法

show warning;

drop user dba@'192.168.3.%';

select user,host from mysql.user;

create user 'dba'@'192.168.3.%' identified by '123456';    #先建立用户

grant replication slave on *.* to dba@'192.168.3.%';   #对用户进行授权

show databases;

create database dba;

use dba

create table t(id int,c1 varchar(10),primary key (id));

insert into t values(1,'aa'),(2,'cc'),(3,'dd');

select * from t;

B备份Master端的数据,并在Slave端恢复

mysqldump --single-transaction --master-data=2 --triggers --routines --all-databases -uroot -p > all.sql

--single-transaction保证事务完整性

--master-data 为1时不注释,为2时注释

--triggers  如果有触发器加上触发器

--routines  存储过程函数

--all-databases  备份所有数据

scp all.sql root@192.168.3.101:/root

mysql -uroot -p < all.sql

more all.sql 查看Master二十制文件名和日志点(--master-data=2的功劳)mysql-bin.000004 POS=1687

C使用change master命令配置复制

change master to

master_host='192.168.3.100',

master_user='dba',

master_password='123456',

master_log_file='mysql-bin.000004',

master_log_pos=1687;

change master to master_host='192.168.3.100',master_user='dba',master_password='123456',master_log_file='mysql-bin.000004',master_log_pos=1687;

show slave status \G

start slave;

iptables -L

/etc/init.d/iptables stop      #关闭防火墙

主从管理的系统视图

use performance_schema;

show tables;

replication_applier_configuration    通道名称和主动延迟时间,比如1小时(3600秒),那么从需要1小时后才会同步数据,有1小时的反悔期

配置:stop slave;change master to master_delay=3600;start slave;

replication_applier_status  显示通道名称,服务状态,下一次同步剩余时间[主动延迟]

replication_applier_status_by_coordinator  多线程复制

replication_applier_status_by_worker   工作线程,线程状态信息  show processlist;

replication_connection_configuration    连接配置信息,主机、端口、用户等

replication_connection_status   连接状态  show slave status;

replication_group_member_stats

replication_group_members

第3章 如何在线变更复制类型

在线将基于日志的复制变更为基于事务的复制[仅5.7版本]

先决条件:

集群中所有服务器版本均高于5.7.6    #show variables like '%version%';

集群中所有服务器gtid_mode都设为off   #show variables like 'gtid_mode';

处理步骤【主/备】:

set @@global.enforce_gtid_consistency=warn;   #修改后需要查看mysql-error.log日志信息,只有在没有报错的情况下,才能进行下一步操作

set @@global.enforce_gtid_consistency=on;

set @@global.gtid_mode=off_permissive;   #修改后需要查看mysql-error.log日志信息,只有在没有报错的情况下,才能进行下一步操作

set @@global.gtid_mode=on_permissive;

show status like 'ongoing_anonymous_transaction_count';   #应为空值或者0值,其实就是基于日志点的复制的数量

set @@global.gtid_mode=on;

show variables like 'gtid_mode';     #核对均为ON的状态

stop slave;

change master to master_auto_position=1;

start slave;

show slave status;     #在备上查看状态,应有Executed_Gtid_Set项,并有值

同时,将gtid-mode=on和enforce-gtid-consistency=on写入my.cnf配置文件中,以使服务重启后能自动进入gtid模式

变更复制类型之后管理视图的变化

use performance_schema;

show tables like 'replication%';

select * from replication_connection_configuration \G       #AUTO_POSITION=1

select * from replication_connection_status  \G    #UUID值

在线将基于事务的复制变更为基于日志的复制[仅5.7版本]

先决条件:

集群中所有服务器版本均高于5.7.6    #show variables like '%version%';

集群中所有服务器gtid_mode都设为on   #show variables like 'gtid_mode';

处理步骤【主/备】:stop slave;

change master to master_auto_position=0,master_log_file='filename',master_log_pos=1212;

start slave;

set @@global.gtid_mode=on_permissive;

set @@global.gtid_mode=off_permissive;

select @@global.gtid_owned;   #应为空字符串之后,才能进行下一步的操作

set @@global.gtid_mode=off;

set @@global.enforce_gtid_consistency=off;

同时,去掉my.cnf配置文件中gtid-mode=on和enforce-gtid-consistency=on项目,以使服务重启后服务正常

第4章 如何使用多源复制

多源复制也就是多Master复制,允许一个Slave对应多个Master

可以用在跨实例的查询上

change master to option,[option]...[channel_option]

option:

master_bind='interface_name'

master_host='host_name'

master_user='user_name'

master_password='password'

master_port=port_num

master_connect_retry=interval

master_retry_count=count

master_delay=interval

master_heartbeat_period=interval

master_log_file='master_log_name'

master_log_pos=master_log_pos

channel_option:

for channel channel

实验环境:

Node1:192.168.3.100  5.7.9   Master

Node2:192.168.3.101  5.7.9   Slave

Node3:192.168.3.102  5.7.9   Master   数据库N3,表t3

三台服务器均使用的是基于事务的模式,即show variables like 'gtid_mode';  结果为ON

【Node3 Master】

create database N3;

use N3

create table t3(id int,c1 varchar(10),c3 varchar(10),primary key (id));

show create table t3;

insert into t3 values(1,'aa','bb'),(2,'cc','dd');

select * from t3;

create user dba@'192.168.3.%' identified by '123456';   #创建复制用户

grant replication slave on *.* to dba@'192.168.3.%';   #为用户赋权

【Node2 Slave】

change master to

master_host='192.168.3.102',

master_user='dba',

master_password='123456',

master_auto_position=1 for channel 'N3';

show slave status \G

start slave for channel 'n3';

show slave status \G

错误,因为Node1和Node3都建有dba用户,所以出错,以下是解决方法:

stop slave;

use mysql

select user,host form user;

drop user dba@'192.168.3.%';

start slave;

show slave status \G    #正常,此时有两条记录,对应两个Master

show databases;  #此时复制正常

管理视图的变化:

【Node2 Slave】

use performance_schema;

show tables like 'replication%';

select * from replication_applier_configuration;  #显示两行

select * from replication_applier_status;  #显示两行

select * from replication_applier_status_by_coordinator \G

select * from replication_connection_configuration \G     #显示两行

select * from replication_connection_status \G     #显示两行

第5章 如何使用多线程复制

解决延时问题,在MySQL5.6中就已提供,但是一个线程仅能针对一个数据库。5.7中进行了增强,不再一个线程只能针对一个数据库。

使用:

在Slave服务器上停止所有链路的复制

set global slave_parallel_type='logical_clock'; #别一种类型是‘database’即5.6版本中的类型

set global slave_parallel_workers=4;    #设置并发的工作线程数量

start slave;

实际配置:

多线程复制只需要在slave中配置就可以了

show variables like 'slave_parallel%';

stop slave;

set global slave_parallel_type='logical_clock';

set global slave_parallel_workers=4;

start slave;

show processlist;

show slave status \G

视图查看:

use performance_schema

select * from replication_applier_status_by_coordinator;  #以前是空,现在有两条记录,控制器

select * from replication_applier_status_by_worker;   #8行,每行为一个线程

喜欢 (0)or分享 (0)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值