三十分钟带你学会企业MySQL部署

主机环境

IP系统说明
172.25.254.10Red Hat Linux Server 7.9主服务器
172.25.254.20Red Hat Linux Server 7.9从服务器
172.25.254.30Red Hat Linux Server 7.9从服务器
172.25.254.40Red Hat Linux Server 7.9MySQL-Router
172.25.254.50Red Hat Linux Server 7.9MHA主机

MySQL 源码安装

源码编译

172.25.254.10

# 获取MySQL源码包
wget https://downloads.mysql.com/archives/get/p/23/file/mysql-boost-5.7.44.tar.gz
tar zxf mysql-boost-5.7.44.tar.gz

# 解决依赖问题
yum install cmake gcc-c++.x86_64 openssl-devel.x86_64 ncurses-devel.x86_64 -y
# Red Hat 7.9 中没有
yum install libtirpc-devel-0.2.4-0.16.el7.x86_64.rpm -y

# 环境检测
cd mysql-5.7.44/
cmake -DCMAKE_INSTALL_PREFIX=/usr/local/mysql -DMYSQL_DATADIR=/data/mysql -DMYSQL_UNIX_ADDR=/data/mysql/mysql.sock -DWITH_INNOBASE_STORAGE_ENGINE=1 -DWITH_EXTRA_CHARSETS=all -DDEFAULT_CHARSET=utf8mb4 -DDEFAULT_COLLATION=utf8mb4_unicode_ci -DWITH_BOOST=/root/mysql-5.7.44/boost/boost_1_59_0

# 进行编译
make -j4			# 使用几个核心进行编译
make install

MySQL初始化

172.25.254.10

# 建立MySQL用户
useradd -s /sbin/nologin -M mysql

# 根据mysql.server注释,放置启动脚本
cp /usr/local/mysql/support-files/mysql.server /etc/init.d/mysqld

# 主配置文件
vim /etc/my.cnf
[mysqld]
datadir=/data/mysql          		# 指定数据目录
socket=/data/mysql/mysql.sock		# 指定套接字
symbolic-links=0             		# 数据只能存放到数据目录中,禁止链接到数据目录

# 创建MySQL数据目录,并修改权限
mkdir /data/mysql -p
chown mysql.mysql -R /data/mysql

# 给MySQL命令配置环境变量
vim ~/.bash_profile
PATH=$PATH:$HOME/bin:/usr/local/mysql/bin
# 重载环境变量
source  ~/.bash_profile

# 数据库初始化
# 初始化失败后,想要再次初始化,需要删除/data/mysql/下的内容
mysqld --user mysql --initialize
# A temporary password is generated for root@localhost: >Dlt,hf;i26#
# 记录root初始密码:root@localhost: >Dlt,hf;i26#

# 启动MySQL
/etc/init.d/mysqld start
# 不加参数,默认运行级别2.3.4.5时,开机启动MySQL
chkconfig mysqld on	

# MySQL安全初始化
mysql_secure_installation
# 输入当前密码,即>Dlt,hf;i26#
# 输入新密码
# 再次输入新密码
# 是否启用密码插件(是否开启强密码)	(企业中启用)
# 是否要重置密码
# 是否删除匿名用户
# 是否禁止root用户远程登录
# 是否删除测试库
# 是否现在重载权限库

# 至此完成MySQL的源码安装及初始化

效果演示

mysql -u root -p
Enter password:
mysql> show databases;

在这里插入图片描述

MySQL 快速部署

仅适用于,有一台主机已经进行MySQL源码安装并进行初始化后,将文件传输给新主机

172.25.254.10

scp -pr /usr/local/mysql root@172.25.254.20:/usr/local/
scp -pr /usr/local/mysql root@172.25.254.30:/usr/local/

新MySQL主机

cp /usr/local/mysql/support-files/mysql.server /etc/init.d/mysqld
useradd -s /sbin/nologin -M mysql
mkdir /data/mysql -p
chown mysql.mysql -R /data/mysql

vim ~/.bash_profile
PATH=$PATH:$HOME/bin:/usr/local/mysql/bin
# 重载环境变量
source  ~/.bash_profile

