写点什么

【MySQL】面试官:如何添加新数据库到 MySQL 主从复制环境?

用户头像
冰河
关注
发布于: 2020 年 09 月 23 日
【MySQL】面试官:如何添加新数据库到MySQL主从复制环境?

写在前面



今天,一名读者反馈说:自己出去面试,被面试官一顿虐啊!为什么呢?因为这名读者面试的是某大厂的研发工程师,偏技术型的。所以,在面试过程中,面试官比较偏向于问技术型的问题。不过,技术终归还是要服务于业务的,光会技术可不行,还要将技术应用于项目中才行。结果,最后问了一连串的项目实战问题,其中一个问题就是:如何在不重新复制整个库的情况下,添加新数据库到MySQL主从复制环境?结果。。。

问题阐述

明确问题



面试官的问题比较明确:如何在不重新复制整个库的情况下,添加新数据库到MySQL主从复制环境?



首先,我们要理解面试官的意思,不能在未理解题目的前提下,就开始回答,这样就会答非所问,面试结果自然也就凉凉了。





接下来,我们先来分析下这个问题。面试官问的是 如何添加新数据库到MySQL主从复制环境,注意:这里说的是数据库,而不是MySQL实例。添加数据库和MySQL实例是两种完全不同的方式,所以,一定要先理解面试官的意思,再进行回答。

分析问题



MySQL主从复制一般情况下我们会设置需要同步的数据库,使用参数配置选项,binlog-do-db,可以在master上指定需要同步的数据库,replicate-do-db在从数据看上指定需要同步的数据库。(一般只设定master上的binlog-do-db即可,不需要两个同时设定。以防万一,在slave也可以加上replicate-ignore-db)。

问题解决

主从复制基本步骤



首先,我们列举一下主从复制的基本步骤,(MySQL主从首先需要在各自服务器配置好)。



(1)复制数据库



mysqldump --master-data --single-transaction -R --databases [db_name] | gzip -9 - | pv > all-db-with-master-data.sql.gz



注意:innodb用 –single-transaction, myisam需要用 –lock-all-tables。



(2)复制,导入数据



pv < all-db-with-master-data.sql.gz | zcat | mysql



(3)启动slave数据库



slave start



注意:切换到主的语句已经在导出的sql语句里面了,注意查看下面的代码片段。



change master to master_log_file=’(binlog name in relay_master_log_file)’, master_log_pos=(exec_master_log_pos number)



那么,在现有的主从复制结构中,如何增加一个新的数据库进去?我们继续往下看。

添加数据库



比如我们要增加一个数据库在master服务器上,比如,名为newdb的数据库。具体操作如下:



(1)从服务上,停掉slave数据库。



stop slave;



(2)主服务器上,导出新数据库



mysqldump --master-data --single-transaction -R --databases newdb > newdb.sql



(3)修改主服务器my.cnf文件



主服务器上,修改my.cnf文件,添加新库到binlog-do-db参数,重启mysql。



(4)查找当前的日志文件以及位置



在导出的newdb.sql里面查找当前的日志文件以及位置(change master to …)



然后让slave服务器执行到这个位置。



start slave until MASTER_LOG_FILE="mysql-bin.000001", MASTER_LOG_POS=1222220;



其中MASTERLOGFILE以及MASTERLOGPOS在导出的数据库newdb.sql顶部位置查找。



(5)导入新库到从服务器上



mysql < newdb.sql



(6)启动从服务器



start slave

重磅福利



微信搜一搜【冰河技术】微信公众号,关注这个有深度的程序员,每天阅读超硬核技术干货,公众号内回复【PDF】有我准备的一线大厂面试资料和我原创的超硬核PDF技术文档,以及我为大家精心准备的多套简历模板(不断更新中),希望大家都能找到心仪的工作,学习是一条时而郁郁寡欢,时而开怀大笑的路,加油。如果你通过努力成功进入到了心仪的公司,一定不要懈怠放松,职场成长和新技术学习一样,不进则退。如果有幸我们江湖再见!



另外,我开源的各个PDF,后续我都会持续更新和维护,感谢大家长期以来对冰河的支持!!

写在最后



如果你觉得冰河写的还不错,请微信搜索并关注「 冰河技术 」微信公众号,跟冰河学习高并发、分布式、微服务、大数据、互联网和云原生技术,「 冰河技术 」微信公众号更新了大量技术专题,每一篇技术文章干货满满!不少读者已经通过阅读「 冰河技术 」微信公众号文章,吊打面试官,成功跳槽到大厂;也有不少读者实现了技术上的飞跃,成为公司的技术骨干!如果你也想像他们一样提升自己的能力,实现技术能力的飞跃,进大厂,升职加薪,那就关注「 冰河技术 」微信公众号吧,每天更新超硬核技术干货,让你对如何提升技术能力不再迷茫!





发布于: 2020 年 09 月 23 日阅读数: 40
用户头像

冰河

关注

公众号:冰河技术 2020.05.29 加入

Mykit系列开源框架发起者、核心架构师和开发者,《海量数据处理与大数据技术实战》与《MySQL开发、优化与运维实战》作者。【冰河技术】微信公众号作者。

评论

发布
暂无评论
【MySQL】面试官:如何添加新数据库到MySQL主从复制环境?