mysql简介

(1)mysql介绍

Mysql是一种关系型数据库,特点是将这些数据保存在不同的二维表中,并将这些表放入数据库,这样可以增加它的读取速度。

(2)mysql的应用架构

单点(Single),适合小规模应用
复制(Replication),适合中小规模应用
集群(Cluster),适合大规模应用

(3)mysql的事务

事务就是一组原子性的SQL查询,或者说一个独立的工作单元。如果数据库引擎能够成功地对数据库进行该组查询的全部语句,那么就执行该组查询,如果其中有任何一条语句因为崩溃或者其他原因无法执行,那么所有的语句都不会执行,也就是说,事务内的语句,要么全部执行成功,要么全部执行失败。

1.mysql数据库的安装与部署

wget mysql-boost-5.7.31.tar.gz
tar zxf mysql-boost-5.7.31.tar.gz  解压
cd mysql-5.7.31/yum install cmake  安装
 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 bison.x86_64
yum install gcc-c++ -y
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    再次测试
make    编译
make install    安装

 安装成功

首先查看mysql命令所位于的目录
/usr/local/mysql/bin/mysql
cd 切换到家目录
vim .bash_profile 配置环境变量文件
PATH=$PATH:$HOME/bin:/usr/local/mysql/bin 添加路径
source .bash_profile
vim /etc/my.cnf  配置/etc/my.cnf文件
[mysqld]
datadir=/data/mysql
socket=/data/mysql/mysql.sock
[mysqld_safe]
log-error=/data/mysql/mariadb.log
pid-file=/data/mysql/mariadb.pid


建立目录/data/mysql
建立用户 useradd -d /usr/local/mysql -M -s /sbin/nologin mysql
让目录属于用户及用户组 chown mysql.mysql /data/mysql

cd /usr/local/mysql/support-files
cp mysql.server /etc/init.d/mysqld 将mysql.server加入到系统服务脚本
mysqld --initialize --user=mysql 初始化
/etc/init.d/mysqld start 开启服务
mysql_secure_installation mysql配置向导

配置成功

2.网页版数据库mysql

cd 切换至家目录
wget http://172.25.254.51/westos/lamp/phpMyAdmin-5.0.2-all-languages.zip 下载安装包
ls 查看下载情况
yum install unzip -y 下载unzip解压方式
unzip phpMyAdmin-5.0.2-all-languages.zip
mv phpMyAdmin-5.0.2-all-languages /usr/local/nginx/html 将此软件移动到nginx的发布目录上去
cd /var/local/nginx/html
ln -s phpMyAdmin-5.0.2-all-languages/ phpadmin 建立软链接
systemctl start php-fpm.service   开启php-fpm服务
systemctl enable php-fpm.service  设置开机自启
vim /usr/local/nginx/conf/nginx.conf 结合nginx和php
 location / {
            root   html;
            index  index.php index.html index.htm;
        }

location ~ \.php$ {
            root           html;
            fastcgi_pass   127.0.0.1:9000;
            fastcgi_index  index.php;
        #    fastcgi_param  SCRIPT_FILENAME  /scripts$fastcgi_script_name;
            include        fastcgi.conf;
        }
nginx -t
nginx -s reload
vim /usr/local/lnmp/php/etc/php.ini
pdo_mysql.default_socket=/data/mysql/mysql.sock  1057行
mysqli.default_socket = /data/mysql/mysql.sock  1166行
systemctl restart php-fpm.service 重启服务

mysql运维注意事项_数据库

 通过网页版mysql建立各种信息

 3.mysql的异步复制—基于二进制日志文件的主从复制

 

mysql运维注意事项_big data_02

 MySQL默认的复制即是异步的,主库在执行完客户端提交的事务后会立即将结果返给给客户端,并不关心从库是否已经接收并处理,这样就会有一个问题,主如果down掉了,此时主上已经提交的事务可能并没有传到从上,如果此时,强行将从提升为主,可能导致新主上的数据不完整。

实验环境:

vm1:主mysql
vm2:从mysql
在vm1上:
 vim /etc/my.cnf  修改配置文件
 
[mysqld]
log-bin=mysql-bin
server-id=1

/etc/init.d/mysqld restart 重启mysql
mysql -pwestos          进入mysql
create user 'wl'@'%' identified by 'westos'   建立远程用户
grant replication slave on *.* to 'wl'@'%';  给用户授权
flush privileges;                刷新
show master status;              查看master的状态

在vm2上:
vim /etc/my.cnf  修改配置文件
[mysqld]
server-id=2
/etc/init.d/mysqld restart 重启mysql
mysql -pwestos          进入mysql

