MySQL5.7 主从复制配置
一、主从复制原理
MySQL
主从复制是一个异步
的复制
过程,主库
发送更新事件
到从库
,从库
读取更新记录
,并执行
更新记录
,使得从库
的内容与主库保持一致
。每一个主从复制
的连接,都有三个线程
。拥有多个从库
的主库
为每一个连接
到主库
的从库
创建一个 log dump
输出线程,每一个从库
都有它自己的 I/O
线程和 SQL
线程。
步骤:
1.主库
会将所有
的更新
记录保存到 Binarylog
文件。
2.每当有从库
连接到主库
的时候,主库
都会创建一个 log dump
线程发送 Binarylog
文件到从库
。
3.当从库
复制开始的时候,从库
就会创建两个线程
进行处理,一个 I/O
线程,一个 SQL
线程。
4.I/O
线程去请求主库
的 Binarylog
文件,并将得到的 Binarylog
文件写到 Relaylog
文件中。
5.SQL
线程会读取 Relaylog
文件中的日志,并解析
成具体操作
,来实现主从
的操作一致
,而最终数据一致。
二、工具
VMware版本:12.0.0
Ubuntu版本:16.4
MySQL版本 :5.7.18
Master 服务器:192.168.128.1
Slave 服务器 :192.168.128.3
三、准备工作
1.安装 MySQL5.7 详见此处 ,我这里的配置是,master 是安装在本地windows环境下的mysql,slave是安装在虚拟机linux下的mysql
2.如果从服务器
是克隆
的主服务器
,则修改 auto.cnf
文件中 server-uuid
值,不然后面主从复制
会报 1593
错误,修改完记得重启MySQL
3.关闭主、从
服务器防火墙
:
root@ubuntu:/etc# ufw disable
4.修改主从配置
文件(my.cnf):
## 192.168.128.1(master)
#打开日志
log_bin=mysql-bin
#这个id不要与从数据库id一样,改id一般取当前服务器ip地址最后一位
server_id=
binlog-do-db=cpa #要给从机同步的库
binlog-ignore-db=mysql #不要给从机同步的库
#自动清理1天前的log文件
expire_logs_days= ## 192.168.128.3(slave)
log_bin=mysql-bin
server_id=
重启
主从 MySQL
注
: server_id
必须唯一。
四、主从复制
1.master
创建授权用户:192.168.128.1(master)
:
## 创建 test 用户,指定该用户只能在主库 192.168.128.3 上使用 MyPass1! 密码登录
mysql> create user 'test'@'192.168.128.3' identified by 'MyPass1!'; ## 为 test 用户赋予 REPLICATION SLAVE 权限。
mysql> grant replication slave on *.* to 'test'@'192.168.128.3'; ## 查看用户
mysql> select user,host from mysql.user; ## 查看 master 状态
mysql> show master status;
注
:
这里的 mysql-bin.000001
和 Position
值 slave
配置时需要用到。
2.将 master
中现有的数据信息导出
:
$ mysqldump -u root -p --all-databases --master-data > all.sql
3.将 all.sql
发送到 slave
服务器 tmp
目录下:
$ scp all.sql root@192.168.78.130:/tmp
4.slave
导入 master
数据,使 master-slave
数据保持一致
:
$ mysql -uroot -p < all.sql
注:2,3,4步主要作用是使主从数据库的数据保持一致,这里如果不会使用命令导出导入sql文件的话,可以借助工具实现,如Navicat
5.使 slave
与 master
建立连接,从而同步:
# 在slave上操作
mysql> change master to
-> master_host='192.168.128.1',
-> master_user='test',
-> master_password='MyPass1!',
-> master_log_file='mysql-bin.000001',
-> master_log_pos=; mysql> start slave; mysql> show slave status \G
注
:
master_log_file
和master_log_pos
值为主库
上面执行show master status
得到如果
Slave_IO_Running
和Slave_SQL_Running
都为Yes
,说明配置成功
如果其中一项不为
Yes
,查看Last_IO_Errno
错误码和错误信息
,或者查看MySQL
日志信息并查找对应问题
五、主从配置检验
master
插入一条数据,slave
查看是否成功,
master
删除一条数据,slave
查看是否成功,
六、监控主从同步状态
在从库机器上,执行 show slave status,查看Seconds_Behind_Master值,代表主从同步从库落后主库的时间,单位为秒,
若主从同步无延迟,这个值为0。Mysql主从延迟一个重要的原因之一是主从复制是单线程串行执行。 那如何为避免或解决主从延迟?我们做了如下一些优化: 优化Mysql参数,比如增大innodb_buffer_pool_size,让更多操作在Mysql内存中完成,减少磁盘操作。 使用高性能CPU主机 数据库使用物理主机,避免使用虚拟云主机,提升IO性能 使用SSD磁盘,提升IO性能。SSD的随机IO性能约是SATA硬盘的10倍。 业务代码优化,将实时性要求高的某些操作,使用主库做读操作
七、主从配置恢复
今天测试的时候发现,主从之间不进行复制了,因为环境是window和虚拟机(中间肯定关机了);
然后在从数据库上使用命令:
mysql> start slave;
Query OK, rows affected, warning (0.02 sec)
启动后,发现还是不能同步数据
使用命令查看从数据库状态
mysql> show slave status \G;
发现其中的
Slave_IO_Running:No
之前也说了有两项参数十分重要,就包括这项参数,它的值为NO,肯定不能同步
经过一番折腾找到解决方法:
三个命令
mysql> start slave;
Query OK, rows affected, warning (0.02 sec) mysql> stop slave;
Query OK, rows affected (0.78 sec) mysql> reset slave;
Query OK, rows affected (0.68 sec) mysql> start slave;
Query OK, rows affected (0.70 sec)
再次查看状态,发现两项都为YES了,测试同步也正常,
当然这种解决方法,局限性肯定非常大,不过再遇到此类问题时,不妨先试试这种方法,如果可以解决那更好,不能解决在看mysql日志去解决
MySQL5.7 主从复制配置的更多相关文章
- centos 7 Mysql5.7 主从复制配置
1.环境 Centos 7 Mysql 5.7 Master 192.168.1.71 Slave01 192.168.1.72 2.分别配置master,slave01 # vi /etc/my. ...
- mysql5.7主从复制配置——读写分离实现
为什么使用主从架构?1.实现服务器负载均衡:2.通过复制实现数据的异地备份:3.提高数据库系统的可用性:4.可以分库[垂直拆分],分表[水平拆分]: 主从配置的前提条件1.MySQL版本一致:2.My ...
- MySQL5.7主从复制配置
1 my.cnf文件 配置 binlog_format = ROW log_bin_trust_function_creators=1 log-error = /usr/local/mysql/dat ...
- mysql5.7在windows下面的主从复制配置
目标:自动同步Master 服务器上面的Demo数据库到Slave 服务器的Demo数据库中. 对于一些操作系统比较强而使用频率又不高的东西,往往好久不去弄就忘记了,所以要经常记录起来,方便日后查阅. ...
- MySQL5.7 Replication主从复制配置教程
最近配置mysql5.7主从复制的时候碰到了些问题,老老实实按老版本的步骤配置会有错误,后来自己查看了官方文档,才解决了问题,在这里总结一下5.7的配置步骤, 大体步骤跟老版本的还是一样的,只是有一些 ...
- mysql5.7.26做主从复制配置
一.首先两台服务器安装好mysql数据库环境 参照linux rpm方式安装mysql5.1 https://www.cnblogs.com/sky-cheng/p/10564604.html 二.主 ...
- Docker安装mysql5.7并且配置主从复制
Docker安装mysql5.7并且配置主从复制 一.拉取mysql镜像 二.创建文件docker.cnf 2.1 mysql主机(192.168.21.55:3307) 2.1.1 创建文件夹 2. ...
- MySQL5.6主从复制最佳实践
MySQL5.6 主从复制的配置 环境 操作系统:CentOS-6.6-x86_64 MySQL 版本:mysql-5.6.26.tar.gz 主节点 IP:192.168.31.57 ...
- mysql5.7 主从复制的正常切换【转】
目前环境如下: master server IP:172.17.61.131 slave server IP:172.17.61.132 mysql version: mysql-5.7.21-lin ...
随机推荐
- 并发队列ConcurrentLinkedQueue、阻塞队列AraayBlockingQueue、阻塞队列LinkedBlockingQueue 区别和使用场景总结
三者区别与联系: 联系,三者 都是线程安全的.区别,就是 并发 和 阻塞,前者为并发队列,因为采用cas算法,所以能够高并发的处理:后2者采用锁机制,所以是阻塞的.注意点就是前者由于采用cas算 ...
- makefile 中的符号替换($@、$^、$<、$?)
Makefile $@, $^, $< $@ 表示目标文件$^ 表示所有的依赖文件$< 表示第一个依赖文件$? 表示比目标还要新的依赖文件列表 如一个目录下有如下文件: $ ls ...
- Selenium UI自动化测试 Selenium Automatic Testing
https://www.cnblogs.com/sunada2005/archive/2013/12/22/3486314.html UI Automatic Testing 1. 什么样的项目适合自 ...
- Java并发编程:Callable、Future和FutureTask(转)
Java并发编程:Callable.Future和FutureTask 在前面的文章中我们讲述了创建线程的2种方式,一种是直接继承Thread,另外一种就是实现Runnable接口. 这2种方式都有一 ...
- 查找SQL Server 自增ID值不连续记录
在很多的时候,我们会在数据库的表中设置一个字段:ID,这个ID是一个IDENTITY,也就是说这是一个自增ID.当并发量很大并且这个字段不是主键的时候,就有可能会让这个值重复:或者在某些情况(例如插入 ...
- Selenium库的使用
一.什么是Selenium selenium 是一套完整的web应用程序测试系统,包含了测试的录制(selenium IDE),编写及运行(Selenium Remote Control)和测试的并行 ...
- jQuery.extend()意义及用途
一.意义 用于将一个或多个对象的内容合并到目标对象 二.用法: $.extend( [deep ], target, object1 [, objectN ] ) 注意: 1. 如果只为$.exten ...
- iOS进阶_Socket(Socket简介&代码演练)
网络通讯三要素 TCP & UDP 三次握手 断开连接的四次握手 Socket套接字 了解了上面的概念,我们开始演练一下Socket #import "ViewController. ...
- web前端设计规范
hi,这里写出一点自己对web产品开发的一点粗浅的规范认识,一切为了敏捷开发哈哈. 1.流程. (1) 当产品给出原型和产品文档. (2)设计师更据原型,开始设计产品的效果图. (3)设计师设计完毕后 ...
- springboot入门(一)--快速搭建一个springboot框架
原文出处 前言在开始之前先简单介绍一下springboot,springboot作为一个微框架,它本身并不提供Spring框架的核心特性以及扩展功能,只是用于快速.敏捷地开发新一代基于Spring框架 ...