天天看点

mysql 冷备注意事项

mysql 冷备时可以选择停整个实例,但是得根据业务来确定,比如有的备份库除了提供备份外还会提供给RD,QA等相关人员使用,这部分人可以接受一定的数据延迟,这样冷备的时候更多是只停同步SQL线程,为什么不是stop slave ?,停了同步是不是就能直接拷走数据目录打包or 存到远程服务器?

对于上面两个问题;

第一个问题非常容易理解,当拷完数据重新同步后如果IO线程落后太久会瞬间取走很多binlog,导致网卡报警,当然可以限制主库->从库的网卡允许带宽也可以解决,但是这需要人工去干扰,在机器比较多时不推介;

第二个问题:

在停了同步也不能直接拷贝数据,需要注意两个点:

1、是否有临时表被打开

如果打开了临时表,你停止了从库服务,当从库重新启动时,临时表需要这些更新,但是临时表已经不再可用;这样会导致同步不能正常启动;

正常做法有两种

a、在停同步前,检测这个Slave_open_temp_tables是否为0

show status like "Slave_open_temp_tables";

如果为0说明有临时表打开,设置个超时时间循环等待,直到为0才停同步;

b、使用如下步骤

  • 使用stop slave sql_thread语句
  • 使用show status查看Slave_open_temp_tables的值
  • 如果这个值不是0,使用start slave sql_thread;重启从库SQL 线程,一会儿后再重复执行这个步骤
  • 当这个值是0时,使用mysqladmin shutdown命令停止slave.

2、停掉用不后,需要flush logs&tables,然后等带master 线程刷后台数据

这里需要设置 innodb_max_dirty_pages_pct=0,一直等到 master 线程为 state: waiting for server activity,然后恢复innodb_max_dirty_pages_pct为之前的值,这样能保证所有的数据是静止的,当重新恢复数据时可以正常使用;

参考:http://www.cnblogs.com/sunss/archive/2010/10/11/1847690.html

继续阅读