change master to
    -> master_host='172.25.254.1',
    -> master_user='wl',
    -> master_password='westos',
    -> master_log_file='mysql-bin.000001',
    ->  master_log_pos=1192;
start slave;
show slave status\G;

4.mysql的异步复制—基于全局事务标识(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的工作

 mysql的主从配置又叫replication,AB复制,基于binlog二进制日志,主数据库必须开启binlog二进制日志才能进行复制。

  • 主数据库将更改操作记录到binlog二进制日志(主数据库有log dump线程和从数据库的i/o线程传递binlog)。
  • 从库生成两个线程,一个i/o线程,一个SQL线程。
  • i/o线程去请求主库的binlog,并且得到的binlog日志写到relay log(中继日志)文件中。
  • 然后主库会生成一个log dump线程,用来给从库的i/o线程传binlog;SQL线程,会读取中继日志文件,并解析成具体的操作执行,这样主从的操作就一致了,而最终的数据也就一致了。
在vm1中:
vim /etc/my.cnf  编写配置文件

[mysqld]
log-bin=mysql-bin
server-id=1
gtid_mode=ON
enforce-gtid-consistency=ON

/etc/init.d/mysqld restart 重启服务
进入mysql中创建用户并授权

在vm2中:
vim /etc/my.cnf  编写配置文件

[mysqld]
server-id=2
gtid_mode=ON
enforce-gtid-consistency=ON

mysql -pwestos
stop slave;   
mysql> change master to
    -> MASTER_HOST = '172.25.254.1',
    -> MASTER_USER = 'wl',
    -> MASTER_PASSWORD = 'westos',
    -> MASTER_AUTO_POSITION = 1;
start slave;
show status slave;

 5.mysql的半同步复制

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

在vm1:
mysql -pwestos
mysql> install plugin rpl_semi_sync_master soname 'semisync_master.so';
Query OK, 0 rows affected (0.02 sec)

mysql> set global rpl_semi_sync_master_enabled=ON;
Query OK, 0 rows affected (0.00 sec)

mysql> show status like 'Rpl_semi%';

在vm2上:

mysql> INSTALL PLUGIN rpl_semi_sync_slave SONAME 'semisync_slave.so';
Query OK, 0 rows affected (0.01 sec)

mysql> SET GLOBAL rpl_semi_sync_slave_enabled = 1;
Query OK, 0 rows affected (0.00 sec)

mysql> STOP SLAVE IO_THREAD;
Query OK, 0 rows affected (0.02 sec)

mysql> START SLAVE IO_THREAD;
Query OK, 0 rows affected (0.00 sec)
mysql> show status like '%rpl%';
mysql> show variables like '%rpl%';

验证:
在vm1中
mysql> insert into linux values ('user3','19');
mysql> show status like '%rpl%';
在vm2中
mysql> use westos;
mysql> select * from linux;

6.mysql的延迟同步

在slave端:
mysql> stop slave;
Query OK, 0 rows affected (0.01 sec)

mysql> change master to master_delay=3;
Query OK, 0 rows affected (0.02 sec)

mysql> show slave status\G;

7.mysql慢查询

  MySQL的慢查询日志是MySQL提供的一种日志记录,它用来记录在MySQL中响应时间超过阀值的语句,具体指运行时间超过long_query_time值的SQL,则会被记录到慢查询日志中。long_query_time的默认值为10,意思是运行10S以上的语句。默认情况下,Mysql数据库并不启动慢查询日志,需要我们手动来设置这个参数,当然,如果不是调优需要的话,一般不建议启动该参数,因为开启慢查询日志会或多或少带来一定的性能影响。慢查询日志支持将日志记录写入文件,也支持将日志记录写入数据库表。

mysql> set global slow_query_log=ON;
Query OK, 0 rows affected (0.02 sec)

mysql> show variables like "log%";
mysql> set  long_query_time=5;
mysql> show status like 'slow%';

 8.mysql并行复制

在mysql命令行进行设置,是临时的,重启mysql后就会实效
mysql> stop slave;

Query OK, 0 rows affected (0.03 sec)

mysql> set global slave_parallel_workers=16;

Query OK, 0 rows affected (0.05 sec)

mysql> start slave;

Query OK, 0 rows affected, 1 warning (0.07 sec)
SHOW VARIABLES LIKE 'slave_parallel_%';  查看设置是否成功
show processlist   看到16个SQL线程的状态

在配置文件中更改

9.mysql组复制(全同步)

指当主库执行完一个事务,所有的从库都执行了该事务才返回给客户端。因为需要等待所有从库执行完该事务才能返回,所以全同步复制的性能必然会受到严重的影响。

 

mysql运维注意事项_big data_03

master1:

/etc/init.d/mysqld stop     一定要先停掉服务
cd /data/mysql 

rm -fr *     所有文件全部删除,之后会重新初始化
uuidgen    随机生成UUID


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= "vm1:33061"
group_replication_group_seeds= "vm1:33061,vm2:33061,vm3:33061"
group_replication_bootstrap_group=off    插件是否自动引导,这个选项一般都要off掉,只需要由发起组复制的节点开启,并只启动一次,如果是on,下次再启动时,会生成一个同名的组,可能会发生冲突
group_replication_ip_whitelist="172.25.254.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 --user=mysql   #初始化
/etc/init.d/mysqld start   启动数据库
mysql_secure_installation   更改密码登陆
mysql -pwestos
alter user root@localhost identified by 'westos';    #更改用户root密码
SET SQL_LOG_BIN=0;    关闭二进制日志,防止传到其他的server上
CREATE USER ‘wl’@'%' IDENTIFIED BY 'westos';     创建用户用于复制
GRANT REPLICATION SLAVE ON *.* TO 'wl'@'%';     给所有库的所有表
FLUSH PRIVILEGES;          刷新授权表
SET SQL_LOG_BIN=1;           设定完毕,开启日志
CHANGE MASTER TO MASTER_USER='wl', MASTER_PASSWORD='westos' 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;     查看组状态
master 2、master3与master3的配置过程基本一致
只是在数据库命令行输入命令时,不用写
SET GLOBAL group_replication_bootstrap_group=ON;
SET GLOBAL group_replication_bootstrap_group=OFF;

 10.MySQL Router基于端口实现读写分离

 1.MySQL Router的介绍

1.1MySQL Router简介

MySQL Router是MySQL官方提供的一个轻量级中间件,是InnoDB Cluster的一部分,可在应用程序和后端MySQL服务器之间提供透明路由。主要用以解决MySQL主从库集群的高可用、负载均衡、易扩展等问题。Router作为一个流量转发层,位于应用与MySQL服务器之间,其功能类似于LVS。

1.2为什么要用MySQL Router?

基于组复制(MGR)的机制,当主节点宕机离开集群,剩余的其他节点会基于paxos协议选举一个新的主节点。这里有一个问题,应用程序端如果连接到了主节点,这时主节点宕机离开集群,可用的数据库IP地址发生变化,客户端应用程序这个时候还是会向失败的节点尝试连接,虽然可以修改客户端应用程序的连接配置,但是这种情况基本是不现实的。

1.3MySQL Router关系图

mysql运维注意事项_mysql_04

mysql运维注意事项_mysql_05

1.3上图充分说明了MySQL Router在InnoDB集群里面的角色,主要作用是为数据库集群提供一个虚拟IP作为应用程序单一连接点,通过这个单一的连接点实现负载均衡,读写分离,故障转移等数据库高可用方案。

MySQL Router推荐安装在应用程序所在的机器上,原因包括:

    通过本地Unix套接字连接,而不是TCP/IP,提升性能
    降低网络延迟
    MySQL实例不需要额外的账号,只需要一个router@198.51.100.45, 而不是myapp@%
    提升应用程序服务器的可扩展性

新建虚拟机4作为router
rpm -ivh mysql-router-community-8.0.21-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.1:3306,172.25.254.2:3306,172.25.254.3:3306
routing_strategy = round-robin    轮循的方式

[routing:rw]
bind_address = 0.0.0.0
bind_port = 7002
destinations = 172.25.254.1:3306,172.25.254.2:3306,172.25.254.3:3306
routing_strategy = first-available
\\\

 systemctl restart mysqlrouter.service  重新启动路由器即可

 验证读负载均衡:从结果看到每次读都是访问不同的主机
mysql -h 172.25.254.4 -P 7001 -uwl -pwestos -e “select * from linux”

 验证写负载均衡:从结果看到每次写都是写到主节点 ,当主节down掉就会有另一个节点的数据库接管写功能

mysql -h 172.25.254.4 -P 7002 -uwl -pwestos -e “select * from linux”

11.MHA高可用

MHA高可用原理

MHA是自动的master故障转移和Slave提升的软件包.它是基于标准的MySQL复制(异步/半同步).该软件由两部分组成:MHA Manager(管理节点)和MHA Node(数据节点)。
1)MHA Manager可以单独部署在一台独立的机器上管理多个master-slave集群,也可以部署在一台slave节点上。MHA Manager会定时探测集群中的node节点,当发现master出现故障的时候,它可以自动将具有最新数据的slave提升为新的master,然后将所有其它的slave导向新的master上.整个故障转移过程对应用程序是透明的。
2)MHA Node运行在每台MySQL服务器上,它通过监控具备解析和清理logs功能的脚本来加快故障转移的。

