mysql主从环境,从机因为出了些问题数据出错了,现在要重新恢复,但是主机访问很频繁,要求在不停机的情况下,恢复从机数据并且恢复从机replicate状态。大致过程也就是:
slave stop;
恢复数据;
slave start;
主机数据量有25G,比较大,都是myisam引擎本来的话,主机停掉,那么不会有新数据进来,然后主机数据全部mysql dump到从机上去,这样主从机器数据一致了,然后再开启从机的slave 。可是如果主机不停止运行的话,在dump到从机时,会有新数据进来,会导致数据不一致,那么怎么办呢

解决方案 »

  1.   


    是myisam吧,没有关系,设置好复制点,从postion为0开始,重新做replicate就是了。
      

  2.   

    还有一个就是用免费的xtrabackup做热备,记好postion点,然后恢复到从库上面。
      

  3.   

    25G的数据算很小的了,不大而已,直接copy文件都不需要多长时间的。为什么不用innodb呢,而要用myisam呢?
      

  4.   


    -- 如果 指定的存储引擎是 Innodb存储引擎(所有的表都是Innodb存储引擎),且binlog日志已经开启的话,
    -- 可以用备份恢复来做,在用 mysqldump 备份,查看当前的master 状态,
    mysql-[groupon]> show master status\G
    *************************** 1. row ***************************
                File: mysql-bin.000938
            Position: 35592927
        Binlog_Do_DB: groupon
    Binlog_Ignore_DB: 
    1 row in set (0.00 sec)-- 然后在用 mysqldump 备份的时候加个参数 flush-logs 参数/var/mysql/bin/mysqldump -uroot -pyour_password groupon --single-transaction --flush-logs --master-data=2 --delete-master-logs > /var/www/mysqlBackup/bk_239_2011-10-19/bk_groupon_passport_20111018.sql &-- 将备份文件拷贝到目标机器,
    -- 然后应用备份:
    /var/mysql/bin/mysql -uroot -pyour_password groupon < /var/www/mysqlBackup/bk_239_2011-10-19/bk_groupon_passport_20111018.sql &-- 然后:
    change master to master_host='192.168.1.239',master_port=3306,master_user='repl',master_password='your_password',master_log_file='mysql-bin.000939',master_log_pos=1;-- 然后启动从库:
    start slave;show slave status\G;
      

  5.   


    先将所有 的 myisam存储引擎的表改成Innodb存储引擎,再去按上述操作!
      

  6.   

    更加简单,你用hotcopy就是了!
      

  7.   


    myisam 热备都要锁表的。会影响应用
      

  8.   


    这个是肯定的,myisam本来就是表锁操作的。
      

  9.   


    哎,看来还是夜深人静的时候,默默的把主机数据文件scp过去好了。。
      

  10.   


    赞同,我当年也是这么操作的,记得copy之后,要chown为mysql啊,文件的操作权限要及时修改。我当年copy 50G的myisam文件,花了40分钟。