vim /etc/my.cnf
[mysqld]
datadir=/data/mysql
socket=/data/mysql/mysql.sock
symbolic-links=0

mysqld --user mysql --initialize
/etc/init.d/mysqld start
mysql_secure_installation

效果演示

在这里插入图片描述在这里插入图片描述

MySQL 主从复制

无数据时,添加Salve

Master:172.25.254.10

vim /etc/my.cnf
[mysqld]
datadir=/data/mysql
socket=/data/mysql/mysql.sock
symbolic-links=0
log-bin=mysql-bin	# 开启MySQL二进制日志
server-id=10				# 设置ID,区分主从设备

# 重启MySQL
/etc/init.d/mysqld restart

# 创建认证用户
mysql -u root -p
# 用于Salve认证、复制二进制日志
CREATE USER 'xxx'@'%' IDENTIFIED BY 'aaa';
# 对用户授权
GRANT REPLICATION SLAVE ON *.* TO 'xxx'@'%';
# 查看Master状态
SHOW MASTER STATUS\G
             # MASTER_LOG_FILE
             File: mysql-bin.000001
         # MASTER_LOG_POS
         Position: 593

# 二进制日志位置、查看二进制日志
cd /data/mysql/
mysqlbinlog mysql-bin.000001 -vv

Salve1:172.25.254.20

vim /etc/my.cnf
[mysqld]
datadir=/data/mysql
socket=/data/mysql/mysql.sock
symbolic-links=0
log-bin=mysql-bin
server-id=20

/etc/init.d/mysqld restart
mysql -u root -p

# 配置错误,先stop slave; 再重新配置,配置完成后,start slave;
CHANGE MASTER TO
MASTER_HOST='172.25.254.10',
MASTER_USER='xxx',
MASTER_PASSWORD='aaa',
MASTER_LOG_FILE='mysql-bin.000001',
MASTER_LOG_POS=593;

start slave;
SHOW SLAVE STATUS\G
...
             Slave_IO_Running: Yes
             # 两个Yes,即成功配置
            Slave_SQL_Running: Yes
...

效果演示

在这里插入图片描述
在这里插入图片描述

从设备,即能读,也能写,若需要从设备只读,需要在/etc/my.cnf中,设置super_read_only=on

有数据时,添加Salve

Salve1:172.25.254.20

mysqldump -u root -p ovo > ovo.sql;
scp ovo.sql root@172.25.254.30:/mnt/

生产环境中备份时需要锁表,保证备份前后的数据一致
FLUSH TABLES WITH READ LOCK;
备份完后解锁
UNLOCK TABLES;

Salve2:172.25.254.30

vim /etc/my.cnf
[mysqld]
datadir=/data/mysql
socket=/data/mysql/mysql.sock
symbolic-links=0
log-bin=mysql-bin
server-id=30
# 重启MySQL
/etc/init.d/mysqld restart

# 利用备份数据拉平数据
mysql -u root -p -e 'create database ovo;'
mysql -u root -p ovo < /mnt/ovo.sql;
mysql -u root -p -e 'select * from ovo.userlist;'
+----------+----------+
| username | password |
+----------+----------+
| ovo      | 111      |
+----------+----------+

# 先查看Master的信息,创建数据后,会发生变化
# 172.25.254.10
mysql -u root -p
SHOW MASTER STATUS\G
             File: mysql-bin.000001
         Position: 1235

# 进行认证
mysql -u root -p
CHANGE MASTER TO
MASTER_HOST='172.25.254.10',
MASTER_USER='xxx',
MASTER_PASSWORD='aaa',
MASTER_LOG_FILE='mysql-bin.000001',
MASTER_LOG_POS=1235;

# 配置错误,先stop slave; 再重新配置,配置完成后,start slave;
SHOW SLAVE STATUS\G
             Slave_IO_Running: Yes
            Slave_SQL_Running: Yes

效果演示

在这里插入图片描述在这里插入图片描述

延迟复制

# 从服务器上
STOP SLAVE SQL_THREAD;
CHANGE MASTER TO MASTER_DELAY=60;			# 延迟的时间(秒)
START SLAVE SQL_THREAD;

