Linux CentOS 7 下 MySQL 8.0.20 单机多实例部署指南
本文详解在 Linux CentOS 7 系统中解压安装 MySQL 8.0.20 并实现单机多实例(如 3306、3307、3308 端口)运行的方法。内容包含用户创建、配置文件编写、mysqld_multi 管理工具使用及安全性设置。
准备条件与环境
确保目标服务器运行 CentOS 7 系统。我们将使用 MySQL 8.0.20 版本的通用二进制包进行解压安装。所有操作将集中在一个主目录下,通过 mysqld_multi 工具管理多个实例。
具体操作步骤
第1步:下载与解压安装包
首先创建应用目录并上传/解压 MySQL 安装包。建议将文件存放于 /usr/app/mysql 以方便管理。
# 创建目录
mkdir -p /usr/app/mysql
cd /usr/app/mysql
# 假设已上传 mysql-8.0.20-el7-x86_64.tar.gz,执行解压并重命名
tar -zxvf mysql-8.0.20-el7-x86_64.tar.gz
mv mysql-8.0.20-el7-x86_64 mysql-8.0
第2步:创建数据目录、日志目录及系统用户
为每个实例创建独立的数据和日志目录,并建立专用的 mysql 用户以确保权限隔离。
# 创建 3306, 3307, 3308 三个实例的 data 和 log 目录
mkdir -p /usr/app/mysql/mysql-8.0/{3306,3307,3308}/{data,log}
# 创建日志文件
for port in 3306 3307 3308; do
touch /usr/app/mysql/mysql-8.0/${port}/log/error.log
done
# 创建 mysql 用户组及用户
systemctl stop firewalld # 可选:测试环境可临时关闭防火墙,生产环境请配置开放端口
groupadd mysql
useradd -g mysql -s /sbin/nologin mysql
# 修改目录所有者和组权限
chown -R mysql:mysql /usr/app/mysql
第3步:配置 my.cnf 多实例文件
编辑 /etc/my.cnf 配置文件。此文件需包含 [mysqld_multi] 段以及各个实例的独立段(如 [mysqld3306])。请注意区分全局配置与各实例特有的 socket 路径和数据目录。
cat > /etc/my.cnf << EOF
[client]
default-character-set=utf8mb4
[mysqld_multi]
mysqld=/usr/app/mysql/mysql-8.0/bin/mysqld_safe
mysqladmin=/usr/app/mysql/mysql-8.0/bin/mysqladmin
log=/usr/app/mysql/mysql-8.0/mysqld_multi.log
[mysqld3306]
port=3306
server_id=101
datadir=/usr/app/mysql/mysql-8.0/3306/data
socket=/tmp/mysql_3306.sock
log-error=/usr/app/mysql/mysql-8.0/3306/log/error.log
pid-file=/tmp/mysql3306.pid
user=mysql
basedir=/usr/app/mysql/mysql-8.0
character_set_server=utf8mb4
lower_case_table_names=1
explicit_defaults_for_timestamp=true
[mysqld3307]
port=3307
server_id=102
datadir=/usr/app/mysql/mysql-8.0/3307/data
socket=/tmp/mysql_3307.sock
log-error=/usr/app/mysql/mysql-8.0/3307/log/error.log
pid-file=/tmp/mysql3307.pid
user=mysql
basedir=/usr/app/mysql/mysql-8.0
character_set_server=utf8mb4
lower_case_table_names=1
explicit_defaults_for_timestamp=true
[mysqld3308]
port=3308
server_id=103
datadir=/usr/app/mysql/mysql-8.0/3308/data
socket=/tmp/mysql_3308.sock
log-error=/usr/app/mysql/mysql-8.0/3308/log/error.log
pid-file=/tmp/mysql3308.pid
user=mysql
basedir=/usr/app/mysql/mysql-8.0
character_set_server=utf8mb4
lower_case_table_names=1
explicit_defaults_for_timestamp=true
EOF
第4步:初始化各实例数据库
使用 mysqld 命令分别初始化三个实例的数据目录。注意: 初始化完成后,请务必保存终端输出的临时密码,用于首次登录修改。
/usr/app/mysql/mysql-8.0/bin/mysqld --defaults-file=/etc/my.cnf --initialize --user=mysql --basedir=/usr/app/mysql/mysql-8.0 --datadir=/usr/app/mysql/mysql-8.0/3306/data
/usr/app/mysql/mysql-8.0/bin/mysqld --defaults-file=/etc/my.cnf --initialize --user=mysql --basedir=/usr/app/mysql/mysql-8.0 --datadir=/usr/app/mysql/mysql-8.0/3307/data
/usr/app/mysql/mysql-8.0/bin/mysqld --defaults-file=/etc/my.cnf --initialize --user=mysql --basedir=/usr/app/mysql/mysql-8.0 --datadir=/usr/app/mysql/mysql-8.0/3308/data
第5步:设置环境变量
为了方便在任何路径下直接调用 mysql 和 mysqld_multi 命令,将 bin 目录加入系统 PATH。
# 编辑 /etc/profile
vi /etc/profile
# 在文件末尾添加:
export PATH=/usr/app/mysql/mysql-8.0/bin:$PATH
# 使配置立即生效
source /etc/profile
第6步:启动实例与状态检查
使用 mysqld_multi 工具配合 /etc/my.cnf 启动服务。启动后建议检查日志文件确认无报错。
# 启动所有实例
mysqld_multi --defaults-file=/etc/my.cnf start
# 或者单独启动某个实例
# mysqld_multi --defaults-file=/etc/my.cnf start 3306
# 查看各实例状态
mysqld_multi --defaults-file=/etc/my.cnf report
如果启动失败,请查看:/usr/app/mysql/mysql-8.0/mysqld_multi.log 及各实例下的 error.log。
第7步:重置密码并授权远程访问
使用初始化时的临时密码登录第一个实例(3306),然后进行密码重置和远程访问权限配置。其他实例(3307/3308)操作逻辑相同,仅 socket 文件和端口不同。
# 登录 3306 实例
mysql -u root -p -S /tmp/mysql_3306.sock
# 在 MySQL 命令行中执行以下 SQL:
# 1. 修改本地 root 密码 (请替换为您的复杂密码)
ALTER USER 'root'@'localhost' IDENTIFIED BY 'YourStrongPwd123!';
# 2. 修改允许远程连接的 root 账户密码
ALTER USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY 'YourStrongPwd123!';
# 3. 刷新权限
FLUSH PRIVILEGES;
第8步:配置防火墙策略
若服务器开启了 firewalld,需放行相关端口。
firewall-cmd --zone=public --add-port=3306/tcp --permanent
firewall-cmd --zone=public --add-port=3307/tcp --permanent
firewall-cmd --zone=public --add-port=3308/tcp --permanent
firewall-cmd --reload
firewall-cmd --list-ports
结果验证与排错
完成上述步骤后,您可以通过外部数据库客户端(如 Navicat 或 DBeaver)连接 服务器IP:3306 验证部署是否成功。若遇到连接被拒,请检查:
- 防火墙规则是否正确加载。
- MySQL 用户的 Host 字段是否已更新为
%。 - 各实例的 error.log 中是否有具体的错误提示。
以上就是 Linux CentOS 7 下 MySQL 8.0.20 单机多实例部署的详细内容,更多关于 MySQL 运维的资料请关注本站其它相关文章!
免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。