在MHA自动故障切换过程中,MHA试图从宕机的主服务器上保存二进制日志,最大程度的保证数据的不丢失,但这并不总是可行的。例如,如果主服务器硬件故障或无法通过ssh访问,
MHA没法保存二进制日志,只进行故障转移而丢失了最新的数据。使用MySQL 5.5或者以后的版本的半同步复制,可以大大降低数据丢失的风险。MHA可以与半同步复制结合起来。如果只有一个slave已经收到了最新的二进制日志,MHA可以将最新的二进制日志应用于其他所有的slave服务器上,因此可以保证所有节点的数据一致性。

目前MHA主要支持一主多从的架构,要搭建MHA,要求一个复制集群中必须最少有三台数据库服务器,一主二从,即一台充当master,一台充当备用master,另外一台充当从库,因为至少需要三台服务器。

 

mysql运维注意事项_MySQL_06

 MHA在线切换(热处理)的大概过程:
1.检测复制设置和确定当前主服务器
2.确定新的主服务器
3.阻塞写入到当前主服务器
4.等待所有从服务器赶上复制
5.授予写入到新的主服务器
6.重新设置从服务器

MHA 的组成:

MHA 软件由两部分组成,Manager 工具包和 Node 工具包,具体如下。

Manager 工具包情况如下:

 masterha_check_ssh:检查 MHA 的 SSH 配置情况。
 masterha_check_repl:检查 MySQL 复制状况。
 masterha_manager:启动 MHA。
 masterha_check_status:检测当前 MHA 运行状态。
 masterha_master_monitor:检测 Master 是否宕机。
 masterha_master_switch:控制故障转移(自动或手动)。
 masterha_conf_host:添加或删除配置的 server 信息。

