MySQL 复制

复制原理:
  1.在一个完整备份加上二进制日志备份的还原。
  2.从服务器有两个线程,1个是IO线程,负责读取主服务器的二进制日志,并保存为中继日志。另一个是SQL线程。复制执行中继日志

复制步骤:
   1.主服务器把数据更改记录到二进制日志
   2.从服务器读取主服务器二进制日志复制到自己的中继日志中
   3.从服务重做中继日志

复制配置(复制需要打开 二进制日志和设置不同的 server_id)
  主库配置
       log_bin = mysql-bin
       server_id = xx
       sync_binlog=1 保证每次提交事务将二进制日志同步到磁盘,保证服务崩溃时不会丢失事件
       expire_log_days 过期时间
  备库配置
      log_bin = mysql-bin
      server_id = yy
      relay_log = /var/lib/...
      log_slave_updates = 1 允许重放事件写入二进制日志
      read_only = 1
     skip_slave_start  保证备库崩溃时,不自动启动复制

创建复制账号:
  GRANT REPLICATION SLAVE, REPLICATION CLIENT ON 数据库.数据表
  TO 账号@'允许的地址' IDENIFIED BY '密码';

  SHOW MASTER STATUS 显示主库状态

备库启动复制
  CHANGE MASTER TO MASTER_HOST='server',MASTER_USER='账号',MASTER_PASSWORD='密码',
  MASTER_LOG_FILE='二进制文件',
  MASTER_LOG_POS='位置'

  START SLAVE; 执行复制
  SHOW SLAVE STATUS\G   获取复制状态
  Slave_IO_Running 和 Slave_SQL_Running 正常运行才算成功

MySQL复制有很多用处,可以根据需求制定不同的复制方案:
1.选择性复制:利用访问局部性原理,并将需要读取的工作集驻留在内存中。可以复制少量数据到备库。每个备库,只有主库的部分数据。最简单的方法是将不同的数据划分到不同的数据库里,备库中有个选择 replicate_wild_do_table= 数据库.数据表
2.分离功能: OLTP(在线事物处理),OLAP(在线事物分析)
3.数据归档:备份库上保留主库上删除过的数据,在主库通过delete语句时,确保delete语句不传递到备库就可以实现。方法1是主库选择性禁止二进制日志,先将SQL_log_BIN 设置为 0, 然后进行数据清理。优点不需要修改备库配置,因为SQL语句根本没有记录二制日志。缺点,无法使用二进制日志来进行审计或者按时间点恢复数据,另外还需要SUPER权限。
方法2是备库中使用replicate_ignore_db。 缺点,备库需要读取它不需要的事件,另外也可能有人在数据库上执行非清理查询,从而导致备库无法重放事件。
4.将备库用作全文索引
5.只读备库
6.创建日志服务器:创建一个没有数据的日志服务器,它唯一的目的就是更加容易重放并且/或者过滤二进制日志。

需要考虑是基于行复制,还是基于SQL复制,会有不同的影响(binlog_format 控制二进制格式)
1.SQL复制:对于触发器和存储过程都会有问题,同时对于非明确值,如 时间函数等,会出现不同。但简单,能在各种环境工作,且传输的数据量小
2.行复制:日志记录就是一个黑盒,无法判断执行了那些SQL.但可以应付各种场景包括,触发器,存储过程等
能正确复制

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值