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


下文主要给大家带来搭建基于binlog方式的主从架构详细步骤,希望这些内容能够带给大家实际用处,这也是我编辑搭建基于binlog方式的主从架构详细步骤这篇文章的主要目的。好了,废话不多说,大家直接看下文吧。基于binlog方式的主从架构,也可称为传统的异步复制方式。环境:
主从复制原理图:
主从复制原理:通过三个线程来实现。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.cnfserver_id = 2log_bin = /home/data/mysql3306/mysql-bin上面两个是必须配置的,其他参数根据自己的MySQL安装目录和业务情况自行配置
Slave主机配置:cat /home/data/mysql3306/my.cnfserver_id = 1Slave主机的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.cnfbinlog-do-db=bailidb(更多过滤规则请阅读MySQL官网)
注意:需要重启MySQL
更新数据前,先看看position位置mysql> show master statusG;*************************** 1. row *************************** File: mysql-bin.000006 Position: 120 Binlog_Do_DB: bailidb
插入一条非过滤规则数据库的数据:INSERT INTO `backup`.`vip_1` (`sname`) VALUES (‘Python’);mysql> show master statusG;*************************** 1. row *************************** File: mysql-bin.000006 Position: 120 Binlog_Do_DB: bailidbposition位置没有变动
更新一条符合过滤规则数据库的数据:UPDATE `bailidb`.`bl_admin` SET `username` = ‘heihei’ WHERE `userid` = ’40’;mysql> show master statusG;*************************** 1. row *************************** File: mysql-bin.000006 Position: 562 Binlog_Do_DB: bailidbposition位置变动,说明配置已经生效了
说明:虽然Master支持这么做主从过滤规则,但是配置之后,就只能是配置的库写入或配置的库不能写入binlog中了,随着业务变动,一些原来不需要复制同步的库,现在也需要进行复制同步,那么就需要重启Master数据库,如果之后业务再变动,还需要重启Master数据库,显然,这么做不够灵活,而且重启Master的代价肯定也比重启Slave大的多的;另一方面,除非十分确定,Master的所有数据变更操作都应该记录到binlog中,出了问题还能够据此进行恢复,而不应该对Master做过滤,所以,一般情况下,选择配置Slave的主从复制过滤规则。
Slave主机上配置主从复制过滤规则:现在业务需求是,现在的Slave主机上只需要论坛(bbs)、和在线课堂的数据(edusoho_e)的数据cat /home/data/mysql3306/my.cnfreplicate_do_db=bbsreplicate_do_db=edusoho_e(更多过滤规则请阅读MySQL官网)
注意:需要重启MySQL
4、准备复制数据在Master主机上将bbs、edusoho_e数据备份后,传输到Slave主机,进行数据导入,使之和Master数据库一致笔者使用的是MySQL自带的mysqldump工具,此工具,属于温备方式,即:备份过程中会锁库表,对业务会造成一定的影响,数据量越大,影响越大。笔者比较同意网上同行的经验,50G以下还是可以用mysqldump工具,50G以上就应该考虑使用如:Xtrabackup等物理备份工具了
mysqldump -uroot -p –single-t开发云主机域名ransaction –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
再判断从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 statusG;(对于参数项的具体含义,一定要看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方式的主从架构详细步骤,大家是不是觉得非常有帮助。如果需要了解更多内容,请继续关注我们的行业资讯,相信你会喜欢上这些内容的。

相关推荐: 关系数据模型是什么意思

今天就跟大家聊聊有关关系数据模型是什么意思,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。关系数据模型是一种数据模型,以关系或表格的形式对数据进行建模,是用来表示数据在关系数据库中的存储和处理方式,在关系…

免责声明:本站发布的图片视频文字,以转载和分享为主,文章观点不代表本站立场,本站不承担相关法律责任;如果涉及侵权请联系邮箱:360163164@qq.com举报,并提供相关证据,经查实将立刻删除涉嫌侵权内容。

(0)
打赏 微信扫一扫 微信扫一扫
上一篇 06/08 13:02
下一篇 06/08 13:02

相关推荐