Loading

centos7.x下mariadb 备份,集群操作

1,二进制日志的相关操作

查看二进制日志是否开启
show binary logs;
show variables like "sql_log_bin"\G; 是否记录日志,恢复数据时临时关闭日志写入
show variables like "%log_bin%"\G; 指定的日志文件位置
show master logs ; 查看日志文件信息
PURGE BINARY LOGS BEFORE '2017-03-22 09:25:30'; 清除某一时间段之前的日志
FLUSH LOGS ;切换日志
show mster status ;
show master logs ;
show binlog events in 'mysql-bin.000002' \G ;

恢复前禁止网络访问

  iptables -A INPUT -p tcp --dport 3306 -j REJECT   

2,备份与恢复

完全备份后恢复到新状态

#完全备份数据库(数据库数据目录与二进制日志目录分开存放)
1, mysqldump  -uroot -pcentos   -A -F  --single-transaction --master-data=2  >fullback.sql 
2, 修改数据库(更新或删除数据)
3, 删除数据库数据,模拟数据丢失
rm  -rf   /var/lib/mysql/* 
4, 恢复数据
1)查看完全备份后产生的文件里change master to  后日志文件位置(由mysqldump  --master-data=2  选项产生)
 2)根据该位置信息导出修改文件后新增的二进制日志文件
 mysqlbinlog  --start-position=479    mysql-bin.000001 > /data/backup/inc.sql 
 mysqlbinlog  mysql-bin.000002 >> /data/backup/inc.sql
 mysqlbinlog  mysql-bin.000003 >> /data/backup/inc.sql

#如果日志文件由删库操作,可以在导出的sql文件中将该语句注释掉
5,关闭二进制日志文件的记录
mysql > set  sql_log_bin=0
6,完全还原备份
mysql> source /data/backup/fullback.sql
mysql> source /data/backup/inc.sql 
7,查看数据是否恢复
恢复日志文件记录

3,集群

1,主从模式

主从模式默认为异步同步数据模式,即主服务器不用等待从服务器回应是否同步成功,直接回复客户端操作成功,主从架构增加了主服务器的压力。

一般过程:配置主从机构后,主节点会产生一个dump线程,如本地有事务完成并写入二进制日志文件,则通知从节点读取,从节点使用一个I/O线程读取主节点日志文件并写入自己的中继日志,同时从节点的sql线程查询中继日志,看是否有事务未写入本节点,如有则进行同步更新操做。

从变主:更改server-id,启用日志,清除从节点连接及中继日志信息,添加复制用户,其他从节配置到该节点的连接信息。

mysql主从复制用途:

  • 实时灾备,用于故障切换
  • 读取分离,提供查询服务
  • 备份,避免影响业务

主从复制存在的问题:

  • 主库的宕机,数据可能会丢失
  • 从库只有一个sql 线程,主库写压力大

解决方法:

  • 半同步复制,解决数据丢失
  • 并行复制,解决从库复制延迟问题
#一般操做步骤
1,主服务器配置文件
 vim  /etc/mysql.d/my.cnf
       [mysqld]
       log_bin=master.bin
       server-id=1  #全局唯一id
      #### 还可启用GTid 全局事务id(MYSL>5.7)
      ## gtid_mode=on
      ## enforce-gtid-consistency
      ## log-slave-updates =ON   (5.6强制启用。5.7何以不用)
mysql> grant  replication  slave  on  *.*   to   'repluser'@'host'  identified  by   'replpass '  ;
#创建从服务器登陆主服务器可以执行同步复制功能的账号

2,从节点操做
 # 启动中继日志,配置server-id 
    [mysqld]
    server_id= 2        全局唯一id号
    read_only=ON    #限制从库数据为只读
    relay_log=relay-log 
    relay_log_index=relay-log.index        #默认值hostname-relay-bin.index 
    skip_slave_start=on  # slave重启时,不会自动重启复制链路,需要人工检测正常后重启slave线程    

# 使用用户连接至主服务器
change  master  to  master_host=' host'  ,master_user='usr' ,master_password='password',master_log_file='master-bin.log',  master_log_pos=245   ;
#master_log_file 及pos 需要在主服务器上通过   show  master   status  查看,,假设主从皆为新服务器,如果是新建从服务器,可以备份主服务器数据然后回复至从节点

> 查看从节点与主节点的连接状态
mysql > show  slave status   \G;
mysql > start slave ;  

#主节点查看连接的用户情况: show processlist  ;
#问题: 如果从节点关机后,再开机会自动更新数据,更新数据的线程会自动启动,除非配置文件中配置skip_slave_start=on。

#如果从服务器有数据,更新失败,可以使用sql_slave_skip_counter = N 控制从服务器忽略几个主服务器的复制事件
# stop slave ; reset slave all #清除从节点所有配置信息PORT, HOST, USER和 PASSWORD 等

2) 级联复制

模型:

A------>B

B------->C

B--------->D

B既作为A的从节点,又作为C,D的主节点,如果B开启二进制日志,则只会记录自己的查询记录,而根据IO线程复制来的的中继日志里的事务默认不会自动记录到二进制日志文件,需要开启自动记录功能。

A,B同时都需要添加用户用于连接
 grant  replication  slave  on  *.*   to   'repluser'@'host'  identified  by   'replpass '  ;
A配置文件
log_bin=master-bin
server_id=1
b配置
server_id=2
log_bin=slave-bin
relay-log=relay-log
read-only 
log_slave_updates   #写入本数据库的数据自动记录到二进制日志文件
C,D配置
server_id=3
relay-log=relay-log
read_only

3,主主复制

如有某数据列作为主键,需要设置各自的增长序号和序列,以免添加数据造成数据主键冲突,该结构可以结合HA高可用避免单点故障

4,主从复制半同步

默认主从复制为异步模式,即不用等待从节点回复事务完成通知,直接回复客户端数据更新成功。

半同步复制为只要一个从节点回复更新成功,主节点就向客户端回复更新成功。

主要通过插件实现。主从复制配置完成后操做。

  #主:创建账号用于主从复制
  #安装插件:
  install  plugin  rpl_semi_sync_master soname 'semisync_master.so';  
  set global   rpl_semi_sync_masert_enabled=1
  SET GLOBAL rpl_semi_sync_master_timeout = 1000;超时长为1s
  #从:配置连接信息
  install  plugin  rpl_semi_sync_slave  soname 'semisync_slave.so'; 
  SET GLOBAL rpl_semi_sync_slave_enabled=1;

5,复制过滤

如果从节点只复制给定的部分数据,可以使用复制过滤。两种实现方式

 1)主节点只将给定的数据记录到二进制文件,由从几点复制更新数据。缺点:主节点数据记录不完整

  2)从节点拉取所有主节点二进制日志数据,选择需要的数据记录到本数据库。缺点:会记录多余的主节点日志到本机中继日志。

6,主从复制ssl加密

7,配置全局事务同步

原理:( 会生成两个sql,一个是DDL创建表SQL,一个是insert into 插入数据的sql。由于DDL会导致自动提交,所以这个sql至少需要两个GTID,但是GTID模式下,只能给这个sql生成一个GTID )
3.不允许一个SQL同时更新一个事务引擎表和非事务引擎表
4.在一个复制组中,必须要求统一开启GTID或者是关闭GTID
5.开启GTID需要重启(5.7除外)
6.开启GTID后,就不再使用原来的传统复制方式
7.对于create temporary table 和 drop temporary table语句不支持
8.不支持sql_slave_skip_counter

#####未测试
主从库参数配置
1、主:
[mysqld]
#GTID:
server_id=135                #服务器id
gtid_mode=on                 #开启gtid模式
enforce_gtid_consistency=on  #强制gtid一致性,开启后对于特定create table不被支持
#binlog
log_bin=master-binlog
log-slave-updates=1    
binlog_format=row            #强烈建议,其他格式可能造成数据不一致

#relay log
skip_slave_start=1            

2、从:
[mysqld]
#GTID:
gtid_mode=on
enforce_gtid_consistency=on
server_id=143
#binlog
log-bin=slave-binlog
log-slave-updates=1
binlog_format=row      #强烈建议,其他格式可能造成数据不一致
#relay log
skip_slave_start=1

  

posted @ 2019-05-12 02:04  Lust4Life  阅读(252)  评论(0)    收藏  举报