在数据库同步的时候,我要备份slave上的数据。
slave 上有两种方法可以让其停止 update第一种 stop slave;
第二种 flush tables with read lock
第一种情况下,  show slave status\G; 显示 Slave_IO_Running = No, Slave_SQL_Running=No;
第二种情况下,  show slave status\G; 显示 Slave_IO_Running = Yes
                                               Slave_SQL_Running=Yes ## 是这样吗?
这个时候, 会不会执行relay log中的sql语句啊,如果执行了,肯定失败, 那就会丢失数据了,这儿我希望的情况是:
Slave_IO_Running = Yes  Slave_SQL_Running=Yes
并且不会执行relay log中的更新。实际上是这样吗?

解决方案 »

  1.   

    up---------------------------------------------------------------------------------------------
    腰缠70元到月入近10万
    http://www.hunbei.com.cn/Article/ArticleShow.asp?ArticleID=453IT工程师 毕业4年我年薪涨到30万 
    http://www.hunbei.com.cn/Article/ArticleShow.asp?ArticleID=51126岁青年坐拥千万域名资产 从小玩家变成CEO 
    http://www.hunbei.com.cn/Article/ArticleShow.asp?ArticleID=515程序员的酸甜苦辣:告别Coding 
    http://www.hunbei.com.cn/Article/ArticleShow.asp?ArticleID=341从月薪3500到700万(一)
    http://www.hunbei.com.cn/Article/ArticleShow.asp?ArticleID=170网络草根月赚3000的十种方法
    http://www.hunbei.com.cn/Article/ArticleShow.asp?ArticleID=517如果我是女的 我肯定不会嫁给做网站的
    http://www.hunbei.com.cn/Article/ArticleShow.asp?ArticleID=512
      

  2.   

    是这样的,第一种情况关闭了同步,所以Slave_IO_Running = No, Slave_SQL_Running=No;很正常,这样就不会再执行relay log中的sql语句了,当你再slave start的时候,从服务器的mysql会通过relay log自动比较它和主服务器之间不同,如果有不同就会执行relay log上的sql语句,从而使两个服务器同步。
       第二种情况,它只是将从服务器中所有写在缓存中的数据全部写到硬盘,并把服务器上的所有表都锁定以进行备份操作。Slave_IO_Running =YES Slave_SQL_Running=Yes也是正常的,同时因为锁定了表,所以任何读写操作都是不能进行的,relay log 中的SQL也就无法执行了。
      

  3.   

    谢谢楼上
    还有个问题
    在备份的时候,我用
    mysql -uroot -e "flush table with read lock;" -h localhost 
    根本就不能锁定表,但自动备份的脚本也只能这么写, 我应该如何锁定表呢?我在备份的时候用的是拷贝文件的方法。还希望达到Slave_IO_Running = Yes  Slave_SQL_Running=Yes的效果如下:拷贝文件,不过有点问题,想在备份的时候不让其更新,但是不能锁定表,更新还是继续, 在命令行下,锁定表可以, 但一退出就不行了,自动备份的时候,用mysql -uroot -e "flush table with read lock;" -h localhost 就已经退出了,所以不会锁定,不知道还有什么好的方法, 我这是在slave 上,专门做备份的slave ,不想让其停止,这儿有一个监控软件,如果停了就会发警告,怎么样才能实现这个呢?
      

  4.   

    最后的解决方法是,采用第一种方法,而在当stop slave 的时候会写一个lock文件,如果监控脚本检测到该文件存在就会直接返回正常,而不会去 show slave status (监控使用的就是这条语句来检测replication是否正常).这样就解决了上面的问题。