Node 工具包(通常由 MHA Manager 的脚本触发,无需人工操作)情况如下:

 save_binary_logs:保存和复制 Master 的 binlog 日志。
 apply_diff_relay_logs:识别差异的中级日志时间并将其应用到其他 Slave。
 filter_mysqlbinlog:去除不必要的 ROOLBACK 事件(已经废弃)
 purge_relay_logs:清除中继日志(不阻塞 SQL 线程)

 

(1)基本实验环境

在vm1上:
首先停掉服务 /etc/init.d.mysqld stop
cd /data/mysql
rm -rf *
vim /etc/my.cnf
删除关于之前组同步的策略,只需要开启gtid即可

重新初始化 mysqld --initialize-insecure --user=mysql 重新初始化(-insecure无密码)
开启mysql /etc/init.d/mysqld start
进入mysql mysql
mysql> set sql_log_bin=0;
mysql> alter user root@localhost identified by 'westos'; 修改密码
mysql> create user 'wl'@'%' identified by 'westos'; 
mysql> grant replication slave on *.* to 'wl'@'%' ;   授权用户
在vm2 vm3上
同样的操作,注意/etc/mysql.cnf中用户id不同
在命令行中

mysql> alter user root@localhost identified by 'westos';
mysql> set sql_log_bin=0;
mysql> change master to master_host='172.25.254.1',master_user='westos',master_password='westos',master_auto_position=1;
mysql> start slave;

(2)安装、配置MHA

在vm4上:
MHA官方下载rpm格式的程序包
cd /MHA-7:
ls
mha4mysql-manager-0.58-0.el7.centos.noarch.rpm
mha4mysql-manager-0.58.tar.gz
mha4mysql-node-0.58-0.el7.centos.noarch.rpm
perl-Config-Tiny-2.14-7.el7.noarch.rpm
perl-Email-Date-Format-1.002-15.el7.noarch.rpm
perl-Log-Dispatch-2.41-1.el7.1.noarch.rpm
perl-Mail-Sender-0.8.23-1.el7.noarch.rpm
perl-Mail-Sendmail-0.79-21.el7.noarch.rpm
perl-MIME-Lite-3.030-1.el7.noarch.rpm
perl-MIME-Types-1.38-2.el7.noarch.rpm
perl-Net-Telnet-3.03-19.el7.noarch.rpm
perl-Parallel-ForkManager-1.18-2.el7.noarch.rpm

