MySQL主主复制+kepalived实现高可用

本文详细介绍了MySQL的安装步骤,包括下载、解压、配置、初始化和设置安全密码。接着,文章讲解了如何配置主主复制,涉及my.cnf文件的修改、授权和同步设置。此外,还阐述了keepalived的安装过程和配置,用于实现数据库的高可用性,确保当一台数据库服务器出现问题时,能自动切换到另一台。最后,提供了验证配置是否成功的步骤。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档


前言

mysql服务器作为生产环境中使用最广泛的数据库软件,以其开源性,稳定性而广泛使用,但同时由于数据存储,读写频率高,极易造成数据库出错,从而给企业造成不可挽回的损失,我们除了做好数据库的备份工作外,同时,还应该解决数据库服务器的单点故障问题。


提示:以下是本篇文章正文内容,下面案例可供参考

一、mysql安装步骤

所需工具
mysql-5.7.24.tar.gz
解压
tar -zxvf mysql-5.7.24-linux-glibc2.12-x86_64.tar.gz
改名
把文件夹mysql-5.7.24-linux-glibc2.12-x86_64改名为mysql
建目录
在刚改好的mysql下建文件夹data
cd mysql
mkdir data
添加用户组
如果已存在就不用重复添加
groupadd mysql
useradd -r -g mysql mysql
检查libaio
rpm -qa | grep libaio
没有就安装
yum search libaio
配置my.cnf
touch /etc/my.cnf
将mysql目录的所属用户和组改为mysql
chown -R mysql:mysql ./
初始化mysqld 生成初始化密码
进入到Mysql目录
cd mysql
执行命令
./bin/mysqld --initialize --user=mysql --basedir=/opt/mysql --datadir=/opt/mysql/data

