mysql 实例复制,MySQL 5.7复制实例

MySQL复制基础

1.MySQL的复制是异步复制

41d553b897c9

image

2.MySQL复制是基于binlog日志。

存在三种日志格式:

statement ==> BinLog中存储SQL语句,存储日志量是最小的

row ==> 存储event数据,存储日志量大,但是不能很直接的进行读取

mixed ==> 介于row和statment之间,对于不确定的操作使用Row记录,如果每天的数据操作量很大,产生的日志多,可以考虑选择mixed格式

基于日志点复制

1.在Master端建立复制用户

创建用户dba,设置密码为12345:

create user 'dba'@'192.168.0.%' identified by '12345';

授权给用户dba:

grant replication slave on *.* to 'dba'@'192.168.0.%';

2.创建数据库dba,表t,插入数据

create database dba;

use dba;

create table t(

id int,

c1 varchar(10),

primary key(id)

);

insert into t values(1, "aa"),(2, "bb"),(3, "cc");

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

备份Master端数据:

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

在Slave端恢复:

mysql -uroot -p < /tmp/dba.sql

4.使用Change master命令配置复制

change master to

master_host='192.168.0.108',

master_user='dba',

master_password='12345',

master_log_file='mysql-bin.000001',

master_log_pos=154;

配置master_log_file,master_log_pos可以查看备份文件前面部分有记录; 也可以在Master端中使用命令查看:

show master status \G

5.查看slave端状态,开启/停止复制

show slave status \G

start slave

stop slave

注意:

如果查看slave端连接不起,那么注意查看防火墙是否拦截

导致lave_IO_Running 为connecting 的原因主要有以下 3 个方面:

1、网络不通

2、密码不对

3、pos不对

解决步骤:

1、对于第一个问题,一般情况下都是可以排除的,也是最容易排除的。

2、在主库上修改用来复制的用户的密码。

3、 在做chang to 的时候注意log_pos 是否跟此时主机的一样。在主机上 show master status \G

在线把基于日志的复制转变为基于事物的复制

基于事物的复制要比基于日志的复制在数据的完整性更好。

gtid_mode 有四种状态(有序):off off_permissive on_permissive on

先决条件:

1.查询mysql数据库版本,保证集群中所有数据库版本号大于5.7.6

show variables like '%version%'

41d553b897c9

image

2.查询集群中数据库的gtid_mode是否都是off状态

show variables like '%gtid_mode%';

41d553b897c9

image

实现转换步骤:注意查看错误信息 ==> 进入数据目录查看xxxx.err是否有错,没有错才能进入下面操作

1.把主从上强制事物一致性设置为warn,

set @@global.enforce_gtid_consistency=warn

2.把主从上强制事物一致性设置为on

set @@global.enforce_gtid_consistency=on

3.把主从上gtid_mode设置off_permissive

set @@global.gtid_mode=off_permissive

4.把主从上gtid_mode 设置 on_permissve

set @@global.gtid_mode=on_permissive;

5.在从上查看是否还有基于日志的复制操作,只有结果为0才行,若不为0就要等待到所有基于日志的复制完成

show status like 'ongoing_anonymouse_transaction_count';

6.在主从上正式启动基于事物的日志复制

set @@global.gtid_mode=on;

7.在从上重启slave

stop slave

change master to master_auto_position=1

start slave

show slave status \G

41d553b897c9

image

8.记住在my.cnf/my.ini中添加enforce_gtid_consistency=on , gtid_mode=on

41d553b897c9

image

在线把基于事物的复制转变为基于日志的复制

stop slave

change master to master_auto_position=0,master_log_file='file',master_log_pos=position

start slave

set @@global.gtid_mode = on_permissive

set @@global.gtid_mode = off_permissive

select @@global.gtid_owned 查询这个值,只有在所有服务器都是空字符串才能继续

set @@global.gtid_mode=off

同时配置my.cnf 中gtid_mode=off enforce_gtid_consistency=off

多线程复制,在slave端进行所有操作

1.在slave服务器上停止所有链路的复制

stop slave

2.set global slave_parallel_type=’logical_clock’

有两个值database,logical_clock。database是基于数据库的多线程,不实用

3.设置并发执行复制的线程数

set global slave_parallel_workers=4

4.查看设置的变量

show variables like ‘slave_parallel%’

5.启动slave

start slave

主从管理的系统视图

41d553b897c9

image

1.replication_applier_configuration 查看管道名称,以及延迟同步时间

设置延迟1小时同步:

change master to master_delay=3600;

41d553b897c9

image

service_state :复制服务状态

remaining_delay: 距离下次同步的剩余时间,在设置了master_delay才有用

3.replication_applier_status_by_coordinator 查看多线程复制相关的操作4.replication_applier_status_by_worker 记录了复制的线程相关信息

show processlist 可以查看系统中所有线程

5.replication_connection_configuration查询连接配置

41d553b897c9

image

6.replication_connection_status 连接状态

41d553b897c9

image

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值