SHOW SLAVE STATUS\G
...
SQL_Delay: 60	# 设置成功
...

# 效果演示
# 在主设备写入数据后,立即在备份数据库中,查看数据
# 超过延迟时间后,再次查看数据

慢查询日志

SHOW variables  like "slow%";
+---------------------+------------------------------+
| Variable_name       | Value                        |
+---------------------+------------------------------+
| slow_launch_time    | 2                            |			# 线程缓慢启动时间
| slow_query_log      | OFF                          |			# 默认不开启
| slow_query_log_file | /data/mysql/mysql-3-slow.log |			# 慢查询日志存放地点
+---------------------+------------------------------+

SET GLOBAL slow_query_log=ON;			# 开启慢查询日志
SET long_query_time=4;			# 设置慢查询的时间阈值
SHOW VARIABLES like "long%";			# 查看当前数据库的慢查询日志的时间阈值
+-----------------+----------+
| Variable_name   | Value    |
+-----------------+----------+
| long_query_time | 4.000000 |
+-----------------+----------+

cat  /data/mysql/mysql-3-slow.log
/usr/local/mysql/bin/mysqld, Version: 5.7.44 (Source distribution). started with:
Tcp port: 3306  Unix socket: /data/mysql/mysql.sock
Time                 Id Command    Argument

效果演示

在这里插入图片描述

多线程-并行复制

查看线程信息:show processlist;

从服务器

vim /etc/my.cnf
[mysqld]
datadir=/data/mysql
socket=/data/mysql/mysql.sock
server-id=20
gtid_mode=ON
enforce-gtid-consistency=ON
slave-parallel-type=LOGICAL_CLOCK			#基于组提交
slave-parallel-workers=16			#开启线程数量
master_info_repository=TABLE			# master信息在表中记录,默认记录在/data/mysql//master.info
relay_log_info_repository=TABLE			# 回放日志信息在表中记录,默认记录在/data/mysql/relay-log.info
relay_log_recovery=ON			#日志回放恢复功能开启

效果演示

未修改前
在这里插入图片描述
修改后在这里插入图片描述

半同步模式

开启GTID功能

MySQL服务器

vim /etc/my.cnf
...
gtid_mode=ON		# 加载GTID功能
enforce-gtid-consistency=ON		# 强制要求事务在全局范围内具有一致性
# 重载主配置文件
/etc/init.d/mysqld restart

从服务器

mysql -u root -p
stop slave;

CHANGE MASTER TO
MASTER_HOST='172.25.254.10',
MASTER_USER='xxx',
MASTER_PASSWORD='aaa',
# 自动识别Master的Position
MASTER_AUTO_POSITION=1;

# 检测是否成功配置
start slave;
show slave status\G
             Slave_IO_Running: Yes
            Slave_SQL_Running: Yes
            ...
            Master_Server_Id: 10			# 主设备ID
            ...
                Auto_Position: 1			# 功能开启

开启半同步模式

主服务器

vim /etc/my.cnf
...
rpl_semi_sync_master_enabled=1			# 开启半同步功能
# 重载主配置文件
/etc/init.d/mysqld restart

mysql -u root -p
INSTALL PLUGIN rpl_semi_sync_master SONAME 'semisync_master.so';			# 加载半同步插件

SELECT PLUGIN_NAME, PLUGIN_STATUS
FROM INFORMATION_SCHEMA.PLUGINS
WHERE PLUGIN_NAME LIKE '%semi%';			# 查看插件是否开启
+----------------------+---------------+
| PLUGIN_NAME          | PLUGIN_STATUS |
+----------------------+---------------+
| rpl_semi_sync_master | ACTIVE        |
+----------------------+---------------+


SET GLOBAL rpl_semi_sync_master_enabled=1;			# 打开主服务器的半同步功能
SHOW VARIABLES LIKE 'rpl_semi_sync%';			# 检查是否开启半同步功能
+-------------------------------------------+------------+
| Variable_name                             | Value      |
+-------------------------------------------+------------+
| rpl_semi_sync_master_enabled              | ON         |

