Mysql

关注公众号 jb51net

关闭
首页 > 数据库 > Mysql > mysql多实例部署

MySQL多实例部署实战完美攻略

作者:zz-zjx

文章介绍了如何配置和管理多个MySQL实例,包括多实例的核心思想、目录结构规划、systemd模板设计、配置文件管理、初始化和启动实例、检查实例状态以及验证多实例功能,感兴趣的朋友跟随小编一起看看吧

一、多实例核心思想

二、目录结构规划

/data/mysql/
├── instance_3306/
│   ├── data/                  # 数据目录
│   ├── logs/
│   │   ├── error.log          # 错误日志
│   │   └── slow.log           # 慢查询日志
│   └── my.cnf                 # 配置文件
│
└── instance_3307/
    ├── data/
    ├── logs/
    │   ├── error.log
    │   └── slow.log
    └── my.cnf

创建目录并授权:

sudo mkdir -p /data/mysql/instance_3306/{data,logs}
sudo mkdir -p /data/mysql/instance_3307/{data,logs}
sudo chown -R mysql:mysql /data/mysql

1.对比说明:从你的单实例 → 多实例

保留的核心元素:
配置项你的原始值多实例中保留
datadir/data/mysql→ 拆分为 /data/mysql/instance_3306/data 等
socket/data/mysql/mysql.sock→ 每个实例独立 socket
log-error/data/mysql/mysqld.log→ 拆分为各实例的 logs/error.log
port3306→ 实例1保留3306,实例2用3307
mysqlx_port33060→ 实例2改为33070,避免冲突
bind-address0.0.0.0→ 改为 127.0.0.1(更安全,可改回)
character-set-serverutf8mb4保留
collation-serverutf8mb4_unicode_ci 保留
default_authentication_pluginmysql_native_password(你原配置)→ 升级为 caching_sha2_password(MySQL 8.4 推荐),但你可改回
secure-file-priv/var/lib/mysql-files 保留
innodb_buffer_pool_size1G→ 调整为 256M(因多实例需节省内存,你可调回)
max_connections200→ 调整为 50(按实例分配,你可调回)

三、systemd 多实例模板

设计原则

1. 创建 systemd 模板单元文件

sudo tee /etc/systemd/system/mysqld@.service <<'EOF'
[Unit]
Description=MySQL Server for instance on port %i
After=network.target
Documentation=man:mysqld(8)
Documentation=https://dev.mysql.com/doc/refman/en/
[Service]
Type=simple
User=mysql
Group=mysql
# 动态配置文件路径:/data/mysql/instance_3306/my.cnf
ExecStart=/usr/local/mysql/bin/mysqld \
          --defaults-file=/data/mysql/instance_%i/my.cnf
# 安全加固(可选)
NoNewPrivileges=true
PrivateTmp=true
ProtectSystem=full
ProtectHome=true
# 重启策略
Restart=on-failure
RestartSec=5
TimeoutSec=300
# 环境(可选)
Environment="MYSQLD_OPTS=--defaults-file=/data/mysql/instance_%i/my.cnf"
[Install]
WantedBy=multi-user.target
EOF
systemctl daemon-reload

%i 是 systemd 的实例标识符(如 3306),会自动替换。

四、配置文件(启用慢查询日志)

/data/mysql/instance_3306/my.cnf

[client]
port = 3306
socket = /data/mysql/instance_3306/mysql.sock
[mysql]
socket = /data/mysql/instance_3306/mysql.sock
[mysqld]
user = mysql
basedir = /usr/local/mysql
datadir = /data/mysql/instance_3306/data
socket = /data/mysql/instance_3306/mysql.sock
pid-file = /data/mysql/instance_3306/mysqld.pid
# 日志
log-error = /data/mysql/instance_3306/logs/error.log
slow_query_log = ON
slow_query_log_file = /data/mysql/instance_3306/logs/slow.log
long_query_time = 1
# 网络
port = 3306
mysqlx_port = 33060
mysqlx_socket = /data/mysql/instance_3306/mysqlx.sock
bind-address = 127.0.0.1
# 安全与字符集
symbolic-links = 0
secure-file-priv = /var/lib/mysql-files
default_authentication_plugin = caching_sha2_password
character-set-server = utf8mb4
collation-server = utf8mb4_unicode_ci
# 性能
innodb_buffer_pool_size = 256M
max_connections = 50

/data/mysql/instance_3307/my.cnf(仅端口/路径不同)

