MySQL集群技术

一、源码安装

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值