从服务器

vim /etc/my.cnf
...
rpl_semi_sync_slave_enabled=1			# 开启半同步功能
# 重载主配置文件
/etc/init.d/mysqld restart

mysql -u root -p
INSTALL PLUGIN rpl_semi_sync_slave SONAME 'semisync_slave.so';
SET GLOBAL rpl_semi_sync_slave_enabled=1;			# 打开从服务器的半同步功能
STOP SLAVE IO_THREAD;
START SLAVE IO_THREAD;			# 重启I/O线程,识别半同步功能的开启

SHOW VARIABLES LIKE 'rpl_semi_sync%';			# 检查是否开启半同步功能
+---------------------------------+-------+
| Variable_name                   | Value |
+---------------------------------+-------+
| rpl_semi_sync_slave_enabled     | ON    |			# 从服务器是否启用半同步复制

效果演示

正常情况

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述主服务器中,查看插件运行情况
在这里插入图片描述

故障模拟

# 关闭副设备的I/O线程
STOP SLAVE IO_THREAD;

主设备,需要花费很长时间,才将数据插入
在这里插入图片描述主设备在插入数据时,开启副设备的I/O线程

START SLAVE IO_THREAD;

不小心先开启I/O线程,需要重载/etc/my.cnf配置文件,再次进行,才能看见效果
在这里插入图片描述

MySQL高可用-MGR(组复制)

主设备

为了保证实验环境的纯净,所有服务器均重新生成 /data/mysql/ 数据库数据

vim	/etc/hosts
127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4
::1         localhost localhost.localdomain localhost6 localhost6.localdomain6
172.25.254.10   mysql1.org
172.25.254.20   mysql2.org
172.25.254.30   mysql3.org

/etc/init.d/mysqld stop
rm -rf /data/mysql/

vim /etc/my.cnf
[mysqld]
datadir=/data/mysql
socket=/data/mysql/mysql.sock
symbolic-links=0
log-bin=mysql-bin
server-id=10
disabled_storage_engines="MyISAM,BLACKHOLE,FEDERATED,ARCHIVE,MEMORY"
gtid_mode=ON
enforce_gtid_consistency=ON
master_info_repository=TABLE
relay_log_info_repository=TABLE
binlog_checksum=NONE
log_slave_updates=ON
binlog_format=ROW
plugin_load_add='group_replication.so'
transaction_write_set_extraction=XXHASH64
group_replication_group_name="aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa"
group_replication_start_on_boot=off
group_replication_local_address="172.25.254.10:33061"
group_replication_group_seeds="172.25.254.10:33061,172.25.254.20:33061,172.25.254.30:33061"
group_replication_ip_whitelist="172.25.254.0/24,127.0.0.1/8"
group_replication_bootstrap_group=off
group_replication_single_primary_mode=OFF
group_replication_enforce_update_everywhere_checks=ON
group_replication_allow_local_disjoint_gtids_join=1

mysqld --user mysql --initialize
/etc/init.d/mysqld start
mysql_secure_installation

mysql -u root -p
SET SQL_LOG_BIN=0;
CREATE USER 'xxx'@'%' IDENTIFIED BY 'aaa';
GRANT REPLICATION SLAVE ON *.* TO 'xxx'@'%';
FLUSH PRIVILEGES;
SET SQL_LOG_BIN=1;

CHANGE MASTER TO MASTER_USER='xxx', MASTER_PASSWORD='aaa' FOR CHANNEL 'group_replication_recovery';

# 用以指定初始成员,只需要在组内第一台主机中执行
SET GLOBAL group_replication_bootstrap_group=on;
START GROUP_REPLICATION;
SET GLOBAL group_replication_bootstrap_group=off;
SELECT * FROM performance_schema.replication_group_members;
+---------------------------+--------------------------------------+-------------+-------------+--------------+
| CHANNEL_NAME              | MEMBER_ID                            | MEMBER_HOST | MEMBER_PORT | MEMBER_STATE |
+---------------------------+--------------------------------------+-------------+-------------+--------------+
| group_replication_applier | 7597a442-65fb-11ef-8407-000c290b9fae | mysql1.org  |        3306 | ONLINE       |
+---------------------------+--------------------------------------+-------------+-------------+--------------+


