提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
前言
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=
mysqlclient−−host=host --port=
p
o
r
t
−
−
u
s
e
r
=
port --user=
port−−user=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
查看开机自启优先级
- cd /etc/rc.d/rc3.d
- ll|grep mysql
- 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