在宝塔面板中同时运行 MySQL 5.7 和 8.0 是可行的,但需要手动配置(因为宝塔默认只允许安装一个版本)。以下是详细步骤:
✅ 前提条件
- 服务器为 Linux(推荐 CentOS 7+/Ubuntu 18.04+)
- 已安装宝塔面板(且拥有 root 权限)
- 磁盘空间充足(两个实例需独立数据目录)
- 注意:两个实例必须使用不同的端口、数据目录、socket 文件
🔧 方案一:通过源码编译安装 MySQL 8.0(推荐)
此方式最灵活,可避免与系统包冲突。
步骤 1:准备环境
# 安装依赖
yum install -y cmake gcc gcc-c++ ncurses-devel openssl-devel
libaio libaio-devel bison perl wget tar
# 创建专用用户(安全最佳实践)
useradd -r -s /sbin/nologin mysql8
mkdir -p /data/mysql8
chown -R mysql:mysql /data/mysql8
步骤 2:下载并编译 MySQL 8.0
cd /opt
wget https://dev.mysql.com/get/Downloads/MySQL-8.0/mysql-8.0.36-linux-glibc2.17-x86_64.tar.xz
tar -xJf mysql-8.0.36-linux-glibc2.17-x86_64.tar.xz
mv mysql-8.0.36-linux-glibc2.17-x86_64 mysql8
# 初始化(指定不同端口和数据目录)
cd /opt/mysql8/bin
./mysqld --initialize-insecure --user=mysql --basedir=/opt/mysql8 --datadir=/data/mysql8/data
--port=3307 --socket=/tmp/mysql8.sock
# 设置启动脚本
cp support-files/mysql.server /etc/init.d/mysqld8
chmod +x /etc/init.d/mysqld8
步骤 3:修改配置文件 /etc/my.cnf
[client]
port = 3307
socket = /tmp/mysql8.sock
[mysqld]
port = 3307
socket = /tmp/mysql8.sock
datadir = /data/mysql8/data
basedir = /opt/mysql8
pid-file = /var/run/mysqld/mysqld8.pid
bind-address = 0.0.0.0
skip-name-resolve
character-set-server = utf8mb4
collation-server = utf8mb4_unicode_ci
sql_mode = STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION
[mysql]
port = 3307
socket = /tmp/mysql8.sock
default-character-set = utf8mb4
⚠️ 确保
3307未被占用(可用netstat -tlnp | grep 3307检查)
步骤 4:启动服务
# 创建日志目录
mkdir -p /var/log/mysql8
chown mysql:mysql /var/log/mysql8
# 启动
/etc/init.d/mysqld8 start
# 查看状态
/etc/init.d/mysqld8 status
步骤 5:首次登录 & 重置密码
# 临时免密登录
mysql -u root -h 127.0.0.1 -P 3307 -S /tmp/mysql8.sock
# 登录后执行:
ALTER USER 'root'@'localhost' IDENTIFIED BY '你的强密码';
FLUSH PRIVILEGES;
EXIT;
步骤 6:开机自启
chkconfig --add mysqld8
chkconfig mysqld8 on
🔄 验证双版本共存
# 测试 MySQL 5.7(宝塔默认,通常端口 3306)
mysql -u root -p -P 3306
# 测试 MySQL 8.0(新装,端口 3307)
mysql -u root -p -P 3307 -S /tmp/mysql8.sock
✅ 若两者均能正常连接,说明成功!
💡 补充建议
| 项目 | 建议 |
|---|---|
| 端口分配 | 5.7 → 3306,8.0 → 3307(或更高不冲突端口) |
| 数据库管理 | 宝塔无法直接管理第二个实例,需用命令行或 phpMyAdmin(需指定端口) |
| phpMyAdmin | 编辑 www/server/phpmyadmin/config.inc.php,添加多连接配置;或使用 Adminer 更灵活 |
| 备份策略 | 分别对两个实例制定 mysqldump 定时任务 |
| 性能监控 | 可使用 pt-stress, mysqld_exporter + Prometheus 分别监控 |
❌ 常见错误排查
| 问题 | 解决方案 |
|---|---|
Address already in use |
更换端口(如 3308),并同步修改 my.cnf 和启动参数 |
Can't connect to local MySQL server through socket |
检查 socket 路径是否正确,确认 mysqld 是否用该 socket 启动 |
Access denied for user 'root'@'localhost' |
8.0 初始无密码,首次登录后立即设置密码并刷新权限 |
| 宝塔界面看不到 8.0 | 正常现象——宝塔仅管理主实例,次实例需命令行操作 |
需要我提供:
- 自动化部署脚本(一键安装双版本)?
- PHP 应用如何切换连接不同版本数据库的配置示例?
- Docker 方案(更隔离、易维护)?
欢迎告诉我你的具体需求 😊
CLOUD技术笔记