在Ubuntu云服务器上安装MySQL多实例的步骤如下:
一、准备工作
1. 系统要求
# 更新系统
sudo apt update
sudo apt upgrade -y
# 安装必要工具
sudo apt install wget curl vim -y
2. 下载MySQL安装包
# 下载MySQL 8.0(或选择其他版本)
wget https://dev.mysql.com/get/mysql-apt-config_0.8.24-1_all.deb
sudo dpkg -i mysql-apt-config_0.8.24-1_all.deb
sudo apt update
二、安装MySQL多实例
1. 安装MySQL Server
sudo apt install mysql-server -y
2. 创建多实例目录结构
# 创建实例目录
sudo mkdir -p /mysql/{3306,3307,3308}/{data,logs,tmp}
# 设置权限
sudo chown -R mysql:mysql /mysql
sudo chmod -R 750 /mysql
3. 初始化每个实例
# 初始化实例1(端口3306)
sudo mysqld --initialize-insecure
--user=mysql
--datadir=/mysql/3306/data
--basedir=/usr
# 初始化实例2(端口3307)
sudo mysqld --initialize-insecure
--user=mysql
--datadir=/mysql/3307/data
--basedir=/usr
# 初始化实例3(端口3308)
sudo mysqld --initialize-insecure
--user=mysql
--datadir=/mysql/3308/data
--basedir=/usr
三、配置多实例
1. 创建配置文件
# 实例1配置
sudo tee /mysql/3306/my.cnf << EOF
[mysqld]
port=3306
socket=/mysql/3306/mysql.sock
datadir=/mysql/3306/data
log-error=/mysql/3306/logs/error.log
pid-file=/mysql/3306/mysql.pid
tmpdir=/mysql/3306/tmp
# 性能优化
innodb_buffer_pool_size=256M
max_connections=200
character-set-server=utf8mb4
collation-server=utf8mb4_unicode_ci
[client]
port=3306
socket=/mysql/3306/mysql.sock
EOF
# 实例2配置(类似创建,修改端口和路径)
sudo tee /mysql/3307/my.cnf << EOF
[mysqld]
port=3307
socket=/mysql/3307/mysql.sock
datadir=/mysql/3307/data
log-error=/mysql/3307/logs/error.log
pid-file=/mysql/3307/mysql.pid
tmpdir=/mysql/3307/tmp
innodb_buffer_pool_size=256M
max_connections=200
character-set-server=utf8mb4
collation-server=utf8mb4_unicode_ci
[client]
port=3307
socket=/mysql/3307/mysql.sock
EOF
2. 创建启动脚本
# 创建systemd服务文件
sudo tee /etc/systemd/system/mysql@.service << EOF
[Unit]
Description=MySQL Multi-Instance %i
After=network.target
[Service]
Type=forking
User=mysql
Group=mysql
RuntimeDirectory=mysqld-%i
PIDFile=/mysql/%i/mysql.pid
ExecStart=/usr/sbin/mysqld --defaults-file=/mysql/%i/my.cnf --daemonize
ExecStop=/usr/bin/mysqladmin -S /mysql/%i/mysql.sock shutdown
Restart=on-failure
RestartSec=5
[Install]
WantedBy=multi-user.target
EOF
四、启动和管理实例
1. 启动实例
# 重新加载systemd
sudo systemctl daemon-reload
# 启动实例
sudo systemctl start mysql@3306
sudo systemctl start mysql@3307
# 设置开机自启
sudo systemctl enable mysql@3306
sudo systemctl enable mysql@3307
2. 设置root密码
# 为每个实例设置密码
sudo mysql -S /mysql/3306/mysql.sock -e
"ALTER USER 'root'@'localhost' IDENTIFIED BY 'YourPassword1';"
sudo mysql -S /mysql/3307/mysql.sock -e
"ALTER USER 'root'@'localhost' IDENTIFIED BY 'YourPassword2';"
3. 验证运行状态
# 检查服务状态
sudo systemctl status mysql@3306
sudo systemctl status mysql@3307
# 检查端口监听
sudo netstat -tlnp | grep mysql
# 连接测试
mysql -P 3306 -h 127.0.0.1 -u root -p
mysql -P 3307 -h 127.0.0.1 -u root -p
五、安全配置
1. 防火墙设置
# 开放端口(如果使用防火墙)
sudo ufw allow 3306/tcp
sudo ufw allow 3307/tcp
sudo ufw reload
2. 安全建议
# 1. 修改默认端口(可选)
# 2. 使用强密码
# 3. 限制远程访问
# 4. 定期备份
# 5. 启用SSL连接
六、常用管理命令
# 查看所有实例状态
sudo systemctl list-units | grep mysql@
# 停止实例
sudo systemctl stop mysql@3306
# 重启实例
sudo systemctl restart mysql@3306
# 查看日志
sudo tail -f /mysql/3306/logs/error.log
注意事项
- 资源分配:确保服务器有足够的内存和CPU资源
- 数据目录:不同实例的数据目录必须完全独立
- 端口冲突:确保每个实例使用不同的端口
- 备份策略:为每个实例单独制定备份计划
- 监控:建议使用监控工具(如Prometheus)监控多实例
快速验证脚本
#!/bin/bash
# 验证多实例安装
echo "检查MySQL实例运行状态:"
for port in 3306 3307; do
if sudo systemctl is-active mysql@$port >/dev/null; then
echo "✓ 实例 $port 正在运行"
else
echo "✗ 实例 $port 未运行"
fi
done
echo -e "n检查端口监听:"
sudo netstat -tlnp | grep mysql
这样你就完成了MySQL多实例在Ubuntu云服务器上的安装。
CLOUD技术笔记