一、源码安装
1、下载mysql依赖
[root@mysql ~]# yum install cmake gcc-c++ openssl-devel ncurses-devel.x86_64 libtirpc-devel-1.3.3-8.el9_4.x86_64.rpm rpcgen.x86_64 -y
[root@mysql ~]# tar zxf mysql-boost-5.7.44.tar.gz
2、编译
[root@mysql ~]# cd mysql-5.7.44/
[root@mysql 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
3、下载安装
[root@mysql mysql-5.7.44]# make -j2
#-j2 表示有几个 核心就跑几个进程
[root@mysql mysql-5.7.44]# make install
#如果第一台主机已经将数据库下载安装完成,第二台主机就不需要编译数据库,使用以下命令将文件同步给第二台主机即可:
[root@mysql mysql]# rsync -al -r /usr/local/mysql root@172.25.254.130:/usr/local/
二、mysql基础配置
1、创建用户
[root@mysql ~]# mkdir -p /data/mysql
[root@mysql ~]# useradd -s /sbin/nologin -M mysql
[root@mysql ~]# chown mysql.mysql -R /data/mysql
2、复制启动脚本
[root@mysql ~]# cd /usr/local/mysql/support-files/
[root@mysql support-files]# cp mysql.server /etc/init.d/mysqld
3、编辑环境变量
[root@mysql ~]# vim ~/.bash_profile
[root@mysql ~]# source ~/.bash_profile
4、编辑配置文件
[root@mysql ~]# vim /etc/my.cnf
5、数据库初始化
[root@mysql ~]# mysqld --initialize --user=mysql
如果初始化有问题,就删除/data/mysql/目录下的文件后重新初始化
rm -fr /data/mysql/*
6、启动mysql
[root@mysql ~]# /etc/init.d/mysqld start
Starting MySQL.Logging to '/data/mysql/mysql.err'.
. SUCCESS!
7、数据库安全初始化
[root@mysql ~]# mysql_secure_installation
8、登录数据库
[root@mysql ~]# mysql -uroot -pdyjxzq525717
三、mysql组从复制
1、配置master
[root@mysql ~]# vim /etc/my.cnf
[root@mysql ~]# /etc/init.d/mysqld restart
Shutting down MySQL.. SUCCESS!
Starting MySQL. SUCCESS!
#进入数据库配置用户权限
[root@mysql ~]# mysql -pdyjxzq525717
#创建用于做slave端认证的用户
mysql> create user 'repl'@'%' identified by 'dyjxzq';
Query OK, 0 rows affected (0.00 sec)
#对用户授权
mysql> grant replication slave on *.* to repl@'%';
Query OK, 0 rows affected (0.00 sec)
#查看master的状态
mysql> show master status;
+------------------+----------+--------------+------------------+-------------------+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
+------------------+----------+--------------+------------------+-------------------+
| mysql-bin.000001 | 595 | | | |
+------------------+----------+--------------+------------------+-------------------+
1 row in set (0.00 sec)
#查看二进制日志
mysql> quit
Bye
[root@mysql ~]# cd /data/mysql/
[root@mysql mysql]# ls
auto.cnf client-key.pem ib_logfile1 mysql-bin.index mysql.sock.lock server-cert.pem
ca-key.pem ib_buffer_pool ibtmp1 mysql.err performance_schema server-key.pem
ca.pem ibdata1 mysql mysql.pid private_key.pem sys
client-cert.pem ib_logfile0 mysql-bin.000001 mysql.sock public_key.pem
[root@mysql mysql]# mysqlbinlog mysql-bin.000001
2、配置slave
[root@mysql1 ~]# vim /etc/my.cnf
[root@mysql1 ~]# /etc/init.d/mysqld restart
Shutting down MySQL.. SUCCESS!
Starting MySQL. SUCCESS!
[root@mysql1 ~]# mysql -pdyjxzq525717
mysql> change master to MASTER_HOST='172.25.254.120',MASTER_USER='repl',MASTER_PASSWORD='dyjxzq',MASTER_LOG_FILE='mysql-bin.000001',MASTER_LOG_POS=595;
mysql> start slave;
mysql> show slave status\G;
#测试
#创建数据库
mysql> create database du;
Query OK, 1 row affected (0.00 sec)
#创建表
mysql> create table du.userlist (
-> username varchar(20) not null,
-> password varchar(50) not null);
Query OK, 0 rows affected (0.01 sec)
#在表中添加数据
mysql> insert into du.userlist value ('du','123');
Query OK, 1 row affected (0.01 sec)
#查询表中的数据
mysql> select * from du.userlist;
+----------+----------+
| username | password |
+----------+----------+
| du | 123 |
+----------+----------+
1 row in set (0.00 sec)
#在slave中查看数据是否同步过来
mysql> select * from du.userlist;
+----------+----------+
| username | password |
+----------+----------+
| du | 123 |
+----------+----------+
1 row in set (0.01 sec)
3、当有数据时添加slave2
完成基础配置
[root@mysql2 ~]# vim /etc/my.cnf
#从master节点备份数据
[root@mysql ~]# mysqldump -uroot -pdyjxzq525717 du > du.sql
[root@mysql ~]# scp du.sql root@172.25.254.140:/root/
#利用master节点中备份出来的lee.sql在slave2中拉平数据
[root@mysql2 ~]# mysql -uroot -pdyjxzq525717 -e "create database du;"
[root@mysql2 ~]# mysql -uroot -pdyjxzq525717 du < du.sql
[root@mysql2 ~]# mysql -uroot -pdyjxzq525717 -e "select * from du.userlist;"
mysql: [Warning] Using a password on the command line interface can be insecure.
+----------+----------+
| username | password |
+----------+----------+
| du | 123 |
+----------+----------+
配置slave2的slave功能
#在master中查询日志pos
[root@mysql ~]# mysql -uroot -pdyjxzq525717 -e "show master status;"
mysql: [Warning] Using a password on the command line interface can be insecure.
+------------------+----------+--------------+------------------+-------------------+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
+------------------+----------+--------------+------------------+-------------------+
| mysql-bin.000001 | 1230 | | | |
+------------------+----------+--------------+------------------+-------------------+
#配置slave2
[root@mysql2 ~]# mysql -uroot -pdyjxzq525717
mysql> change master to master_host='172.25.254.120',master_user='repl',master_password='dyjxzq',master_log_file='mysql-bin.000001',master_log_pos=1230;
mysql> start slave;
mysql> show slave status\G
#测试
[root@mysql ~]# mysql -uroot -pdyjxzq525717 -e "insert into du.userlist values('user3','123');"
[root@mysql1 ~]# mysql -uroot -pdyjxzq525717 -e "select * from du.userlist;"
mysql: [Warning] Using a password on the command line interface can be insecure.
+----------+----------+
| username | password |
+----------+----------+
| du | 123 |
| user3 | 123 |
+----------+----------+
[root@mysql2 ~]# mysql -uroot -pdyjxzq525717 -e "select * from du.userlist;"
mysql: [Warning] Using a password on the command line interface can be insecure.
+----------+----------+
| username | password |
+----------+----------+
| du | 123 |
| user3 | 123 |
+----------+----------+
4、延迟复制
使用延迟复制可以在我们误删数据库的数据时,通过在延迟时间内导出数据来解决数据库误删问题
mysql> stop slave sql_thread;
mysql> change master to master_delay=60;
mysql> start slave sql_thread;
mysql> show slave status\G;
#测试
mysql: [Warning] Using a password on the command line interface can be insecure.
[root@mysql ~]# mysql -uroot -pdyjxzq525717 -e "insert into du.userlist values('user4','123');"
slave端在60s之后才查询到master插入的数据
5、慢查询日志
当执行SQL超过long_query_time参数设定的时间阈值(默认10s)时,就被认为是慢查询,这个 SQL语句就是需要优化的。
#开启慢查询
mysql> show variables like "slow%";
+---------------------+----------------------------+
| Variable_name | Value |
+---------------------+----------------------------+
| slow_launch_time | 2 |
| slow_query_log | OFF |
| slow_query_log_file | /data/mysql/mysql-slow.log |
+---------------------+----------------------------+
mysql> set global slow_query_log=on;
mysql> set long_query_time=4;
mysql> show variables like "slow%";
+---------------------+----------------------------+
| Variable_name | Value |
+---------------------+----------------------------+
| slow_launch_time | 2 |
| slow_query_log | ON |
| slow_query_log_file | /data/mysql/mysql-slow.log |
+---------------------+----------------------------+
[root@mysql ~]# cat /data/mysql/mysql-slow.log
/usr/local/mysql/bin/mysqld, Version: 5.7.44-log (Source distribution). started with:
Tcp port: 3306 Unix socket: /data/mysql/mysql.sock
Time Id Command Argument
#测试慢查询
mysql> select sleep (10);
[root@mysql ~]# cat /data/mysql/mysql-slow.log
6、mysql并行复制
默认情况下slave中使用的是sql单线程回放,在master中时多用户读写,如果使用sql单线程回放那么会造成组从延迟严重,开启MySQL的多线程回放可以解决这个问题。
#在slave中设定
[root@mysql1 ~]# vim /etc/my.cnf
[root@mysql1 ~]# /etc/init.d/mysqld restart
#查看slave中的线程信息
mysql> show processlist;
四、半同步模式
1、半同步模式原理
用户线程写入完成后master中的dump会把日志推送到slave端
slave中的io线程接收后保存到relaylog中继日志
保存完成后slave向master端返回ack
在未接受到slave的ack时master端时不做提交的,一直处于等待当收到ack后提交到存储引擎
在5.6版本中用到的时after_commit模式,after_commit模式时先提交在等待ack返回后输出ok
2、gtid模式
当master出现问题后,slave2和master的数据最接近,会被作为新的master
slave1指向新的master,但是他不会去检测新的master的pos id,只需要继续读取自己gtid_next即可
设置gtid
#在master端和slave端开启gtid模式
[root@mysql ~]# vim /etc/my.cnf
[root@mysql ~]# /etc/init.d/mysqld restart
[root@mysql1 ~]# vim /etc/my.cnf
[root@mysql1 ~]# /etc/init.d/mysqld restart
[root@mysql2 ~]# vim /etc/my.cnf
[root@mysql2 ~]# /etc/init.d/mysqld restart
#停止slave端
[root@mysql1 ~]# mysql -uroot -pdyjxzq525717
mysql> stop slave;
[root@mysql2 ~]# /etc/init.d/mysqld restart
mysql> stop slave;
#开启slave端的gtid
mysql> change master to master_host='172.25.254.120',master_user='repl',master_password='dyjxzq',master_auto_position=1;
mysql> start slave;
mysql> show slave status\G;
3、启用半同步模式
在master端配置启用半同步模式
[root@mysql ~]# vim /etc/my.cnf
[root@mysql ~]# mysql -uroot -pdyjxzq525717
#安装半同步插件
mysql> install plugin rpl_semi_sync_master soname 'semisync_master.so';
#查看插件情况
mysql> select plugin_name,plugin_status
-> from information_schema.plugins
-> where plugin_name like '%semi%';
+----------------------+---------------+
| plugin_name | plugin_status |
+----------------------+---------------+
| rpl_semi_sync_master | ACTIVE |
+----------------------+---------------+
#打开半同步功能
mysql> set global rpl_semi_sync_master_enabled =1;
#查看半同步功能状态
mysql> show variables like 'rpl_semi_sync%';
mysql> show status like 'rpl_semi_sync%';
在slave端开启半同步功能
[root@mysql1 ~]# vim /etc/my.cnf
[root@mysql1 ~]# mysql -uroot -pdyjxzq525717
mysql> install plugin rpl_semi_sync_slave soname 'semisync_slave.so';
mysql> set global rpl_semi_sync_slave_enabled =1;
#重启IO线程,使半同步生效
mysql> stop slave IO_thread;
mysql> start slave IO_thread;
mysql> show variables like 'rpl_semi_sync%';
+---------------------------------+-------+
| Variable_name | Value |
+---------------------------------+-------+
| rpl_semi_sync_slave_enabled | ON |
| rpl_semi_sync_slave_trace_level | 32 |
+---------------------------------+-------+
mysql> show status like 'rpl_semi_sync%';
+----------------------------+-------+
| Variable_name | Value |
+----------------------------+-------+
| Rpl_semi_sync_slave_status | ON |
+----------------------------+-------+
测试
#在master端写入数据
mysql> insert into du.userlist values ('user4','444');
mysql> show status like 'rpl_semi_sync%';
#在slave端模拟故障
mysql> stop slave IO_thread;
#在master端插入数据
mysql> insert into du.userlist values ('user6','666');
mysql> show status like 'rpl_semi_sync%';
五、mysql-router
mysql-router是一个对应用程序透明的InnoDB Cluster连接路由服务,提供负载均衡、应用连接故障转移和客户端路由。利用路由器的连接路由特性,用户可以编写应用程序来连接到路由器,并令路由器使用相应的路由策略来处理连接,使其连接到正确的MySQL数据库服务器。
部署方式
#将三台主机进行数据库初始化
以mysql为例,mysql1和mysql2进行同样的命令初始化
[root@mysql ~]# rm -fr /data/mysql/*
[root@mysql ~]# vim /etc/my.cnf
[root@mysql ~]# mysqld --initialize --user=mysql
[root@mysql ~]# /etc/init.d/mysqld start
[root@mysql ~]# mysql_secure_installation
#安装mysql-router
[root@mysql ~]# rpm -ivh mysql-router-community-8.4.0-1.el7.x86_64.rpm
#配置mysql-router
[root@mysql ~]# vim /etc/mysqlrouter/mysqlrouter.conf
[root@mysql ~]# systemctl start mysqlrouter.service
#创建测试用户
以mysql1为例
[root@mysql1 ~]# mysql -uroot -pdyjxzq525717
mysql> create user du@'%' identified by 'dyjxzq';
mysql> grant all on du.* to du@'%';
#查看调度效果
[root@mysql1 ~]# watch lsof -i :3306
[root@mysql2 ~]# watch lsof -i :3306
#使用端口7001登录数据库,查看id
[root@mysql ~]# mysql -udu -pdyjxzq -h172.25.254.120 -P 7001
mysql> select @@server_id;
六、mysql高可用之组复制 (MGR)
#在mysql、mysql1、mysql2中编辑hosts文件做解析
[root@mysql ~]# vim /etc/hosts
#mysql初始化
[root@mysql ~]# rm -fr /data/mysql
[root@mysql ~]# vim /etc/my.cnf
[root@mysql ~]# mysqld --initialize --user=mysql
[root@mysql ~]# /etc/init.d/mysqld start
mysql -uroot -pcrl#!bO0=-MT -e "alter user root@172.25.254.120 identified by 'dyjxzq525717';"
#配置sql
[root@mysql ~]# mysql -pdyjxzq525717
mysql> set sql_log_bin=0;
mysql> create user rpl_user@'%' identified by 'dyjxzq';
mysql> grant replication slave on *.* to rpl_user@'%';
mysql> flush privileges;
mysql> set sql_log_bin=1;
mysql> change master to master_user='rpl_user',master_password='dyjxzq' for channel 'group_replication_recovery';
mysql> set global group_replication_bootstrap_group=ON;
mysql> start group_replication;
mysql> set global group_replication_bootstrap_group=OFF;
mysql> select * from performance_schema.replication_group_members;
#复制配置文件到myql1和mysql2
[root@mysql ~]# scp /etc/my.cnf root@172.25.254.130:/etc/my.cnf
[root@mysql ~]# scp /etc/my.cnf root@172.25.254.140:/etc/my.cnf
#修改mysql1和mysl2中的配置
以mysql1为例
[root@mysql1 ~]# vim /etc/my.cnf
[root@mysql1 ~]# rm -fr /data/mysql/*
[root@mysql1 ~]# mysqld --user=mysql --initialize
[root@mysql1 ~]# /etc/init.d/mysqld start
[root@mysql1 ~]# mysql -uroot -peHFp>tH!d43N -e "alter user root@172.25.254.120 identified by 'dyjxzq525717';"
#配置sql
以mysql1为例
[root@mysql1 ~]# mysql -pdyjxzq525717
mysql> set sql_log_bin=0;
mysql> create user rpl_user@'%' identified by 'dyjxzq';
mysql> grant replication slave on *.* to rpl_user@'%';
mysql> flush privileges;
mysql> set sql_log_bin=1;
mysql> change master to master_user='rpl_user',master_password='dyjxzq' for channel 'group_replication_recovery';
mysql> start group_replication;
mysql> select * from performance_schema.replication_group_members;
#测试
在每个节点都可以完成读写
在mysql中
mysql> create database du;
mysql> create table du.userlist(
-> username varchar(10) primary key not null,
-> password varchar(50) not null);
mysql> insert into du.userlist values ('user1','111');
mysql> select * from du.userlist;
+----------+----------+
| username | password |
+----------+----------+
| user1 | 111 |
+----------+----------+
在mysql1中
mysql> insert into du.userlist values ('user2','222');
mysql> select * from du.userlist;
+----------+----------+
| username | password |
+----------+----------+
| user1 | 111 |
| user2 | 222 |
+----------+----------+
在mysql3中
mysql> insert into du.userlist values ('user3','333');
mysql> select * from du.userlist;
+----------+----------+
| username | password |
+----------+----------+
| user1 | 111 |
| user2 | 222 |
| user3 | 333 |
+----------+----------+
七、mysql高可用之MHA
1、什么是MHA
MHA(Master High Availability)是一套优秀的MySQL高可用环境下故障切换和主从复制的软件。
MHA 的出现就是解决MySQL单点的问题。
MySQL故障切换过程中,MHA能做到0-30秒内自动完成故障切换操作。
MHA能在故障切换的过程中最大程度上保证数据的一致性,以达到真正意义上的高可用。
2、MHA的组成
MHA由两部分组成:MHAManager (管理节点) MHA Node (数据库节点)。
MHA Manager 可以单独部署在一台独立的机器上管理多个master-slave集群,也可以部署在一台 slave 节点上。
MHA Manager 会定时探测集群中的 master 节点。
当 master 出现故障时,它可以自动将最新数据的 slave 提升为新的 master, 然后将所有其他的 slave 重新指向新的 master。
3、MHA工作原理
目前MHA主要支持一主多从的架构,要搭建MHA,要求一个复制集群必须最少有3台数据库服务器, 一主二从,即一台充当Master,台充当备用Master,另一台充当从库。
MHA Node 运行在每台 MySQL 服务器上。
MHAManager 会定时探测集群中的master 节点 当master 出现故障时,它可以自动将最新数据的slave 提升为新的master 然后将所有其他的slave 重新指向新的master,VIP自动漂移到新的master。
整个故障转移过程对应用程序完全透明。
4、MHA部署实施
搭建一主两从架构
#在master节点中
[root@mysql ~]# rm -fr /data/mysql/*
[root@mysql ~]# vim /etc/my.cnf
[root@mysql ~]# mysqld --user mysql --initialize
[root@mysql ~]# /etc/init.d/mysqld start
[root@mysql ~]# mysql_secure_installation
[root@mysql ~]# mysql -pdyjxzq525717
mysql> create user 'repl'@'%' identified by 'dyjxzq';
mysql> grant replication slave on *.* to repl@'%';
mysql> install plugin rpl_semi_sync_master soname 'semisync_master.so';
mysql> set global rpl_semi_sync_master_enabled = 1;
#在slave1和slave2中
以mysql1为例
[root@mysql1 ~]# rm -fr /data/mysql/*
[root@mysql1 ~]# vim /etc/my.cnf
[root@mysql1 ~]# mysqld --user mysql --initialize
[root@mysql1 ~]# /etc/init.d/mysqld start
[root@mysql1 ~]# mysql_secure_installation
[root@mysql1 ~]# mysql -pdyjxzq525717
mysql> change master to master_host='172.25.254.120',master_user='repl',master_password='dyjxzq',master_auto_position=1;
mysql> start slave;
mysql> install plugin rpl_semi_sync_slave soname 'semisync_slave.so';
mysql> set global rpl_semi_sync_slave_enabled = 1;
mysql> stop slave IO_thread;
mysql> start slave IO_thread;
mysql> show status like 'rpl_semi_sync%';
+----------------------------+-------+
| Variable_name | Value |
+----------------------------+-------+
| Rpl_semi_sync_slave_status | ON |
+----------------------------+-------+
配置免密认证
[root@MHA ~]# ssh-keygen
[root@MHA ~]# ssh-copy-id -i /root/.ssh/id_rsa.pub root@172.25.254.120
[root@MHA ~]# ssh-copy-id -i /root/.ssh/id_rsa.pub root@172.25.254.130
[root@MHA ~]# ssh-copy-id -i /root/.ssh/id_rsa.pub root@172.25.254.140
[root@MHA ~]# scp /root/.ssh/id_rsa root@172.25.254.120:/root/.ssh/
[root@MHA ~]# scp /root/.ssh/id_rsa root@172.25.254.130:/root/.ssh/
[root@MHA ~]# scp /root/.ssh/id_rsa root@172.25.254.140:/root/.ssh/
[root@mysql ~]# vim /etc/ssh/sshd_config
[root@mysql ~]# systemctl start sshd
在MHA中配置解析
[root@MHA ~]# vim /etc/hosts
安装MHA所需要的软件
#在MHA中
[root@MHA ~]# unzip MHA-7.zip
[root@MHA ~]# cd MHA-7/
[root@MHA MHA-7]# yum install *.rpm -y
[root@MHA MHA-7]# scp mha4mysql-node-0.58-0.el7.centos.noarch.rpm root@172.25.254.120:/mnt
[root@MHA MHA-7]# scp mha4mysql-node-0.58-0.el7.centos.noarch.rpm root@172.25.254.130:/mnt
[root@MHA MHA-7]# scp mha4mysql-node-0.58-0.el7.centos.noarch.rpm root@172.25.254.140:/mnt
#在sql-node中
[root@mysql ~]# yum install /mnt/mha4mysql-node-0.58-0.el7.centos.noarch.rpm -y
[root@mysql1 ~]# yum install /mnt/mha4mysql-node-0.58-0.el7.centos.noarch.rpm -y
[root@mysql2 ~]# yum install /mnt/mha4mysql-node-0.58-0.el7.centos.noarch.rpm -y
配置MHA 的管理环境
#生成配置目录和配置文件
[root@MHA ~]# mkdir /etc/masterha
[root@MHA ~]# cd MHA-7/
[root@MHA MHA-7]# tar zxf mha4mysql-manager-0.58.tar.gz
[root@MHA MHA-7]# cd mha4mysql-manager-0.58//samples/conf/
[root@MHA conf]# cat masterha_default.cnf app1.cnf > /etc/masterha/app1.cnf
#编辑配置文件
[root@MHA ~]# vim /etc/masterha/app1.cnf
检测
#检测网络及ssh免密
[root@MHA ~]# masterha_check_ssh --conf=/etc/masterha/app1.cnf
#检测数据主从复制情况
在master创建root用户
mysql> create user root@'%' identified by 'dyjxzq525717';
mysql> grant all on *.* to root@'%';
[root@MHA ~]# masterha_check_repl --conf=/etc/masterha/app1.cnf
5、MHA故障切换
MHA的故障切换过程
共包括以下的步骤:
1.配置文件检查阶段,这个阶段会检查整个集群配置文件配置 。
2.宕机的master处理,这个阶段包括虚拟ip摘除操作,主机关机操作 。
3.复制dead master和最新slave相差的relay log,并保存到MHA Manger具体的目录下 。
4.识别含有最新更新的slave 。
5.应用从master保存的二进制日志事件(binlog events) 。
6.提升一个slave为新的master进行复制 7.使其他的slave连接新的master进行复制。
master未出现故障手动切换
#将msater从mysql切换到mysql1上
[root@MHA ~]# masterha_master_switch --conf=/etc/masterha/app1.cnf --master_state=alive --new_master_host=172.25.254.130 --new_master_port=3306 --orig_master_is_new_slave --running_updates_limit=10000
#检测
[root@MHA ~]# masterha_check_repl --conf=/etc/masterha/app1.cnf
master故障手动切换
#模拟master故障
[root@mysql1 ~]# /etc/init.d/mysqld stop
#在MHAr中做故障切换
[root@MHA ~]# masterha_master_switch --master_state=dead --conf=/etc/masterha/app1.cnf --dead_master_host=172.25.254.130 --dead_master_port=3306 --new_master_host=172.25.254.120 --new_master_port=3306 --ignore_last_failover
恢复故障mysql节点
[root@mysql1 ~]# mysql -pdyjxzq525717
mysql> change master to master_host='172.25.254.120',master_user='repl',master_password='dyjxzq',master_auto_position=1;
mysql> start slave;
#测试一主两从是否正常
[root@MHA ~]# masterha_check_repl --conf=/etc/masterha/app1.cnf
自动切换
#清除切换锁文件
[root@MHA ~]# cd /etc/masterha/
[root@MHA masterha]# rm -fr app1.failover.complete
#模拟master故障
[root@mysql ~]# /etc/init.d/mysqld stop
#监控程序通过指定配置文件监控master状态,当master出问题后自动切换并退出避免做重复故障切换
[root@MHA masterha]# masterha_manager --conf=/etc/masterha/app1.cnf
[root@MHA masterha]# cat manager.log
#恢复故障节点
[root@mysql ~]# /etc/init.d/mysqld start
[root@mysql ~]# mysql -pdyjxzq525717
mysql> change master to master_host='172.25.254.130', master_user='repl',master_password='dyjxzq',master_auto_position=1;
#清除锁文件
[root@MHA masterha]# rm -fr app1.failover.complete manager.log
6、为MHA添加VIP功能
#上传脚本,修改vip
[root@MHA ~]# cp master_ip_* /usr/local/bin/
[root@MHA ~]# chmod +x /usr/local/bin/master_ip_*
[root@MHA ~]# vim /usr/local/bin/master_ip_failover
[root@MHA ~]# vim /usr/local/bin/master_ip_online_change
#在master节点添加VIP
[root@mysql1 ~]# ip a a dev eth0 172.25.254.200/24
#模拟故障,关闭主节点服务
[root@mysql1 ~]# /etc/init.d/mysqld stop
#启动监控程序
[root@MHA ~]# masterha_manager --conf=/etc/masterha/app1.cnf
[root@MHA ~]# cat /etc/masterha/manager.log
#恢复故障主机
[root@mysql1 ~]# mysql -pdyjxzq525717
mysql> change master to master_host='172.25.254.120', master_user='repl',master_password='dyjxzq',master_auto_position=1;
[root@MHA ~]# rm -fr /etc/masterha/app1.failover.complete
[root@MHA ~]# rm -fr /etc/masterha/manager.log
#手动切换后查看vip变化
[root@MHA ~]# masterha_master_switch --conf=/etc/masterha/app1.cnf --master_state=alive --new_master_host=172.25.254.130 --new_master_port=3306 --orig_master_is_new_slave --running_updates_limit=10000
[root@mysql1 ~]# ip a