这篇是幕课网-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

第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)

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

  1. linux mysql 5.7 配置_linux下mysql5.7的安装配置

    mysql官方下载地址: https://dev.mysql.com/downloads/mysql/ 安装步骤: # https://cdn.mysql.com//Downloads/MySQL-5 ...

  2. 5.7.24mysql 配置安卓,安卓按键精灵连接MySQL全面解析Windows下安装 mysql5.7的方法

    关于在windows下安装mysql 5.7 •要注意的新坑: 5.7版本安装后ROOT账号是有默认的密码的,这个密码在windows下可以在mysql.ini配置文件指定的data文件夹下面,那个为 ...

  3. mysql 多实例 独立配置文件_三、安装配置多实例MYSQL5.6-多独立配置文件方法

    三.安装配置多实例MYSQL5.6-多独立配置文件方法 1.准备工作 检查操作系统版本.内核版本.selinux是否关闭.防火墙策略.IP地址.主机名配置.host表配置.yum配置 上传cmake. ...

  4. centos7mimi mysql 安装_CentOS7 64位下MySQL5.7安装与配置(YUM)

    安装环境:CentOS7 64位 MINI版,安装MySQL5.7 1.配置YUM源 在MySQL官网中下载YUM源rpm安装包:http://dev.mysql.com/downloads/repo ...

  5. OPC服务器软件Kepware Kepserver实现与Mysql数据库连接交互(一)MySQL5.5数据库Kepserver软件介绍安装配置

    目录 一.数据库MySQL数据库简介 二.OPC服务器软件Kepserver软件介绍 三.MySQL5.5数据库安装配置 3.1官网下载MySQL安装包 3.2安装MySQL5.5 3.3配置MySQ ...

  6. linux安装多个mysql数据库_linux下多个mysql5.7.19(tar.gz)安装图文教程

    初级第一次在Linux下安装MySQL-5.7.19版本教程请看上一篇,如果已经会安装了,那么请看这篇linux下安装多个mysql-5.7.19 环境:centos 6.5 1-下载 2-跳过登陆 ...

  7. MySQL之MHA高可用配置及故障切换(理论加实战详细部署步骤)

    MySQL之MHA高可用配置及故障切换(理论加实战详细部署步骤) 文章目录 一.MHA介绍 (一).什么是MHA (二).MHA 的组成 (三).MHA 的特点 二.搭建 MySQL MHA (一). ...

  8. yum安装mysql后密码_Centos7:yum安装MySQL5.7后如何设置root密码

    Centos下安装软件的方式很简单,只需要通过yum install xxx命令即可.第一步当然检查是否有mysql的yum源,命令:yum list|grep mysql-community[主要还 ...

  9. CentOS7.3下配置 Apache2.4 + MySQL5.7 + PHP7.1.8

    本篇文章讲解的是在CentOS7.3下配置 Apache2.4 + MySQL5.7 + PHP7.1.8 一.Apache 1.查看httpd包是否可用 yum list | grep httpd ...

最新文章

  1. 正点原子探索者原理图_正点原子【STM32-F407探索者】第六章 跑马灯实验
  2. 深入理解Binder机制4-bindService过程分析
  3. SSM关联码表的多个字段显示中文流程以及sql写法
  4. Win7 修改默认Administrator 密码方法
  5. 操作系统 cpu调度_CPU调度| 操作系统
  6. 让我们拭目以待的5z20
  7. 11.8 Ext.util.Event.fire(): Attempting to fire “click“ event on destroyed 问题分析与解决
  8. YII框架截取字符串长度
  9. 一篇真正教会你开发移动端页面的文章(二)
  10. Thrift 对象序列化、反序列化-字节数组分析
  11. 继续解决YUI3 Panel的yui3-panel-hidden样式带来的问题
  12. Linux开发(驱动应用)学习路线规划
  13. 淘口令api权限申请,赚取佣金第一步
  14. QML Label/Text 文本居中显示
  15. 小众软件(持续更新)
  16. 动态创建多个echarts图表
  17. 常见网络协议总结(五层自顶向下)
  18. 【转】从一个App跳转到另一APP
  19. 主机电源全是黑线怎么短接_电脑电源故障 绿线和黑线短接后风扇转一下就停了。...
  20. c数组(结构体数组)定义与初始化

热门文章

  1. oracle双机python连接_Python连接Oracle
  2. 网络爬虫--SAX处理xml
  3. 分布式加载数据训练神经网络
  4. python for循环习题
  5. 高可用、可扩展、稳定和安全的消息队列ActiveMQ特点分析
  6. Mysql8 查询事务隔离级别
  7. 平面上给定n条线段,找出一个点,使这个点到这n条线段的距离和最小。
  8. C# HashTable的用法总结
  9. swift 之SnapKit 动画
  10. 阿里移动电商背后的技术航母