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、主数据库(Mastermy.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、 从数据库(Slavemy.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主从同步读写分离配置实现的更多相关文章

  1. 使用docker 实现MySQL主从同步/读写分离

    1. 利用 docker 实现 mysql 主从同步 / 读写分离 为了保证数据的完整和安全,mysql 设计了主从同步,一个挂掉还可以用另个.最近重构论坛,想来改成主从吧.担心失误,就先拿 dock ...

  2. mysql 主从同步-读写分离

    主从同步与读写分离测试 一.  实验环境(主从同步) Master                   centos 7.3              192.168.138.13 Slave     ...

  3. mysql主从同步--读写分离。

    1.mysql 安装参考 https://www.cnblogs.com/ttzzyy/p/9063737.html 2. 主mysql,从mysql 指定配置文件启动 mysqld --defaul ...

  4. MySQL主从及读写分离配置

    <<MySQL主从又叫做Replication.AB复制.简单讲就是A和B两台机器做主从后,在A上写数据,B也会跟着写数据,两者数据实时同步>> MySQL主从是基于binlo ...

  5. 关系型数据库MySQL主从同步-读写分离

    1.环境准备 我的数据库版本是MySQL 5.6 MySQL主机至少两个实例,可以是多实例,可以是多台主机 关闭selinux,关闭防火墙等基础优化 2.安装 yum -y install make ...

  6. mysql数据库主从同步读写分离(一)主从同步

    1.mysql数据库主从同步读写分离 1.1.主要解决的生产问题 1.2.原理 a.为什么需要读写分离? 一台服务器满足不了访问需要.数据的访问基本都是2-8原则. b.怎么做?  不往从服务器去写了 ...

  7. Docker容器启动Mysql,Docker实现Mysql主从,读写分离

    Docker容器启动Mysql,Docker实现Mysql主从,读写分离 一.Docker文件编排 二.配置主从复制 2.1 配置master 2.2 配置slave 三.验证主从复制 3.1 mas ...

  8. mysql 主从 同步原理及配置

    一.在mssql 里头实现同步镜像,只能主库用而镜像库不能同时用,而mysql 主从同步可以实现 数据库的读写分离,主库负责 update insert delete ,从库负责select 这样一来 ...

  9. docker-compose.yml样例(mysql主从+mycat读写分离)

    Docker-compose.yml文件示例 1.mysql主从复制的docker-compose.yml文件 # cat docker-compose.yml version: '2' # 这个ve ...

随机推荐

  1. mybatis 学习教程

    https://www.cnblogs.com/ashleyboy/category/1246107.html

  2. 增值税发票税控开票软件助手Excel、ERP、SAP导入开票接口进行批量开票操作手册

    写这遍文章的目的是方便以后个人使用,做个笔记记录. 首先我来说一下它是做什么用的,它的主要作用是把用户的开票数据,Excel数据.ERP 系统.SAP导入到增值税发票税控开票软件中,可用航信盘.百旺盘 ...

  3. 这一次搞懂Spring的Bean实例化原理

    文章目录 前言 正文 环境准备 两个重要的Processor 注册BeanPostProcessor对象 Bean对象的创建 createBeanInstance addSingletonFactor ...

  4. hdoj3791

    题目: Problem Description 判断两序列是否为同一二叉搜索树序列   Input 开始一个数n,(1<=n<=20) 表示有n个需要判断,n= 0 的时候输入结束.接下去 ...

  5. Jmeter接口测试,往MySQL数据库写数据时,中文显示???

    调Jmeter接口测试,请求字段输入中文,查看数据库插入情况, 发现数据库显示    ???

  6. 一小时彻底搞懂RabbitMQ

    windows上面安装rabbitmq-server-3.7.4.exe 首先需要安装otp_win64_20.3.exe 步骤1:安装Erlang RabbitMQ 它依赖于Erlang,需要先安装 ...

  7. vwware虚拟机网卡的三种模式

    这里在虚拟机中必须要保证右上角的两个勾选上 三种模式:简单一个比如宿主机器直接连接路由器上网,那虚拟机和宿主机器是一定的可以上外网,相当于虚拟机直接连接在路由器上面,虚拟机需要配置可以上外网的IP地址 ...

  8. 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). ...

  9. 个人作业——软件工程实践总结&个人技术博客

    一. 回望 (1)对比开篇博客你对课程目标和期待,"希望通过实践锻炼,增强软件工程专业的能力和就业竞争力",对比目前的所学所练所得,在哪些方面达到了你的期待和目标,哪些方面还存在哪 ...

  10. caffe训练数据流程

    cifar10训练实例 1. 下载数据 # sudo sh data/cifar10/get_cifar10.sh 2. 转换数据格式为lmdb # sudo sh examples/cifar10/ ...