MySQL主从复制集群搭建—binlog二进制文件方式

老哥絮叨

上篇文章咱们大体介绍了什么是MySQL主从复制,主从复制的几种集群架构图大概都有哪几种,今天咱们就来说讲如何实现MySQL集群的搭建。主从复制有两种方式能够实现,binlogGTID,这期咱们先经过binlog方式来实现,下篇咱们来说binlog的原理,和注意事项。mysql

大赞点起来,在看刷起来。若是你以为经过老哥的文章能学到一些知识,请把老哥推荐给你的朋友。分享是一件快乐的事,咱们一块儿来玩Java程序员

一主一从集群搭建

binlog 简介

Mysql中有一个binlog二进制日志,这个日志会记录下主服务器全部修改了的SQL语句,从服务器把主服务器上的binlog二进制日志,在指定的位置开始复制主服务器全部修改的语句,在从服务器上执行一遍。web

简而言之就是,主服务器会把create、update、delete语句都记录到一个二进制文件中(binlog),从服务器读取这个文件,执行一遍文件中记录的create、update、delete语句。从而实现主从数据同步。spring

准备工做

  • 三台服务器:192.168.216.1十一、192.168.216.22二、192.168.216.333
  • 主从和主主咱们用 111 和 222 两台机器,111 位主,222 位从。主主时两台机器都为主。双主多从时,333为从
  • 服务器环境:采用 Windows 的,由于大多数小伙伴都是用 Windows 系统,方便你们学习,真实企业中用 Linux。
  • 三台机器分别装好 MySQL 数据库,并能互相 ping 通。

配置主从库 my.ini 或者 my.cnf 文件

my.ini是Windows系统的,my.cnf是Linux系统的,咱们这期主要以 Windows 系统为例sql

  • 在 111 和 222 的 my.ini 中的[mysqld]节点下配置
    • server-id = 惟一ID:主服务器惟一 ID,通常设置为机器 IP 地址后三位
    • log-bin = 二进制日志文件存放路径:这个是启动并记录 binlog 日志
    • log-err = 错误日志路径(可选):启动错误日志
    • read-only = 0:0是读写都行(主库),1是只读(从库)
    • binlog-lgnore-db= 数据库名(可选):设置不要主从复制的数据库
    • binlog-do-db = 数据库名(可选):须要复制的数据库名

111 主库建受权用户给 222 从库

当主库和从库都配置完 my.ini 文件以后,还须要主库创建一个受权用户,让从库能经过这个用户登陆到主库上。数据库

  • 语法
111主库执行:
GRANT REPLICATION SLAVE ON *.* TO '用户名'@'从机IP' IDENTIFIED BY '密码';(创建受权用户) FLUSH PRIVILEGES;(刷新MySQL的系统权限相关表) 复制代码
  • 在从机上试试能否链接上主机
222从库执行:
mysql -h 主机IP -usally -pilovesally 复制代码
  • 若是链接失败,看看是否是防火墙的缘由,配置防火墙的 IP 规则

开始主从复制

  • 查看 master 111 主机状态
show master status;
复制代码

这里主要看FilePosition两个参数,File表明从哪一个日志文件里同步数据,Position表明从这个文件的什么位置开始同步数据,binlog-do-db 和 binlog-lgnore-db 意思为同步哪几个数据库和不一样步哪几个数据库。服务器

  • 从库登陆主库设置同步数据文件

若是以前作过同步数据,那么请先中止(stop slave;),不然会报错。微信

222执行:
MASTER_HOST='主机IP', MASTER_USER='主机用户名', MASTER_PASSWORD='主机密码', MASTER_LOG_FILE='File名字', MASTER_LOG_POS=Position数字; 复制代码
  • 启动从库复制功能
start slave;
复制代码
  • 查看从库同步状态
show slave status\G;
复制代码

这两个参数都是 YES,说明同步成功!这时候能够插入一些新数据,试试从库能不能同步这些数据!架构

主主复制集群搭建

上面介绍了主从复制的实现方法,咱们在主从复制的基础上介绍主主复制(只须要把 111 也变成 222 的从机),把上面讲的222从库改为主库,实现111222两个库互为主从,不懂的同窗能够看看上篇文章的主主复制架构图。编辑器

从库转主库

  • 将上面 222从库变成主库,在222上执行以下语句,注意此次的从机 IP 是 111的 IP,由于要互为主备
GRANT REPLICATION SLAVE ON *.* TO '用户名'@'从机IP' IDENTIFIED BY '密码';(创建受权用户)
FLUSH PRIVILEGES;(刷新MySQL的系统权限相关表) 复制代码

配置两个主主数据库 my.ini

  • 在[mysqld]下配置以下参数
auto_increment_increment=2   #步长值auto_imcrement。通常有n台主MySQL就填n
auto_increment_offset=1 #起始值。通常填第n台主MySQL 复制代码

111 同步 222 数据

  • 查看 master 222 主机状态
show master status;
复制代码
  • 111设置同步 222数据文件

若是以前作过同步数据,那么请先中止(stop slave;),不然会报错。

MASTER_HOST='主机IP',
MASTER_USER='主机用户名', MASTER_PASSWORD='主机密码', MASTER_LOG_FILE='File名字', MASTER_LOG_POS=Position数字; 复制代码
  • 查看 111库同步状态
show slave status\G;
复制代码

这两个参数都是 YES,说明同步成功!这时候能够插入一些新数据,看看111222两个库能不能互相同步数据。

双主多从集群搭建

咱们在上面双主集群的基础上,建立双主多从集群,这时候333机器就该上场了。由于111222机器都是主,那么333机器做为从机,随便挂靠在其中一个主机上即可。咱们这里选111吧。

步骤和第一个主从复制集群搭建的同样,按照上面的操做便可。

当咱们作好全部操做以后,在111主机上新增数据进行测试,发现222333均已同步数据。可是在222新增数据测试时,会发现111同步了,可是333并无同步。由于333是挂在111下的从库,全部222主机新增数据的时候,333并无同步222的数据,这显然是不行的。解决方案很简单,在两台主机 111 和 222 的配置文件里都加上以下配置,重启便可。

log-slave-updates=on
复制代码

从库做为其余从库的主库时,必须添加这个参数才能生效。111222互为对方的从库,333111的从库,因此111222要加上这个参数,你们好好理解一下这个逻辑。

老哥结语

MySQL主从复制,是实现高性能,高可用MySQL的基石,因此必定要会这个知识,才能进一步往下深刻学习MySQL,跟紧老哥的脚步,咱们下篇文章讲讲主从复制的原理。

IT 老哥

一个在大厂作高级Java开发的程序猿

关注微信公众号:IT 老哥

回复:Java 全套教程,便可领取:Java 基础、Java web、JavaEE 所有的教程,包括 spring boot 等

回复:简历模板,便可获取 100 份精美简历

回复:Java 学习路线,便可获取最新最全的一份学习路线图

回复:Java 电子书,便可领取 13 本顶级程序员必读书籍

本文使用 mdnice 排版

相关文章
相关标签/搜索