yum install -y *.rpm 	##安装所有rpm包

将node传输到vm1主,2从,3从上:
scp mha4mysql-node-0.58-0.el7.centos.noarch.rpm vm1:
scp mha4mysql-node-0.58-0.el7.centos.noarch.rpm vm2:
scp mha4mysql-node-0.58-0.el7.centos.noarch.rpm vm3:

在vm1,2,3上:
rpm -ivh mha4mysql-node-0.58-0.el7.centos.noarch.rpm
vm1,2,3,4需要实现免密通信
在vm1上
ssh-keygen
ssh-copy-id vm1
scp -r .ssh/ vm2
scp -r .ssh/ vm3:
scp -r .ssh/ vm4:
在vm4中:
cd MHA-7/
tar zxf mha4mysql-manager-0.58.tar.gz 
cd mha4mysql-manager-0.58
#AUTHORS COPYING lib  MANIFEST README  samples testsbin debian Makefile.PL  MANIFEST.SKIP  rpm     t
cd samples
#conf  scripts
cd conf
#app1.cnf  masterha_default.cnf
mkdir /etc/mha        
cat masterha_default.cnf app1.cnf > /etc/mha/app.cnf
cd /etc/mha
vim app.cnf
cat app.cnf
[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.254.2 -s 172.25.254.3
#shutdown_script=""		#故障发生后关闭故障主机脚本,防止脑裂
ssh_user=root			#ssh用户名
[server1]
hostname=172.25.254.1
port=3306
#candidate_master=1
#check_repl_delay=0
 
[server2]
hostname=172.25.254.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.254.3
port=3306
no_master=1			始终是slave

 检验配置是否成功

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

 手动切换master(热处理)

masterha_master_switch --conf=/etc/masterha/app1.conf --master_state=alive --new_master_host=172.25.7.2 --new_master_port=3306 --orig_master_is_new_slave --running_updates_limit=10000    手动切换master,将还在运行的master替换为备用master
在原来的master vm1上
stop slave;
CHANGE MASTER TO MASTER_HOST='172.25.254.2',MASTER_PORT=3306, MASTER_AUTO_POSITION=1,MASTER_USER='wl', MASTER_PASSWORD='westos';
start slave;
set GLOBAL SQL_SLAVE_SKIP_COUNTER=1;

手动切换master( 故障处理)

masterha_master_switch --master_state=dead --conf=/etc/masterha/app1.conf --dead_master_host=172.25.254.1 --dead_master_port=3306 --new_master_host=172.25.254.2 --new_master_port=3306 --ignore_last_failover    此命令是将已经宕机的数据库给替换
这里第一次故障切换master,--ignore_last_failover参数可以不加

 注:默认情况下,MHA发生切换后会在日志目录,也就是上面设置的/data产生app1.failover.complete文件,下次再次切换的时候如果发现该目录下存在该文件将不允许触发切换,除非在第一次切换后收到删除该文件,如果下次想继续进行切换,添加这个参是–ignore_last_failover

 在vm3中进行查看,此时备用的vm2成为master

自动切换master

在mha上:
nohup masterha_manager --conf=/etc/masterha/app1.cnf &> /dev/null & 开启监控,并打入后台
在slave上查看master show slave status\G
在原来的master上
先开启数据库systemctl start mysqld,然后进入数据库
stop slave;
CHANGE MASTER TO MASTER_HOST='172.25.254.2',MASTER_PORT=3306, MASTER_AUTO_POSITION=1,MASTER_USER='wl', MASTER_PASSWORD='westos';
start slave;

12.mha实现vip漂移

在master中添加用户
ip addr add 172.25.254.100/24 dev eth0
cd mha4mysql-manager-0.58
ls
cd scripts/
ls
master_ip_failover  master_ip_online_change  power_manager  send_report
cp master_ip_failover  master_ip_online_change /usr/local/bin/
cd /usr/local/bin/
ls
master_ip_failover  master_ip_online_change
vim 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

chmod 755 *
vim /etc/masterha/app1.conf

解掉注释

mysql运维注意事项_mysql_07

 配置文件和脚本编辑之后进行检测
masterha_check_repl --conf=/etc/masterha/app1.conf

测试成功,现在VIP用户在master中

开启自动替换master
masterha_manager --conf=/etc/masterha/app1.conf &

停止vm1的数据库
/etc/init.d/mysqld stop
此时master将会自动切换为vm2
查看ip发现VIP用户随着master转移到了vm2当中