补充笔记1

mysql 主从搭建
#--------------------ALL---------------------------#
1、配置 yum 源,安装 mysql-5.7.17
[local_soft]
name=Local Base Soft
baseurl="ftp://192.168.1.254/public"
enabled=1
gpgcheck=0

清理缓存
yum clean all

#--------------------master------------------------#
在 mysql-master 上修改 my.cnf 打开 binlog 并添加 server_id
bind-address= 0.0.0.0
server-id= 18
log_bin= mysql-bin
binlog-format= statement
relay-log= relay-log

重启服务 systemctl restart mysqld

初始化master
reset master;

添加同步用户
create user 'repl'@'%' IDENTIFIED BY 'lper';
grant replication client,replication slave on *.* to repl@'%';

安装备份工具 xtrabackup
yum install -y percona-xtrabackup-24

备份数据库
slave-info 记录 show master 的信息
innobackupex --slave-info --user="root" --password="toor" \
--host="localhost" --no-timestamp ./backup

#--------------------slave-------------------------#
安装 mysql server 和 xtrabackup
yum install -y mysql-community-server percona-xtrabackup-24

使用 innobackup 恢复备份
innobackupex --apply-log backup
innobackupex --copy-back ./backup

恢复权限
chown -R mysql:mysql /var/lib/mysql

设置 mysql slave 的my.cnf 增加 server_id 及 binlog 配置
bind-address= 0.0.0.0
server-id= 17
log_bin= mysql-bin
binlog-format= statement
relay-log= relay-log

启动 mysql 设置主从,binlog 文件及其执行位置在 /var/lib/mysql/xtrabackup_info 查找
reset slave;
change master to master_host='192.168.1.18',\
master_user='repl',master_password='lper',\
master_log_file="mysql-bin.000001", master_log_pos=615;
start slave;

检查验证
show slave status\G

#------------------semi sync master----------------#
查看 mysql 插件
show plugins;

安装半同步插件
install plugin rpl_semi_sync_master soname 'semisync_master.so';
开启半同步
set global rpl_semi_sync_master_enabled=1;
等待超时时间
设置此参数值(ms),为了防止半同步复制在没有收到确认的情况下发生堵塞,如果Master在超时

之前没有收到任何确认,将恢复到正常的异步复制,并继续执行没有半同步的复制操作。
set global rpl_semi_sync_master_timeout=1000;

查看状态
show global variables like '%rpl_semi%';
show global status like '%rpl_semi%';

#------------------semi sync slave-----------------#
查看 mysql 插件
show plugins;

安装半同步插件
install plugin rpl_semi_sync_slave soname 'semisync_slave.so';
开启半同步
set global rpl_semi_sync_slave_enabled=1;

查看状态
show global variables like '%rpl_semi%';
重启 IO 线程
stopslave io_thread;
start slave io_thread;

#----------------------mha node--------------------#
安装 mha node 节点包
yum install gcc pcre-devel pkgconfig autoconf automake perl-ExtUtils-MakeMaker perl-CPAN perl-DBI perl-DBD-MySQL

安装 mha4mysql-node
perl Makefile.PL
make
make install

#--------------------mha manager-------------------#
# mha 官方网站 https://github.com/yoshinorim/mha4mysql-manager/wiki/Downloads

安装 mha node 节点包
yum install -y gcc pcre-devel pkgconfig autoconf automake perl-ExtUtils-MakeMaker perl-CPAN perl-DBI perl-DBD-MySQL

安装 mha4mysql-node
perl Makefile.PL
make
make install

安装 mha manager 节点
安装依赖软件包
yum install -y perl-Config-Tiny perl-Log-Dispatch perl-Parallel-ForkManager perl-Time-HiRes

安装 mha 管理节点
perl Makefile.PL

[Core Features]
- DBI...loaded. (1.627)
- DBD::mysql...loaded. (4.023)
- Time::HiRes...loaded. (1.9725)
- Config::Tiny...loaded. (2.14)
- Log::Dispatch...loaded. (2.41)
- Parallel::ForkManager ...loaded. (1.18)
- MHA::NodeConst...loaded. (0.56)
*** Module::AutoInstall configuration finished.
Checking if your kit is complete...
Looks good

make
make install

mha 是依靠 ssh 远程配置管理 mysql 服务器的,所以要求管理节点机器到所有 mysql
机器能做到 ssh 免密码登录
/etc/ssh/ssh_config 配置不校验 host key,不输人 yes
StrictHostKeyChecking no

cd /root/.ssh
ssh-keygen -t rsa -b 2048 -N '' -f id_rsa
for i in mysql{15..18}; do
ssh-copy-id -i id_rsa.pub ${i}
done
把私钥 id_rsa 拷贝给所有 mysql 主机
for i in mysql{15..18}; do
scp id_rsa ${i}:.ssh/id_rsa
done

mha 切换 vip 是靠脚本实现,vim 编辑脚本 master_ip_failover 设置 vip
(line:35)
my $vip = '192.168.1.10/24'; # Virtual IP
cp master_ip_failover/usr/local/bin/
chmod 755 /usr/local/bin/master_ip_failover

添加 默认配置文件 /etc/masterha_default.cnf 和 /etc/mha.cnf 配置文件
touch /etc/masterha_default.cnf

cat /etc/mha.cnf
[server default]
manager_log=/var/log/mha.log
manager_workdir=/var/lib/mha

user=root
password=toor

repl_user=repl
repl_password=lper

ssh_user=root

ping_interval=1
remote_workdir=/var/lib/mha
master_ip_failover_script=/usr/local/bin/master_ip_failover

[server18]
candidate_master=1
hostname=mysql18

[server17]
candidate_master=1
hostname=mysql17

[server16]
hostname=mysql16
no_master=1

[server15]
hostname=mysql15
no_master=1

在当前的 master 上手工绑定 vip 执行检查测试

检查 ssh 免密码登录
masterha_check_ssh --conf=/etc/mha.cnf

检查 mysql 主从配置
masterha_check_repl --conf=/etc/mha.cnf

排除所有错误,添加 root 用户远程登录权限
create user 'root'@'%' IDENTIFIED BY 'toor';
grant ALL ON *.* to root@'%';

添加参数 relay_log_purge=0

启动 mha
masterha_manager --conf=/etc/mha.cnf --ignore_last_failover

验证测试

    推荐阅读