一、MHA介绍
MHA(Master HA)是一款开源的 MySQL 的高可用程序,它为 MySQL 主从复制架构提供了 automating master failover 功能。MHA 在监控到 master 节点故障时,会提升其中拥有最新数据的 slave 节点成为新的master 节点,在此期间,MHA 会通过于其它从节点获取额外信息来避免一致性方面的问题。MHA 还提供了 master 节点的在线切换功能,即按需切换 master/slave 节点。MHA 能够在30秒内实现故障切换,并能在故障切换中,最大可能的保证数据一致性。
MHA由两部分组成:MHA Manager(管理节点)和MHA Node(数据节点)。管理节点可以单独部署在一台独立的机器上来管理多个master-slave集群,也可以部署在一台slave节点上。数据节点运行在每台mysql服务器上。Manager会定期检查master,若出现故障时,会自动将最新数据的slave提升为新的master,然后将其他的slave指向新的master。整个故障转移程序完全透明。
目前MHA主要支持一主多从的架构。要搭建MHA,要求一个复制集群中必须最少有三台数据库服务器,一主二从,即一台充当master,一台充当备用master,另外一台充当从库。
二、MHA工作架构说明
展示了如何通过MHA Manager管理多组主从复制。可以将MHA工作原理总结为如下:
相较于其它HA软件,MHA的目的在于维持MySQL Replication中Master库的高可用性,其最大特点是可以修复多个Slave之间的差异日志,最终使所有Slave保持数据一致,然后从中选择一个充当新的Master,并将其它Slave指向它。工作流程主要如下:
1)从宕机崩溃的master保存二进制日志事件(binlog events);
2)识别含有最新更新的slave;
3)应用差异的中继日志(relay log)到其他的slave;
4)应用从master保存的二进制日志事件(binlog events);
5)提升一个slave为新的master;
6)使其他的slave连接新的master进行复制;
2.1 MHA工作原理
1 从宕机崩溃的master保存二进制日志事件(binlog events)
2识别含有最新更新的slave
3应用差异的中继日志(relay log)到其他的slave
4应用从master保存的二进制日志事件(binlog events)
5提升一个slave为新的master
6使其他的slave连接新的master进行复制
2.2 MHAManager工具包
1. masterha_check_ssh:检查MHA的SSH配置状况
2. masterha_check_repl:检查MySQL的复制状况
3. masterha_manager:启动MHA
4. masterha_check_status:检测当前MHA运行状态
5. masterha_master_monitor:检测master是否宕机
6. masterha_master_switch:控制故障转移(自动或手动)
7. masterha_conf_host:添加或删除配置的server信息
8. masterha_stop:关闭MHA
Node工具包(这些工具通常由MHAManager的脚本触发,无需人为操作)主要包括以下几个工具:
save_binary_logs(保存二进制日志) 保存和复制master的二进制日志
apply_diff_relay_logs(应用差异中继日志) 识别差异的中继日志事件并将其差异的事件应用于其他的slave
filter_mysqlbinlog 去除不必要的ROLLBACK事件(MHA已不再使用这个工具)
purge_relay_logs(清理中继日志) 清除中继日志(不会阻塞SQL线程)
MHA如何保持数据的一致性呢?主要通过MHA node的以下几个工具实现,但是这些工具由mha manager触发:
save_binary_logs 如果master的二进制日志可以存取的话,保存复制master的二进制日志,最大程度保证数据不丢失
apply_diff_relay_logs 相对于最新的slave,生成差异的中继日志并将所有差异事件应用到其他所有的slave
注意:
对比的是relay log,relay log越新就越接近于master,才能保证数据是最新的。
purge_relay_logs删除中继日志而不阻塞sql线程
2.3 MHA处理过程
====== monitor node 监控节点======
(1) 监控所有节点,重点是master
(2) 监控到master宕机(实例(ssh能),主机(ssh不能连))
(3) 监控主从状态
====== failover 故障转移======
(3) 对比各节点的GTID号码。
(3) 数据补偿1:如果ssh能连,从节点立即保存自己缺失部分的二进制日志
(4) 选主:对比各节点的GTID号码即可,选一个最接近于主库数据的从节点,恢复缺失的日志,并将从库切换为主库stop slave reset slave all
(5) 数据补偿2:如果ssh不能连,计算两个从库的relaylog的差异,恢复到数据少的从库中.
(6) 2号从库change master to 到新主,开启新的主从关系
====== 应用透明=====
(7) 使用vip机制实现应用透明
====== 补充功能======
(8) 自动修复主库(加入集群)待开发...
(9) 二次数据补偿的问题(binlog server)
(10) 提醒功能(send_report)
(11) 权重的问题
2.4 MHA的优势
1)故障切换快
在主从复制集群中,只要从库在复制上没有延迟,MHA通常可以在数秒内实现故障切换。9-10秒内检查到master故障,可以选择在7-10秒关闭master以避免出现裂脑,几秒钟内,将差异中继日志(relay log)应用到新的master上,因此总的宕机时间通常为10-30秒。恢复新的master后,MHA并行的恢复其余的slave。即使在有数万台slave,也不会影响master的恢复时间。DeNA在超过150个MySQL(主要5.0/5.1版本)主从环境下使用了MHA。当mater故障后,MHA在4秒内就完成了故障切换。在传统的主动/被动集群解决方案中,4秒内完成故障切换是不可能的。
2)master故障不会导致数据不一致
当目前的master出现故障时,MHA自动识别slave之间中继日志(relay log)的不同,并应用到所有的slave中。这样所有的salve能够保持同步,只要所有的slave处于存活状态。和Semi-Synchronous Replication一起使用,(几乎)可以保证没有数据丢失。
3)无需修改当前的MySQL设置
MHA的设计的重要原则之一就是尽可能地简单易用。MHA工作在传统的MySQL版本5.0和之后版本的主从复制环境中。和其它高可用解决方法比,MHA并不需要改变MySQL的部署环境。MHA适用于异步和半同步的主从复制。启动/停止/升级/降级/安装/卸载MHA不需要改变(包扩启动/停止)MySQL复制。当需要升级MHA到新的版本,不需要停止MySQL,仅仅替换到新版本的MHA,然后重启MHA Manager就好了。
MHA运行在MySQL 5.0开始的原生版本上。一些其它的MySQL高可用解决方案需要特定的版本(比如MySQL集群、带全局事务ID的MySQL等等),但并不仅仅为了master的高可用才迁移应用的。在大多数情况下,已经部署了比较旧MySQL应用,并且不想仅仅为了实现Master的高可用,花太多的时间迁移到不同的存储引擎或更新的前沿发行版。MHA工作的包括5.0/5.1/5.5的原生版本的MySQL上,所以并不需要迁移。
4)无需增加大量的服务器
MHA由MHA Manager和MHA Node组成。MHA Node运行在需要故障切换/恢复的MySQL服务器上,因此并不需要额外增加服务器。MHA Manager运行在特定的服务器上,因此需要增加一台(实现高可用需要2台),但是MHA Manager可以监控大量(甚至上百台)单独的master,因此,并不需要增加大量的服务器。即使在一台slave上运行MHA Manager也是可以的。综上,实现MHA并没用额外增加大量的服务。
5)无性能下降
MHA适用与异步或半同步的MySQL复制。监控master时,MHA仅仅是每隔几秒(默认是3秒)发送一个ping包,并不发送重查询。可以得到像原生MySQL复制一样快的性能。
6)适用于任何存储引擎
MHA可以运行在只要MySQL复制运行的存储引擎上,并不仅限制于InnoDB,即使在不易迁移的传统的MyISAM引擎环境,一样可以使用MHA。
三、安装Mysql
使用root创建用户
useradd -m mysql
修改密码
passwd mysql
下载https://cdn.mysql.com/archives/mysql-8.0/mysql-8.0.13-1.sles12.x86_64.rpm-bundle.tar
解压
tar xvf mysql-8.0.13-1.sles12.x86_64.rpm-bundle.tar
mysql-community-server-8.0.13-1.sles12.x86_64.rpm
mysql-community-devel-8.0.13-1.sles12.x86_64.rpm
mysql-community-libs-8.0.13-1.sles12.x86_64.rpm
mysql-community-client-8.0.13-1.sles12.x86_64.rpm
mysql-community-common-8.0.13-1.sles12.x86_64.rpm
mysql-community-test-8.0.13-1.sles12.x86_64.rpm
3.1 安装
先查询是否安装mysql
rpm -qa | grep -i mysql
如未安装则跳过执行安装命令。
利用rpm卸载mysql
rpm -e --nodepsmysql-community-client-5.7.28-1.el7.x86_64
rpm -e --nodepsmysql-community-devel-5.7.28-1.el7.x86_64
rpm -e --nodeps mysql-community-libs-5.7.28-1.el7.x86_64
rpm -e --nodepsmysql-community-common-5.7.28-1.el7.x86_64
rpm -e --nodepsmysql-community-server-5.7.28-1.el7.x86_64
下面就利用安装命令来安装MySQL8.0x:
rpm -ivh mysql-community-common-8.0.13-1.sles12.x86_64.rpm
rpm -ivh mysql-community-libs-8.0.13-1.sles12.x86_64.rpm
rpm -ivh mysql-community-client-8.0.13-1.sles12.x86_64.rpm
rpm -ivh mysql-community-server-8.0.13-1.sles12.x86_64.rpm
rpm -ivh mysql-community-devel-8.0.13-1.sles12.x86_64.rpm
下面就利用安装命令来安装MySQL5.7x:
rpm -ivh mysql-community-common-5.7.28-1.el7.x86_64.rpm
rpm -ivh mysql-community-libs-5.7.28-1.el7.x86_64.rpm
rpm -ivh mysql-community-client-5.7.28-1.el7.x86_64.rpm
rpm -ivh mysql-community-server-5.7.28-1.el7.x86_64.rpm --force --nodeps
rpm -ivh mysql-community-devel-5.7.28-1.el7.x86_64.rpm
3.2 创建用户组和用户
创建用户组:groupadd mysql
创建用户:useradd -r -g mysql mysql
注:由于SUSE采用的是rpm安装,所以此系统已经创建好了,可以跳过次步骤。如果无则使用上诉命令进行创建
给mysql用户指定专用用户组和用户
首先创建data文件夹。(注:mysql的表文件都在这个目录下)
这个data文件夹得根据硬盘的位置来
df -h
由于是本地虚拟机环境,生产环境可安装实际硬盘目录来创建data目录。
mkdir -p /home/mysql/data
指定用户和用户组
cd /usr/local/
mkdir -p mysql
chown -R mysql mysql/
chgrp -R mysql mysql/
随便也设置一下data的,注mysql目录根据自己实际硬盘的要求更改目录
cd /home/mysql
chgrp -R mysql tmp/
chown -R mysql tmp/
chown -R mysqlmysql/
chgrp-R mysql mysql/
3.3 初始化用户
vim /etc/my.cnf 内容如下
# For advice on how to change settings please see
# http://dev.mysql.com/doc/refman/8.0/en/server-configuration-defaults.html
[mysqld]
#
# Remove leading # and set to the amount of RAM for the most important data
# cache in MySQL. Start at 70% of total RAM for dedicated server, else 10%.
# innodb_buffer_pool_size = 128M
#
# Remove the leading "# " to disable binary logging
# Binary logging captures changes between backups and is enabled by
# default. It's default setting is log_bin=binlog
# disable_log_bin
#
# Remove leading # to set options mainly useful for reporting servers.
# The server defaults are faster for transactions and fast SELECTs.
# Adjust sizes as needed, experiment to find the optimal values.
# join_buffer_size = 128M
# sort_buffer_size = 2M
# read_rnd_buffer_size = 2M
#
# Remove leading # to revert to previous value for default_authentication_plugin,
# this will increase compatibility with older clients. For background, see:
# https://dev.mysql.com/doc/refman/8.0/en/server-system-variables.html#sysvar_default_authentication_plugin
# default-authentication-plugin=mysql_native_password
#设置数据存放位置
#basedir=/var/lib/mysql
datadir=/home/mysql/data
tmpdir=/home/mysql/tmp
socket=/var/lib/mysql/mysql.sock
pid-file=/var/run/mysql/mysqld.pid
port=3306
default_storage_engine=InnoDB
lower_case_table_names=1
innodb_buffer_pool_size = 1G
#事务日志文件大小,循环写的方式,把数据文件的随机IO转为几乎顺序的IO,默认是两个5M的文件,
#对于生产环境来说至少要几百甚至上G的大小(需要重启)
innodb_log_file_size = 512M
#内存日志缓冲区,在缓冲满/事务提交/1秒钟Innodb会刷写缓冲区内容到日志文件
innodb_log_buffer_size=16M
character-set-server = utf8mb4
collation-server = utf8mb4_bin
############## binlog ################
server-id = 130
log_bin = mysql-bin
binlog_format = row
sync_binlog = 1
expire_logs_days =7
#最大连接数,默认是100,生产可设置500~5000,取决于服务器的负载能力,一般来说1000足够
max_connections=1000
#mysql在服务端的线程缓存池存放的最大线程数,并不是越大越好,通常并发在100-120可设置为20,
#并发在500-700,可设置200,256的上限值是个不错的估值
thread_cache_size=256
#socket=/var/lib/mysql/mysql.sock
log-error=/var/log/mysql/mysqld.log
#pid-file=/var/run/mysql/mysqld.pid
[client]
socket=/var/lib/mysql/mysql.sock
port=3306
执行初始化命令:
sudo mysqld --initialize --user=mysql --datadir=/home/mysql/data/ --lc_messages=en_US
初始化成功,查看初始密码
cat /var/log/mysql/mysqld.log | grep password
这个是密码root@localhost: 9.sF=eBDO,k*
依次查看
启动MySQL服务
systemctl start mysql
停止MySQL服务
systemctl stop mysql
配置为开机启动
systemctl enable mysql
使用初始密码登录MySQL
mysql -u root -p
验证登录成功了,接下来修改root密码
Mysql5.7x版本执行以上命令:
修改密码:set password=password("root");
登录授权:grant all privileges on *.* to 'root'@'%' identified by 'root';
授权生效:flush privileges;
Mysql8.0x版本执行以上命令:
第一次需要修改密码
ALTER USER 'root'@'localhost' IDENTIFIEDWITH mysql_native_password BY 'root';
修改密码:create user 'root'@'%' identified with mysql_native_password by'root';
登录授权:grant all privileges on *.* to 'root'@'%' with grant option;
授权生效:flush privileges;
关闭防火墙
不同的MySQL直接要互相访问,需要关闭Linux的防火墙
suse12下操作为:
关闭防火墙
systemctl stopSuSEfirewall2.service
取消开机启动防火墙
systemctl disableSuSEfirewall2.service
开启防火墙
systemctl enableSuSEfirewall2.service
开机启动防火墙
systemctl startSuSEfirewall2.service
四、主从配置
4.1 Master节点
查看server_id
show variables like 'server_id';
修改Master配置文件
vim /etc/my.cnf
[mysqld]
log_bin=mysql-bin
server-id=130
sync-binlog=1 # 每次写入都同步到binlog
binlog-ignore-db=performance_schema # 忽略不同步
binlog-ignore-db=information_schema
binlog-ignore-db=mysql
binlog-ignore-db=sys
# binlog-do-db=test #需要主从复制的数据库
# 为每个session分配的内存,在事务过程中用来存储二进制日志的缓存
binlog_cache_size=1M
# 主从复制的格式(mixed,statement,row,默认格式是statement。建议是设置为row,主从复制时数据更加能够统一)
binlog_format=row
# 设置二进制日志自动删除/过期的天数,避免占用磁盘空间。默认值为0,表示不自动删除。
expire_logs_days=7
重启服务
systemctl restart mysql
主库给从库授权
Mysql8.0x执行以下命令
create user 'canal_repl_user'@'%' identified with mysql_native_password by '123456';
GRANT REPLICATION SLAVE ON *.* TO 'canal_repl_user'@'%';
flush privileges;
Mysql5.7x执行以下命令
create user canal_repl_user;
grant replication slave on *.* to canal_repl_user identified by '111111';
flush privileges;
show master status;
4.2 Slave节点
修改Slave配置文件,设置为134
vim /etc/my.cnf
[mysqld]
log_bin=mysql-bin
server-id=134
sync-binlog=1 # 每次写入都同步到binlog
binlog-ignore-db=performance_schema # 忽略不同步
binlog-ignore-db=information_schema
binlog-ignore-db=sys
binlog-ignore-db=mysql
binlog_cache_size=1M
binlog_format=row
expire_logs_days=7
relay_log=mysql-relay-bin #中继日志名字
relay_log_purge=0
read_only=2
manager-slave节点
修改manager-slave配置文件, server-id设置为160
vim /etc/my.cnf
[mysqld]
log_bin=mysql-bin
server-id=160
sync-binlog=1 # 每次写入都同步到binlog
binlog-ignore-db=performance_schema # 忽略不同步
binlog-ignore-db=information_schema
binlog-ignore-db=sys
binlog-ignore-db=mysql
binlog_cache_size=1M
binlog_format=row
expire_logs_days=7
relay_log=mysql-relay-bin #中继日志名字
relay_log_purge=0
read_only=2
分别重启节点Slave和节点manager-slave
systemctl restart mysql
注:三台机器的配置可根据实际要求进行修改,网上一搜一大堆,这里不做过多的解释,如有疑问请留言。
4.3 开启同步
在Slave节点的MySQL命令行执行如下命令:
change master to master_host='192.168.142.133',master_port=3306,master_user='canal_repl_user',master_password='123456',master_log_file='mysql-bin.000001',master_log_pos=1072;
start slave; // 开启同步
查看主从复制信息
SHOW SLAVE STATUS\G;
create database syj_test defaultcharacter set utf8mb4 collate utf8mb4_bin;
create user 'syj_test'@'%' identified withmysql_native_password by 'syj_test';
grant all privileges on syj_test.* to'syj_test'@'%' with grant option;
flush privileges;
4.4 半同步复制
1)半同步复制配置参数说明
主库半同步复制可配置的参数较少,可通过“show global variables like '%semi%';”查看
注意MySQL5.7的增强半同步较MySQL5.6多了如下两参数:
rpl_semi_sync_master_wait_for_slave_count: 至少有N个slave接收到日志,Default 1.
rpl_semi_sync_master_wait_point: AFTER_SYNC(5.7的默认值,写入relaylog后,master commit), AFTER_COMMIT 等同于5.6的半同步。
2)主库半同步复制状态说明
主库半同步复制状态的参数较多,可通过“show global status like '%semi%';”查看。
3)主库半同步复制状态说明
登录MySQL主库,安装半同步插件。
[if !supportLists]1. [endif]链接Mysql数据库,安装插件rpl_remi_sync_master install plugin rpl_semi_sync_master soname'semisynv_mster.so';
[if !supportLists]2. [endif]查看插件是否安装show plugins;
[if !supportLists]3. [endif]启用插件 set global rpl_semi_sync_master_enabled = ON; # 注意= 与字符和数字之间有空格,否则会报
[if !supportLists]4. [endif]安装完成后,查看插件的状态
半同步配置文件
#master
#my.cnf中
[mysqld]
rpl_semi_sync_master_enabled = ON
rpl_semi_sync_master_timeout = 1000
安装半同步插件
#master
install plugin rpl_semi_sync_master soname'semisync_master.so';
set global rpl_semi_sync_master_enabled =ON;
检查是否生效:
select * from mysql.plugin;
show global status like '%semi%'; ---查看主库半同步复制的状态参数
show global variables like '%semi%'; ---查看主库半同步复制的相关参数设置
配置从库
进入数据库,安装并启用插件rpl_semi_sync_slave,相关的操作可以参考配置主服务器的1&2
mysql> install pluginrpl_semi_sync_slave soname 'semisync_slave.so';
mysql> SET GLOBALrpl_semi_sync_slave_enabled = ON;
需要注意,在Master中使用的是master 模块,在从服务器中使用的是slave模块.
查看semi插件的状态
show global status like '%semi%';
半同步配置文件:
#my.cnf中
[mysqld]
rpl_semi_sync_slave_enabled = ON
如果在一个正在运行的Slave上开启半同步复制的功能,那么在配置半同步以后,需要重启停止Slave的I/O线程:
从库上执行:
#从库上执行
mysql> stop slave io_thread; ---停止IO线程
mysql> start slave io_thread; ---启动IO线程
mysql> show slave status\G;
主库上查看半同步状态
查看主库上面的半同步插件是否开启,输出如下,注意第一个参数clients的值变为1了(之前是0),表示主从半同步复制连接成功。
show global status like '%Rpl_semi_sync_master_clients%';
半同步测试
写入数据之后在查看
#主库
show global status like '%semi%';
测试半同步复制超时
stop slave io_thread;
#半同步失败退化了异步
在主库更新
insert into 表
show global status like '%semi%';
测试可知,从库停止IO线程复制之后,第一次执行insert操作时等待了10秒之后才提交完事务,但是第二次insert的操作就很快了。因为第一次等待从库超时之后,半同步复制状态自动转换为异步了,所以第二次及以后都会很快了。
开启从库的IO线程复制状态
start slave io_thread;
再次查看主库的半同步状态
show global status like '%semi%';
4.5 MHA半同步复制说明
为了尽可能的减少主库硬件损坏宕机造成的数据丢失,因此在配置MHA的同时建议配置成mysql的半同步复制。
注:mysql半同步插件是由google提供,具体位置/usr/local/mysql/lib/plugin下,一个是master用的semisync_master.so,一个是slave用的semisync_slave.so,下面我们就来具体配置一下。如果不清楚Plugin的目录,用如下查找:
mysql>show variables like'%have_dynamic%';
SUSE系统异于常人,根据实际情况来操作
分别在主从节点上安装相关的插件(master,slave1,slave2)在mysql上安装插件需要数据库支持动态载入。检查是否支持,用如下检测:
show variables like '%have_dynamic%';
所有mysql数据库服务器,安装半同步插件(semisync_master.so,semisync_slave.so):
mysql> install plugin rpl_semi_sync_master soname 'semisync_master.so';
Query OK, 0 rows affected (0.30 sec)
mysql> install plugin rpl_semi_sync_slave soname 'semisync_slave.so';
Query OK, 0 rows affected (0.00 sec)
其他mysql主机采用同样的方法安装。
#确保每台mysql主机都正确安装plugin:
mysql> show plugins;
#查看半同步相关信息:
show variables like '%rpl_semi_sync%';
注:若主mysql服务器已经存在,只是后期才搭建从mysql服务器,在配置数据同步前应先将主mysql服务器的要同步的数据库拷贝到从mysql服务器上(如先在主mysql上备份数据库,再用备份在从mysql服务器上恢复)
这里配置可根据实际情况进行删减
master mysql主机:
[root@master ~]# vim /etc/my.cnf
添加内容如下:
server-id=130
log-bin=mysql-bin
binlog_format=row
log-bin-index=mysql-bin.index
rpl_semi_sync_master_enabled=1
rpl_semi_sync_master_timeout=10000
rpl_semi_sync_slave_enabled=1
relay_log_purge=0
relay-log=relay-bin
relay-log-index=slave-relay-bin.index
注: rpl_semi_sync_master_enabled=1 1表是启用,0表示关闭 ,
rpl_semi_sync_master_timeout=10000
:毫秒单位 ,该参数主服务器等待确认消息10秒后,不再等待,变为异步方式。
注:relay_log_purge=0,禁止sql线程在执行完一个relay log后自动将其删除,对于MHA场景下,对于某些滞后从库的恢复依赖于其他从库的relay log,因此采取禁用自动删除功能。
systemctl restart mysql
Slave1主机:
server-id=135
log-bin=mysql-bin
binlog_format=row
log-bin-index=mysql-bin.index
relay_log_purge=0
relay-log=relay-bin
relay-log-index=slave-relay-bin.index
rpl_semi_sync_master_enabled=1
rpl_semi_sync_master_timeout=10000
rpl_semi_sync_slave_enabled=1
systemctl restart mysql
Slave2主机:
server-id=136
log-bin=mysql-bin
relay-log=relay-bin
relay-log-index=slave-relay-bin.index
read_only = 1
rpl_semi_sync_slave_enabled = 1
systemctl restart mysql
关于半同步参数说明值得关注
Rpl_semi_sync_master_status :显示主服务是异步复制模式还是半同步复制模式
Rpl_semi_sync_master_clients:显示有多少个从服务器配置为半同步复制模式
Rpl_semi_sync_master_yes_tx:显示从服务器确认成功提交的数量
Rpl_semi_sync_master_no_tx:显示从服务器确认不成功提交的数量
Rpl_semi_sync_master_tx_avg_wait_time:事务因开启semi_sync,平均需要额外等待的时间
Rpl_semi_sync_master_net_avg_wait_time:事务进入等待队列后,到网络平均等待时间。
#查看半同步相关信息
mysql> show variables like'%rpl_semi_sync%';
mysql> show status like'%rpl_semi_sync%';
创建主从复制的账号
create user 'canal_repl_user'@'%'identified with mysql_native_password by '123456';
GRANT REPLICATION SLAVE ON *.* TO'canal_repl_user'@'%';
flush privileges;
mysql> show master status;
在两台从机执行以下命令:
change master to master_host='192.168.142.133',master_port=3306,master_user='canal_repl_user',master_password='123456',master_log_file='mysql-bin.000003',master_log_pos=841;
start slave;
查看Candicate
master和slave2两个从服务器的状态
SHOW SLAVE STATUS\G;
说明运行正常
#查看master服务器的半同步状态
show status like '%rpl_semi_sync%';
五、MHA高可用环境部署记录
5.1 机器环境
目前MHA主要支持一主多从的架构,要搭建MHA,要求一个复制集群中必须最少有三台数据库服务器,一主二从,即一台充当master,一台充当备用master,另外一台充当从库,因为至少需要三台服务器。
| 机器名称 | IP | 角色 |
| ---- | ---- | ---- |
| SUSE12-MySQL-Master | 192.168.142.133-Master | 主库,写入,数据节点 |
| SUSE12-MySQL-Slave | 192.168.142.135-Slave | 从库读,数据节点,备选Master(candicate master)|
| SUSE12-MySQL-Slave-Manager | 192.168.142.136-Manager | 从库,管理机读,数据节点,也作为Manager server(即也作为manager节点) |