文档章节

mysql 5.7 主从复制

dml124
 dml124
发布于 2018/01/14 01:25
字数 1311
阅读 69
收藏 16

一、原理

    该过程的第一部分就是master记录二进制日志。在每个事务更新数据完成之前,master在二日志记录这些改变。MySQL将事务串行的写入二进制日志,即使事务中的语句都是交叉执行的。在事件写入二进制日志完成后,master通知存储引擎提交事务。 

下一步就是slave将master的binary log拷贝到它自己的中继日志。首先,slave开始一个工作线程——I/O线程。I/O线程在master上打开一个普通的连接,然后开始binlog dump process。Binlog dump process从master的二进制日志中读取事件,如果已经跟上master,它会睡眠并等待master产生新的事件。I/O线程将这些事件写入中继日志。 

SQLslave thread(SQL从线程)处理该过程的最后一步。SQL线程从中继日志读取事件,并重放其中的事件而更新slave的数据,使其与master中的数据一致。只要该线程与I/O线程保持一致,中继日志通常会位于OS的缓存中,所以中继日志的开销很小。 

此外,在master中也有一个工作线程:和其它MySQL的连接一样,slave在master中打开一个连接也会使得master开始一个线程。复制 过程有一个很重要的限制——复制在slave上是串行化的,也就是说master上的并行更新操作不能在slave上并行操作。

(简短描述:主从数据库同步工作原理(流程):

但主库的数据发生修改时,数据更改的记录将写入到主库的二进制文件中,从库此时将会调用一个IO线程读取主库的二进制文件,并与中继日志作对比,并将存在差异的事件写入到中继日志中(当两日志内容事件一致时,IO线程将处于睡眠状态),然后从库再调用SQL线程去读取中继日志,并将刚写入的事件数据放入到从库中以保持主从数据库数据同步。)

二、要求mysql主从的环境要求

    1、互相同步的两台mysql的版本必须保证大版本号一致。比如5.5+和5.6+之间同步数据,5.6的数据同步到5.5就会出现问题。保证大版本号一致很重要。

    2、每台服务器必须开启binlog,不开启binlog则根本无法开始数据同步。

    3、每台服务器必须配置不同的server-id,范围在1到(2^32-1)之间。

        4、要保证防火墙对3306端口的开启,为了学习数据库的主从配置。

     5、保证网络畅通

 

主从系统要保持一致:包括数据库版本,操作系统版本,磁盘IO磁盘容量,网络带宽等。

[root@data02 ~]# cat /etc/redhat-release

CentOS release 6.2 (Final)

[root@data02 ~]#

 

主库master

从库slave

OS系统版本

CentOS release 6.2 (Final)

CentOS release 6.2 (Final)

数据库版本

5.6.12-log

5.6.12-log

磁盘容量

50G

30G

主机ip地址

192.168.52.129

192.168.52.130

端口

3306

3306

内存

1G

1G

服务器类型

虚拟机

虚拟机

三、主服务配置

 1. MySQL的配置文件的位置是在 /etc/my.cnf

     添加

    server_id=

    #指定binlog的生成目录,很多人不是这么写的

    log-bin=/var/lib/mysql-log/mastera

    gtid_mode=on

    enforce_gtid_consistency=1

2.创建binlog目录并授权mysql用户

mkdir /var/lib/mysql-log/mastera

chown mysql . /var/lib/mysql-log/mastera

3.重启mysql服务

service mysqld restart

4.查看binlog是否生成

ls /var/lib/mysql-log/mastera

5.导出主数据库(注:如果两个数据库状态一致即表及数据记录都一样,就不用做5,6这两步了)

mysqldump -uroot -p'密码' -A --single-transaction > /tmp/mysql.all.sql

这个过程会发生报警,因为用了明码。不用担心

6.将mysql.all.sql 拷贝到slave上,可以用scp命令

7.在slave服务器上将导出的mysql.all.sql脚本,导入mysql服务器

mysql -uroot -p'密码'  <  sql备份文件

8.查看slave上是否导入

 

四.从服务器操作

修改my.cnf

1.#设置和master不同的server-id

server-id= 

gtid_mod=on

enforce_git_consistency=1

2.重启mysql服务

service mysqld restart

 

防火墙开启master 服务器的3306端口

centos6.* 开启方式

 

centos7.*的开启方式

[root@localhost ~]# firewall-cmd –add-port=3306/tcp 

