千家信息网

搭建基于binlog方式的主从架构详细步骤

发表于:2026-10-31 作者:千家信息网编辑
千家信息网最后更新 2026年10月31日,下文主要给大家带来搭建基于binlog方式的主从架构详细步骤,希望这些内容能够带给大家实际用处,这也是我编辑搭建基于binlog方式的主从架构详细步骤这篇文章的主要目的。好了,废话不多说,大家直接看下
千家信息网最后更新 2026年10月31日搭建基于binlog方式的主从架构详细步骤

下文主要给大家带来搭建基于binlog方式的主从架构详细步骤,希望这些内容能够带给大家实际用处,这也是我编辑搭建基于binlog方式的主从架构详细步骤这篇文章的主要目的。好了,废话不多说,大家直接看下文吧。

基于binlog方式的主从架构,也可称为传统的异步复制方式。

环境:

主机IP
操作系统MySQL版本
Master192.168.32.3CentOS release 6.5 (Final)5.6.16-log
Slave192.168.32.2CentOS release 6.5 (Final)5.6.16-log


主从复制原理图:


主从复制原理:

通过三个线程来实现。

Master,通过dump thread,将数据更改操作记录到binary log(这些记录叫做binary log events)

Slave,IO thread,将Master的binary log复制到自己的relay log中

Slave,SQL thread,从Slave的realy log中读取并重放这些记录


主从复制的应用场景:

1、Slave作为Master的数据备份

当Master出现问题时,人工或自动切换到Slave主机,保证服务不间断

2、Master和Slave做读写分离,Slave实现负载均衡,将读写流量分离

我这里引入网站找到的一张图片


3、在读写分离架构下,将多个Slave根据业务进行拆分

在这里引入从网上找到的一张图片



主从搭建配置:

1、修改my.cnf配置

Master主机配置:

cat /home/data/mysql3306/my.cnf

server_id = 2

log_bin = /home/data/mysql3306/mysql-bin

上面两个是必须配置的,其他参数根据自己的MySQL安装目录和业务情况自行配置


Slave主机配置:

cat /home/data/mysql3306/my.cnf

server_id = 1

Slave主机的binlog不是必须开启的,其他参数根据自己的MySQL安装目录和业务情况自行配置,如果有级联复制的需求,才进行开启,一般主从架构不开启,以节省磁盘I/O


2、授权复制连接用户

mysql> grant replication slave on *.*to repliter@'192.168.32.2' identified by PASSWORD ' *6BB4837EB74329105EE4568DDA7DC67ED2CA2AD9';

推荐先将密码进行加密(password()函数)后,再进行授权的方式,这样明文密码就不会记录到binglog中,减少风险


3、配置主从复制过滤规则

如果我们的业务数据拆分到了各个Slave上,比如:Slave1主机只需要复制论坛(bbs)的数据,Slave2只需要复制在线课堂(edusoho_e)的数据等等,这种情况下,我们就需要配置主从复制的过滤规则,只选择Slave主机需要复制的数据。有两种过滤规则可以进行配置。当然了,也可以不进行配置,直接同步所有的数据至Slave


Master主机上配置主从复制过滤规则:

cat /home/data/mysql3306/my.cnf

binlog-do-db=bailidb(更多过滤规则请阅读MySQL官网)


注意:需要重启MySQL


更新数据前,先看看position位置

mysql> show master status\G;

*************************** 1. row ***************************

File: mysql-bin.000006

Position: 120

Binlog_Do_DB: bailidb


插入一条非过滤规则数据库的数据:

INSERT INTO `backup`.`vip_1` (`sname`) VALUES ('Python');

mysql> show master status\G;

*************************** 1. row ***************************

File: mysql-bin.000006

Position: 120

Binlog_Do_DB: bailidb

position位置没有变动


更新一条符合过滤规则数据库的数据:

UPDATE `bailidb`.`bl_admin` SET `username` = 'heihei' WHERE `userid` = '40';

mysql> show master status\G;

*************************** 1. row ***************************

File: mysql-bin.000006

Position: 562

Binlog_Do_DB: bailidb

position位置变动,说明配置已经生效了


说明:

虽然Master支持这么做主从过滤规则,但是配置之后,就只能是配置的库写入或配置的库不能写入binlog中了,随着业务变动,一些原来不需要复制同步的库,现在也需要进行复制同步,那么就需要重启Master数据库,如果之后业务再变动,还需要重启Master数据库,显然,这么做不够灵活,而且重启Master的代价肯定也比重启Slave大的多的;另一方面,除非十分确定,Master的所有数据变更操作都应该记录到binlog中,出了问题还能够据此进行恢复,而不应该对Master做过滤,所以,一般情况下,选择配置Slave的主从复制过滤规则。


Slave主机上配置主从复制过滤规则:

现在业务需求是,现在的Slave主机上只需要论坛(bbs)、和在线课堂的数据(edusoho_e)的数据

cat /home/data/mysql3306/my.cnf

replicate_do_db=bbs

replicate_do_db=edusoho_e(更多过滤规则请阅读MySQL官网)


注意:需要重启MySQL


4、准备复制数据

在Master主机上将bbs、edusoho_e数据备份后,传输到Slave主机,进行数据导入,使之和Master数据库一致

