加入收藏 | 设为首页 | 会员中心 | 我要投稿 云计算网_泰州站长网 (http://www.0523zz.com/)- 视觉智能、AI应用、CDN、行业物联网、智能数字人!
当前位置: 首页 > 站长学院 > MySql教程 > 正文

添加新数据库到MySQL主从复制教程解问题解答

发布时间:2022-06-29 10:03:11 所属栏目:MySql教程 来源:互联网
导读:MySQL作为开源免费数据库的主流,应用非常广,而MySQL主从也是高性能网站架构中必要的环节,特别是一些开源的CMS如drupal、Wordpress,本文就MySQL主从的复制同步讲解一下,以及过程会出现的问题. MySQL主从复制一般情况下我们会设置需要同步的数据库,使用参数
  MySQL作为开源免费数据库的主流,应用非常广,而MySQL主从也是高性能网站架构中必要的环节,特别是一些开源的CMS如drupal、Wordpress,本文就MySQL主从的复制同步讲解一下,以及过程会出现的问题.
 
  MySQL主从复制一般情况下我们会设置需要同步的数据库,使用参数配置选项,binlog-do-db,可以在master上指定需要同步的数据库,replicate-do-db在从数据看上指定需要同步的数据库,一般只设定master上的binlog-do-db即可,不需要两个同时设定,以防万一,在slave也可以加上replicate-ignore-db.
 
  我们遇到的问题是,在master上面新增了一个数据库,这个时候如何把新加的这个数据库添加到MySQL的主从复制链里?即不重新复制整个库的情况下,重新设置主从复制.
 
  首先,我们大概罗列一下主从复制的基本步骤,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 --phpfensi.com
 
  3.主服务器上,修改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;
 
  其中MASTER_LOG_FILE以及MASTER_LOG_POS在导出的数据库newdb.sql顶部位置查找.
 
  5.导入新库到从服务器上.
 
  mysql < newdb.sql
 
  6.start slave
 
  其中比较重要的是在主服务器上导出新库时的日志位置(position A),这个点很重要,以这个点做为分界线,导入新库.
 
  这种方法也同样适用于某个数据库或者某个数据表不同步的情况,比如主从数据库有一个表由于某些原因数据不一致,那么上面的方法只需要去掉重启数据库一步,其他的操作基本一致.
 
 

(编辑:云计算网_泰州站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    热点阅读