mysql 集群 一主两从环境测试,MHA主备切换

本文详述了一主两从MySQL集群的搭建过程,包括虚拟机与数据库安装、半同步复制配置,以及MHA(Master High Availability)的设置与主备切换测试。在配置MHA后,实现了在30秒内完成故障切换,确保高可用性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

目录

 

前言

1. 相关安装文件

2. 虚拟机、mysql数据库安装

2.1 安装VMware 15 以及 linux 操作系统

2.2 安装mysql数据库

2.2.1安装环境准备

​2.2.2 mysql 数据库安装

2.3 克隆centos虚拟机

3. 配置一主两从mysql集群模式

3.1配置主库

3.2 配置从库

4. 配置半同步复制

4.1 主库配置

4.2 从库配置

5.配置 MHA

5.1 MHA说明

5.2 配置MHA

5.2.1 安装新的Centos服务器,用于安装MHA

5.2.2 安装前配置

5.2.2 安装MHA-node

5.2.3 安装MHA-manager

5.2.4测试主备切换

5.2.5 恢复停掉的主库


 

前言

本文章是《拉勾高薪训练营》中的《mysql海量数据存储与优化》 的作业

参考博客:另一个同学写的mysql搭建主从模式高可用

参考博客:mha0.56版本安装使用排错

参考博客:VMware创建CentOS7虚拟机

参考博客:linux 使用ssh密钥实现免密码登录

1. 相关安装文件

  • 虚拟机环境VMware15
  • linux CentOS 7 64位系统镜像iso
  • mysql安装包
  • mha安装包
  • SecureCRT

2. 虚拟机、mysql数据库安装

2.1 安装VMware 15 以及 linux 操作系统

(1)从网上下载 VMware 15安装包,安装虚拟机,这里就不做叙述

(2)打开VMware 15 创建虚拟机,按照提示安装 CentOS 7 操作系统

注意事项:笔者在安装CentOS 时,提示虚拟机打印机设备未启用,然后虚拟机黑屏,无法关闭虚拟机,无法重启。

在虚拟机页面(编辑>首选项>设备>虚拟机打印机>启用虚拟打印机),选上启用虚拟打印机后,就可用正常启用虚拟机了。如果有同学遇到相同的情况,在此提供一个参考

2.2 安装mysql数据库

2.2.1安装环境准备

(1)用SecureCRT连接VMware虚拟机

(2)在home下创建目录mysql,/home/mysql

(2)使用SeureCRT自带的SecureFX上传mysql安装包

2.2.2 mysql 数据库安装

(1) 确认linux是由有原装mysql,如果有的话,就删掉

[root@localhost mha]#  rpm -qa | grep mariadb
mariadb-libs-5.5.41-2.el7_0.x86_64
[root@localhost mha]# rpm -e mariadb-libs-5.5.41-2.el7_0.x86_64 --nodeps 

(2)进入到mysql安装包的上传目录/home/mysql,解压安装包,并执行安装命令

[root@localhost mysql]# cd /home/mysql/
[root@localhost mysql]# tar -xvf mysql-5.7.28-1.el7.x86_64.rpm-bundle.tar 
mysql-community-embedded-5.7.28-1.el7.x86_64.rpm
mysql-community-libs-compat-5.7.28-1.el7.x86_64.rpm
mysql-community-devel-5.7.28-1.el7.x86_64.rpm
mysql-community-embedded-compat-5.7.28-1.el7.x86_64.rpm
mysql-community-libs-5.7.28-1.el7.x86_64.rpm
mysql-community-test-5.7.28-1.el7.x86_64.rpm
mysql-community-common-5.7.28-1.el7.x86_64.rpm
mysql-community-embedded-devel-5.7.28-1.el7.x86_64.rpm
mysql-community-client-5.7.28-1.el7.x86_64.rpm
mysql-community-server-5.7.28-1.el7.x86_64.rpm

(3)解压后的组件不需要全部安装,安装其中的几个就可用

[root@localhost mysql] rpm -ivh mysql-community-common-5.7.28-1.el7.x86_64.rpm
[root@localhost mysql] rpm -ivh mysql-community-libs-5.7.28-1.el7.x86_64.rpm
[root@localhost mysql] rpm -ivh mysql-community-libs-compat-5.7.28-1.el7.x86_64.rpm
[root@localhost mysql] rpm -ivh mysql-community-client-5.7.28-1.el7.x86_64.rpm
[root@localhost mysql] rpm -ivh mysql-community-server-5.7.28-1.el7.x86_64.rpm
[root@localhost mysql] rpm -ivh mysql-community-devel-5.7.28-1.el7.x86_64.rpm

(4) 进行mysql初始化,初始化完成后,会给root用户生成一个默认密码,一般在/var/log/mysqld.log日志文件中的最下面

[root@localhost mysql] mysqld --initialize --user=mysql # --user 是可选的参数,意思是创建一个名称是 mysql 的用户
[root@localhost mysql] tail -f  /var/log/mysqld.log
A temporary password is generated for root@localhost:decGRE#$

(5)启动mysql,并查看mysql的运行状态

[root@localhost mysql] systemctl start mysqld.service
[root@localhost mysql] systemctl status mysqld.service 

(6)使用上面的密码登录mysql,并修改root密码

[root@localhost mysql] mysql -uroot -pdecGRE#$
mysql > set password=password('123456');

