搭建mysql主从复制和删库数据恢复策略

Posted zyp221314

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了搭建mysql主从复制和删库数据恢复策略相关的知识,希望对你有一定的参考价值。

搭建主从复制

主机:

[mysqld] 下增加
vim /etc/my.cnf
## 设置 server_id,一般设置为 IP
server_id=8
# # 复制过滤:需要备份的数据库,输出 binlog
binlog-do-db=testdb
#复制过滤:不需要备份的数据库,不输出(mysql 库一般不同步)
binlog-ignore-db=mysql
# 开启二进制日志,以备 Slave 作为其它 Slave 的 Master 时使用
log-bin=master-log-1
binlog_cache_size  =  1M
# 主从复制的格式(mixed,statement,row,默认格式是 statement)
binlog_format=mixed
# 二进制日志自动删除/过期的天数。默认值为 0,表示不自动删除。
expire_logs_days=7
#slave_skip_errors=1062
#      #  relay_log 配置中继日志
#relay_log=edu-mysql-relay-bin
#log_slave_updates 表示 slave 将复制事件写进自己的二进制日志
#log_slave_updates=1
 # 防止改变数据(除了特殊的线程)
#read_only=1

然后在主机里创建一个用户授予同步权限,专门用来进行复制:
GRANT REPLICATION SLAVE,REPLICATION CLIENT ON *.* TO ‘sync_user‘@‘192.168.0.%‘ IDENTIFIED BY ‘root‘;

然后show master statusG;
mysql> show master statusG;
*************************** 1. row ***************************
             File: master-log-1.000002
         Position: 584
     Binlog_Do_DB: testdb

从机:
## 设置 server_id,一般设置为 IP
server_id=8
# # 复制过滤:需要备份的数据库,输出 binlog
binlog-do-db=testdb
#  #复制过滤:不需要备份的数据库,不输出(mysql 库一般不同步)
binlog-ignore-db=mysql
#   # 开启二进制日志,以备 Slave 作为其它 Slave 的 Master 时使用
log-bin=master-log-1
binlog_cache_size  =  1M
#     # 主从复制的格式(mixed,statement,row,默认格式是 statement)
binlog_format=mixed
#     # 二进制日志自动删除/过期的天数。默认值为 0,表示不自动删除。
expire_logs_days=7

然后重启, 登录进去后配置主从关系组. master_log_file实时取上面的show master status 的File字段的值, master_log_pos 取Position的值,然后执行下面的命令:
mysql > stop slave;
mysql > change master to master_host=‘192.168.0.7‘,master_user=‘sync_user‘,master_password=‘root‘,master_log_file=‘master-log-1.000002‘,master_log_pos=120 ;
mysql > start slave;

最后查看 show slave statusG;
mysql> show slave statusG;
*************************** 1. row ***************************
               Slave_IO_State: Waiting for master to send event
                  Master_Host: 192.168.0.7
                  Master_User: sync_user
                  Master_Port: 3306
                Connect_Retry: 60
              Master_Log_File: master-log-1.000002
          Read_Master_Log_Pos: 120
               Relay_Log_File: mysqld-relay-bin.000002
                Relay_Log_Pos: 286
        Relay_Master_Log_File: master-log-1.000002
             Slave_IO_Running: Yes
            Slave_SQL_Running: Yes

其中 这两项都为Yes的话那就没什么问题了
             Slave_IO_Running: Yes
            Slave_SQL_Running: Yes
直接开始主从同步吧



db快速回滚恢复,防止发生删库跑路.

   一旦发生删库或其他危险性操作, 比如update不带条件式的修改(你又没开update保护), 那么跑路肯定不是第一选项的, 你起码得先尝试补救措施啊.

@1: 一小时延迟从库
  一小时间隔后重新连上主机把所有的数据全部同步过来,然后立马断开,这个从库会与主库保持1个小时的数据差距. 在搭好的主从同步的从机上执行: 
   mysql> stop slave;
   mysql> change master to master_delay = 1800; #1800s后才同步 
   mysql> start slave; 
  但这个有个缺点就是: 从库在连上主库进行同步的一小段时间内刚好发生了删库事故或其他update不带条件的灾难,这个时候根本无法恢复. 因此最好开设双份的1小时延迟同步: 即对第一台从机执行一次延时1小时的命令change master to master_delay=3600; 
  过过半小时后再对另一台从机执行change master to master_delay=3600;
那么现在这两台从机就有半小时的同步间隔时间,即使事故发生在第一台从机连接的时候,仍旧有半小时的补救时间. @2.另外就是全量备份 + 增量备份(用硬盘定时拷贝了)

 






以上是关于搭建mysql主从复制和删库数据恢复策略的主要内容,如果未能解决你的问题,请参考以下文章

web服务文件更新自动同步数据库主从复制shell脚本实现网站代码备份和mysql备份

Linux MySQL集群搭建之主从复制

mysql数据库备份,主从复制及半同步复制

MySQL主从复制与读写分离

MySQL 主从复制备份策略

MySQL主从复制搭建