笔者使用的是MySQL自带的mysqldump工具,此工具,属于温备方式,即:备份过程中会锁库表,对业务会造成一定的影响,数据量越大,影响越大。笔者比较同意网上同行的经验,50G以下还是可以用mysqldump工具,50G以上就应该考虑使用如:Xtrabackup等物理备份工具了


mysqldump -uroot -p --single-transaction --master-data=2 --databases bbs edusoho_e > `date +%F`.sql

--single-transaction 保证数据的读一致性

--master-data=2 将CHANGE MASTER TO信息注释

参数的具体含义,请mysqldump --help自行查阅


上传到Slave主机:

可以采用scp、ftp、sz等方式,这里不多说了

创建同名数据库:

mysql> create database bbs;

Query OK, 1 row affected (0.03 sec)

mysql> create database edusoho_e;

Query OK, 1 row affected (0.00 sec)


5、开启数据复制

先进行数据导入

mysql -uroot -p < 2019-04-28.sql


再判断从Master主机的哪里开始进行复制,还记得之前mysqldump的--master-data=2选项吗,它记录了我们需要从Master的哪里开始进行复制

more 2019-04-28.sql(注意:千万别使用vim,如果sql文件大的话,足够把你内存吃完,使用more分页查看就已经足够)

-- CHANGE MASTER TO MASTER_LOG_FILE='mysql-bin.000007', MASTER_LOG_POS=120(这是一个注释信息的样本)


查看CHANGE MASTER TO语法选项

mysql> help change master to;(不建议背命令,因为没有必要)

mysql> CHANGE MASTER TO MASTER_HOST='192.168.32.3',MASTER_PORT=3306,MASTER_LOG_FILE='mysql-bin.000007',MASTER_LOG_POS=120;

Query OK, 0 rows affected (0.08 sec)

mysql> start slave user='repliter' password='123456';

这里可能会有人会有疑问,你为什么不在CHANGE MASTER TO的时候加入user和password直接连接呢?分开写,不是多此一举吗?

原因就是:为了安全。

在CHANGE MASTER TO的时候,I/O thread负责维护master.info文件的更新,I/O thread会将Master主机的binlog file和position,还有其他信息,这其中就包括,Slave连接Master主机的用户名和密码,以此来实现主从数据同步,那么问题来了,如果CHANGE MASTER TO的时候直接写user和password,那么同样会写进master.info文件中去,这样大大增加了账户泄露的风险,因为此类的账户密码只能是DBA知道,所以,为了账户安全,在start slave的时候才指定用户密码,这样user和password信息就不会保存到master.info文件之中了


查看Slave的复制状态:

mysql> show slave status\G;(对于参数项的具体含义,一定要看MySQL官网,因为网上很多资料都是人家按照自己理解翻译的,难以有理解出入)这里只看I/O、SQL thread运行状态

Slave_IO_State: Waiting for master to send event

xxx

Slave_IO_Running: Yes

Slave_SQL_Running: Yes

xxx

Slave_SQL_Running_State: Slave has read all relay log; waiting for the slave I/O thread to update it

xxx


6、数据同步测试:

Master主机变更两条数据:

INSERT INTO `bbs`.`myhash_0` (`c1`, `c2`, `c5`) VALUES ('1', '2', '3');

UPDATE `edusoho_e`.`biz_targetlog` SET `target_type` = 'trade.sucessfull' WHERE `id` = '5';

然后去看数据同步过来没有。


题外:

虽然是在做测试,但是笔者认为测试的目的可不仅仅为了测试,测试的目的应该是为了应用到线上做的探路者、前锋军,所以,做测试的时候,应该尽可能的考虑,这么做,能否应用到线上?

而不应该图省事,将过程简化,如:授权复制连接用户的时候,笔者见过 root@'%'的复制连接用户,请问线上也是这么做的么?还有:mysqldump的时候,真的可以在命令行输入明文密码么?vim 一个几十G的文件,真的没有问题么?应尽可能使用最小权限,使用合适的命令,使云服务器先运行稳定,才是前提。

对于以上关于搭建基于binlog方式的主从架构详细步骤,大家是不是觉得非常有帮助。如果需要了解更多内容,请继续关注我们的行业资讯,相信你会喜欢上这些内容的。

数据 配置 主机 主从 规则 方式 业务 时候 架构 密码 数据库 同步 测试 文件 用户 信息 参数 备份 工具 情况 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 南京欣网互联网络科技 互联网科技股 广东猪兼强互联网科技有限公司 互联网是第几次科技革命的成果 互联网金融 科技金融 善班互联网科技有限公司 互联网科技logo设计 哈尔滨新华互联网科技 宁波青枫互联网科技有限公司 移动互联网科技股 栖莱科技互联网股份有限公司 互联网校园科技培训 世界互联网科技公司市值排名 链环科技传统企业怎么转型互联网 朱啸虎曾投资哪些互联网科技企业 互联网数据科技专业 北京市互联网新科技 下一代互联网重大应用科技园 银川新华互联网科技学校招聘 科技美学互联网 艺术 圆梦互联网科技 互联网科技社 互联网金融科技创新 丰台科技园 互联网公司 互联网科技素材视频竖屏 中国最先进互联网科技公司 央行互联网金融科技公司 成都互联网科技公司工作好不好 长沙渺峰互联网科技有限公司 互联网领先科技活动
0