美文网首页
mysql备份、复制、MHA配置

mysql备份、复制、MHA配置

作者: 佐岸的咖啡 | 来源:发表于2019-03-15 16:59 被阅读0次

    1、简述mysql常用备份方式及备份工具并举例

    • 备份类型:
      • 备份的数据的集范围
        • 完全备份和部分备份
        • 完全备份: 整个数据集
        • 部分备份: 数据集的一部分, 比如部分表
    • 全量备份、增量备份、差异备份
      • 完全备份
      • 增量备份: 仅备份自上一次完全备份或增量备份以来变量的那部数据
      • 差异备份: 仅备份自上一次完全备份以来变量的那部数据
    • 物理备份、逻辑备份
      • 物理备份: 复制数据文件进行备份
      • 逻辑备份: 从数据库导出数据另存在一个或多个文件中
    • 根据数据服务是否在线
      • 热备: 读写操作均可进行的状态下所做的备份
      • 温备: 可读但不可以写状态进行的备份
      • 冷备: 读写操作均不可以进行的状态下所做的备份
    • 备份需要考虑因素:
      • 锁定资源多长时间?
      • 备份过程的时长?
      • 备份时的服务器负载?
      • 恢复过程的时长?
    • 备份策略:
      • 全量+差异
      • 全量+增量
      • 备份手段: 物理、逻辑
    • 备份什么?
      • 数据
      • 二进制日志、Innodb的事务日志
      • 代码(存储过程、存储函数、触发器、时间调度器)
      • 服务器的配置文件
    • 备份工具:

    1.mysqldump:mysql服务自带的备份工具。mysqldump是一个逻辑备份工具,它的本质是将数据库转为可执行SQL脚本。可以用来做完全备份和部分备份,支持InnoDB存储引擎的热备功能,MyISAM存储引擎的温备功能。

    2.系统自带的cp/tar工具:这是一种物理备份,这种备份的原理是基于快照实现的,快照(请求一个全局锁),之后立即释放锁,达到几乎热备的效果。需要注意的是不能仅仅只备份数据,要同时备份事务日志,并且要求数据和日志在同一逻辑卷。

    3.xtrabackup:由Percona开发的很强大的开源工具,支持对InnoDB做热备,物理备份工具。在下篇博客将具体介绍此工具并做实际演示。

    2、举例说明xtrabackup实现完全备份、增量备份和部分备份

    一、Xtrabackup备份工具

    二、完全备份

    #完全备份到指定目录
    innobackupex --user=root --p 123 -H localhost /data/backup/ 
    #查看备份目录内容 
    ls /data/backup/2108_xxxx
    #还原数据库,确认目录下没有数据
    mkdir /data/backup -pv
    #在备份点目录下,合并已提交的事物,回滚未提交的事物
    innobackupex --apply-log  ./
    #复制备份点的备份目录,到此要恢复的目录下
    innobackupex --copy-back ./
    #修改mysql目录下属主属组
    chown -R mysql.mysql  /var/lib/mysql/
    #启动mysql
    systemctl start mariadb.service
    

    三、增量备份

    #因为Myisa不支持增量,修改存储引擎为innodb
    USE 'hellodb';
    
    #指明基于那个全量备份路径做增量备份
    innobackupex -u root -p 123 --incrementanl /data/backup/  --incremental-basedir=/data/backup/2018_xx1
    #指明基于上一个增量备份路径做增量备份
    innobackupex -u root -p 123 --incrementanl /data/backup/  --incremental-basedir=/data/backup/2018_xx2
    #备份二进制文件
    cd /data/backup/2018.xx2
    less xtravackup_binlog_info #查看最后位置
    #保持二进制文件到指定目录
    cd /var/lib/mysql
    mysqlbinlog -j xxxx master-log.xxxxx > /data/backup/binlog.sql
    
    #还原数据库
    #准备,全量合并第一个增量备份,只提交不回滚
    innobackupex --apply-log --redo-only 2018.xxx  --incremental-dir=2018.xx1
    #准备,全量合并第二个增量备份,只提交不回滚
    innobackupex --apply-log --redo-only 2018.xxx  --incremental-dir=2018.xx2
    #对合并后的全量备份做回滚
    innobackupex --apply-log  2018.xxx
    #恢复
    innobackupex --copy-back 2018.xxx
    cd /var/lib/mysql/
    chown -R mysql.mysql ./*
    systemctl start mariadb.service
    mysql
    mysql < /data/backup/binlog.sql
    

    四、完全备份加二进制日志binlog备份

    备份:innobackupex  --user  --password=  --host=  /PATH/TO/BACKUP_DIR
    准备:innobackupex --apply-log  /PATH/TO/BACKUP_DIR
    恢复:innobackupex --copy-back
    注意:--copy-back需要在mysqld主机本地进行,mysqld服务不能启动;
    innodb_log_file_size可能要重新设定;
    首先把完全和增量中的所有事物合并,然后未完成的回滚,恢复数据库
    总结:完全+增量+binlog
    备份:完全+增量+增量+...
    

    五、完全备份加差异备份

    准备:
    innobackupex --apply-log --redo-only BASEDIR
    innobackupex --apply-log --redo-only BASEDIR  --incremental-dir=INCREMENTAL-DIR
    
    恢复:
    innobackupex --copy-back BASEDIR
    
    备份单库时候命令加上:
    --databases
    

    3、简述Mysql复制架构及主从复制中数据不一致的解决方案

    主/从架构

    • 异步复制
    • 半同步复制
    • 一主多从
    • 一从一主
    • 级联复制
    • 循环复制
    • 双主复制
    一从多主:
    • 每个主服务器提供不同的数据库

    配置:

    • 时间同步
    • 复制的开始位置
      • 从0开始
      • 从备份中恢复到从节点后启动的复制,复制的起始点备份操作时主节点所在的日志文件及其时间位置
    • 主从服务器mysqld程序版本不一致?
      • 从的版本号高于主的版本号
    主服务器
    • 配置文件my.cnf
    • server_id=#
    • log_bin=log-bin
    启动服务:

    mysql>GRANT REPLICATION SLAVE,REPLICATION CLIENT ON *.* TO 'USERNAME'@'HOST' IDENTIFIED BY 'YOUR_PASSWORD';

    mysql>FLUSH PLIVILEGES;

    从服务器:
    • 配置文件my.cnf
    • server_id=#
    • relay_log=relay-log
    启动服务:

    mysql>CHANGE MASTER TO MASTER_HOST='HOST',MASTER_USER='USERNAME',MASTER_PASSWORD='YOUR_PASSWORD',MASTER_LOG_FILE='BINLOG',MASTER_LOG_POS=#;

    mysql>START SLAVE [IO_THREAD|SQL_THREAD];

    mysql>SHOW SLAVE STATUS;

    主主复制

    • 互为主从: 两个节点各自都要开启binlog和relay_log
      • 1、数据不一致
      • 2、自动增长id
        • 定义一个节点使用奇数id
          • auto_increment_offset=1
          • auto_increment_increment=2
        • 另一个节点使用偶数id
          • auto_increment_offset=2
          • auto_increment_increment=2

    配置:

    1. server_id必须要使用不同值
    2. 均启用binlog和relay_log
    3. 存在自动增长id的表,为了使得id不冲突,需要定义其自动增长方式
    服务启动后执行如下两步:
    1. 都授权有复制权限的用户账号
    2. 各把对方指定为主节点
    复制时应该注意的问题:
    • 1、从服务设定为"只读"
      • 在从服务器启动read_only,但仅对非SUPPER权限的用户有效
      • 阻止所有用户:

    mysql>FLUSH TABLES WITH READ LOCK;

    • 2、尽量确保复制时的事务安全
      • 在master节点启用参数
        • sync_binlog=ON
        • 如果用到的是InnoDB存储引起
          • innodb_flush_logs_at_trx_commit=ON
          • innodb_support_xa=ON
    • 3、从服务器意外中止时尽量避免自动启动复制线程
    • 4、从节点: 设置参数
      • sync_master_info=ON
      • sync_relay_log_info=ON

    半同步复制

    • 支持多种插件: /usr/lib64/mysql/plugins/
    • 需要安装方可使用:
      mysql>INSTALL PLUGIN plugin_name SONAME 'shared_library_name';
    半同步复制
    • semisync_master.so
    • semisync_slave.so
    主节点

    INSTALL PLUGIN rpl_semi_sync_master SONAME 'semisync_master.so';

    SHOW GLOBAL VARIABLES LIKE '%rpl_semi%';

    SET GLOBAL rpl_semi_sync_master_enabled=ON;

    从节点:

    INSTALL PLUGIN rpl_semi_sync_slave SONAME 'semisync_slave.so';

    SHOW GLOBAL VARIABLES LIKE '%rpl_semi%';

    SET GLOBAL rpl_semi_sync_slave_enabled=ON;

    复制过滤器

    • 仅复制有限一个或几个数据库相关的数据,而非所有;由复制过滤器进行
    • 有两种实现思路:
    • (1)主服务器
      • 主服务器仅向二进制日志中记录相关特定数据库相关的写操作
      • 问题: 其他库的time-point recover将无从实现
        • binlog_do_db=
        • binlog_ignore_db=
    • (2)从服务器
      • 从服务器的SQL THREAD仅重放关注的数据库或表相关的事件,并将其应用于本地
      • 问题: 网络IP和磁盘IO
        • Replicate_do_db=
        • Replicate_Ignore_db=
        • Replicate_do_table=
        • Replicate_Ignore_table=
        • Replicate_wild_do_table=
        • Replicate_wild_ignore_table=

    复制的监控和维护

    • (1)清理日志: PURGE
      • PURGE{ BINARY|MASTER } LOGS { TO'log_name'|BEFORE datetime_expr };
    • (2)复制监控
      • MASTER:
        • SHOW MASTER STATUS
        • SHOW BINLOG EVENTS
        • SHOW BINARY LOGS
      • SLAVE:
        • SHOW SLAVE STATUS
        • 判断从服务器是否落后于主服务:
          • Second_Behind_Master: 0
    • (3)如何确定主从节点数据是否一致?
      • 通过表的CHECKSUM检查
      • 使用percona-tools中pt-table-checksum
    • (4)主从数据不一致时的修复方法?
      • 重新复制

    主从复制的读写分离

    • mysql-proxy --> atlas
    • amoeba for MySQL: 读写分离、分片
    • OneProxy
    • 双主或多主模型是无须实现读写分离,仅需要负载均衡: haproxy,nginx,lvs,.....
      • pxc: Percona XtraDB Cluster
      • MariaDB Cluster

    主从数据不一致时的修复方法

    方法一:重新复制数据库,结合二进制文件恢复。
    方法二:pt-table-sync修复从库不一致的数据
    使用方法:pt-table-sync [OPTIONS] DSN [DSN]
    pt-table-sync: 高效的同步MySQL表之间的数据,它可以做单向和双向同步的表数据。可以同步单个表,也可以同步整个库。它不同步表结构、索引、或任何其他模式对象。所以在修复一致性之前需要保证它们表存在。

    #同步主从数据
    [root@mysql-20 ~]# pt-table-sync --print --replicate=test.checksum h=192.168.1.21,u=myadmin,p=mypass,P=3306 h=192.168.1.19,u=myadmin,p=mypass,P=3306 #第一个ip是主节点,第二个ip是从节点
    #或者
    #用一个从节点ip执行同步库里的指定表
    [root@mysql-20 bin]# pt-table-sync --print --sync-to-master h=192.168.1.19,u=myadmin,p=mypass,P=3306 --databases mysql --tables tbl3
    
    参数的意义:
    --replicate=  :指定通过pt-table-checksum得到的表,这2个工具差不多都会一直用。
    --databases=  : 指定执行同步的数据库,多个用逗号隔开。
    --tables=     :指定执行同步的表,多个用逗号隔开。
    --sync-to-master :指定一个DSN,即从的IP,他会通过show processlist或show slave status 去自动的找主。
    h=127.0.0.1   :服务器地址,命令里有2个ip,第一次出现的是M的地址,第2次是Slave的地址。
    u=root        :帐号。
    p=123456      :密码。
    --print       :打印,但不执行命令。
    --execute     :执行命令。
    

    注意:要是表中没有唯一索引或则主键则会报错:
    Can't make changes on the master because no unique index exists at /usr/local/bin/pt-table-sync line 10591.

    4、描述MHA及基于wresp协议实现多主模型Galera cluster的配置实例

    参考文献连接:https://www.cnblogs.com/xuanzhi201111/p/4231412.html
    https://www.cnblogs.com/kevingrace/p/5662839.html

    一、MySQL高可用方案

    1、MHA架构介绍:

    • MHA(Master High Availability)目前在MySQL高可用方面是一个相对成熟的解决方案,它由日本DeNA公司youshimaton(现就职于Facebook公司)开发,是一套优秀的作为MySQL高可用性环境下故障切换和主从提升的高可用软件。在MySQL故障切换过程中,MHA能做到在0~30秒之内自动完成数据库的故障切换操作,并且在进行故障切换的过程中,MHA能在最大程度上保证数据的一致性,以达到真正意义上的高可用。

    2、MHA节点组成:

    • MHA Manager(管理节点)和MHA Node(数据节点)。MHA Manager可以单独部署在一台独立的机器上管理多个master-slave集群,也可以部署在一台slave节点上。MHA Node运行在每台MySQL服务器上,MHA Manager会定时探测集群中的master节点,当master出现故障时,它可以自动将最新数据的slave提升为新的master,然后将所有其他的slave重新指向新的master。整个故障转移过程对应用程序完全透明。

    3、MHA自动故障切换过程

    • MHA试图从宕机的主服务器上保存二进制日志,最大程度的保证数据的不丢失,但这并不总是可行的。例如,如果主服务器硬件故障或无法通过ssh访问,MHA没法保存二进制日志,只进行故障转移而丢失了最新的数据。使用MySQL 5.5的半同步复制,可以大大降低数据丢失的风险。MHA可以与半同步复制结合起来。如果只有一个slave已经收到了最新的二进制日志,MHA可以将最新的二进制日志应用于其他所有的slave服务器上,因此可以保证所有节点的数据一致性。

    4、MHA节点集群条件

    • 目前MHA主要支持一主多从的架构,要搭建MHA,要求一个复制集群中必须最少有三台数据库服务器,一主二从,即一台充当master,一台充当备用master,另外一台充当从库,因为至少需要三台服务器,出于机器成本的考虑,淘宝也在该基础上进行了改造,目前淘宝TMHA已经支持一主一从。

    二、MHA工具:

    • MHA软件的架构:由两部分组成,Manager工具包和Node工具包,具体的说明如下。
    1、Manager工具包主要包括以下几个工具:

    masterha_check_ssh 检查MHA的SSH配置状况
    masterha_check_repl 检查MySQL复制状况
    masterha_manger 启动MHA
    masterha_check_status 检测当前MHA运行状态
    masterha_master_monitor 检测master是否宕机
    masterha_master_switch 控制故障转移(自动或者手动)
    masterha_conf_host 添加或删除配置的server信息

    2、Node工具包(这些工具通常由MHA Manager的脚本触发,无需人为操作)主要包括以下几个工具:

    save_binary_logs(保存二进制日志) 保存和复制master的二进制日志
    apply_diff_relay_logs(应用差异中继日志) 识别差异的中继日志事件并将其差异的事件应用于其他的slave
    filter_mysqlbinlog 去除不必要的ROLLBACK事件(MHA已不再使用这个工具)
    purge_relay_logs(清理中继日志) 清除中继日志(不会阻塞SQL线程)

    3、MHA保持数据的一致性
    • 主要通过MHA node的以下几个工具实现,但是这些工具由mha manager触发:
    • save_binary_logs 如果master的二进制日志可以存取的话,保存复制master的二进制日志,最大程度保证数据不丢失
    • apply_diff_relay_logs 相对于最新的slave,生成差异的中继日志并将所有差异事件应用到其他所有的slave

    注意:

    对比的是relay log,relay log越新就越接近于master,才能保证数据是最新的。
    purge_relay_logs删除中继日志而不阻塞sql线程

    三、MHA的优势

    1、故障切换快

    • 在主从复制集群中,只要从库在复制上没有延迟,MHA通常可以在数秒内实现故障切换。

    2、master故障不会导致数据不一致

    • 当目前的master出现故障时,MHA自动识别slave之间中继日志(relay log)的不同,并应用到所有的slave中。这样所有的salve能够保持同步,只要所有的slave处于存活
      状态。和Semi-Synchronous Replication一起使用,(几乎)可以保证没有数据丢失。

    3、无需修改当前的MySQL设置

    • MHA的设计的重要原则之一就是尽可能地简单易用。MHA工作在传统的MySQL版本5.0和之后版本的主从复制环境中。和其它高可用解决方法比,MHA并不需要改变MySQL的部署环境。MHA适用于异步和半同步的主从复制。

    • 启动/停止/升级/降级/安装/卸载MHA不需要改变(包扩启动/停止)MySQL复制。当需要升级MHA到新的版本,不需要停止MySQL,仅仅替换到新版本的MHA,然后重启MHA Manager
      就好了。

    • MHA运行在MySQL 5.0开始的原生版本上。MHA工作的包括5.0/5.1/5.5的原生版本的MySQL上,如果现有老版本实现高可用,并不需要迁移新版本。

    4、无需增加大量的服务器

    • MHA由MHA Manager和MHA Node组成。MHA Node运行在需要故障切换/恢复的MySQL服务器上,因此并不需要额外增加服务器。MHA Manager运行在特定的服务器上,因此需要增加一台(实现高可用需要2台),但是MHA Manager可以监控大量(甚至上百台)单独的master,因此,并不需要增加大量的服务器。即使在一台slave上运行MHA Manager也是可以的。综上,实现MHA并没用额外增加大量的服务。

    5、无性能下降

    • MHA适用与异步或半同步的MySQL复制。监控master时,MHA仅仅是每隔几秒(默认是3秒)发送一个ping包,并不发送重查询。可以得到像原生MySQL复制一样快的性能。

    6、适用于任何存储引擎

    • MHA可以运行在只要MySQL复制运行的存储引擎上,并不仅限制于InnoDB,即使在不易迁移的传统的MyISAM引擎环境,一样可以使用MHA。

    四、实验示例

    image

    1、 主节点配置:192.168.1.19

    #安装mariadb同步时间
    [root@mysql-19 ~]# yum install mariadb-server ntpdate -y
    [root@mysql-19 ~]# ntpdate time1.aliyun.com
    # 修改Mariadb配置文件
    [root@mysql-19 ~]# vim /etc/my.cnf.d/server.cnf 
    [mysqld]
    innodb_file_per_table=ON
    skip_name_resolve=ON
    
    server_id=1
    log_bin=master-log
    relay_log=relay-log
    #安装MHA的node软件
    [root@mysql-19 ~]# yum install mha4mysql-node-0.56-0.el6.noarch.rpm -y
    
    [root@mysql-19 ~]# systemctl restart mariadb #重启服务
    #MHA用户授权
    MariaDB [(none)]> GRANT ALL ON *.* TO 'mhadmin'@'192.168.1.%' IDENTIFIED BY 'mhapass';
    Query OK, 0 rows affected (0.00 sec)
    #从节点授权
    MariaDB [(none)]> GRANT REPLICATION CLIENT,REPLICATION SLAVE  ON *.* TO 'repladmin'@'192.168.1.%' IDENTIFIED BY 'replpass';
    Query OK, 0 rows affected (0.05 sec)
    
    MariaDB [(none)]> FLUSH PRIVILEGES;
    Query OK, 0 rows affected (0.00 sec)
    #生成ssh秘钥
    [root@mysql-19 ~]# ssh-keygen -t rsa -P ''
    SHA256:CLgVL5NWYnswUiZKKTLfihEyicoGpS7a9h01DwQXo+o root@mysql-19
    The key's randomart image is:
    +---[RSA 2048]----+
    |.+=.O o +.       |
    |%+ * X + .       |
    |X=..O + .        |
    |+o.+.* o         |
    |o+... . S        |
    |+...   . +       |
    |. o E .   .      |
    | . . . .         |
    |    . .          |
    +----[SHA256]-----+
    
    #分配给本机一个秘钥
    [root@mysql-19 ~]# ssh-copy-id -i .ssh/id_rsa.pub root@192.168.1.19
    
    #拷贝到其他节点上 ,如果提示未找到.ssh目录,到/root下创建
    [root@mysql-19 ~]# scp -p .ssh/authorized_keys .ssh/id_rsa{,.pub} root@192.168.1.60:/root/.ssh/
    
    [root@mysql-19 ~]# scp -p .ssh/authorized_keys .ssh/id_rsa{,.pub} root@192.168.1.20:/root/.ssh/
    
    [root@mysql-19 ~]# scp -p .ssh/authorized_keys .ssh/id_rsa{,.pub} root@192.168.1.21:/root/.ssh/
    
    #测试秘钥是否可用
    [root@mysql-19 ~]# ssh root@192.168.1.20 'ifconfig'
    #返回配置表示秘钥可用
    ens33: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500  
            inet 192.168.1.20  netmask 255.255.255.0  broadcast 192.168.1.255
    
    

    2、从节点一配置:192.168.1.20

    #安装mariadb同步时间
    [root@mysql-20 ~]# yum install mariadb-server ntpdate -y
    [root@mysql-20 ~]# ntpdate time1.aliyun.com
    # 修改Mariadb配置文件
    [root@mysql-20 ~]# vim /etc/my.cnf.d/server.cnf
    [mysqld]
    innodb_file_per_table=ON
    skip_name_resolve=ON
    
    server_id=11
    relay_log=relay-log
    log_bin=master-log
    relay_log_purge=0
    read_only=1
    
    [root@mysql-20 ~]# yum install mha4mysql-node-0.56-0.el6.noarch.rpm -y
    
    [root@mysql-20 ~]# systemctl restart mariadb #重启服务
    
    

    3、从节点二配置:192.168.1.21

    #安装mariadb同步时间
    [root@mysql-21 ~]# yum install mariadb-server ntpdate -y
    [root@mysql-21 ~]# ntpdate time1.aliyun.com
    # 修改Mariadb配置文件
    [root@mysql-21 ~]# vim /etc/my.cnf.d/server.cnf 
    [mysqld]
    innodb_file_per_table=ON
    skip_name_resolve=ON
    
    server_id=13
    relay_log=relay-log
    log_bin=master-log
    relay_log_purge=0
    read_only=1
    [root@mysql-21 ~]# yum install mha4mysql-node-0.56-0.el6.noarch.rpm -y
    
    [root@mysql-21 ~]# systemctl start mariadb #重启服务
    
    

    4、安装MHA节点:192.168.1.60

    • 下载MHA两rpm包,不太好找,github网站的文件由于较长时间没有维护了,编译安装一直没有成功,所以在csdn上面找到的rpm包安装。
    • MHA节点manager和node包都要安装,其他从节点只安装node包即可。
    注意:安装顺序为先安装node包-->manager包,否则会报错。
    #因为需要perl环境,所以要先安装epel源
    [root@proxysql-60 ~]# yum install epel-release  -y #安装epel源
    
    #下载两个rpm包
    [root@mha-60 ~]# ls
     mha4mysql-manager-0.56-0.el6.noarch.rpm  mha4mysql-node-0.56-0.el6.noarch.rpm
    
    #首先安装node包,顺序很重要
    [root@mha-60 ~]# yum install mha4mysql-node-0.56-0.el6.noarch.rpm  -y
    
    #再安装manager包
    [root@mha-60 ~]# yum install mha4mysql-manager-0.56-0.el6.noarch.rpm -y
    
    #编辑MHA主节点配置文件
    [root@mha-60 ~]# mkdir /etc/masterha
    [root@mha-60 ~]# vim /etc/masterha/app1.cnf
    [server default] #默认配置段
    user=mhadmin
    password=mhapass
    
    repl_user=repladmin
    repl_password=replpass
    
    ssh_user=root
    ssh_port=22
    #ssh_connection_timeout=30
    #ssh_options="-o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null"
    ping_interval=1
    
    manager_workdir=/data/masterha/app1
    manager_log=/data/masterha/app1/manager.log
    remote_workdir=/data/masterha/app1
    
    [server1]
    hostname=192.168.1.19
    candidate_master=1  #是否可以提升为主节点
    
    [server2]
    hostname=192.168.1.20
    candidate_master=1  #是否可以提升为主节点
    
    [server3]
    hostname=192.168.1.21
    candidate_master=1  #是否可以提升为主节点
    
    #检查ssh通信
    [root@mha-60 ~]# masterha_check_ssh --conf=/etc/masterha/app1.cnf 
    ........OK
    ........OK
    All SSH connection tests passed successfully.
    
    #检查主从节点
    [root@mha-60 ~]# masterha_check_repl --conf=/etc/masterha/app1.cnf 
    ..............
    MySQL Replication Health is OK.
    
    #启动MHA,并指明保存日志的路径,最后的&符号代表在后台执行
    [root@mha-60 data]# nohup masterha_manager --conf=/etc/masterha/app1.cnf &> /data/masterha/app1/manager.log & 
    [2] 3544
    
    #检查启动进程
    [root@mha-60 ~]# ps aux
    root       2724  0.1  2.1 297028 21616 pts/1    S    08:00   0:00 perl /usr/bin/masterha_manager --conf=/etc/masterha/app1.cnf
    
    #查看当前主节点状态
    [root@mha-60 ~]# masterha_check_status --conf=/etc/masterha/app1.cnf 
    app1 (pid:13567) is running(0:PING_OK), master:192.168.1.19
    
    #停止MHA
    [root@mha-60 ~]# masterha_stop --conf=/etc/masterha/app1.cnf   
    MHA Manager is not running on app1(2:NOT_RUNNING).
    
    
    • 启动时时候,如果碰到not running on app1(2:NOT_RUNNING).,把已有的perl进程kill掉,再次尝试启动。
    • 常用查看状态命令:
    检查MHA运行状态
    • masterha_check_status --conf=/etc/masterha/app1.cnf
    检查MHA互信
    • masterha_check_ssh --conf=/etc/masterha/app1.cnf
    检查复制情况
    • masterha_check_repl --conf=/etc/masterha/app1.cnf

    五、测试:

    1、主节点切换测试

    • 现在数据库主节点是192.168.1.19,首先停掉主节点sql进程
    #安装killall
    [root@mysql-19 ~]# yum install psmisc -y
    #停止mysql服务进程
    [root@mysql-19 ~]# killall -9 mysqld mysqld_safe
    
    
    • 查看MHA日志,切换是否成功
    #自动切换成功
    [root@mha-60 ~]# tail -100 /data/masterha/app1/manager.log 
    ----- Failover Report -----
    app1: MySQL Master failover 192.168.1.19(192.168.1.19:3306) to 192.168.1.20(192.168.1.20:3306) succeeded  #主节点已经切换
    Master 192.168.1.19(192.168.1.19:3306) is down! #原主节点已下线
    .......
    Selected 192.168.1.20(192.168.1.20:3306) as a new master. #新主节点
    192.168.1.20(192.168.1.20:3306): OK: Applying all logs succeeded.  #新主节点获取所有日志成功
    192.168.1.21(192.168.1.21:3306): This host has the latest relay log events. #从节点
    .......
    
    #自动切换后MHA线程停止工作
    [root@mha-60 ~]# masterha_check_status --conf=/etc/masterha/app1.cnf 
    app1 is stopped(2:NOT_RUNNING).
    
    
    • 在新主节点192.168.1.20上测试,是否为变成主节点
    #新主节点创建新表
    MariaDB [mydb]> show tables;
    +----------------+
    | Tables_in_mydb |
    +----------------+
    | tbl1           |
    +----------------+
    1 row in set (0.00 sec)
    
    MariaDB [mydb]> create table tbl2(num int(10),addr char(50));
    Query OK, 0 rows affected (0.02 sec)
    
    MariaDB [mydb]> show tables;
    +----------------+
    | Tables_in_mydb |
    +----------------+
    | tbl1           |
    | tbl2           |
    +----------------+
    2 rows in set (0.00 sec)
    
    #在192.168.1.21从节点查看
    MariaDB [mydb]> show tables; #已同步
    +----------------+
    | Tables_in_mydb |
    +----------------+
    | tbl1           |
    | tbl2           |
    +----------------+
    
    

    2、故障节点恢复

    • 新主节点192.168.1.20备份数据库
    #新节点数据库备份
    [root@mysql-20 ~]# mysqldump -uroot -x -R -E --triggers --master-data=2 --all-databases > alldb.sql 
    #备份传给故障节点
    [root@mysql-20 ~]# scp alldb.sql 192.168.1.19:/root/
    
    
    • 故障节点192.168.1.19数据库恢复
    # 修改Mariadb配置文件
    [root@mysql-19 ~]# vim /etc/my.cnf.d/server.cnf 
    [mysqld]
    innodb_file_per_table=ON
    skip_name_resolve=ON
    
    server_id=1
    log_bin=master-log
    relay_log=relay-log
    relay_log_purge=0
    read_only=1
    #启动mysql,恢复数据库
    [root@mysql-19 ~]# systemctl start mariadb
    [root@mysql-19 ~]# mysql < alldb.sql
    #查看二进制文件位置
    [root@mysql-19 ~]# less -30 alldb.sql
    .........
    -- CHANGE MASTER TO MASTER_LOG_FILE='master-log.000001', MASTER_LOG_POS=352;
    #根据二进制日志恢复并启动从节点
    MariaDB [(none)]>  CHANGE MASTER TO MASTER_HOST='192.168.1.20',MASTER_USER='repladmin',MASTER_PASSWORD='replpass',MASTER_LOG_FILE='master-log.000001',MASTER_LOG_POS=352;
    Query OK, 0 rows affected (0.02 sec)
    #启动线程
    MariaDB [(none)]> START SLAVE;
    Query OK, 0 rows affected (0.00 sec)
    #查看信息
    MariaDB [(none)]> SHOW SLAVE STATUS\G;
    *************************** 1. row ***************************
                   Slave_IO_State: Waiting for master to send event
                      Master_Host: 192.168.1.20
                      Master_User: repladmin
                      Master_Port: 3306
                    Connect_Retry: 60
                  Master_Log_File: master-log.000001
              Read_Master_Log_Pos: 352
                   Relay_Log_File: relay-log.000002
                    Relay_Log_Pos: 530
            Relay_Master_Log_File: master-log.000001
                 Slave_IO_Running: Yes
                Slave_SQL_Running: Yes
    
    
    • MHA启动
    [root@mha-60 ~]# masterha_check_repl --conf=/etc/masterha/app1.cnf 
    .........
    MySQL Replication Health is OK.
    #启动
    [root@mha-60 ~]# nohup masterha_manager --conf=/etc/masterha/app1.cnf &>> /data/masterha/app1/manager.log & 
    [2] 18978
    
    

    相关文章

      网友评论

          本文标题:mysql备份、复制、MHA配置

          本文链接:https://www.haomeiwen.com/subject/zzqrmqtx.html