Java基础、中级、高级、架构面试资料

手把手教你搭建 MySQL 主从复制经典架构

SQL herman 1712浏览
公告:“业余草”微信公众号提供免费CSDN下载服务(只下Java资源),关注业余草微信公众号,添加作者微信:xttblog2,发送下载链接帮助你免费下载!
本博客日IP超过2000,PV 3000 左右,急需赞助商。
极客时间所有课程通过我的二维码购买后返现24元微信红包,请加博主新的微信号:xttblog2,之前的微信号好友位已满,备注:返现
受密码保护的文章请关注“业余草”公众号,回复关键字“0”获得密码
所有面试题(java、前端、数据库、springboot等)一网打尽,请关注文末小程序
视频教程免费领
腾讯云】1核2G5M轻量应用服务器50元首年,高性价比,助您轻松上云

前面两周,我写了一篇手把手教你搭建 Java 读写分离项目。今天,我们抽个时间把 MySQL 的主从复制架构搭建出来吧。要不然,大家以前的主从复制项目,可能还真不好进行验证测试。

在开始之前,我们先来简单的说一下 MySQL 主从复制的原理。

不管你们是否支持我,我都在增长

MySQL复制过程分成三步:

  1. master 将改变记录到二进制日志(binary log)。这些记录过程叫做二进制日志事件,binary log events;
  2. slave 将 master 的 binary log events 拷贝到它的中继日志(relay log);
  3. Slave 重做中继日志中的事件,将改变应用到自己的数据库中。 MySQL 复制是异步的且串行化的。

简单的来说就是 slave 节点会从 master 读取 binlog 来进行数据同步。

MySQL 主从复制原理

相信很多人对上面的原理已经耳朵听出茧子了。还不说市面上还有很多专门做复制的中间件,原理都是同上。

下面我们开始动手配置 MySQL 的主从复制经典架构。以 Windows (配置文件为my.ini文件),从机为 Linux(配置文件为my.cnf)。这样各个系统都能兼顾到。

第一步,先在主库上给从库创建一个可以读取主库 binlog 的账号。

GRANT REPLICATION SLAVE ON *.* to 'xttblog'@'192.168.1.2' identified by ‘123456’;
—- 刷新配置
FLUSH PRIVILEGES;

第二步,在主库的 my.ini 文件中的 [mysqld] 后面配置上下面的内容。

log-bin=D:/xttblog/data/mysqlbinlog
#log-bin同步的日志路径及文件名,一定注意这个目录要是mysql有权限写入的
server-id=1 #master端的ID号
binlog-do-db = xttblog #要同步的数据库名
# 下面两个可以忽略的配置
binlog-ignore-db = mysql #不同步mysql库和test库
binlog-ignore-db = test

第三步,修改配置文件后,重启服务:service mysqld restart。

如果启动失败,通过cat /var/log/mysqld.log | tail -30 查看 mysql 启动失败的日志,从日志内容寻找解决方案。

第四步,查看主服务器当前二进制日志名和偏移量,这个操作的目的是为了在从数据库启动后,从这个点开始进行数据的恢复。

show master status;
show master status;

到此,主库配置已经操作完了,下面我们开始操作从库的配置。

从库是一台 Linux,所以我们登录上去,配置 my.cnf 文件。

第一步,还是在 my.cnf 文件中的 [mysqld] 后面配置上下面的内容。

[mysqld]
server-id=2
master-host=192.168.1.1
master-user=xttblog
master-password=123456
master-port=3306
replicate-do-db=xttblog

配置完成后进行重启数据库。如果重启失败,报错。则直接在从库上执行下面的 SQL 语句来操作。

CHANGE MASTER TO MASTER_HOST='192.168.1.1',
  MASTER_PORT=3306,
  MASTER_USER='xttblog',
  MASTER_PASSWORD=‘123456',
  MASTER_LOG_FILE='binlog.000149',
  MASTER_LOG_POS=344; #后面两个参数的值与主库保持一致

然后重启 slave 节点,查看从节点状态。

查看从节点状态

当结果中 Slave_IO_Running: Yes 和 Slave_SQL_Running: Yes 都显示为 YES,则表明搭建成功。

注意:为了保证搭建成功,不受防火墙影响,大家可以把主从两台服务器上的防火墙都给关了。

然后你就可以随心所欲的创建表,增删改查操作数据了。

业余草公众号

最后,欢迎关注我的个人微信公众号:业余草(yyucao)!可加作者微信号:xttblog2。备注:“1”,添加博主微信拉你进微信群。备注错误不会同意好友申请。再次感谢您的关注!后续有精彩内容会第一时间发给您!原创文章投稿请发送至532009913@qq.com邮箱。商务合作也可添加作者微信进行联系!

本文原文出处:业余草: » 手把手教你搭建 MySQL 主从复制经典架构