如何添加新数据库到MySQL主从复制列表
在LAMP架构中,我们一般使用MySQL作为数据库,而MySQL主从也是 高性能网站 架构中必要的环节(如 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 |
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顶部位置查找。
4. 导入新库到从服务器上。
mysql < newdb.sql
|
5. start slave
其中比较重要的是在主服务器上导出新库时的日志位置(position A),这个点很重要,以这个点做为分界线,导入新库。
这种方法也同样适用于某个数据库或者某个数据表不同步的情况,比如主从数据库有一个表由于某些原因数据不一致,那么上面的方法只需要去掉重启数据库一步,其他的操作基本
声明: 本站所有文章欢迎转载,所有文章未说明,均属于原创,转载均请注明出处。
本文有效链接: http://www.drupal001.com/2013/06/add-new-database-existing-mysql-master-slave/
版权所有: Drupal与高性能网站架构 http://www.drupal001.com
本文作者: 赵高欣 . robbin (发表日志73篇)
资深架构师,Drupal大学站长。 专注于WEB站点架构、性能优化、SEO等。LAMP、.NET平台经验较多,目前在PHP/Drupal的应用方面和高性能网站架构等领域码砖。
发表评论 取消回复
引用: 0
- 下面所列的是引用到本博客的链接
- 如何添加新数据库到MySQL主从复制列表 来自 Drupal与高性能网站架构