mysql相关部署

目录

一.mysql数据库的安装部署

1.数据库安装包下载以及编译部署

2.拷贝启动脚本

3.添加环境变量

4.创建管理数据库的用户以及目录并且给予目录权限

5.修改配置文件路径后初始化数据

6.phpMyAdmin的使用

二.mysql用户的创建,授权,更改以及删除

1.用户的创建

2.对用户进行授权

3.设置与更改用户密码

4.用户权限的撤销

5.用户的删除

6.mysql的加密连接

三.mysql主从复制

1.将主节点中的mysql安装到从节点中然后mysql安装部署

2.编辑主节点配置文件

3.编辑从节点配置文件

四.GTID复制

1.在server1中

2.在server2中

3.在server3中

五.Mysql半同步复制

1.在server1中

2.在server2中

​​ 3.测试

六.Mysql异步复制

七.mysql延迟同步

八.并行复制

1.在server2(slave端中)

2.查看slow_query_log是否开启

3.测试

九.组从复制(多主模式)

1.将所有主从节点的设置进行还原

2.设置组

3.查看组服务是否启动

4.测试

十.Mysql路由器

1.MYSQL Router原理

2.开启一个新的节点配置mysql路由器

十一.MHA高可用

1.快速构建一主两从

2.配置MAH7

3.手动切换master

4.自动切换master

一.mysql数据库的安装部署

1.数据库安装包下载以及编译部署

首先先下载mysql的安装包,然后进行解压

解压完毕之后需要进入文件目录中进行后续的编译部署

这里我们不同于nginx的模块安装,我们需要甬道cmake命令进行模块的安装,所以我们首先安装 camke命令

然后我们需要进行编译cmake -DCMAKE_INSTALL_PREFIX=/usr/local/mysql -DMYSQL_DATADIR=/data/mysql -DMYSQL_UNIX_ADDR=/data/mysql/mysql.sock -DWITH_INNOBASE_STORAGE_ENGINE=1 -DSYSCONFDIR=/etc -DENABLED_LOCAL_INFILE=1 -DWITH_EXTRA_CHARSETS=all -DDEFAULT_CHARSET=utf8mb4 -DDEFAULT_COLLATION=utf8mb4_unicode_ci -DWITH_BOOST=/root/mysql-5.7.31/boost/boost_1_59_0

这里编译无法进行,缺少插件,所以我们需要安装以下插件

yum install gcc-c++ -y
yum install ncurses-devel -y

然后make进行编译,make install进行安装。

注意此时我们所在的路径一定要是下图路径才可进行模块安装,编译以及安装

安装完成之后即可看到下图的文件

2.拷贝启动脚本

cd /usr/local/mysql/support-files
cp mysql.server /etc/init.d/mysqld

3.添加环境变量

cd ~
vim .bash_profile 
PATH=$PATH:$HOME/bin:/usr/local/lnmp/php/bin:/usr/local/mysql/bin
source  .bash_profile 

 

4.创建管理数据库的用户以及目录并且给予目录权限

5.修改配置文件路径后初始化数据

vim /etc/my.cnf

 mysqld --initialize --user=mysql #初始化数据库生成密码
 /etc/init.d/mysqld start	  #mysql启动
 mysql_secure_installation	  #安全初始化数据库

使用初始化生成的密码进入,然后重新修改并修改密码

然后我们输入密码登陆数据库,数据库安装部署完成

