软件安装及高可用部署(三)
大约 7 分钟
本文介绍了MYSQL安装
一、卸载mariadb
# 查看 mariadb 的安装包
rpm -qa | grep mariadb
# 卸载 mariadb 的安装包
rpm -e mariadb-libs-5.5.68-1.el7.x86_64 --nodeps
# 再次查看
rpm -qa | grep mariadb
二、添加mysql组和用户
groupadd mysql
useradd -r -g mysql mysql
三、安装mysql
安装源
更新yum
yum update –y
安装wget工具
创建安装目录
mkdir -p /usr/local/mysql
然后进入安装目录
cd /usr/local/mysql
再执行
sudo yum install -y wget
使用wget下载mysql yum源
wget https://dev.mysql.com/get/mysql80-community-release-el7-3.noarch.rpm
添加 mysql yum 源
sudo yum localinstall mysql80-community-release-el7-3.noarch.rpm –y
安装 yum 工具 yum-utils
sudo yum install -y yum-utils
mysql安装版本选择
查看可用的 mysql
yum repolist enabled | grep "mysql.*-community.*"
查看所有的 mysql 版本
yum repolist all | grep mysql
使用执行版本的mysql
目前是8.0的版本,假如系统要使用mysql5.7,那么需要先关闭mysql8.0
关闭mysql8.0
sudo yum-config-manager --disable mysql80-community
开启mysql5.7
sudo yum-config-manager --enable mysql57-community
查看当前启用的mysql版本
yum repolist enabled | grep mysql
mysql安装
安装mysql
sudo yum install -y mysql-community-server

