layout: post
title: Mysql数据复制—-经验之谈
date: 2018-02-28
tags: [“Mariadb”,”软件服务”]


一、主从同步数据的一致性

Mysql的主从复制,不管是何种形式的架构,最重要的是数据的一致性。如果真有一天,Master数据库宕了,如果数据的重要性较低于服务的持续运行,这时我们可以考虑,将Slave服务器提升为主服务器,但是需要却表Slave端服务器同步的数据不会比Master端差太多,丢一部分数据还是能够接受的。

当然如果相差的数据太多也可能会造成很严重的后果,毕竟从Master端到Slave端中间传输数据是会有延迟的,而且两端的服务器负载情况也会不同,所以即使使用半同步方式的来构建mysql集群也是有很大的可能会丢失部分数据。

这时候就需要我们做好监控工作了,如果Master端到Slave端的数据差距过大,这时候我们就需要考虑是否重新构建Slave数据库,从新同步一遍数据了。

我们可以通过Slave端的relay.log文件查看已经同步的binlog-position位置来对比master端到底差了多少数据。

二、Binlog日志

Binlog日志在线上环境还是比较大的,所以无用的Binlog日志只会占用磁盘空间,所以需要我们定时的检查和清理Binlog日志。

我们可以通过mysql的purge命令来删除无用的Binlog日志

  1. MariaDB [(none)]> purge binary logs to 'localhost-bin.000010'; #删除localhost-bin.000010之前的binlog日志
  2.  
  3. 我们还可以使用"reset master;" 来清除日志,但是要注意,使用reset mastar会删除所有的binlog日志,从0开始,这条命令一般都是用来重新构建数据库的时候才会使用。

在mysql中键入如下命令,可以帮助我们查找相关问题:

  1. MariaDB [(none)]> show binary logs; #显示所有binlog日志文件
  2. MariaDB [(none)]> show master status; #显示当前最新的binlog文件和position(有助于我们比较与slave端的数据差异)
  3. MariaDB [(none)]> show binlog events; #显示当前binlog的事件(用的不多)
  4. MariaDB [(none)]> show slave status; #在slave端执行,显示同步数据的状态
  5. MariaDB [(none)]> show processlist\G #现在当前正在执行的线程
文档更新时间: 2020-05-25 12:16   作者:张尚