宝塔里已存在MySQL 8.0,如何新增MySQL 5.7实例?

在宝塔面板中新增 MySQL 5.7 实例(与现有的 MySQL 8.0 共存)需要手动配置,以下是详细步骤:

一、准备工作

  1. 备份数据:操作前备份现有数据库
  2. 检查端口:确认 3306 已被 MySQL 8.0 使用,为 5.7 选择其他端口(如 3307)
  3. 下载安装包
    wget https://dev.mysql.com/get/Downloads/MySQL-5.7/mysql-5.7.44-linux-glibc2.12-x86_64.tar.gz

二、安装 MySQL 5.7

1. 解压安装

# 解压到 /www/server/mysql57
tar -zxvf mysql-5.7.44-linux-glibc2.12-x86_64.tar.gz
mv mysql-5.7.44-linux-glibc2.12-x86_64 /www/server/mysql57

# 创建数据目录
mkdir -p /www/server/mysql57/data
chown -R mysql:mysql /www/server/mysql57

2. 初始化数据库

cd /www/server/mysql57
./bin/mysqld --initialize-insecure --user=mysql 
--basedir=/www/server/mysql57 
--datadir=/www/server/mysql57/data 
--socket=/tmp/mysql57.sock

3. 创建配置文件

创建 /etc/my57.cnf

[client]
port = 3307
socket = /tmp/mysql57.sock

[mysqld]
port = 3307
socket = /tmp/mysql57.sock
basedir = /www/server/mysql57
datadir = /www/server/mysql57/data
pid-file = /www/server/mysql57/mysql57.pid
log-error = /www/server/mysql57/error.log
server-id = 2

# 避免与 MySQL 8.0 冲突
tmpdir = /tmp/mysql57_tmp

4. 创建启动脚本

创建 /etc/init.d/mysqld57

#!/bin/bash
basedir=/www/server/mysql57
datadir=/www/server/mysql57/data

case $1 in
    start)
        $basedir/bin/mysqld_safe --defaults-file=/etc/my57.cnf &
        ;;
    stop)
        $basedir/bin/mysqladmin -S /tmp/mysql57.sock shutdown
        ;;
    restart)
        $0 stop
        sleep 2
        $0 start
        ;;
    *)
        echo "Usage: $0 {start|stop|restart}"
        ;;
esac

设置权限:

chmod +x /etc/init.d/mysqld57

三、启动和配置

1. 启动 MySQL 5.7

# 创建临时目录
mkdir -p /tmp/mysql57_tmp
chown mysql:mysql /tmp/mysql57_tmp

# 启动服务
/etc/init.d/mysqld57 start

# 设置 root 密码
/www/server/mysql57/bin/mysql -S /tmp/mysql57.sock -e "ALTER USER 'root'@'localhost' IDENTIFIED BY '你的密码';"

2. 创建系统服务

创建 /etc/systemd/system/mysqld57.service

[Unit]
Description=MySQL 5.7 Server
After=network.target

[Service]
Type=forking
User=mysql
Group=mysql
ExecStart=/etc/init.d/mysqld57 start
ExecStop=/etc/init.d/mysqld57 stop
Restart=on-failure

[Install]
WantedBy=multi-user.target

启用服务:

systemctl daemon-reload
systemctl enable mysqld57

四、宝塔面板配置

1. 添加防火墙规则

在宝塔面板的「安全」页面,放行 3307 端口

2. 连接管理

  • MySQL 8.0:使用 3306 端口
  • MySQL 5.7:使用 3307 端口

连接示例:

# 连接 MySQL 5.7
mysql -uroot -p -P3307 -h127.0.0.1

# 连接 MySQL 8.0(默认)
mysql -uroot -p -P3306 -h127.0.0.1

五、注意事项

  1. 资源监控:两个实例会共享系统资源,注意内存和CPU使用
  2. 备份策略:分别备份两个数据库实例
  3. 版本差异:注意 5.7 和 8.0 的语法和功能差异
  4. 端口冲突:确保其他应用不会使用 3307 端口

六、简化方案(使用 Docker)

如果觉得手动安装复杂,可以使用 Docker:

# 安装 Docker
curl -fsSL https://get.docker.com | bash

# 运行 MySQL 5.7 容器
docker run -d 
--name mysql57 
-p 3307:3306 
-e MYSQL_ROOT_PASSWORD=你的密码 
-v /www/server/mysql57_data:/var/lib/mysql 
mysql:5.7

这样可以通过 3307 端口访问 MySQL 5.7,宝塔的 MySQL 8.0 保持不变。

常见问题解决

  1. 启动失败:检查 /www/server/mysql57/error.log
  2. 端口占用netstat -tlnp | grep 3307
  3. 权限问题:确保所有文件属主为 mysql:mysql

建议先在生产环境测试,确保稳定后再正式使用。

云服务器