两台机器:
master: 172.25.19.1
slave: 172.25.19.2
1.下载mysql以及其环境的依赖包
我这里使用GTID模式;
在/etc/my.cnf
server_id=3 #serverid 确保不同
gtid_mode=ON
enforce_gtid_consistency=ON
master_info_repository=TABLE
relay_log_info_repository=TABLE
log_slave_updates=ON
binlog_format=ROW
然后启动mysql;
完成后可以查看 grep password /var/log/mysqld.log 查看临时密码
然后进行安全认证
登陆进去好查看master状态;
然后进行用户的认证
在slave端 连接master;
mha 高可用的搭建
使用三台主机搭建一主两从的主从复制;
下面我已经搭建好了,具体步骤与上述相同
在主机上对用户进行授权
server2 server3 进行连接
如果这个sql线程为no的话,大概是因为你的数据不同步导致的
可以在master端 rester master; 清空以下日志数据
slave端 rester slave 在启动查看就可以了;
测试一下 ,在server1端创建的test库 数据时可以同步过来的
我这里使用server1作为manger
安装些软件包
每个节点都需要安装MHA Node的包
当然要保证my.cnf里面的配置一致,因为从机变主机后需要一些配置
我这里自己创建了一个目录
/etc/mha/
cd /etc/mha/
vim app.cnf
>以下为内容
[server default]
manager_workdir=/etc/mha/app1.log
manager_log=/var/log/mysqld.log
master_binlog_dir=/data/mysql
#master_ip_failover_script= /usr/local/bin/master_ip_failover
#master_ip_online_change_script= /usr/local/bin/master_ip_online_change
password=WANGpeihua!123
user=root
ping_interval=1
remote_workdir=/tmp
repl_password=WANGpeihua!123
repl_user=repl
#report_script=/usr/local/send_report
#secondary_check_script= /usr/local/bin/masterha_secondary_check -s server03 -s server02
#shutdown_script=""
#ssh_user=root
[server1]
hostname=172.25.19.1
port=3306
[server2]
hostname=172.25.19.2
port=3306
#candidate_master=1
#check_repl_delay=0
[server3]
hostname=172.25.19.3
port=3306
>
这三台机器之间要进行免密连接
然后运用两个脚本进行检查状态;
masterha_check_repl --conf=/etc/mha/app.cnf
masterha_check_ssh --conf=/etc/mha/app.cnf
显示成功之后 将它打入后台 然后关闭mysql
查看日志 表示master转换到2上面成功了
在2上面可以看到 slave 状态已经不在了
在3 上面可以看到 已经自动到2上面了
将1启动好 ;之后 连接到2主机上面
下面进行手动切换
masterha_master_switch --master_state=dead --conf=/etc/mha/app.cnf --dead_master_host=172.25.19.2 --dead_master_port=3306 --new_master_host=172.25.19.1 --new_master_port=3306 --ignore_last_failover #2主机已经死掉了 我要切换到1上面
他的日志会自动在当前页面显示出来 表明成功了
server3 可以看到已经到1上面了
建议在做切换前用check检查一下
下面增加vip
首先更改脚本
my $vip = '172.25.19.100/24'; 自己的vip
my $ssh_start_vip = "/sbin/ip addr add $vip dev eth0"; 以及添加删除的方式
my $ssh_stop_vip = "/sbin/ip addr del $vip dev eth0";
GetOptions(
并增加x权限 扔到app.cnf 里所写的位置
在/etc/mha/app.cnf 把原来注释掉的有关脚本的俩行打开
[server default]
manager_workdir=/etc/mha/app1.log
manager_log=/var/log/mysqld.log
master_binlog_dir=/data/mysql
master_ip_failover_script=/usr/local/bin/master_ip_failover #这两行
master_ip_online_change_script=/usr/local/bin/master_ip_online_change #
password=WANGpeihua!123
user=root
ping_interval=1
remote_workdir=/tmp
在1上面自动切换 可以见到vip已经自动删掉了
查看日志
很明显已经成功了
vip已经在2 上面 加上了
用外界远程连接一个vip的数据库
可以看到只是中间有点小的延迟 并没用中断使用;