(7)开放3306端口或者关闭防火墙,因为我这里是测试环境,所以直接关闭了防火墙,在正式环境需要开放3306端口

[root@localhost mysql] systemctl stop firewalld     # firewalld 防火墙,CentOS 自带
[root@localhost mysql] systemctl disable firewalld.service   # 彻底一点,从开机启动中禁用掉

2.3 克隆centos虚拟机

因为我是练习环境,直接复制虚拟机

配置好mysql之后,直接拷贝两份虚拟机,这样就不需要再配置两次虚拟机环境了

(1) 右键点击已配置好的虚拟机>管理>克隆

(2) 需要注意,复制的虚拟机中要修改一下mysql的 /var/lib/mysql/auto.cnf,这个里面记录的是mysql的UUID,每个MySQL环境不能一样

(3)修复方式就是将这个文件删了,重启一下mysql就可以了

[root@localhost mysql]# systemctl stop mysqld.service

[root@localhost mysql]# mv /var/lib/mysql/auto.cnf /var/lib/mysql/auto.cnf.bak

[root@localhost mysql]# systemctl start mysqld.service

3. 配置一主两从mysql集群模式

3.1配置主库

(1)选一台虚拟机做为主数据库,修改配置文件/etc/my.cnf,保存退出

# log_bin
server-id=1                          # 设置 server-id,每个数据库不能重复,必须
log_bin=mysql-bin                    # 指定 binlog 的名称,相当于开启 bin log, 必须
sync-binlog=1                        # 开始刷新 bin log 到磁盘,每次有更新事务,完成后都要马上刷新到磁盘
binlog-ignore-db=performance_schema  # binlog 中忽略的库
binlog-ignore-db=information_schema
binlog-ignore-db=sys

#binlog-do-db=lagou                   # 可以使用这个参数指定只同步那个库

(2)重启mysql

[root@localhost mysql]# systemctl restart mysqld

(3)登录进mysql,进行授权操作

mysql > grant replication slave on *.* to 'root'@'%' identified by 'root';  
mysql > grant all privileges on *.* to 'root'@'%' identified by 'root';
mysql > flush privileges;

(4)查看一下master的状态,注意下面的FilePosition参数,之后配置从库时需要用到

mysql> show master status;
+------------------+----------+--------------+-------------------------------------------+-------------------+
| File             | Position | Binlog_Do_DB | Binlog_Ignore_DB                          | Executed_Gtid_Set |
+------------------+----------+--------------+-------------------------------------------+-------------------+
| mysql-bin.000003 |      154 |              | performance_schema,information_schema,sys |                   |
+------------------+----------+--------------+-------------------------------------------+-------------------+

3.2 配置从库

(1)修改每个从库的配置文件/etc/my.cnf

server-id=3   # 注意一个集群环境中的 id 不能冲突
relay_log=mysql-relay-bin

# read_only=1    # 开启只读

(2)重启数据库,配置从库参数,需要注意两个参数

master_log_file:使用的是主库中bin log文件名,使用的是3.1.4master状态中的File这一个参数的值

master_log_pos:主库bin log文件当前写的位置,使用的是3.1.4master状态中的Position这一个参数的值

[root@localhost mysql]# systemctl restart mysqld
[root@localhost mysql]# mysql -uroot -proot
mysql > show slave status;      # 查看 salve 状态,如果已经是开启状态,需要先 stop slave;修改配置后,在 start slave;
# 设置主库的 bin log 信息(用到了主库中当前 bin log 的文件名称以及当前写位置)
mysql > change master to master_host='192.168.122.128',master_port=3306,master_user='root',master_password='root',master_log_file='mysql-bin.000003',master_log_pos=154;
mysql > show slave status;    # 查看从库状态, 第一次配置,此时连接 master 的状态应该是 No
mysql > start slave;          # 开启 salve 模式

 (3) 查看从库状态,证明从库连上了master


mysql> show slave status \G;
*************************** 1. row ***************************
               Slave_IO_State: Waiting for master to send event
                  Master_Host: 192.168.122.128
                  Master_User: root
                  Master_Port: 3306
                Connect_Retry: 60
              Master_Log_File: mysql-bin.000012
          Read_Master_Log_Pos: 433
               Relay_Log_File: mysql-relay-bin.000038
                Relay_Log_Pos: 320
        Relay_Master_Log_File: mysql-bin.000012
             Slave_IO_Running: Yes
            Slave_SQL_Running: Yes
              Replicate_Do_DB: 
          Replicate_Ignore_DB: 
           Replicate_Do_Table: 
       Replicate_Ignore_Table: 
      Replicate_Wild_Do_Table: 
  Replicate_Wild_Ignore_Table: 
                   Last_Errno: 0
                   Last_Error: 
                 Skip_Counter: 0
          Exec_Master_Log_Pos: 433
              Relay_Log_Space: 1569
              Until_Condition: None
               Until_Log_File: 
                Until_Log_Pos: 0
           Master_SSL_Allowed: No
           Master_SSL_CA_File: 
           Master_SSL_CA_Path: 
              Master_SSL_Cert: 
            Master_SSL_Cipher: 
               Master_SSL_Key: 
        Seconds_Behind_Master: 0
Master_SSL_Verify_Server_Cert: No
                Last_IO_Errno: 0
                Last_IO_Error: 
               Last_SQL_Errno: 0
               Last_SQL_Error: 
  Replicate_Ignore_Server_Ids: 
             Master_Server_Id:
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值