I am LAZY bones? AN ancient AND boring SITE

mysql主备部署笔记

本文说的mysql主备是指单向、异步的数据复制。可以是一个主、多个备。
这样做的好处显而易见:有利于健壮性、速度和系统管理。备用数据库可以做为只读查询和备份的机器,减轻主用数据库的负担。

实施前提:
主用数据库的配置里至少有:

[mysqld]
log-bin=mysql-bin
server-id=1

建议主备的数据库版本一致。

我所知道的最简单的实施方式(不需要停主库,甚至不需要长时间地禁止主库写入):

主库操作:
在主库里建一个复制用的用户:

grant replication slave on *.* TO 'replication'@'备库地址' identified by 'replication';

导出主库的数据,并记下当然日志文件和偏移:

mysqldump --master-data=2 --single-transaction -uroot -p --all-databases >dumpfile

这里是把数据以SQL的形式导出,并记下导出瞬间的日志文件和偏移(得益于--master-data=2参数),出来的dumpfile的前面会有一行类似以下的注释信息,就是文件名和偏移值了:

-- CHANGE MASTER TO MASTER_LOG_FILE='mysql-bin.000011', MASTER_LOG_POS=1061553673;

对于这步,网络上一般采用的方法为:

FLUSH TABLES WITH READ LOCK--先把主库设置成只读,然后导出SQL或者直接复制数据文件
SHOW MASTER STATUS; --记下日志文件和偏移
UNLOCK TABLES;  --恢复主库写入

这样,至少在复制数据的那段时间,主库是不可提供服务的。

备库操作:
复制主库的/etc/my.cnfdumpfile
把主库配置里的 server-id 改成2(或者3、4,多个备库保存互不相同),再加上

relay-log = slave-relay.log 
relay-log-index = slave-relay-log.index

导入数据:

 mysql <dumpfile

进入mysql命令行执行:

SLAVE STOP;
CHANGE MASTER TO
MASTER_HOST='主库地址',
MASTER_PORT=3306,
MASTER_USER='replication',
MASTER_PASSWORD='密码',
MASTER_LOG_FILE='mysql-bin.000011',
MASTER_LOG_POS=1061553673;
SLAVE START;

然后,就搞定了,可以在备库执行

SHOW PROCESSLIST;

查看同步的状态,如果此命令的输出里有两个“system user”的进程,并且Command都是“Connect”的话,就差不多OK了,此时,任何对主库的修改,都能准实时地从备库里查询出来。

参考文章:mysql官方中文手册

最后修改时间: 2011年10月21日 11:38

本文章发表于: 2011年05月11日 19:48 | 所属分类:备忘. | 您可以在此订阅本文章的所有评论. | 您也可以发表评论, 或从您的网站trackback.

6 个评论 关于: “mysql主备部署笔记”

  1. yegle 在 2011年05月11日 20:01 说:回复

    Nice~正在搞MySQL的主备,参考下~

  2. twig 在 2011年05月12日 04:24 说:回复

    辛辛苦苦备份好主数据库,某天想用时报错,说主数据库不存在该坐标点,不知有何感想?

  3. yegle 在 2011年05月12日 17:10 说:回复

    搞定~我查的所有资料包括MySQL官方资料都是说要先停主库写入再操作…NND…

    • bones7456 在 2011年05月12日 20:00 说:回复

      你刚好也在折腾mysql啊?这么巧,呵呵。

  4. yegle 在 2012年03月20日 21:28 说:回复

    咨询过DBA之后,正确的确认slave状态OK应该是在slave执行show slave status\G,然后看是否是这样:
    Slave_IO_Running: Yes
    Slave_SQL_Running: Yes

    (其实我每次都记不住怎么搭slave,每次都跑这里看…

  5. sven 在 2013年05月14日 12:45 说:回复

    懒骨头,假如我必须在主服务器上配置bind-address为localhost的前提下,怎么搞主从配置
    有没有解决办法??

发表评论