[client]
port = 3307
socket = /data/mysql/instance_3307/mysql.sock
[mysql]
socket = /data/mysql/instance_3307/mysql.sock
[mysqld]
user = mysql
basedir = /usr/local/mysql
datadir = /data/mysql/instance_3307/data
socket = /data/mysql/instance_3307/mysql.sock
pid-file = /data/mysql/instance_3307/mysqld.pid
log-error = /data/mysql/instance_3307/logs/error.log
slow_query_log = ON
slow_query_log_file = /data/mysql/instance_3307/logs/slow.log
long_query_time = 1
port = 3307
mysqlx_port = 33070
mysqlx_socket = /data/mysql/instance_3307/mysqlx.sock
bind-address = 127.0.0.1
symbolic-links = 0
secure-file-priv = /var/lib/mysql-files
default_authentication_plugin = caching_sha2_password
character-set-server = utf8mb4
collation-server = utf8mb4_unicode_ci
innodb_buffer_pool_size = 256M
max_connections = 50

五、初始化并启动实例

# 初始化 3306
sudo -u mysql /usr/local/mysql/bin/mysqld \
  --defaults-file=/data/mysql/instance_3306/my.cnf \
  --initialize-insecure
# 初始化 3307
sudo -u mysql /usr/local/mysql/bin/mysqld \
  --defaults-file=/data/mysql/instance_3307/my.cnf \
  --initialize-insecure
# 启动并启用开机自启
sudo systemctl start mysqld@3306
sudo systemctl enable mysqld@3306
sudo systemctl start mysqld@3307
sudo systemctl enable mysqld@3307

使用 --initialize-insecure 是为了测试方便(root 无密码)。生产环境请用 --initialize 并从 error.log 获取临时密码。

六、使用mysqladmin检查实例状态

# 检查 3306
/usr/local/mysql/bin/mysqladmin \
  -S /data/mysql/instance_3306/mysql.sock \
  -u root ping
# 检查 3307
/usr/local/mysql/bin/mysqladmin \
  -S /data/mysql/instance_3307/mysql.sock \
  -u root ping

 正常输出:

mysqld is alive

 也可以用 -h 127.0.0.1 -P 3306 通过 TCP 检查。

七、验证多实例功能

1. 检查状态(使用mysqladmin)

/usr/local/mysql/bin/mysqladmin -S /data/mysql/instance_3306/mysql.sock ping
# 输出:mysqld is alive
/usr/local/mysql/bin/mysqladmin -S /data/mysql/instance_3307/mysql.sock ping
# 输出:mysqld is alive

2. 登录不同实例

# 登录 3306
/usr/local/mysql/bin/mysql -u root -S /data/mysql/instance_3306/mysql.sock
# 登录 3307
/usr/local/mysql/bin/mysql -u root -S /data/mysql/instance_3307/mysql.sock

3. 创建测试库,验证隔离性

在 3306 中:

CREATE DATABASE test_from_3306;
SHOW DATABASES;
-- 应包含 test_from_3306,不包含 test_from_3307

在 3307 中:

CREATE DATABASE test_from_3307;
SHOW DATABASES;
-- 应包含 test_from_3307,不包含 test_from_3306

证明:两个实例数据完全隔离!

4. 验证日志分离

# 触发慢查询
echo "SELECT SLEEP(2);" | /usr/local/mysql/bin/mysql -S /data/mysql/instance_3306/mysql.sock
# 检查日志
cat /data/mysql/instance_3306/logs/slow.log   # 有记录
cat /data/mysql/instance_3307/logs/slow.log   # 无记录
# 错误日志
tail /data/mysql/instance_3306/logs/error.log
tail /data/mysql/instance_3307/logs/error.log

八、systemd 管理命令汇总

# 启动/停止/重启
sudo systemctl start mysqld@3306
sudo systemctl stop mysqld@3307
sudo systemctl restart mysqld@3306
# 查看状态
systemctl status mysqld@3306
# 查看启动日志(systemd journal)
journalctl -u mysqld@3306 -f
# 开机自启
sudo systemctl enable mysqld@3306
sudo systemctl disable mysqld@3307

九、总结:多实例核心验证点

项目是否满足
独立数据目录 /data/mysql/instance_3306/data vs .../3307/data
独立配置文件两个 my.cnf
独立错误日志 error.log 分开
独立慢查询日志 slow.log 分开
mysqladmin 检查状态 通过 socket 指定实例
mysql 登录不同实例 -S 指定 socket
数据库完全隔离 各自创建 DB,互不可见

到此这篇关于MySQL多实例部署实战完美攻略的文章就介绍到这了,更多相关mysql多实例部署内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

您可能感兴趣的文章:
阅读全文