如截图中的&*(yMbmth0#_就是生成的初始化密码

**

复制mysql.server脚本到资源目录,并赋予执行权限

**
cp ./support-files/mysql.server /etc/rc.d/init.d/mysqld
chmod +x /etc/rc.d/init.d/mysqld
打开/etc/profile配置文件,添加如下内容
#mysql环境变量
PATH=$PATH:/opt/mysql/bin
export PATH
使环境变量生效
source /etc/profile
这一操作目的是使 mysql -uroot -p命令可执行

校验是否生效
echo $PATH
输出中有我们刚配置的/opt/mysql/bin则生效
启动mysql服务
service mysqld start
初次登录 修改访问密码
mysql -uroot -p
初次访问,密码是自动生成的那一串密码
修改登录密码
控制台如下
mysql> SET PASSWORD = PASSWORD(‘123456’);
Query OK, 0 rows affected, 1 warning (0.00 sec)
mysql> use mysql;
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A

Database changed
mysql> update user set authentication_string=PASSWORD(‘123456’) where User=‘root’;
Query OK, 0 rows affected, 1 warning (0.00 sec)
Rows matched: 1 Changed: 0 Warnings: 1

mysql>
允许远程访问
grant all privileges on . to root@“%” identified by “123456” with grant option;
可以用另一台机器或者用navicat链接测试远程能否访问
mysql -h 172.21.1.65 -u root -p123456
到此 mysql安装完毕 接下来是配置

*配置mysql.cnf

修改my.cnf配置文件,可参考svn目录下:手机银行\07_运行维护\手机银行压力测试\mysql\配置文件

Master1中my.cnf修改如下(#后是说明 不要添加 没写说明的代表默认)
[mysql]
default-character-set=utf8 #设置utf8编码
socket=/opt/mysql/mysql.sock

[mysqld]
lower_case_table_names=1 #不区分大小写
datadir=/opt/mysql/data
socket=/opt/mysql/mysql.sock
basedir=/opt/mysql
max_allowed_packet=1000M #每次传输允许数据大小
server-id=1 #主主复制 两台master不能重复
log-bin=/opt/mysql/data/mysql1-bin #主主复制 日志名 两台master最好别重复
relay_log=/opt/mysql/data/relay-log #主主复制配置

auto-increment-increment = 2 #主主复制配置
auto-increment-offset = 1 #主主复制配置
lower_case_table_names=1 #忽略大小写
binlog-do-db=jeespring #主主同步选择性同步
sql-mode=ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION #mysql5.6往mysql5.7导入数据前需要添加
character-set-server=utf8 #设置utf8编码
max_connections=2000 #设置最大连接数
[client]
socket=/opt/mysql/mysql.sock
default-character-set=utf8 #设置utf8编码
master2的my.cnf配置如下(#后是说明 不要添加 没写说明的代表默认)
[mysql]
default-character-set=utf8 #设置utf8编码
socket=/opt/mysql/mysql.sock

[mysqld]
lower_case_table_names=1 #不区分大小写
datadir=/opt/mysql/data
socket=/opt/mysql/mysql.sock
basedir=/opt/mysql
max_allowed_packet=1000M
server-id=2 #主主复制 两台master不能重复
log-bin=/opt/mysql/data/mysql2-bin #主主复制 日志名 两台master最好别重复
relay_log=/opt/mysql/data/relay-log #主主复制配置
auto-increment-increment = 2 #主主复制配置
auto-increment-offset = 2 #主主复制配置
lower_case_table_names=1 #不区分大小写
binlog-do-db=jeespring #主主同步选择性同步
sql-mode=ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION #mysql5.6往mysql5.7导入数据前需要添加
character-set-server=utf8 #设置utf8编码
max_connections=2000 #设置最大连接数

[client]
socket=/opt/mysql/mysql.sock
default-character-set=utf8 #设置utf8编码
启动与停止MySQL
启动
service mysqld start
停止
service mysqld stop
测试数据库是否启动成功
ps -ef | grep mysql
在这里插入图片描述
navicat连接数据库
在这里插入图片描述

二、配置主主复制

主主复制就是互为对方的主
master1给master2授权
先用root登录
mysql -uroot -p123456
授权
GRANT ALL PRIVILEGES ON . TO ‘username’@‘ip’ IDENTIFIED BY ‘password’ WITH GRANT OPTION;
刷新
FLUSH PRIVILEGES;
查看master1的配置
分别是日志名和pos
在这里插入图片描述
在master2上链接master1
若slave已经开启 先执行stop slave
在这里插入图片描述
上边五个箭头都是对方的 分别对应master1的ip master1给master2授权的用户名密码 master1的日志名和master1的position
change master to MASTER_HOST=‘172.21.11.85’,MASTER_USER=‘mysql80’, MASTER_PASSWORD= ‘123456’, MASTER_LOG_FILE=‘mysql2-bin.000001’, MASTER_LOG_POS=154;
开启同步
start slave;
查看状态
SHOW SLAVE STATUS\G在这里插入图片描述
都为yes时 配置成功

同样的方式 master2给master1赋权
到此 主主复制完成

三、安装keepalived

安装流程
除了两个数据库ip之外,还需要keepalive的虚拟ip 也叫vip 他的作用就是监控两个数据库 master1挂了就去Master2 master2挂了就去master1
两台机器都要安装keepalive
解压
tar -zxvf keepalived-1.1.17.tar.gz
进入到keepalive文件夹
cd keepalived-1.1.17
配置
./configure
编译
make && make install
keepalive文件配置拷贝至/etc下并配置为系统服务
cp /usr/local/etc/rc.d/init.d/keepalived /etc/init.d/
cp /usr/local/sbin/keepalived /usr/sbin/
cp /usr/local/etc/sysconfig/keepalived /etc/sysconfig/
mkdir /etc/keepalived
在/etc/keepalived建立keepalived.conf
master1的Keepalive配置文件
部署新环境时只需要改本机ip和虚拟ip配置就好,或者网关不一致再把网关改了就好
! Configuration File for keepalived

vrrp_script check_run {
script “/opt/mysql_check.sh” #在mysql挂了后执行杀死keepalive进程的脚本
interval 1
wegiht 2
}
vrrp_instance VI_1 {
state backup #两台都设置为从
interface eth0 #网关 可通过ip addr show
virtual_router_id 77 #两台机器一致 同一局域网内不能有相同的
priority 100 #优先级
nopreempt #两台机器都是非抢占模式
advert_int 1
authentication {
auth_type PASS
auth_pass 1111 #两台机器密码一致
}
virtual_ipaddress {
#172.21.1.99 dev eth0 label eth0:0
172.21.11.77
}
track_script {
check_run #监听函数
}
}
监听脚本
mysql_check.sh 放在opt下
注:/opt/mysql/bin/mysql是Mysql路径
#!/bin/bash
/opt/mysql/bin/mysql -h 172.21.1.65 -u root -p123456 -e “show status;” >/dev/null 2>&1
# m y s q l c l i e n t − − h o s t = mysqlclient --host= mysqlclienthost=host --port= p o r t − − u s e r = port --user= portuser=user --password=$password -e “show databases;” > /dev/null 2>&1
if [ $? == 0 ]
then
echo " $host mysql login successfully "
exit 0
else
#echo " $host mysql login faild"
/etc/init.d/keepalived stop
exit 2
fi
添加执行权限
chmod +x mysql_check.sh
启停keepalive
1)启动keepalived
service keepalived start
2)停止keepalived
service keepalived stop

设置开机自启
添加到开机自启
1)chkconfig --add mysqld
2)chkconfig mysqld on
3)chkconfig --add keepalived
4)chkconfig keepalived on
查看开机自启优先级

  1. cd /etc/rc.d/rc3.d
  2. ll|grep mysql
  3. ll|grep keepalive
    在这里插入图片描述
    要保证mysql的优先级高于keepalive,并且mysql的优先级要比keepallive高的多一些,因为mysql比keepalive启动的慢很多
    把mysql优先级提前 并且把keepalive优先级延后
    把mysql优先级提前
    vi …/init.d/mysqld
    将2345后边第一个数字改成20,如下图就是把64改为20
    在这里插入图片描述
    chkconfig --del mysqld
    chkconfig --add mysqld
    chkconfig mysqld on
    把keepalive优先级延后
    vi …/init.d/keepalived
    把chkconfig改为99,如图
    在这里插入图片描述
    chkconfig --del keepalived
    chkconfig --add keepalived
    chkconfig keepalived on
    **

四、验证

1)在一台数据库上进行添加表,数据等操作,另一台数据库会有同样的效果
2)执行ip addr show 观察VIP是否同时出现在两台服务器 若只出现在一台服务器则验证成功 否则失败
3)执行service mysqld stop 停止Mysql服务 执行service keepalived status查看keepalived是否运行 若停止运行则正常 若还在运行则失败
4)停掉mysql或者keepalived后,通过navicat访问vip的Mysql,不能链接则失败
5)停掉一台mysql或者keepalive后,执行ip addr show看vip在哪台服务器,再把关闭的服务器启动,如果vip没有漂移回去则成功,如果漂移回去则失败
6)将一台机器reboot重启后,观察这段期间数据库链接是否正常,以及ip是否转移
7)查看是否添加到开机自启
chkconfig --list mysqld
chkconfig --list keepalived
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值