scp /etc/my.cnf root@172.25.254.20:/etc/my.cnf
scp /etc/my.cnf root@172.25.254.30:/etc/my.cnf

scp /etc/hosts root@172.25.254.20:/etc/hosts
scp /etc/hosts root@172.25.254.30:/etc/hosts

从设备

/etc/init.d/mysqld stop
rm -rf /data/mysql/

vim /etc/my.cnf
...
server-id=20/30
...
group_replication_local_address="172.25.254.20:33061"			# 20 修改成此
group_replication_local_address="172.25.254.30:33061"			# 30 修改成此
...

mysqld --user mysql --initialize
/etc/init.d/mysqld start
mysql_secure_installation

mysql -u root -p
SET SQL_LOG_BIN=0;
CREATE USER 'xxx'@'%' IDENTIFIED BY 'aaa';
GRANT REPLICATION SLAVE ON *.* TO 'xxx'@'%';
FLUSH PRIVILEGES;
SET SQL_LOG_BIN=1;

CHANGE MASTER TO MASTER_USER='xxx', MASTER_PASSWORD='aaa' FOR CHANNEL 'group_replication_recovery';

START GROUP_REPLICATION;
SELECT * FROM performance_schema.replication_group_members;
+---------------------------+--------------------------------------+-------------+-------------+--------------+
| CHANNEL_NAME              | MEMBER_ID                            | MEMBER_HOST | MEMBER_PORT | MEMBER_STATE |
+---------------------------+--------------------------------------+-------------+-------------+--------------+
| group_replication_applier | 28eb9cfa-65fb-11ef-a348-000c29209ccd | mysql2.org  |        3306 | ONLINE       |
| group_replication_applier | 7597a442-65fb-11ef-8407-000c290b9fae | mysql1.org  |        3306 | ONLINE       |
| group_replication_applier | cc956350-65fb-11ef-815a-000c29c99701 | mysql3.org  |        3306 | ONLINE       |
+---------------------------+--------------------------------------+-------------+-------------+--------------+
# 不做解析,会导致MEMBER_STATE处于RECOVERING中

效果演示

# 主服务器
CREATE DATABASE ovo;
CREATE TABLE ovo.userlist(
username VARCHAR(10) PRIMARY KEY NOT NULL,
password VARCHAR(50) NOT NULL);

在这里插入图片描述在这里插入图片描述
在这里插入图片描述在这里插入图片描述

MySQL-Router

Router主机

rpm -ivh mysql-router-community-8.4.0-1.el7.x86_64.rpm

vim /etc/mysqlrouter/mysqlrouter.conf
...
[routing:ro]
bind_address = 0.0.0.0
bind_port = 7001
destinations = 172.25.254.10:3306,172.25.254.20:3306,172.25.254.30:3306
routing_strategy = round-robin

systemctl start mysqlrouter.service
yum install mariadb-5.5.68-1.el7.x86_64 -y

效果演示

mysql -u xxx -p -h 172.25.254.10 -P 7001

MySQL高可用-MHA

搭建一主两从

Master

