zoukankan      html  css  js  c++  java
  • MySQL Replication--修复从库上单个数据库的数据

    问题描述

    由于运维失误,从库未及时设置read_only,导致从库上某库数据被修改,由于整个实例数据量较大,重做成本较高,而该数据库数据较少,因此考虑如何修复该数据库的数据。

    操作前提

    1、复制使用位点同步,未使用MASTER_AUTO_POSITION=1选项

    2、程序对数据库操作不存在跨库事务,保证过滤该库的复制事件后不会丢失其他库的事件。

    处理步骤

    1、停止该从库上复制(实际复制已停止)

    STOP SLAVE;

    2、在主库上备份整表数据(注意记录主库位点)

    /export/servers/mysql/bin/mysqldump 
    --socket="/export/data/mysql/tmp/mysql.sock" 
    --host="127.0.0.1" 
    --port=3358 
    --user='mysql_root' 
    --password="mysql_root_pws" 
    --default-character-set="utf8" 
    --single-transaction 
    --databases 'demodb' 
    --hex-blob --opt --quick 
    --events --routines --triggers 
    --master-data=2 
    --set-gtid-purged=OFF 
    > /export/data/mysql/dumps/demodb.sql

    3、修改从库复制属性,跳过该库相关复制

    CHANGE REPLICATION FILTER REPLICATE_IGNORE_DB=(test,demodb)

    4、将主库上mysqldump出来的文件复制到从库,并查看位点信息

    head -n 100 /export/data/mysql/dumps/demodb.sql |grep 'CHANGE MASTER'
    
    输出结果为:
    CHANGE MASTER TO MASTER_LOG_FILE='mysql-bin.003001', MASTER_LOG_POS=749489338;

    5、使用START SLAVE UNTIL将复制执行到备份位点

    START SLAVE UNTIL  MASTER_LOG_FILE='mysql-bin.003001', MASTER_LOG_POS=749489338;

    6、将备份位点的数据更新到从库中

    /export/servers/mysql/bin/mysql 
    --host="127.0.0.1" 
    --port=3358 
    --user='mysql_root' 
    --password="mysql_root_pws" 
    --database="mysql" 
    --verbose 
    --batch 
    -vvv 
    </export/data/mysql/dumps/demodb.sql 
    1>/export/data/mysql/dumps/demodb.log 
    2>/export/data/mysql/dumps/demodb.err

    7、修改从库复制属性,去除对该库的过滤复制

    CHANGE REPLICATION FILTER REPLICATE_IGNORE_DB=(test)

    8、开启复制,复制恢复正常

    START SLAVE;
  • 相关阅读:
    CJB的大作
    OI省选算法汇总
    bzoj1078【SCOI2008】斜堆
    zrt中文题
    bzoj4726【POI2017】Sabota?
    bzoj4591 【Shoi2015】超能粒子炮·改
    bzoj2086【Poi2010】Blocks
    bzoj2091【Poi2010】The Minima Game
    bzoj2038小z的袜子
    bzoj4282慎二的随机数列
  • 原文地址:https://www.cnblogs.com/gaogao67/p/10815839.html
Copyright © 2011-2022 走看看