mysql主从复制
主从数据库创建主从同步账号,并授权
CREATE USER 'leven'@'localhost' IDENTIFIED BY 'Leven';#创建用户
GRANT REPLICATION SLAVE ON *.* TO 'leven'@'localhost';#授权
flush privileges;
主库操作部分
查询主数据master状态
配置从库my.cnf
//主要是serverd-id需要区别于从库
重启数据库
//可能存在读取自定义my.cnf错误,可自行百度
systemctl restart mysqld
登录数据库,执行同步sql设置语句
mysql -u root -p
CHANGE MASTER TO
MASTER_HOST='192.168.1.30',
MASTER_USER='test',
MASTER_PASSWORD='123456',
MASTER_LOG_FILE='mysql-bin.000002',
MASTER_LOG_POS=5971;
启动slave同步进程
start slave(停止slave进程:stop slave)
查看从库slave状态
show slave status\G;
//主要如下红圈内值为YES 基本就是成功了
互为主从,基本就是将上面再操作一遍
keepalived安装
安装keepalived
//由于debian环境,直接安装
apt-get install keepalived
配置keepalived
192.168.1.30
//由于安装完网上说得路径没有keepalived.conf,需要自行创建
cd /etc/keepalived
touch keepalived.conf
//注意事项 需要创建mysql.sh用于监视mysql服务 网卡信息各个服务器不同,可以通过ip addr查看
vrrp_script check_mysql_status { #定义vrrp脚本,检测mysql主从状态
script "/etc/keepalived/mysql.sh" #脚本名称
interval 10 #脚本检测执行间隔时间 10秒
}
vrrp_instance VI_30 {
state MASTER
interface eth0 #网卡
virtual_router_id 211 #主备相同,在同一个局域网中不是一对的keepalived router_id不能相同,否则报错
priority 100 #优先级,backup设置90
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
192.168.0.211
}
track_script {
check_mysql_status #触发检查
}
}
virtual_server 192.168.1.30 3306 {
delay_loop 2
lb_algo rr #LVS算法,用不到,我们就关闭了
lb_kind DR #LVS模式,如果不关闭,备用服务器不能通过VIP连接主MySQL
persistence_timeout 50 #同一IP的连接60秒内被分配到同一台真实服务器
protocol TCP
real_server 192.168.1.30 3306 { #检测本地mysql,backup也要写检测本地mysql
weight 3
}
192.168.0.202
vrrp_script check_mysql_status { #定义vrrp脚本,检测mysql主从状态
script "/etc/keepalived/mysql.sh" #脚本名称
interval 10 #脚本检测执行间隔时间 10秒
}
vrrp_instance VI_202 {
state BACKUP #两台都设置BACKUP
interface eth0
virtual_router_id 211 #主备相同
priority 90 #优先级,backup设置90
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
192.168.0.211
}
track_script {
check_mysql_status #触发检查
}
}
编写mysql.sh 用于监控mysql服务挂了直接结束keepalived实现vip漂移
#!/bin/bash
mysqlstr=mysql
host=192.168.1.30
port=3306
user=root
password=123456
mysql_status=1
$mysqlstr -h $host -P $port -u $user -p$password -e "show status;" > /dev/null
if [ $? -eq 0 ] ;then
echo "mysql_status=1"
exit 0
else
/etc/init.d/keepalived stop
fi
启动keepalived服务,查看启动日志
systemctl start keepalived
日志位置为/var/log/syslog或者/var/log/message(具体看系统类型)
如下图基本就是启动OK 红圈内错误网上说是BUG不影响,蓝色圈基本成功了
查看VIP漂移
ip addr
查看是否存在vip漂移即可
测试
systemctl stop mysqld
关闭master上得mysqld服务
在backup服务器查看ip addr 是否有VIP即可