如果上面语句执行出现上图所示报错,就执行
yum install mysql-community-server --nogpgcheck
四、配置文件
vim /etc/my.cnf
# 将原配置文件内容清空,添加以下配置内容↓:
[client]
port=3306
socket=/mysql/run/mysql/mysql.sock
default-character-set=utf8mb4
[mysqld]
user=mysql
# 注意! 如果是mysql-backup服务器,需要将server-id的值修改为2
server-id=1
port=3306
mysqlx_port=33060
mysqlx_socket=/mysql/run/mysql/mysqlx.sock
basedir=/mysql
datadir=/mysql/data
配置系统服务
socket=/mysql/run/mysql/mysql.sock
pid-file=/mysql/run/mysql/mysqld.pid
log-error=/mysql/logs/error.log
log-bin=/mysql/logs/bin.log
relay-log=/mysql/logs/relay.log
binlog_format=ROW
relay_log_recovery=1
character-set-client-handshake=FALSE
character-set-server=utf8mb4
collation-server=utf8mb4_unicode_ci
init_connect ='SET NAMES utf8mb4'
innodb_buffer_pool_size=1G
join_buffer_size=128M
sort_buffer_size=2M
read_rnd_buffer_size=2M
log_timestamps = SYSTEM
lower_case_table_names = 1
default-authentication-plugin=mysql_native_password
#skip-grant-tables
五、配置系统服务
cd /mysql/
# 创建data和logs目录
mkdir data
mkdir logs
# 创建mysql运行目录
mkdir -p /mysql/run/mysql/
# 修改文件夹用户归属
chown -R mysql:mysql /mysql/run/mysql/
chown -R mysql:mysql /mysql
chmod 777 /mysql/run/mysql
chmod 775 /mysql -R
# link
ln -s /mysql/bin/mysql /usr/local/bin
ln -s /mysql/bin/mysqld /usr/local/bin
# 初始化
mysqld --initialize --console
# 获取密码
cat logs/error.log |grep password
# 添加mysql到服务中
cp support-files/mysql.server /etc/init.d/mysql
# 设置安装目录和data目录
vim /etc/init.d/mysql
# 修改如下内容,大概在46行左右位置
basedir=/mysql
datadir=/mysql/data
mysql配置
在mysql-backup服务器上重复以上步骤,安装mysql。
# 目录赋权
chmod -R 777 /mysql/run/mysql
chown -R mysql:mysql /mysql/run/mysql/
# 加载
systemctl daemon-reload
# 启动
systemctl start mysql
# 查看运行状态
systemctl status mysql
# 开机启动
systemctl enable mysql
默认路径的密码(未修改配置文件)
查看初始化密码:
sudo grep 'temporary password' /var/log/mysqld.log
六、配置mysql服务
# 登录mysql
mysql -p -S /mysql/run/mysql/mysql.sock
# 修改root账户密码
ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY
'******';
# 退出使用新密码登录
exit;
# 重新登录
mysql -u root -p
# 创建远程操作账户,进行远程访问的授权
create user 'root'@'%' identified with mysql_native_password by '******';
grant all privileges on *.* to 'root'@'%' with grant option;
flush privileges;
# 退出登录
exit;
在mysql-backup服务器上重复以上步骤,安装mysql。
七、mysql主从同步配置
登录mysql-master服务器,主库修改配置文件 vim /etc/my.cnf 。
vim /etc/my.cnf
# 在[mysqld]下面修改或增加配置:
server-id=1
log-bin=master-bin
log-bin-index=master-bin.index
# 保存配置后,重启主库mysql服务
systemctl restart mysql
登录mysql-master服务器,先进入主库,进行锁表,防止数据写入。
mysql -uroot -p
mysql> flush tables with read lock;
mysql> exit;
登录mysql-backup服务器,修改从库数据库配置文件。
vim /etc/my.cnf
# 在[mysqld]下面修改或增加配置:
server-id=2
# 保存配置后,重启从库mysql服务
systemctl restart mysql
登录mysql-master服务器,导出数据。
# 导出数据库
cd /tmp
/mysql/bin/mysqldump -uroot -p --master-data=1 --single-transaction --routines --triggers --events --all-databases > all.sql
登录mysql-backup服务器,导入数据。
# 将导出的数据all.sql,上传到从库服务器
cd /tmp
# 在文件上传的位置,登录数据库进行数据导入
mysql -uroot -p
mysql> source all.sql;
登录mysql-master服务器,登录数据库查看主库同步信息。
mysql> SHOW MASTER STATUS;
+-------------------+----------+--------------+------------------+--------------
-----+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB |
Executed_Gtid_Set |
+-------------------+----------+--------------+------------------+--------------
-----+
| master-bin.000005 | 155 | | |
|
+-------------------+----------+--------------+------------------+--------------
-----+
1 row in set (0.00 sec)
登录mysql-backup服务器,登录数据库配置同步信息。
stop slave;
change master to master_auto_position=0;
# 将MASTER_HOST、MASTER_LOG_FILE和MASTER_LOG_POS参数替换为实际的配置
CHANGE MASTER TO MASTER_HOST='主库IP地
址',MASTER_USER='root',MASTER_PASSWORD='******',MASTER_LOG_FILE='master-bin.000005',MASTER_LOG_POS=155;
start slave;
show slave status \G;
登录mysql-master服务器,解除锁表。
unlock tables;
八、mysql高可用配置(keepalived)
在mysql-master服务器上修改keepalived配置文件。
注意配置中interface(指定网卡)、virtual_ipaddress(虚拟IP)、unicast_src_ip(本机IP)和unicast_peer(其它服务器IP)参数可根据实际环境进行配置。
vim /etc/keepalived/keepalived.conf
# 将原配置文件内容清空,添加以下配置内容↓:
! Configuration File for keepalived
vrrp_script check_mysql {
script "/usr/local/keepalived/sbin/check_mysql.sh"
interval 3
weight 2
}
vrrp_instance mysql {
state BACKUP
nopreempt
interface ens33
virtual_router_id 88
priority 100
advert_int 1
authentication {
auth_type PASS
auth_pass 123456
}
track_script {
check_mysql
}
virtual_ipaddress {
192.168.8.95
}
unicast_src_ip 192.168.8.187
unicast_peer {
192.168.8.188
}
}
在mysql-master服务器上创建检测脚本。
vim /usr/local/keepalived/sbin/check_mysql.sh
# 添加以下配置内容(注意下面替换为实际IP)↓:
#!/bin/bash
if [ "$(ps -ef | grep "mysql.sock"| grep -v grep )" == "" ];then
#echo 1
/bin/systemctl restart mysql
sleep 5
if [ "$(ps -ef | grep "mysql.sock"| grep -v grep )" == "" ];then
/etc/init.d/keepalived stop
#echo 2
fi
fi
if [ "$(ip a|grep "192.168.8.187")" == "" ];then
#ifconfig ens33 up
sleep 5
if [ "$(ip a|grep "192.168.8.187")" == "" ];then
/etc/init.d/keepalived stop
fi
fi
为检测脚本添加可执行权限。
chmod +x /usr/local/keepalived/sbin/check_mysql.sh
在mysql-master服务器上验证虚拟IP是否绑定。
chmod -R 777 /etc/keepalived/keepalived.conf
service keepalived stop
service keepalived start
# 查看虚拟IP是否出现在了网卡上
ip a
mysql从库配置
在mysql-backup服务器上修改keepalived配置文件。
注意配置中interface(指定网卡)、virtual_ipaddress(虚拟IP)、unicast_src_ip(本机IP)和unicast_peer(其它服务器IP)参数可根据实际环境进行配置。
vim /etc/keepalived/keepalived.conf
# 将原配置文件内容清空,添加以下配置内容↓:
! Configuration File for keepalived
vrrp_script check_mysql {
script "/usr/local/keepalived/sbin/check_mysql.sh"
interval 3
weight 2
}
vrrp_instance mysql {
state BACKUP
nopreempt
interface ens33
virtual_router_id 88
priority 99
advert_int 1
authentication {
auth_type PASS
auth_pass ******
}
track_script {
check_mysql
}
virtual_ipaddress {
192.168.8.95
}
unicast_src_ip 192.168.8.188
unicast_peer {
192.168.8.187
}
notify_master "/usr/local/keepalived/sbin/become_master.sh"
}
在mysql-backup服务器上创建检测脚本。
vim /usr/local/keepalived/sbin/check_mysql.sh
# 添加以下配置内容↓:
#!/bin/bash
if [ "$(ps -ef | grep "mysql.sock"| grep -v grep )" == "" ];then
#echo 1
/bin/systemctl restart mysql
sleep 5
if [ "$(ps -ef | grep "mysql.sock"| grep -v grep )" == "" ];then
/etc/init.d/keepalived stop
#echo 2
fi
fi
为检测脚本添加可执行权限。
chmod +x /usr/local/keepalived/sbin/check_mysql.sh
在mysql-backup服务器上创建处理脚本。
vim /usr/local/keepalived/sbin/become_master.sh
# 添加以下配置内容↓:
#!/bin/bash
/mysql/bin/mysql -uroot -****** -e 'stop slave;'
/mysql/bin/mysql -uroot -****** -e 'SET GLOBAL read_only=0;'
/mysql/bin/mysql -uroot -****** -e 'reset slave all;'
为处理脚本添加可执行权限。
chmod +x /usr/local/keepalived/sbin/become_master.sh
在mysql-backup服务器上验证虚拟IP是否绑定,从库是否升级为主库。
chmod -R 777 /etc/keepalived/keepalived.conf
service keepalived stop
service keepalived start
# 登录mysql-master服务器,停止keepalived服务,查看虚拟IP是否漂移到从库服务器上
service keepalived stop
# 登录mysql-backup服务器,等待几秒,查看虚拟IP是否出现在网卡上
ip a
# 登录mysql-backup服务器,登录数据库,查看从库是否升级为主库
mysql> show slave status \G;
Empty set (0.00 sec)
ERROR:
No query specified
恢复从库数据到主库
当从库升级为主库时,此时业务数据都会存储到从库,为了重新启用主库,并保证主从数据一致,此时需将从库数据同步到主库。
在mysql-backup服务器上,登录数据库进行锁表,防止数据写入。
mysql> flush tables with read lock;
在mysql-master服务器上,停止Keepalived服务和mysql服务。
systemctl stop keepalived
systemctl stop mysql
在mysql-backup服务器上,导出数据。
cd /tmp
/mysql/bin/mysqldump -uroot -p --master-data=1 --single-transaction --routines --triggers --events --all-databases > allbackup.sql
在mysql-backup服务器上,停止Keepalived服务和mysql服务。
systemctl stop keepalived
systemctl stop mysql
在mysql-master服务器上,启动数据库,上传从库导出的sql文件到tmp目录,导入从库数据。
systemctl start mysql
cd /tmp
# 在文件上传的位置,进行数据导入
mysql -uroot -p
mysql> source allbackup.sql;
mysql> exit;
在mysql-master服务器上,启动Keepalived服务,查看虚拟IP是否绑定。
systemctl start keepalived
# 查看虚拟IP是否重新绑定,需要等待几秒才会出现
ip a
重新设置数据同步。
# 登录主库mysql,查看master的binlog的文件名和binlog偏移量
mysql -uroot -p
mysql> show master status;
+-------------------+----------+--------------+------------------+--------------
-----+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB |
Executed_Gtid_Set |
+-------------------+----------+--------------+------------------+--------------
-----+
| master-bin.000040 | 1604195 | | |
|
+-------------------+----------+--------------+------------------+--------------
-----+
1 row in set (0.02 sec)
在mysql-backup服务器上,启动Keepalived服务。
systemctl start keepalived
# 查看keepalived和mysql是否启动
systemctl status keepalived;
systemctl status mysql;
# 登录从库数据库,设置同步信息
mysql -uroot -p
unlock tables;
stop slave;
change master to master_auto_position=0;
# 将MASTER_HOST、MASTER_LOG_FILE和MASTER_LOG_POS参数替换为实际的配置
CHANGE MASTER TO MASTER_HOST='主库IP地
址',MASTER_USER='root',MASTER_PASSWORD='2wsx@WSX',MASTER_LOG_FILE='master-bin.000005',MASTER_LOG_POS=155;
start slave;
show slave status \G;