注意:如果输入密码没有进入,需要执行rm -fr /data/mysql/*,然后重新执行上面的步骤

6.phpMyAdmin的使用

phpMyAdmin 是众多 MySQL图形化管理工具中使用最为广泛的一种,是一款使用PHP 开发的基于B/S模式的 MySQL 客户端软件,该工具是基于 Web 跨平台的管理程序,并且支持简体中文,phpMyAdmin 为开发人员提供了类似 Access,SQL Server 的图形化数据库操作界面,通过该管理工具可以对 MySQL 进行各种操作,如何创建数据库,数据表和生成 MySQL 数据库脚本文件等

下载地址为:https://www.phpmyadmin.net/

将下载的文件放入/usr/local/nginx/html/中

然后对下载的目录进行解压安装

然后给安装的 phpadmin文件做一个软连接并且开启服务以及设置开机自启

然后在nginx配置文件中加入php的发布页面

vim /usr/local/nginx/conf/nginx.conf

        location / {
            root   html;
            index  index.html index.htm index.php index.jsp;
        }
        
nginx -t
nginx -s reload

修改php配置文件并且重启php服务

这样我们输入172.25.132.1/phpadmin/index.php进入网页,输入root用户和前面设定的密码即可进入

然后我们新建数据库westos。新建表linux,包含username,jobs,old后插入数据

然后我们登陆数据库查看网页中插入的内容是否同步到我们的后台数据库中

这里我们可以看到在网页中建立的库,表,和数据已经同步到后台的服务器中。

二.mysql用户的创建,授权,更改以及删除

1.用户的创建

进入数据库之后
CREATE USER 'username'@'host' IDENTIFIED BY 'password';

username:要创建的用户名
host:指定该用户在哪个主机上可以登陆,如果是本地用户可用localhost,如果想让该用户可以从任意远程主机登陆,可以使用通配符%,('%':表示任意主机可以从远程端登陆到该主机的数据库)
password:该用户的登陆密码,密码可以为空,如果为空则该用户可以不需要密码登陆服务器

2.对用户进行授权

GRANT privileges ON databasename.tablename TO 'username'@'host';

privileges:用户的操作权限,如SELECT,INSERT,UPDATE等,如果要授予所有的权限则使用ALL
databasename:数据库名
tablename:表名,如果要授予该用户对所有数据库和表的相应操作权限则可用表示,如*.*

用以上命令授权的用户不能给其它用户授权,如果想让该用户可以授权用以下命令

GRANT privileges ON databasename.tablename TO 'username'@'host' WITH GRANT OPTION;

3.设置与更改用户密码

SET PASSWORD FOR 'username'@'host' = PASSWORD('newpassword');
flush privileges;    ##刷新权限

如果是当前登陆用户更改密码用
SET PASSWORD = PASSWORD("newpassword");

4.用户权限的撤销

REVOKE privilege ON databasename.tablename FROM 'username'@'host';

5.用户的删除

DROP USER 'username'@'host';

6.mysql的加密连接

CREATE USER 'username'@'%' IDENTIFIED BY 'password' REQUIRE SSL;

三.mysql主从复制

原理:

从库生成两个线程,一个I/O线程,一个SQL线程;


i/o线程去请求主库 的binlog,并将得到的binlog日志写到relay log(中继日志) 文件中;
主库会生成一个 log dump 线程,用来给从库 i/o线程传binlog;


SQL 线程,会读取relay log文件中的日志,并解析成具体操作,来实现主从的操作一致,而最终数据一致;

实验:

主节点为 172.25.132.1

从节点为 172.25.132.2 以及 172.25.132.3

1.将主节点中的mysql安装到从节点中然后mysql安装部署

等同于重复上面server1中的操作

在server1(主节点)中进行以下操作
cd /usr/local/mysql
scp -r /usr/local/mysql/ server2:/usr/local/
scp -r /usr/local/mysql/ server3:/usr/local/
cd /etc
scp my.cnf server2:/etc/
scp my.cnf server3:/etc/

在server2与server3中
cd /usr/local/mysql/
cd support-files/
cp mysql.server /etc/init.d/mysqld
cd
vim .bash_profile
	/usr/local/mysql/bin
source .bash_profile
which mysql
useradd -M -d /usr/local/mysql -b /sbin/nologin mysql
mkdir -p /data/mysql
chown mysql.mysql /data/mysql/

mysqld --initialize --user=mysql #初始化数据库生成密码
/etc/init.d/mysqld start	#mysql启动
mysql_secure_installation	#安全初始化数据库

这样server2和server3的数据库部署完毕

2.编辑主节点配置文件

vim /etc/my.cnf
###启用二进制日志文件
	server-id=1
	log-bin=mysql-bin

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

mysql> show global variables like '%log%';  ##查看log_bin是否开启
mysql> show master logs;	#查看日志列表
mysql> show global variables like '%server%';

mysql> CREATE USER 'repl'@'%' IDENTIFIED BY 'password';	#用户创建
mysql> GRANT REPLICATION SLAVE ON *.* TO 'repl'@'%';	#授权
mysql> SHOW MASTER STATUS;

注意这里的server-id=1

3.编辑从节点配置文件

主从复制同步之前必须保持两个数据库已经存在的数据相同,所以需要将server1的数据库的备份文件先导入在slave的库中

mysqldump -p westos > dump.sql   #备份server1数据库
scp dump.sql server2:            #传输给server2
首先需要在server2中建立和server1一样的数据库westos
mysql -p westos < dump.sql       #备份导入server2数据库中
此时两个数据库已经完全一样

然后在server2中进行操作

然后在server中修改配置文件,注意这里的server-id=2

vim /etc/my.cnf

然后在数据库中进行配置,当IO口和SQL口同时显示yes表示主从复制完成

在从节点配置访问主节点的参数信息

添加 主节点主机,访问主节点的用户名及密码,主节点二进制文件信息。
注意:从节点的change的二进制文件一定要是主节点二进制列表中的最后一个二进制文件。

这时候我们就可以在server1中插入数据,并且在server2中进行查看,

server1中
INSTER INTO linux VALUES ('westos','111','111','111');
select * from linux;

在server2中
select * from linux;

四.GTID复制

(1) GTID的概念

MySQL 5.6引入的GTID(Global Transaction ID)使得其复制功能的配置、监控及管理变得更加易于实现,且更加健壮。

GTID即全局事务ID(global transaction identifier),GTID实际上是由UUID+TID组成的。其中UUID是一个MySQL实例的唯一标识。TID代表了该实例上已经提交的事务数量,并且随着事务提交单调递增。

下面是一个GTID的具体形式:
4e659069-3cd8-11e5-9a49-001c4270714e:1-77

因为清楚了GTID的格式,所以通过UUID可以知道这个事务在哪个实例上提交的。通过GUID可以极方便的进行复制结构上的故障转移,新主设置

(2)不引入GTID的新主设置
当Server1(Master)崩溃时,根据从上show slave status获得Master_log_File/Read_Master_Log_Pos的值,Server2(Slave)已经跟上了主,Server3(Slave)没有跟上主。这时要是把Server2提升为主,Server3变成Server2的从,这时在Server3上执行change的时候需要做一些计算,相对来说是比较麻烦的。server3在作为从库去同步新主库server2上的数据,由于server2中binlog记录的事务id和以前的server1主库的事务id并不一样,那么server2要将之前同步server1的进度转换为server2上的同步进度。

(3)引入GTID后的主库切换过程
由于同一事务的GTID在所有节点上的值一致,那么根据Server3当前停止点的GTID就能定位到Server2上的GTID。我们都不需要知道GTID的具体值,直接使用CHANGE MASTER TO MASTER_HOST=‘xxx’, MASTER_AUTO_POSITION命令就可以直接完成failover的工作

此时我们完成了server1和server2的主从复制,但是server2从复制教为麻烦,因此我们可以将server2既当所server1的slave又可以当作server3的master进行数据库的同步,这样的方式相比较从属组要简单的多,配置同步主从的时候不需要查看主数据库的日志文件以及编号

1.在server1中

/etc/init.d/mysqld restart

2.在server2中

mysql> stop slave;
mysql> CHANGE MASTER TO MASTER_HOST='172.25.132.1',MASTER_USER='repl',MASTER_PASSWORD='westos',MASTER_AUTO_POSITION = 1;
mysql> start slave;

3.在server3中

mysql> stop slave;
mysql> CHANGE MASTER TO MASTER_HOST='172.25.132.2',MASTER_USER='repl',MASTER_PASSWORD='westos',MASTER_AUTO_POSITION = 1;
mysql> start slave;

五.Mysql半同步复制

介于异步复制和全同步复制之间,主库在执行完客户端提交的事务后不是立刻返回给客户端,而是等待至少一个从库接收到并写到relay-log中才返回给客户端。相对于异步复制,半同步复制提高了数据的安全性,同时它也造成了一定程度的延迟,这个最少是一个TCP/IP往返的时间。所以,半同步复制最好在低延时的网络中使用。 


我们可以参照官方文档进行实验:https://dev.mysql.com/doc/refman/5.7/en/replication-semisync-installation.html

1.在server1中

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%';  ##查看是否安装
mysql> SET GLOBAL rpl_semi_sync_master_enabled = 1;  ##激活插件

2.在server2中

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;

​ 3.测试

我们模拟故障,在server2的数据库中关闭slave端口

并且在server1的数据库中插入一组数据

等待10s才成功,因为上面超时时间是10s,10s后如果没有收到slave节点的返回,就会切换到异步复制,再次插入时就不会延迟,因为已经是异步了

10秒钟后我们查看server2的数据库中已经存在server1中插入的数据了

六.Mysql异步复制

默认情况下,MySQL的复制功能是异步的,异步复制可以提供最佳的性能,主库把binlog日志发送给从库即结束,并不验证从库是否接收完毕。这意味着当主服务器或从服务器端发生故障时,有可能从服务器没有接收到主服务器发送过来的binlog日志,这就会造成主服务器和从服务器的数据不一致,甚至在恢复时造成数据的丢失

七.mysql延迟同步

延迟同步的原理:延迟同步就是将 Slaves 节点与 Master 节点保持指定时间的复制间隔。
所谓的延迟 ,只是对 SQL_Thread 的线程的延迟。IO_Thread 主库发生的任何操作的日志都会同步到 slave,也就是说 IO_Thread 线程和主库是没有延迟的。只是 SQL_Thread 与主库有延迟。只是执行时间延迟,而不是读取 binlog 时间延迟。

 

延迟同步的目的是:防止主库的误操作造成从库也被误操作

此时我们的server2是server1的slave端,我们在server2中执行

stop slave;
change master to master_delay = 30;    #修改延迟荣不时间为30秒
show slave status\G;    #查看状态
start slave;     #此时我们的延迟同步已经设置为30秒

然后我们在server1中插入数据

在server2中需要等到30秒之后,数据才能同步到slave中

八.并行复制

并行复制背景:
因为I/O thread和SQL thread是单线程工作的,而Master是可以多线程写入的,所以主从难免造成延迟

基于此,在5.6,5.7,8.0版本都在SQL线程上实现了多线程,来提升slave的并发度

并行复制的目的: 优化mysql

让Slave SQL线程尽可能以多线程工作,解决复制延迟的问题

并行复制的原理:

MySQL5.6开启并行复制功能后,SQL线程变成coordinator线程,由其判断是否可以并发执行,这意味着一个worker线程可以处理一个数据库的连续事务,而不用等待其它数据库完成
 

1.在server2(slave端中)

vim /etc/my.cnf
添加以下参数
 slave-parallel-type=LOGICAL_CLOCK     #基于组提交的并行用户
 slave-parallel-workers=16             #开启16个worker:单线程变成多线程(前两个必须加入,后面为优化)
 master_info_repository=TABLE          #优化选项,默认以文件存储,记录master信息,用表来记录,更新速度更快   
 relay_log_info_repository=TABLE       #读日志信息,用表来记录(原来是记录在磁盘里)
 relay_log_recovery=ON                 #激活recovery:读取master二进制日志,如果损坏,直接丢弃然后重新读取
/etc/init.d/mysqld restart

2.查看slow_query_log是否开启

3.测试

让slave端执行select sleep(10);休眠10秒,在日志中可查询到

九.组从复制(多主模式)

组复制是一种技术,可用于实现 容错系统。 复制组是一组 每个服务器都有自己的完整数据副本(一个 无共享复制方案),并相互交互 通过消息传递。 通信层提供了一套 原子消息和全序消息等保证 送货。 这些是非常强大的属性,可以转化为 非常有用的抽象,可以用来构建更多 高级数据库复制解决方案
官网帮助文档:MySQL :: MySQL 5.7 Reference Manual :: 17 Group Replicationhttps://dev.mysql.com/doc/refman/5.7/en/group-replication.html

单主模型:从复制组中众多个MySQL节点中自动选举一个master节点,只有master节点可以写,其他节点自动设置为read only。当master节点故障时,会自动选举一个新的master节点,选举成功后,它将设置为可写,其他slave将指向这个新的master。

多主模型:复制组中的任何一个节点都可以写,因此没有master和slave的概念,只要突然故障的节点数量不太多,这个多主模型就能继续可用。 

1.将所有主从节点的设置进行还原

在server1,server2和server3中都需要删除

/etc/init.d/mysql stop	关闭
rm -fr /data/mysql/*	删除mysql数据 

修改配置文件 /etc/my.cnf中的内容

注意:每一台主机的server-id=

group_replication_local_address= "server:33061"

都是一一对应的,1就是1,2就是2,3就是3,只需要改这两处即可

vim /etc/my.cnf    #编辑配置文件
\\\
server-id=1
gtid_mode=ON
enforce-gtid-consistency=true
master_info_repository=TABLE
relay_log_info_repository=TABLE
binlog_checksum=NONE      #关闭binlog校验
log_slave_updates=ON
log_bin=binlog
binlog_format=ROW       #组复制依赖基于行的复制格式
transaction_write_set_extraction=XXHASH64
group_replication_group_name="aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa"
plugin_load_add='group_replication.so'
group_replication_start_on_boot=off
group_replication_local_address= "server1:33061"
group_replication_group_seeds= "server1:33061,server2:33061,server3:33061"
group_replication_bootstrap_group=off    ##插件是否自动引导,这个选项一般都要off掉,只需要由发起组复制的节点开启,并只启动一次,如果是on,下次再启动时,会生成一个同名的组,可能会发生冲突
group_replication_ip_whitelist="172.25.132.0/24,127.0.0.1/8"
group_replication_enforce_update_everywhere_checks=ON
group_replication_single_primary_mode=OFF
group_replication_allow_local_disjoint_gtids_join=ON
\\\

mysqld --initialize-insecure --user=mysql    初始化数据库,不使用密码

初始化完成

2.设置组

mysql> SET SQL_LOG_BIN=0;
mysql> CREATE USER rpl_user@'%' IDENTIFIED BY 'westos';
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='westos' 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;

注意:只有在server1中需要 SET GLOBAL group_replication_bootstrap_group=ON;以及SET GLOBAL group_replication_bootstrap_group=OFF;在server2和server3中只需要前面的步骤完成之后START GROUP_REPLICATION; 即可,不需要一开一关。

3.查看组服务是否启动

SHOW PLUGINS;

如果START GROUP_REPLICATION语句返回,组已启动。 你可以检查该组

mysql> SELECT * FROM performance_schema.replication_group_members;

4.测试

在任意节点进行建库,建表,数据插入,在其他两个节点都可查询到

在任意台主机中进行数据添加操作
mysql> CREATE DATABASE test;
mysql> USE test;
mysql> CREATE TABLE t1 (c1 INT PRIMARY KEY, c2 TEXT NOT NULL);
mysql> INSERT INTO t1 VALUES (1, 'qiang');
然后在任意台主机中可以看到操作的内容
mysql> SELECT * FROM t1;

这里我们演示在server2主机中修改mysql的密码

本来server1中初始化进入数据库不需要密码,但是这里已经需要了,因为我们在server2中重新定义了数据库密码

组从复制就完成了

十.Mysql路由器

1.MYSQL Router原理

MySQL Router是处于应用client和dbserver之间的轻量级代理程序,它能检测,分析和转发查询到后端数据库实例,并把结果返回给client。是mysql-proxy的一个替代品

Router实现读写分离,程序不是直接连接数据库IP,而是固定连接到mysql router。MySQL Router对前端应用是透明的。应用程序把MySQL Router当作是普通的mysql实例,把查询发给MySQL Router,而MySQL Router会把查询结果返回给前端的应用程序。


读写分离原理

MySQL Router接受前端应用程序请求后,根据不同的端口来区分读写,把连接读写端口的所有查询发往主库,把连接只读端口的select查询以轮询方式发往多个从库,从而实现读写分离的目的。读写返回的结果会交给MySQL Router,由MySQL Router返回给客户端的应用程序。

2.开启一个新的节点配置mysql路由器

首先开启server1,2,3的数据库

然后配置并且开启server4,并且下载mysql包并且解压

 编写配置文件

\\\
[routing:ro]    ##只读
bind_address = 0.0.0.0
bind_port = 7001    ##7001端口
destinations = 172.25.132.1:3306,172.25.132.2:3306,172.25.132.3:3306
routing_strategy = round-robin    ##1,2,3主机轮换

[routing:rw]    ##读写
bind_address = 0.0.0.0
bind_port = 7002    ##7002端口
destinations = 172.25.132.1:3306,172.25.132.2:3306,172.25.132.3:3306
routing_strategy = first-available    ##默认连接第一台主机,第一台停了连接第二台
\\\

重启服务之后查看端口,可以看到7001和7002端口打开

然后在server1主机中查看列表

 然后创建一个用户授予访问test列表的用户,就在server1中,此时保持server1,2,3的主从良好

然后在真机中进行连接访问 mysql -h 172.25.132.1 -P 7001 -u wxh -p

就可以查询到server1中的test列表

并且可以通过server4的7001端口访问到数据库

然后分别在server1,2,3主机中安装lsof,方便我们查看端口

 然后在server1中查看3306端口看到server4在连接

 而server2中没有,因为还没有轮换到server2中,只有在server4中退出重连接才可以轮换到server2,(前提是配置文件中的顺序为server1然后server2)

然后我们在server1中的数据库查看此时的列表,

然后在真机中mysql -h 172.25.132.4 -P 7002 -u wxh -p,插入列表

 就可以在server1中查看真机中插入的列表了

 这时我们在server1中停止mysql的服务

 再一次通过真机向server1中的mysql添加列表,第一次显示失败是因为server1已经停止而真机不知道,第二次添加成功是因为真机的健康监测启动,自动插入到配置文件中所设置的下一台主机中

十一.MHA高可用

MHA是一款开源的MySQL的高可用程序,他为MySQL主从复制架构提供了automating master failover功能。MHA在监控到master节点故障时,会提升其中拥有最新数据的slave节点成为新的master节点。在此期间,MHA会通过其他从节点获取额外信息来避免一致性方面的额问题。MHA还提供了master节点切换功能,即按需切master/slave节点

环境配置:三台主机停止mysql服务,然后重新初始化配置并且修改配置文件(快速配置集群主从关系)

1.快速构建一主两从

server1中

然后初始化服务

 然后开启mysql

 进入数据库后

[root@server1 data]# mysql 
mysql> grant replication slave on *.* to repl@'%' identified by 'westos';

[root@server2 data]# mysql 
mysql> change master to  MASTER_HOST = '172.25.132.1', MASTER_USER = 'repl',  MASTER_PASSWORD = 'westos', MASTER_AUTO_POSITION = 1;
mysql> start slave;

[root@server3 data]# mysql 
mysql> change master to  MASTER_HOST = '172.25.132.1', MASTER_USER = 'repl',  MASTER_PASSWORD = 'westos', MASTER_AUTO_POSITION = 1;
mysql> start slave;

mysql> show slave status\G;

server2中

/etc/init.d/mysql stop
cd /data/mysql
ls
rm -rf *
vim /etc/my.cnf

初始化服务,开启mysql,进入数据库

​ server3和server2相同,只是vim /etc/my.cnf中server_id=3

2.配置MAH7

检查完成一主两从之后, 在server4中  /etc/init.d/mysql stop,然后systemctl stop mysql.service,在下载MHA-7安装包

/etc/init.d/mysqld stop
systemctl stop mysql.service 
lftp 172.25.254.250
cd /pub/docs/mysql/MHA-7
将这个目录下载到主机

然后安装 yum install *.rpm -y进行全部安装

 配置MHA-7

cd MHA-7
yum install *.rpm 
mkdir /etc/masterha
cd /etc/masterha

vim app1.conf

\\\
[server default]
manager_workdir=/etc/masterha		#manager工作目录
manager_log=/etc/masterha/mha.log   #manager日志文件
master_binlog_dir=/data/mysql		#mysql主服务器的binlog目录
#master_ip_failover_script=/usr/bin/master_ip_failover		#failover自动切换脚本
#master_ip_online_change_script= /usr/local/bin/master_ip_online_change		#手动切换脚本
user=root			#mysql主从节点的管理员用户密码,确保可以从远程登陆
password=westos	
ping_interval=3		#发送ping包的时间间隔,默认是3秒,尝试三次没有回应的时候自					动进行failover
remote_workdir=/tmp		#远端mysql在发生切换时binlog的保存位置
repl_user=repl			#主从复制用户密码
repl_password=westos	
#report_script=/usr/local/send_report		#发生切换后发送报警的脚本
secondary_check_script=/usr/bin/masterha_secondary_check -s 172.25.132.2 -s 172.25.132.3
#shutdown_script=""		#故障发生后关闭故障主机脚本,防止脑裂
ssh_user=root			#ssh用户名
[server1]
hostname=172.25.132.1
port=3306
#candidate_master=1
#check_repl_delay=0
 
[server2]
hostname=172.25.132.2
port=3306
candidate_master=1	#指定failover时此slave会接管master,即使数据不是最新的。
check_repl_delay=0	#默认情况下如果一个slave落后master 100M的relay logs的话,MHA将不会选择该slave作为一个新的master,因为对于这个slave的恢复需要花费很长时间,通过设置check_repl_delay=0,MHA触发切换在选择一个新的master的时候将会忽略复制延时,这个参数对于设置了candidate_master=1的主机非常有用,因为这个候选主在切换的过程中一定是新的master
 
[server3]
hostname=172.25.132.3
port=3306
#no_master=1			#始终是slave

\\\

然后进入到MHA-7目录中,将mha4mysql-node-0.58-0.el7.centos.noarch.rpm文件全部传输给1,2,3主机中

 然后在1,2,3主机中进行安装

 然后建立密钥

在server1中建立密钥
ssh-keygen  #建立密钥
ssh-copy-id server1    #拷贝给自己
将整个ssh文件传输给server1,server2,server3、server4 所有主机可以无密码连接
scp -r .ssh/ server1:
scp -r .ssh/ server2:
scp -r .ssh/ server3:
scp -r .ssh/ server4:
masterha_check_ssh --conf=/etc/masterha/app1.conf     #检测ssh
masterha_check_repl --conf=/etc/masterha/app1.conf    #检测repl,查看一主两从状态是否正确
全部成功后可以输入指令进行手动切换或脚本自动切换

检测实验环境是否配置成功
在server4中

masterha_check_ssh --conf=/etc/masterha/app1.conf     #检测ssh
masterha_check_repl --conf=/etc/masterha/app1.conf    #检测repl,查看一主两从状态是否正确
全部成功后可以输入指令进行手动切换或脚本自动切换

3.手动切换master

masterha_master_switch --conf=/etc/masterha/app1.conf --master_state=alive --new_master_host=172.25.132.2 --new_master_port=3306 --orig_master_is_new_slave --running_updates_limit=10000    #手动切换master,将还在运行的master替换为备用master

此时备用master-server2上线
在server3中可以查看slave的状态

这个时候server1中原来的master是成为server2的slave
我们查看以下server1的slave状态
server1已经成为server2的slave 

4.自动切换master

将master切换为server1

masterha_manager --conf=/etc/masterha/app1.conf &    #开启自动切换master,并将此进程打入后台
ps ax    #进行监控

然后关闭master会自动切换为server2为master

切换master时,server4会受到提示,查看/etc/masterha目录下的内容会多两个文件,app1.failover.complete 和 mha.log(日志文件,自动切换后就会生成) 

app1.failover.complete是锁定文件,文件中没有内容,当故障切换master时,默认八小时内最多切换一次,所以如果现在的master又宕掉MHA就会查看目录下是否有app1.failover.complete文件,有的话不进行切换,会报错! (想切换的时候需要删除这两个文件)
或者在手动切换时
masterha_master_switch --master_state=dead --conf=/etc/masterha/app1.conf --dead_master_host=172.25.132.1 --dead_master_port=3306 --new_master_host=172.25.132.2 --new_master_port=3306 –ignore_last_failover
加上–ignore_last_failover参数,跳过查看这个文件的步骤

  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值