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