[root@localhost ~]# firewall-cmd –permanent –add-port=3306/tcp 

[root@localhost ~]# firewall-cmd –reload success 

五.最后两步

1.登录master授权slave

grant replication slave on  *.*  to ‘用户名’@'slaveip' identified by '密码';

flush privileges;

2.登录slave修改master

change master to master_host='192.168.0.103',master_user='slave1',master_password='123456',master_auto_position=1;

3.slave 上打开复制线程

start slave(停止slave 命令:stop slave)

4.查看slave状态

 show slave status;

查看返回状态找到一下两个字段,

1) Slave_IO_Running: Yes

IO线程状态,必须YES

2) Slave_SQL_Running: Yes

SQL线程状态,必须YES

 

六.这时候就完成了主从复制

 

 

 

    

 

 

 

 

 

 

 

  

 

© 著作权归作者所有

dml124
粉丝 5
博文 89
码字总数 41971
作品 0
海淀
程序员
私信 提问
加载中

评论(0)

mysql 主从复制的 工作原理

mysql 主从复制原理 主从形式 mysql主从复制 灵活 一主一从 主主复制 一主多从---扩展系统读取的性能,因为读是在从库读取的; 多主一从---5.7开始支持 联级复制--- 用途及条件 mysql主从复制...

我不是九爷
2018/07/13
0
0
mysql主从配置实现一主一从读写分离

主从介绍 Mysql主从又叫Replication、AB复制。简单讲就是A与B两台机器做主从后,在A上写数据,另外一台B也会跟着写数据,实现数据实时同步 mysql主从是基于binlog,主上需开启binlog才能进行...

超罗
2019/06/19
0
0
部署MySQL延迟从库的几个好处

导读 MySQL延迟从库的好处多多,你了解吗 MySQL的主从复制(replication)关系,不太严谨的叫法是“同步”或者“主从同步”。实际上在早期,MySQL的主从并不能实现真正的“同步”(sync),而是“...

老叶茶馆
2019/05/10
0
0
完全解决 MySQL 5.7 主从复制的延迟问题

1、问题发现 sysbench使用以下配置对MySQL进行测试 一段时间后查看slave的状态发现延时严重 mysql> show slave statusG 2、原因分析 一个服务器开放N个链接给客户端来连接的, 这样有会有大...

ConfusedSnail
2018/08/02
0
0
MySQL主从延时复制

MySQL的主从复制是实现MySQL大规模集群的基础,其在日常生产环境中被广泛的被应用,而在MySQL5.6开始对MySQL的底层代码不断的重构完善后在MySQL的主从复制取得极大的进步,且在5.7版本引入主...

往事_Jim_遗
2017/11/25
0
0

没有更多内容

加载失败,请刷新页面

加载更多

Hadoop伪分布式环境配置与启动

1. 环境准备 在一台linux机器上,安装好hadoop运行环境,安装方式请查看:HADOOP运行环境搭建 2. 启动HDFS并运行MapReduce程序 2.1. 配置集群 1. 配置:hadoop-env.sh Linux系统中获取JDK的安...

Lancer_Dai
17分钟前
62
0
「网易官方」极客战记(codecombat)攻略-地牢-丛林游戏game-grove

创建你自己的游戏! 简介 创建一个迷宫: game.spawnMaze(1) 将数字 1 更改为不同的数字,您将得到不同的迷宫。 每个相同号码的迷宫总是一样的! 看看示例代码和Spawnables文档,了解您可以在...

极客战记
22分钟前
68
0
找不到默认端点元素

我已将代理添加到VS2008 / .NET 3.5解决方案的Web服务。 构造客户端.NET时,会引发以下错误: 在ServiceModel客户端配置部分中找不到引用合同'IMySOAPWebService'的默认终结点元素。 这可能是...

javail
23分钟前
73
0
Laravel + Serverless Framework 快速创建 CMS 内容管理系统

今天,为大家带来一篇 Laravel + Serverless Framework 的综合实战,里面信息量有点多,大家仔细看哦~ 首先,我来介绍下主要的本地环境吧: Git:不多说,只要会敲代码就应该知道 Node.js:...

腾讯云Serverless
28分钟前
67
0
微信h5页面下拉露出网页来源的解决办法

微信h5页面下拉露出网页来源的解决办法:将document的touchmove事件禁止掉 //禁止页面拖动 document.addEventListener('touchmove', function(e) { e.preventDefault(); }, { pas......

Airship
28分钟前
69
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部