MySQL 部署


Catalogue
  1. 1. 🧰 部署环境
  2. 2. 📦 准备阶段
    1. 2.1. 下载 MySQL 安装包
    2. 2.2. 检查并卸载系统自带的 MariaDB 及MySQL
  3. 3. 🔧 安装配置过程
    1. 3.1. 解压并重命名目录
    2. 3.2. 添加 mysql 用户和组
    3. 3.3. 创建数据存储目录并赋权
    4. 3.4. 编写配置文件 /etc/my.cnf
    5. 3.5. 执行 MySQL 命令前的准备
  4. 4. 🚀 初始化与启动服务
    1. 4.1. 初始化数据库
    2. 4.2. 启动服务并设置开机自启
  5. 5. 🔐 配置密码与远程访问
    1. 5.1. 登录并修改 root 密码
    2. 5.2. 开启 root 远程访问权限
  6. 6. 📝 参考资料

MySQL 5.7 虽然已非最新版,但在企业环境中仍被广泛使用。今天在一台运行 Red Hat Enterprise Linux 7.9 的服务器上成功部署了 MySQL 5.7 数据库。为自己留下一份记录,我将整个安装过程整理如下。


🧰 部署环境

项目 说明
操作系统 RHEL 7.9
内核版本 3.10.0-1160.x86_64
数据库版本 MySQL 5.7.17
安装方式 二进制 tar 包安装
安装目录 /usr/local/mysql
数据目录 /data/mysql

📦 准备阶段

下载 MySQL 安装包

浏览器打开 MySQL 官网下载页,选择对应系统的 tar.gz 包,例如:

MySQL 官网下载页

可以选择直接点击 Download 按钮下载 tar.gz 包并上传至服务器的 /usr/local/ 目录,或者右键 Download 按钮复制下载链接,并通过如下命令直接下载至服务器:

1
2
3
cd /usr/local/
# 将 wget 后的内容替换为上述复制的下载链接
wget https://downloads.mysql.com/archives/get/p/23/file/mysql-5.7.17-linux-glibc2.5-x86_64.tar.gz

⚠️ 提示: 若提示无 wget 命令,请先执行 yum -y install wget 进行安装。

检查并卸载系统自带的 MariaDB 及MySQL

为了避免影响顺利安装,需要通过如下命令检测系统是否自带安装 MariaDB 及MySQL:

1
2
rpm -qa | grep mariadb
rpm -qa | grep mysql

如果以上任一条有结果输出,例如“mysql-libs-5.1.52-1.el6_0.1.x86_64”或“mariadb-libs-5.5.56-2.el7.x86_64”,先卸载干净:

1
2
rpm -e mysql-libs-5.1.52-1.el6_0.1.x86_64			# 普通删除
rpm -e --nodeps mariadb-libs-5.5.56-2.el7.x86_64 # 强力删除

⚠️ 提示: 若普通删除提示有依赖的其它文件,请执行强力删除命令。


🔧 安装配置过程

解压并重命名目录

这里使用的 tar.gz 包所以加 -xzvf 选项,如果是 tar 包则使用 -xvf

1
2
tar -xzvf mysql-5.7.17-linux-glibc2.5-x86_64.tar.gz
mv mysql-5.7.17-linux-glibc2.5-x86_64 /usr/local/mysql

⚠️ 提示: 重命名后的 /usr/local/mysql目录即 🧰 部署环境 中的安装目录。

添加 mysql 用户和组

我们必须创建 mysql 用户,因为 mysql 的初始化需要。

1
2
groupadd mysql
useradd -r -g mysql mysql

创建数据存储目录并赋权

通常都会将数据存放目录外置到别的目录,这样升级 MySQL 不会影响历史数据。

1
2
mkdir -p /data/mysql
chown -R mysql:mysql /data/mysql

⚠️ 提示: 此处创建的 /data/mysql目录即 🧰 部署环境 中的数据目录。

编写配置文件 /etc/my.cnf

MySQL 的配置文件名为 my.cnf,我们会在这份配置文件中指定端口,数据存放目录,以及编码格式。输入如下命令进行编辑:

1
vi /etc/my.cnf

如果已有该文件,可能打开就会显示原文件内容,建议将原文件备份,然后再改为如下内容:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
[mysqld]
bind-address=0.0.0.0
port=3306
user=mysql
basedir=/usr/local/mysql
datadir=/data/mysql
socket=/tmp/mysql.sock
log-error=/data/mysql/mysql.err
pid-file=/data/mysql/mysql.pid
# Character configs
character-set-server=utf8mb4
explicit_defaults_for_timestamp=true
symbolic-links=0

[client]
default-character-set=utf8

[mysql]
default-character-set=utf8

执行 MySQL 命令前的准备

MySQL 的可执行文件位于 /usr/local/mysql/bin/ 下,至此每次执行相关命令都需先进入此目录再执行,为了能像其他命令那样在任意位置都可直接执行,你需要输入如下命令:

1
2
ln -s /usr/local/mysql/bin/mysql /usr/bin/mysql
ln -s /usr/local/mysql/bin/mysqld /usr/bin/mysqld

这样就无需每次进入 bin 目录,也能直接用 mysql 命令访问数据库。


🚀 初始化与启动服务

初始化数据库

输入如下命令以执行初始化:

1
2
# 指定配置文件、用户、安装目录、数据目录
mysqld --initialize --defaults-file=/etc/my.cnf --user=mysql --basedir=/usr/local/mysql --datadir=/data/mysql

系统会随机生成 root 的临时密码,记录在 /data/mysql/mysql.err 的最后几行:

1
2
3
cat /data/mysql/mysql.err
# ...
# [Note] A temporary password is generated for root@localhost: [临时生成的密码]

启动服务并设置开机自启

在 MySQL 安装目录下提供有启动文件,需手动复制到 /etc/init.d/ 目录内:

1
2
cp /usr/local/mysql/support-files/mysql.server /etc/init.d/mysql
chmod +x /etc/init.d/mysql # 确保可执行权限

以服务方式启动 MySQL 并设置开机自启:

1
2
3
4
service mysql start		# 启动服务
# Starting MySQL.. SUCCESS!
chkconfig --add mysql # 开机自启
chkconfig mysql on

🔐 配置密码与远程访问

登录并修改 root 密码

使用 root 账户登录:

1
mysql -u root -p  # 使用刚刚记录的临时密码登录

执行如下两条 SQL 语句之一,在 [新的密码] 处填写要修改的密码:

1
2
SET PASSWORD = PASSWORD('[新的密码]');	-- 或:
ALTER USER 'root'@'localhost' IDENTIFIED BY '[新的密码]';

依次执行如下 SQL 语句,设置密码不会过期,并立即保存应用设置:

1
2
ALTER USER 'root'@'localhost' PASSWORD EXPIRE NEVER;
FLUSH PRIVILEGES;

开启 root 远程访问权限

依旧是在 root 账户登录状态下,执行如下 SQL 语句:

1
2
3
USE mysql;		-- 切换到mysql数据库
UPDATE user SET host='%' WHERE user='root'; -- 使root能在任何host访问
FLUSH PRIVILEGES;

🌐 此操作的详细内容可以参考此文章:MySQL 允许远程连接

开放 3306 端口,或关闭防火墙测试远程连接:

1
2
3
4
5
6
7
# 查看防火墙的状态
systemctl status firewalld
# 临时关闭防火墙(测试用)
systemctl stop firewalld
# 或者正式开放端口,并恢复防火墙运行
firewall-cmd --zone=public --add-port=3306/tcp --permanent
systemctl restart firewalld

📝 参考资料