Ubuntu上如何通过不同端口运行两个MySQL服务?

在Ubuntu上运行两个MySQL服务(不同端口)可以通过多种方式实现,以下是两种主要方法:

方法一:使用不同配置文件运行多个实例(推荐)

1. 安装MySQL(如果尚未安装)

sudo apt update
sudo apt install mysql-server

2. 创建第二个实例的配置目录和数据目录

# 创建配置目录
sudo mkdir -p /etc/mysql/mysql2
sudo cp /etc/mysql/my.cnf /etc/mysql/mysql2/

# 创建数据目录
sudo mkdir -p /var/lib/mysql2
sudo chown mysql:mysql /var/lib/mysql2

3. 创建第二个实例的配置文件

编辑 /etc/mysql/mysql2/my.cnf

[mysqld]
# 基础配置
user            = mysql
pid-file        = /var/run/mysqld/mysqld2.pid
socket          = /var/run/mysqld/mysqld2.sock
port            = 3307  # 使用不同端口

# 数据目录
datadir         = /var/lib/mysql2

# 日志文件
log_error       = /var/log/mysql/error2.log

# 避免与默认实例冲突
server-id       = 2

# 其他配置(根据需要调整)
[mysql]
socket          = /var/run/mysqld/mysqld2.sock

4. 初始化第二个实例的数据目录

sudo mysqld --defaults-file=/etc/mysql/mysql2/my.cnf --initialize-insecure
# 或使用安全初始化(会生成随机root密码)
# sudo mysqld --defaults-file=/etc/mysql/mysql2/my.cnf --initialize

5. 创建Systemd服务文件

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

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

[Service]
Type=forking
User=mysql
Group=mysql
ExecStart=/usr/sbin/mysqld --defaults-file=/etc/mysql/mysql2/my.cnf
ExecStop=/usr/bin/mysqladmin --defaults-file=/etc/mysql/mysql2/my.cnf shutdown
Restart=on-failure

[Install]
WantedBy=multi-user.target

6. 启动和管理第二个实例

# 重新加载systemd配置
sudo systemctl daemon-reload

# 启动第二个实例
sudo systemctl start mysql2

# 设置开机自启
sudo systemctl enable mysql2

# 查看状态
sudo systemctl status mysql2

方法二:使用Docker运行多个MySQL实例

1. 安装Docker

sudo apt install docker.io
sudo systemctl start docker
sudo systemctl enable docker

2. 运行第二个MySQL实例

# 运行第二个MySQL实例在3307端口
sudo docker run -d 
  --name mysql2 
  -e MYSQL_ROOT_PASSWORD=your_password 
  -p 3307:3306 
  -v mysql2_data:/var/lib/mysql 
  mysql:8.0

# 查看运行状态
sudo docker ps

连接测试

连接默认实例(端口3306)

mysql -u root -p -h 127.0.0.1 -P 3306

连接第二个实例(端口3307)

mysql -u root -p -h 127.0.0.1 -P 3307

防火墙配置(如果需要远程访问)

# 允许3307端口
sudo ufw allow 3307/tcp
sudo ufw reload

注意事项

  1. 资源分配:确保系统有足够资源运行两个实例
  2. 端口冲突:确保选择的端口(如3307)未被其他服务占用
  3. 数据备份:分别备份每个实例的数据
  4. 监控:分别监控两个实例的性能和日志
  5. 连接管理:应用程序连接时需要指定正确的端口

快速检查脚本

#!/bin/bash
# 检查两个MySQL实例状态
echo "检查MySQL实例状态:"
echo "默认实例(3306):"
sudo systemctl status mysql --no-pager | grep Active
echo -e "n第二个实例(3307):"
sudo systemctl status mysql2 --no-pager | grep Active

echo -e "n端口监听情况:"
sudo netstat -tlnp | grep mysql

选择哪种方法取决于你的需求:方法一更适合生产环境,方法二更适合开发和测试环境。

云服务器