/etc/init.d/mysqld stop
rm -fr /data/mysql/*

vim /etc/my.cnf
[mysqld]
datadir=/data/mysql
socket=/data/mysql/mysql.sock
server-id=10
log-bin=mysql-bin
gtid_mode=ON
log_slave_updates=ON
enforce-gtid-consistency=ON
symbolic-links=0

mysqld --user mysql --initialize
/etc/init.d/mysqld start
mysql_secure_installation

mysql -u root -p
CREATE USER 'xxx'@'%' IDENTIFIED BY 'aaa';
GRANT REPLICATION SLAVE ON *.* TO 'xxx'@'%';
INSTALL PLUGIN rpl_semi_sync_master SONAME 'semisync_master.so';
SET GLOBAL rpl_semi_sync_master_enabled=1;

Slave

/etc/init.d/mysqld stop
rm -fr /data/mysql/*

vim /etc/my.cnf
[mysqld]
datadir=/data/mysql
socket=/data/mysql/mysql.sock
server-id=20			# 30修改成30
log-bin=mysql-bin
gtid_mode=ON
log_slave_updates=ON
enforce-gtid-consistency=ON
symbolic-links=0

mysqld --user mysql --initialize
/etc/init.d/mysqld start
mysql_secure_installation

mysql -u root -p
CHANGE MASTER TO
MASTER_HOST='172.25.254.10',
MASTER_USER='xxx',
MASTER_PASSWORD='aaa',
MASTER_AUTO_POSITION=1;

start slave;
INSTALL PLUGIN rpl_semi_sync_slave SONAME 'semisync_slave.so';
SET GLOBAL rpl_semi_sync_slave_enabled=1;
STOP SLAVE IO_THREAD;
START SLAVE IO_THREAD;
SHOW STATUS LIKE 'Rpl_semi_sync%';

安装MHA

# 将MHA-7文件拖进MHA主机
# 拷贝到其他MySQL服务器上
scp mha4mysql-node-0.58-0.el7.centos.noarch.rpm root@172.25.254.10:/root
scp mha4mysql-node-0.58-0.el7.centos.noarch.rpm root@172.25.254.20:/root
scp mha4mysql-node-0.58-0.el7.centos.noarch.rpm root@172.25.254.30:/root
# MHA主机
yum install *.rpm -y
# MySQL服务器均进行安装
yum install mha4mysql-node-0.58-0.el7.centos.noarch.rpm -y

配置MHA管理环境

MHA主机

mkdir  /etc/masterha
tar zxf mha4mysql-manager-0.58.tar.gz

cd  mha4mysql-manager-0.58/samples/conf/
cat masterha_default.cnf app1.cnf  > /etc/masterha/app1.cnf

vim /etc/masterha/app1.cnf
[server default]
user=root
password=a
ssh_user=root
repl_user=xxx
repl_password=aaa
master_binlog_dir=/data/mysql
remote_workdir=/tmp
# .11 不能是下方MySQL服务器的IP
# 可以在主服务器上,开个子接口(ip a a 172.25.254.11/24 dev eth0)
secondary_check_script= masterha_secondary_check -s 172.25.254.10 -s 172.25.254.11
ping_interval=3
manager_workdir=/var/log/masterha/app1
manager_log=/var/log/masterha/app1/manager.log

[server1]
hostname=172.25.254.10
candidate_master=1
check_repl_delay=0

[server2]
hostname=172.25.254.20
candidate_master=1
check_repl_delay=0

[server3]
hostname=172.25.254.30
no_master=1

检测网络及SSH免密

# MySQL主服务器,允许root远程登录
create user root@'%' identified by 'a';
grant all on *.* TO root@'%';

# MHA服务器
ssh-keygen			# 一直回车即可
ssh-copy-id root@172.25.254.10
ssh-copy-id root@172.25.254.20
ssh-copy-id root@172.25.254.30
scp id_rsa root@172.25.254.10:/root/.ssh
scp id_rsa root@172.25.254.20:/root/.ssh
scp id_rsa root@172.25.254.30:/root/.ssh

# MHA主机进行检测
masterha_check_ssh --conf=/etc/masterha/app1.cnf
All SSH connection tests passed successfully			# 即网络检测成功

检测数据主从架构

masterha_check_repl --conf=/etc/masterha/app1.cnf			# 第一次可能会失败,第二次检测就成功了
MySQL Replication Health is OK			# 即数据库检测成功

MHA故障切换

Master未故障,手动切换

# MHA主机
masterha_master_switch \
--conf=/etc/masterha/app1.cnf \
--master_state=alive \
--new_master_host=172.25.254.20 \
--new_master_port=3306 \
--orig_master_is_new_slave \
--running_updates_limit=10000

# 是否刷新数据库的表数据,但不将此操作,保存到二进制日志中:yes
# 是否开始交换角色:yes
# 脚本未设置是否继续?:yes
Switching master to 172.25.254.20(172.25.254.20:3306) completed successfully.			# 即成功切换
效果演示

在这里插入图片描述

Master故障,手动切换

# 模拟MySQL主服务器故障
/etc/init.d/mysqld stop

# MHA主机,手动切换
masterha_master_switch
--master_state=dead \
--conf=/etc/masterha/app1.cnf \
--dead_master_host=172.25.254.20 \
--dead_master_port=3306 \
--new_master_host=172.25.254.10 \
--new_master_port=3306 \
--ignore_last_failover
# 主服务器是否死亡?:yes
# 是否进行交换?:yes
Master failover to 172.25.254.10(172.25.254.10:3306) completed successfully.			# 即成功切换
恢复MySQL故障节点
/etc/init.d/mysqld start

mysql -u root -p
stop slave;
CHANGE MASTER TO MASTER_HOST='172.25.254.10', MASTER_USER='xxx', MASTER_PASSWORD='aaa', MASTER_AUTO_POSITION=1;
start slave;
效果演示

在这里插入图片描述在这里插入图片描述

自动切换

# MHA主机
rm -fr app1.failover.complete			# 删除锁文件
masterha_manager --conf=/etc/masterha/app1.cnf			# 加&,进入后台检测
# 主服务器
# 开启子接口
ip a a 172.25.254.11/24 dev eth0
/etc/init.d/mysqld stop

cat /etc/masterha/manager.log
Master failover to 172.25.254.20(172.25.254.20:3306) completed successfully.			# 即配置成功
恢复MySQL故障节点
/etc/init.d/mysqld start

mysql -u root -p
stop slave;
CHANGE MASTER TO MASTER_HOST='172.25.254.20', MASTER_USER='xxx', MASTER_PASSWORD='aaa', MASTER_AUTO_POSITION=1;
start slave;
效果演示

完成一次故障自动切换后,监测将停止,需要手动恢复MySQL故障节点
并生成锁文件,不删除锁文件,将导致自动切换时,发生错误
在这里插入图片描述在这里插入图片描述

清除锁文件

rm -rf app1.failover.complete manager.log

为MHA添加VIP(虚拟IP)功能

# 上传脚本
cp master_ip_* /usr/local/bin/
chmod  +x /usr/local/bin/master_ip_*

vim /usr/local/bin/master_ip_failover
my $vip = '172.25.254.100/24';
my $ssh_start_vip = "/sbin/ip addr add $vip dev eth0";
my $ssh_stop_vip = "/sbin/ip addr del $vip dev eth0";

vim /usr/local/bin/master_ip_online_change
my $vip = '172.25.254.100/24';
my $ssh_start_vip = "/sbin/ip addr add $vip dev eth0";
my $ssh_stop_vip = "/sbin/ip addr del $vip dev eth0";
my $exit_code = 0;

vim /etc/masterha/app1.cnf
...
ping_interval=3
master_ip_failover_script= /usr/local/bin/master_ip_failover
master_ip_online_change_script= /usr/local/bin/master_ip_online_change
...
masterha_check_repl --conf=/etc/masterha/app1.cnf
masterha_check_ssh --conf=/etc/masterha/app1.cnf

masterha_manager --conf=/etc/masterha/app1.cnf &
ip a  a 172.25.254.100/24 dev eth0			# 为主设备手动添加VIP

在这里插入图片描述

模拟故障

/etc/init.d/mysqld stop

cat manager.log

在这里插入图片描述

恢复MySQL故障节点

/etc/init.d/mysqld start

mysql -u root -p
stop slave;
CHANGE MASTER TO MASTER_HOST='172.25.254.10', MASTER_USER='xxx', MASTER_PASSWORD='aaa', MASTER_AUTO_POSITION=1;
start slave;
# MHA主机
rm -rf app1.failover.complete manager.log

在这里插入图片描述在这里插入图片描述

手动切换,观察VIP变化

masterha_check_ssh --conf=/etc/masterha/app1.cnf
masterha_check_repl --conf=/etc/masterha/app1.cnf

masterha_master_switch --conf=/etc/masterha/app1.cnf --master_state=alive --new_master_host=172.25.254.20 --new_master_port=3306 --orig_master_is_new_slave --running_updates_limit=10000

在这里插入图片描述
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值