聊聊Mysql主从同步读写分离配置实现
Hi,各位热爱技术的小伙伴您们好,好久没有写点东西了,今天写点关于mysql主从同步配置的操作日志同大家一起分享。最近自己在全新搭建一个mysql主从同步读写分离数据库简单集群,我讲实际操作步骤整理分享处理,希望对在学习路上的你有所以帮助,当然如果是你是老鸟,写的不好的地方,多多包涵。废话不多说,言归正传,直入主题。
一、背景介绍
Mysql数据库主从同步,数据集群其实大家一点都不陌生,但是实际操作的估计就不一定了。至于为什么要使用主从同步策略,在此我就不必多说了,你懂我知大家晓。说实话原来的项目一直都在用户主从同步读写分离,我并没有实际操作过,都是其他小伙伴在搭建。但是最近一个项目,从服务器环境搭建,部署都必须要自己亲手去做,所以也就借此机会来练一练手。嘿嘿,其实我就是一个菜鸟…
本次的数据库搭建是基于centos7、docker容器部署的。
二、mysql复制原理
原理:
(1)master服务器将数据的改变记录二进制binlog日志,当master上的数据发生改变时,则将其改变写入二进制日志中;
(2)slave服务器会在一定时间间隔内对master二进制日志进行探测其是否发生改变,如果发生改变,则开始一个I/OThread请求master二进制事件
(3)同时主节点为每个I/O线程启动一个dump线程,用于向其发送二进制事件,并保存至从节点本地的中继日志中,从节点将启动SQL线程从中继日志中读取二进制日志,在本地重放,使得其数据和主节点的保持一致,最后I/OThread和SQLThread将进入睡眠状态,等待下一次被唤醒。
也就是说:
从库会生成两个线程,一个I/O线程,一个SQL线程;
I/O线程会去请求主库的binlog,并将得到的binlog写到本地的relay-log(中继日志)文件中;
主库会生成一个log dump线程,用来给从库I/O线程传binlog;
SQL线程,会读取relay log文件中的日志,并解析成sql语句逐一执行;
三、前期配置文件准备
主从同步很关键的一个配置就是my.cnf。由于本次所有服务都是运行在docker容器上,所以在my.cof配置文件,采用在磁盘文件创建对应的文件,在mysql运行时讲相应的配置文件挂载到对应的物理磁盘,方便后期维护。
主从数据库都需要对my.cnf进行配置。
my.cnf在docker容器的相对位置是:/etc/mysql/my.cnf
假设配置文件在物理磁盘的存放位置为:/home/mysql/my.cnf
1、主数据库(Master)my.cnf配置文件
[mysqld] pid-file = /var/run/mysqld/mysqld.pid socket = /var/run/mysqld/mysqld.sock datadir = /var/lib/mysql secure-file-priv= NULL server-id=31 #设置主服务器的ID,可以任意配置但是多个主从之间不能重复 innodb_flush_log_at_trx_commit=2 # 写入磁盘策略 sync_binlog=1 #开启binlog日志同步功能 expire_logs_days=180, # 二进制日志保留天数 log-bin=mysql-bin-1 #binlog日志文件名(可以任意命名) #binlog-do-db=test # 这个表示只同步某个库 (如果没有此项,表示同步所有的库) #binlog-ignore-db=xxxx # 二进制日志中忽略数据库 # Disabling symbolic-links is recommended to prevent assorted security risks symbolic-links=0 # Custom config should go here !includedir /etc/mysql/conf.d/
具体的配置信息,我都做了简单的说明,大家可以根据自己的实际需要进行配置。
2、 从数据库(Slave)my.cnf配置文件
[mysqld] pid-file = /var/run/mysqld/mysqld.pid socket = /var/run/mysqld/mysqld.sock datadir = /var/lib/mysql secure-file-priv= NULL read-only=1 #是否只读,0 代表非只读 1:代表只读 server-id=32 #设置主服务器的ID,可以任意配置但是多个主从之间不能重复 innodb_flush_log_at_trx_commit=2 # sync_binlog=1 #开启binlog日志同步功能 expire_logs_days=180, # 二进制日志保留天数 log-bin=mysql-bin-1 #binlog日志文件名(可以任意命名) # binlog-do-db=test # 这个表示只同步某个库 (如果没有此项,表示同步所有的库) # 还有一个参数是指定不同步哪些库,这里不再赘述 # Disabling symbolic-links is recommended to prevent assorted security risks symbolic-links=0 # Custom config should go here !includedir /etc/mysql/conf.d/
具体的配置信息,其实和主大同小异。read-only=1 将从数据库作为读库处理
四、主从数据库容器运行
1、 创建运行主数据库容器:
docker run --name mysqlMasterMic-d -p 3306:3306 -e MYSQL_ROOT_PASSWORD=123456 -v /home/mysql/data:/var/lib/mysql -v /home/mysql/my.cnf:/etc/mysql/my.cnf mysql
2、 创建运行从数据库容器:
docker run --name mysqlSlaveMic-d -p 3306:3306 -e MYSQL_ROOT_PASSWORD=123456 -v /home/mysql/data:/var/lib/mysql -v /home/mysql/my.cnf:/etc/mysql/my.cnf mysql
五、主从数据同步配置
1、主数据库设置
// 第一步:进入master容器 docker exec -it mysqlMasterMic bash // 第二步:登录到mysql mysql -u root –p // 在输入框输入对应的root密码:123456 // 第三步:创建数据同步登录账号 假设创建账号为:slavesynchro。同时需要赋值上:REPLICATION SLAVE 权限 改账号主要用于从数据库访问主数据库使用。 CREATE USER 'slavesynchro'@ '%' IDENTIFIED BY '123456'; GRANT REPLICATION SLAVE ON *.* to 'slavesynchro'@'%' identified by '123456'; // 第四步:查看主数据库状态 查看主数据库状态,其主要目的是查看数据库的日志文件名称和日志记录行号,从数据库在配置同步开始节点就是来之此处: show master status
2、从数据库设置
// 第一步:进入slaver容器 docker exec -it mysqlSlaveMic bash // 第二步:登录到mysql mysql -u root –p // 在输入框输入对应的root密码:123456 // 第三步:设置主数据库连接 Change master to master_host='主数据地址',master_user=' slavesynchro ',master_password='123456!',get_master_public_key=1,master_log_file='mysql-bin-1.000004 ',master_log_pos= 209210719,master_port=3306; 参数说明: master_host:主数据库IP地址 master_user:主数据库连接用户名 master_password:主数据量连接密码 master_port:主数据端口 master_log_file:开始同步的主数据库日志名称,主数据库show master status 队列的Flie列数据 master_log_pos:开始同步的主数据库日志开始位置,主数据库show master status 队列的Position列数据 // 第四步:启动主从同步 start slave;
// 第五步:查看主从同步状态 show slave status\G; 只有Slave_IO_Running: Yes Slave_SQL_Running: Yes 都为yes,才代表主从同步正常运行,否则都需要根据实际情况做对于的调整处理。
六、sql同步执行失败后不在同步处理
主从同步在实际使用过程中,如果处理的不好,可能会导致同步失败,比如:从数据库也在做新增操作,如果有自增主键约束,那么就可能导致同步失败。因为主从同步最终目的是实现数据的一致性,所有当某一项同步失败,那么就不会再做后同步处理。那么如果出现同步失败后又该如何处理呢?
在实际处理过程中,大概有两种处理方式:
1、主从数据差异小,并且不关最终数据的一致性,那么可以设置直接跳过同步出差的日志,继续同步后续数据,具体操作命令如下:
第一步:停止主从同步
stop slave;
第二步:跳过错误的日志位置,继续后续同步,后面的数字可变
set global sql_slave_skip_counter =1;
第三步:继续开启主从同步
start slave;
2、如果主从数据差异大,并且要求主从数据完全一致,那么需要:重新做主从,完全同步。
第一步:删除从数据库,讲主数据库备份到从数据库(确保主从数据完全一致)
第二步:按照上面的流程,重新配置主从同步
七、自我一些总结
1、 主从同步数据库,一定要注意读写分离。从数据库做读操作,不要做写操作,最好直接只给从数据库读权限,不给写权限
2、 数据库设置主从同步账号时,最好创建专门的账号用来做主从同步
END
为了更高的交流,欢迎大家关注我的公众号,扫描下面二维码即可关注,谢谢:
聊聊Mysql主从同步读写分离配置实现的更多相关文章
- 使用docker 实现MySQL主从同步/读写分离
1. 利用 docker 实现 mysql 主从同步 / 读写分离 为了保证数据的完整和安全,mysql 设计了主从同步,一个挂掉还可以用另个.最近重构论坛,想来改成主从吧.担心失误,就先拿 dock ...
- mysql 主从同步-读写分离
主从同步与读写分离测试 一. 实验环境(主从同步) Master centos 7.3 192.168.138.13 Slave ...
- mysql主从同步--读写分离。
1.mysql 安装参考 https://www.cnblogs.com/ttzzyy/p/9063737.html 2. 主mysql,从mysql 指定配置文件启动 mysqld --defaul ...
- MySQL主从及读写分离配置
<<MySQL主从又叫做Replication.AB复制.简单讲就是A和B两台机器做主从后,在A上写数据,B也会跟着写数据,两者数据实时同步>> MySQL主从是基于binlo ...
- 关系型数据库MySQL主从同步-读写分离
1.环境准备 我的数据库版本是MySQL 5.6 MySQL主机至少两个实例,可以是多实例,可以是多台主机 关闭selinux,关闭防火墙等基础优化 2.安装 yum -y install make ...
- mysql数据库主从同步读写分离(一)主从同步
1.mysql数据库主从同步读写分离 1.1.主要解决的生产问题 1.2.原理 a.为什么需要读写分离? 一台服务器满足不了访问需要.数据的访问基本都是2-8原则. b.怎么做? 不往从服务器去写了 ...
- Docker容器启动Mysql,Docker实现Mysql主从,读写分离
Docker容器启动Mysql,Docker实现Mysql主从,读写分离 一.Docker文件编排 二.配置主从复制 2.1 配置master 2.2 配置slave 三.验证主从复制 3.1 mas ...
- mysql 主从 同步原理及配置
一.在mssql 里头实现同步镜像,只能主库用而镜像库不能同时用,而mysql 主从同步可以实现 数据库的读写分离,主库负责 update insert delete ,从库负责select 这样一来 ...
- docker-compose.yml样例(mysql主从+mycat读写分离)
Docker-compose.yml文件示例 1.mysql主从复制的docker-compose.yml文件 # cat docker-compose.yml version: '2' # 这个ve ...
随机推荐
- mybatis 学习教程
https://www.cnblogs.com/ashleyboy/category/1246107.html
- 增值税发票税控开票软件助手Excel、ERP、SAP导入开票接口进行批量开票操作手册
写这遍文章的目的是方便以后个人使用,做个笔记记录. 首先我来说一下它是做什么用的,它的主要作用是把用户的开票数据,Excel数据.ERP 系统.SAP导入到增值税发票税控开票软件中,可用航信盘.百旺盘 ...
- 这一次搞懂Spring的Bean实例化原理
文章目录 前言 正文 环境准备 两个重要的Processor 注册BeanPostProcessor对象 Bean对象的创建 createBeanInstance addSingletonFactor ...
- hdoj3791
题目: Problem Description 判断两序列是否为同一二叉搜索树序列 Input 开始一个数n,(1<=n<=20) 表示有n个需要判断,n= 0 的时候输入结束.接下去 ...
- Jmeter接口测试,往MySQL数据库写数据时,中文显示???
调Jmeter接口测试,请求字段输入中文,查看数据库插入情况, 发现数据库显示 ???
- 一小时彻底搞懂RabbitMQ
windows上面安装rabbitmq-server-3.7.4.exe 首先需要安装otp_win64_20.3.exe 步骤1:安装Erlang RabbitMQ 它依赖于Erlang,需要先安装 ...
- vwware虚拟机网卡的三种模式
这里在虚拟机中必须要保证右上角的两个勾选上 三种模式:简单一个比如宿主机器直接连接路由器上网,那虚拟机和宿主机器是一定的可以上外网,相当于虚拟机直接连接在路由器上面,虚拟机需要配置可以上外网的IP地址 ...
- Java 将PDF/XPS转为Word/html /SVG/PS/PCL/PNG、PDF和XPS互转(基于Spire.Cloud.SDK for Java)
Spire.Cloud.SDK for Java提供了接口PdfConvertApi通过convert()方法将PDF文档以及XPS文档转为指定文档格式,如转PDF为Word(支持Docx.Doc). ...
- 个人作业——软件工程实践总结&个人技术博客
一. 回望 (1)对比开篇博客你对课程目标和期待,"希望通过实践锻炼,增强软件工程专业的能力和就业竞争力",对比目前的所学所练所得,在哪些方面达到了你的期待和目标,哪些方面还存在哪 ...
- caffe训练数据流程
cifar10训练实例 1. 下载数据 # sudo sh data/cifar10/get_cifar10.sh 2. 转换数据格式为lmdb # sudo sh examples/cifar10/ ...