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

数据库 MySQL
今天,一名读者反馈说:自己出去面试,被面试官一顿虐啊!为什么呢?因为这名读者面试的是某大厂的研发工程师,偏技术型的。所以,在面试过程中,面试官比较偏向于问技术型的问题。

 [[343601]]

写在前面

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

问题阐述

明确问题

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

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

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

分析问题

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

问题解决

主从复制基本步骤

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

(1)复制数据库

  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)复制,导入数据

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

(3)启动slave数据库

  1. slave start 

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

  1. 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数据库。

  1. stop slave; 

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

  1. 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服务器执行到这个位置。

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

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

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

  1. mysql < newdb.sql 

(6)启动从服务器

  1. start slave 

本文转载自微信公众号「冰河技术」,可以通过以下二维码关注。转载本文请联系冰河技术公众号。

 

责任编辑:武晓燕 来源: 冰河技术
相关推荐

2024-02-21 16:42:00

2023-12-29 13:45:00

2011-04-06 09:59:00

MySQL数据库主从复制

2020-11-16 09:30:11

Redis网络配置

2012-11-26 10:17:44

InnoDB

2019-05-10 15:30:18

数据库主从复制MySQL

2021-06-08 07:48:27

MySQL主从配置

2024-03-01 18:33:59

MySQL节点数据

2014-07-04 10:41:19

redis数据库缓存

2019-02-11 09:04:24

MySQL主从复制数据库

2020-01-03 16:30:14

数据库读写分离分库

2017-04-20 21:00:06

MySQLbinlog主从复制

2023-03-19 22:38:12

逻辑复制PostgreSQL

2021-07-06 07:08:18

管控数据数仓

2023-03-19 11:53:27

2022-12-20 08:46:41

MySQL主从复制

2019-08-07 09:52:34

数据库MySQLSQL

2021-10-14 06:51:55

数据库SQL

2017-09-05 16:00:49

MySQL主从复制备份

2017-10-11 15:40:20

MySQL主从复制拓扑结构
点赞
收藏

51CTO技术栈公众号