本文档风哥主要介绍MariaDB的多实例部署方法与资源隔离技术,包括多实例概念、目录结构搭建、实例创建和服务管理等内容。风哥教程参考MariaDB官方文档Deployment Guide内容,适合数据库管理员学习和实施。
Part01-基础概念与理论知识
1.1 多实例概念
MariaDB多实例是指在同一台服务器上运行多个独立的MariaDB服务,每个实例都有自己的:
- 端口号
- 数据目录
- 配置文件
- 进程
- 日志文件
1.2 资源隔离原理
资源隔离的主要方法:
- 目录隔离:每个实例使用独立的数据目录
- 端口隔离:每个实例使用不同的端口
- 配置隔离:每个实例使用独立的配置文件
- 进程隔离:每个实例有独立的进程
- 资源限制:通过cgroups等技术限制资源使用
1.3 部署模式
多实例部署的常见模式:
- 同一服务器部署多个实例
- 不同版本的MariaDB共存
- 开发、测试、生产环境分离
- 不同业务系统使用不同实例
更多视频教程www.fgedu.net.cn
Part02-生产环境规划与建议
2.1 实例规划
风哥提示:实例规划应根据业务需求、硬件资源和管理需求进行设计。
2.2 资源分配
资源分配建议:
- 内存:根据实例重要性分配
- CPU:根据并发需求分配
- 磁盘:根据数据量和I/O需求分配
- 网络:确保足够的带宽
2.3 网络配置
网络配置建议:
- 为每个实例分配不同的端口
- 配置防火墙规则
- 考虑使用不同的IP地址
- 优化网络参数
学习交流加群风哥微信: itpux-com
Part03-生产环境项目实施方案
3.1 目录结构搭建
更多学习教程公众号风哥教程itpux_com
# 创建多实例目录结构
[root@fgedu.net.cn ~]# mkdir -p /mariadb/{instance1,instance2,instance3}/{data,logs,conf}
# 创建用户和组
[root@fgedu.net.cn ~]# groupadd mysql
[root@fgedu.net.cn ~]# useradd -r -g mysql -s /sbin/nologin mysql
# 设置权限
[root@fgedu.net.cn ~]# chown -R mysql:mysql /mariadb/
[root@fgedu.net.cn ~]# mkdir -p /mariadb/{instance1,instance2,instance3}/{data,logs,conf}
# 创建用户和组
[root@fgedu.net.cn ~]# groupadd mysql
[root@fgedu.net.cn ~]# useradd -r -g mysql -s /sbin/nologin mysql
# 设置权限
[root@fgedu.net.cn ~]# chown -R mysql:mysql /mariadb/
3.2 实例创建
# 实例1配置文件
[root@fgedu.net.cn ~]# cat > /mariadb/instance1/conf/my.cnf << 'EOF'
[mysqld]
user = mysql
basedir = /usr/local/mariadb
datadir = /mariadb/instance1/data
socket = /mariadb/instance1/mysql.sock
pid-file = /mariadb/instance1/mysql.pid
port = 3306
# 性能配置
innodb_buffer_pool_size = 4G
max_connections = 1000
# 安全配置
bind-address = 0.0.0.0
skip-name-resolve
EOF
# 实例2配置文件
[root@fgedu.net.cn ~]# cat > /mariadb/instance2/conf/my.cnf << 'EOF'
[mysqld]
user = mysql
basedir = /usr/local/mariadb
datadir = /mariadb/instance2/data
socket = /mariadb/instance2/mysql.sock
pid-file = /mariadb/instance2/mysql.pid
port = 3307
# 性能配置
innodb_buffer_pool_size = 2G
max_connections = 500
# 安全配置
bind-address = 0.0.0.0
skip-name-resolve
EOF
# 实例3配置文件
[root@fgedu.net.cn ~]# cat > /mariadb/instance3/conf/my.cnf << 'EOF'
[mysqld]
user = mysql
basedir = /usr/local/mariadb
datadir = /mariadb/instance3/data
socket = /mariadb/instance3/mysql.sock
pid-file = /mariadb/instance3/mysql.pid
port = 3308
# 性能配置
innodb_buffer_pool_size = 2G
max_connections = 500
# 安全配置
bind-address = 0.0.0.0
skip-name-resolve
EOF
# 初始化实例1
[root@fgedu.net.cn ~]# /usr/local/mariadb/bin/mysql_install_db –user=mysql –datadir=/mariadb/instance1/data –basedir=/usr/local/mariadb
# 初始化实例2
[root@fgedu.net.cn ~]# /usr/local/mariadb/bin/mysql_install_db –user=mysql –datadir=/mariadb/instance2/data –basedir=/usr/local/mariadb
# 初始化实例3
[root@fgedu.net.cn ~]# /usr/local/mariadb/bin/mysql_install_db –user=mysql –datadir=/mariadb/instance3/data –basedir=/usr/local/mariadb
[root@fgedu.net.cn ~]# cat > /mariadb/instance1/conf/my.cnf << 'EOF'
[mysqld]
user = mysql
basedir = /usr/local/mariadb
datadir = /mariadb/instance1/data
socket = /mariadb/instance1/mysql.sock
pid-file = /mariadb/instance1/mysql.pid
port = 3306
# 性能配置
innodb_buffer_pool_size = 4G
max_connections = 1000
# 安全配置
bind-address = 0.0.0.0
skip-name-resolve
EOF
# 实例2配置文件
[root@fgedu.net.cn ~]# cat > /mariadb/instance2/conf/my.cnf << 'EOF'
[mysqld]
user = mysql
basedir = /usr/local/mariadb
datadir = /mariadb/instance2/data
socket = /mariadb/instance2/mysql.sock
pid-file = /mariadb/instance2/mysql.pid
port = 3307
# 性能配置
innodb_buffer_pool_size = 2G
max_connections = 500
# 安全配置
bind-address = 0.0.0.0
skip-name-resolve
EOF
# 实例3配置文件
[root@fgedu.net.cn ~]# cat > /mariadb/instance3/conf/my.cnf << 'EOF'
[mysqld]
user = mysql
basedir = /usr/local/mariadb
datadir = /mariadb/instance3/data
socket = /mariadb/instance3/mysql.sock
pid-file = /mariadb/instance3/mysql.pid
port = 3308
# 性能配置
innodb_buffer_pool_size = 2G
max_connections = 500
# 安全配置
bind-address = 0.0.0.0
skip-name-resolve
EOF
# 初始化实例1
[root@fgedu.net.cn ~]# /usr/local/mariadb/bin/mysql_install_db –user=mysql –datadir=/mariadb/instance1/data –basedir=/usr/local/mariadb
# 初始化实例2
[root@fgedu.net.cn ~]# /usr/local/mariadb/bin/mysql_install_db –user=mysql –datadir=/mariadb/instance2/data –basedir=/usr/local/mariadb
# 初始化实例3
[root@fgedu.net.cn ~]# /usr/local/mariadb/bin/mysql_install_db –user=mysql –datadir=/mariadb/instance3/data –basedir=/usr/local/mariadb
3.3 服务配置与管理
# 创建实例1服务文件
[root@fgedu.net.cn ~]# cat > /etc/systemd/system/mariadb-instance1.service << 'EOF'
[Unit]
Description=MariaDB instance 1
After=network.target
[Service]
Type=simple
User=mysql
Group=mysql
ExecStart=/usr/local/mariadb/bin/mysqld –defaults-file=/mariadb/instance1/conf/my.cnf
ExecStop=/usr/local/mariadb/bin/mysqladmin –defaults-file=/mariadb/instance1/conf/my.cnf -u root -p shutdown
Restart=on-failure
[Install]
WantedBy=multi-user.target
EOF
# 创建实例2服务文件
[root@fgedu.net.cn ~]# cat > /etc/systemd/system/mariadb-instance2.service << 'EOF'
[Unit]
Description=MariaDB instance 2
After=network.target
[Service]
Type=simple
User=mysql
Group=mysql
ExecStart=/usr/local/mariadb/bin/mysqld –defaults-file=/mariadb/instance2/conf/my.cnf
ExecStop=/usr/local/mariadb/bin/mysqladmin –defaults-file=/mariadb/instance2/conf/my.cnf -u root -p shutdown
Restart=on-failure
[Install]
WantedBy=multi-user.target
EOF
# 创建实例3服务文件
[root@fgedu.net.cn ~]# cat > /etc/systemd/system/mariadb-instance3.service << 'EOF'
[Unit]
Description=MariaDB instance 3
After=network.target
[Service]
Type=simple
User=mysql
Group=mysql
ExecStart=/usr/local/mariadb/bin/mysqld –defaults-file=/mariadb/instance3/conf/my.cnf
ExecStop=/usr/local/mariadb/bin/mysqladmin –defaults-file=/mariadb/instance3/conf/my.cnf -u root -p shutdown
Restart=on-failure
[Install]
WantedBy=multi-user.target
EOF
# 启动服务
[root@fgedu.net.cn ~]# systemctl daemon-reload
[root@fgedu.net.cn ~]# systemctl start mariadb-instance1
[root@fgedu.net.cn ~]# systemctl start mariadb-instance2
[root@fgedu.net.cn ~]# systemctl start mariadb-instance3
# 设置开机自启
[root@fgedu.net.cn ~]# systemctl enable mariadb-instance1
[root@fgedu.net.cn ~]# systemctl enable mariadb-instance2
[root@fgedu.net.cn ~]# systemctl enable mariadb-instance3
[root@fgedu.net.cn ~]# cat > /etc/systemd/system/mariadb-instance1.service << 'EOF'
[Unit]
Description=MariaDB instance 1
After=network.target
[Service]
Type=simple
User=mysql
Group=mysql
ExecStart=/usr/local/mariadb/bin/mysqld –defaults-file=/mariadb/instance1/conf/my.cnf
ExecStop=/usr/local/mariadb/bin/mysqladmin –defaults-file=/mariadb/instance1/conf/my.cnf -u root -p shutdown
Restart=on-failure
[Install]
WantedBy=multi-user.target
EOF
# 创建实例2服务文件
[root@fgedu.net.cn ~]# cat > /etc/systemd/system/mariadb-instance2.service << 'EOF'
[Unit]
Description=MariaDB instance 2
After=network.target
[Service]
Type=simple
User=mysql
Group=mysql
ExecStart=/usr/local/mariadb/bin/mysqld –defaults-file=/mariadb/instance2/conf/my.cnf
ExecStop=/usr/local/mariadb/bin/mysqladmin –defaults-file=/mariadb/instance2/conf/my.cnf -u root -p shutdown
Restart=on-failure
[Install]
WantedBy=multi-user.target
EOF
# 创建实例3服务文件
[root@fgedu.net.cn ~]# cat > /etc/systemd/system/mariadb-instance3.service << 'EOF'
[Unit]
Description=MariaDB instance 3
After=network.target
[Service]
Type=simple
User=mysql
Group=mysql
ExecStart=/usr/local/mariadb/bin/mysqld –defaults-file=/mariadb/instance3/conf/my.cnf
ExecStop=/usr/local/mariadb/bin/mysqladmin –defaults-file=/mariadb/instance3/conf/my.cnf -u root -p shutdown
Restart=on-failure
[Install]
WantedBy=multi-user.target
EOF
# 启动服务
[root@fgedu.net.cn ~]# systemctl daemon-reload
[root@fgedu.net.cn ~]# systemctl start mariadb-instance1
[root@fgedu.net.cn ~]# systemctl start mariadb-instance2
[root@fgedu.net.cn ~]# systemctl start mariadb-instance3
# 设置开机自启
[root@fgedu.net.cn ~]# systemctl enable mariadb-instance1
[root@fgedu.net.cn ~]# systemctl enable mariadb-instance2
[root@fgedu.net.cn ~]# systemctl enable mariadb-instance3
学习交流加群风哥QQ113257174
Part04-生产案例与实战讲解
4.1 多实例部署实战
# 检查服务状态
[root@fgedu.net.cn ~]# systemctl status mariadb-instance1 mariadb-instance2 mariadb-instance3
● mariadb-instance1.service – MariaDB instance 1
Loaded: loaded (/etc/systemd/system/mariadb-instance1.service;
enabled;
vendor preset: disabled)
Active: active (running) since Mon 2026-04-07 14:00:00 CST;
5min ago
● mariadb-instance2.service – MariaDB instance 2
Loaded: loaded (/etc/systemd/system/mariadb-instance2.service;
enabled;
vendor preset: disabled)
Active: active (running) since Mon 2026-04-07 14:00:05 CST;
5min ago
● mariadb-instance3.service – MariaDB instance 3
Loaded: loaded (/etc/systemd/system/mariadb-instance3.service;
enabled;
vendor preset: disabled)
Active: active (running) since Mon 2026-04-07 14:00:10 CST;
5min ago
# 检查端口监听
[root@fgedu.net.cn ~]# netstat -tlnp | grep 330
tcp 0 0 0.0.0.0:3306 0.0.0.0:* LISTEN 4567/mysqld
tcp 0 0 0.0.0.0:3307 0.0.0.0:* LISTEN 4578/mysqld
tcp 0 0 0.0.0.0:3308 0.0.0.0:* LISTEN 4589/mysqld
[root@fgedu.net.cn ~]# systemctl status mariadb-instance1 mariadb-instance2 mariadb-instance3
● mariadb-instance1.service – MariaDB instance 1
Loaded: loaded (/etc/systemd/system/mariadb-instance1.service;
enabled;
vendor preset: disabled)
Active: active (running) since Mon 2026-04-07 14:00:00 CST;
5min ago
● mariadb-instance2.service – MariaDB instance 2
Loaded: loaded (/etc/systemd/system/mariadb-instance2.service;
enabled;
vendor preset: disabled)
Active: active (running) since Mon 2026-04-07 14:00:05 CST;
5min ago
● mariadb-instance3.service – MariaDB instance 3
Loaded: loaded (/etc/systemd/system/mariadb-instance3.service;
enabled;
vendor preset: disabled)
Active: active (running) since Mon 2026-04-07 14:00:10 CST;
5min ago
# 检查端口监听
[root@fgedu.net.cn ~]# netstat -tlnp | grep 330
tcp 0 0 0.0.0.0:3306 0.0.0.0:* LISTEN 4567/mysqld
tcp 0 0 0.0.0.0:3307 0.0.0.0:* LISTEN 4578/mysqld
tcp 0 0 0.0.0.0:3308 0.0.0.0:* LISTEN 4589/mysqld
4.2 资源隔离实战
# 连接不同实例
[root@fgedu.net.cn ~]# /usr/local/mariadb/bin/mysql -u root -p -P 3306
Enter password:
Welcome to the MariaDB monitor. Commands end with;
or \g.
Your MariaDB connection id is 8
Server version: 10.11.8-MariaDB Source distribution
MariaDB [(none)]> CREATE DATABASE fgedudb1;
Query OK, 1 row affected (0.00 sec)
[root@fgedu.net.cn ~]# /usr/local/mariadb/bin/mysql -u root -p -P 3307
Enter password:
Welcome to the MariaDB monitor. Commands end with;
or \g.
Your MariaDB connection id is 8
Server version: 10.11.8-MariaDB Source distribution
MariaDB [(none)]> CREATE DATABASE fgedudb2;
Query OK, 1 row affected (0.00 sec)
[root@fgedu.net.cn ~]# /usr/local/mariadb/bin/mysql -u root -p -P 3308
Enter password:
Welcome to the MariaDB monitor. Commands end with;
or \g.
Your MariaDB connection id is 8
Server version: 10.11.8-MariaDB Source distribution
MariaDB [(none)]> CREATE DATABASE fgedudb3;
Query OK, 1 row affected (0.00 sec)
# 验证数据隔离
[root@fgedu.net.cn ~]# /usr/local/mariadb/bin/mysql -u root -p -P 3306 -e “SHOW DATABASES;
”
Enter password:
+——————–+
| Database |
+——————–+
| information_schema |
| fgedudb1 |
| mysql |
| performance_schema |
| test |
+——————–+
[root@fgedu.net.cn ~]# /usr/local/mariadb/bin/mysql -u root -p -P 3307 -e “SHOW DATABASES;
”
Enter password:
+——————–+
| Database |
+——————–+
| information_schema |
| fgedudb2 |
| mysql |
| performance_schema |
| test |
+——————–+
[root@fgedu.net.cn ~]# /usr/local/mariadb/bin/mysql -u root -p -P 3308 -e “SHOW DATABASES;
”
Enter password:
+——————–+
| Database |
+——————–+
| information_schema |
| fgedudb3 |
| mysql |
| performance_schema |
| test |
+——————–+
[root@fgedu.net.cn ~]# /usr/local/mariadb/bin/mysql -u root -p -P 3306
Enter password:
Welcome to the MariaDB monitor. Commands end with;
or \g.
Your MariaDB connection id is 8
Server version: 10.11.8-MariaDB Source distribution
MariaDB [(none)]> CREATE DATABASE fgedudb1;
Query OK, 1 row affected (0.00 sec)
[root@fgedu.net.cn ~]# /usr/local/mariadb/bin/mysql -u root -p -P 3307
Enter password:
Welcome to the MariaDB monitor. Commands end with;
or \g.
Your MariaDB connection id is 8
Server version: 10.11.8-MariaDB Source distribution
MariaDB [(none)]> CREATE DATABASE fgedudb2;
Query OK, 1 row affected (0.00 sec)
[root@fgedu.net.cn ~]# /usr/local/mariadb/bin/mysql -u root -p -P 3308
Enter password:
Welcome to the MariaDB monitor. Commands end with;
or \g.
Your MariaDB connection id is 8
Server version: 10.11.8-MariaDB Source distribution
MariaDB [(none)]> CREATE DATABASE fgedudb3;
Query OK, 1 row affected (0.00 sec)
# 验证数据隔离
[root@fgedu.net.cn ~]# /usr/local/mariadb/bin/mysql -u root -p -P 3306 -e “SHOW DATABASES;
”
Enter password:
+——————–+
| Database |
+——————–+
| information_schema |
| fgedudb1 |
| mysql |
| performance_schema |
| test |
+——————–+
[root@fgedu.net.cn ~]# /usr/local/mariadb/bin/mysql -u root -p -P 3307 -e “SHOW DATABASES;
”
Enter password:
+——————–+
| Database |
+——————–+
| information_schema |
| fgedudb2 |
| mysql |
| performance_schema |
| test |
+——————–+
[root@fgedu.net.cn ~]# /usr/local/mariadb/bin/mysql -u root -p -P 3308 -e “SHOW DATABASES;
”
Enter password:
+——————–+
| Database |
+——————–+
| information_schema |
| fgedudb3 |
| mysql |
| performance_schema |
| test |
+——————–+
4.3 实例管理与监控
# 启动/停止/重启实例
[root@fgedu.net.cn ~]# systemctl start mariadb-instance1
[root@fgedu.net.cn ~]# systemctl stop mariadb-instance2
[root@fgedu.net.cn ~]# systemctl restart mariadb-instance3
# 查看实例状态
[root@fgedu.net.cn ~]# systemctl status mariadb-instance1
# 监控实例性能
[root@fgedu.net.cn ~]# /usr/local/mariadb/bin/mysqladmin -u root -p -P 3306 extended-status
[root@fgedu.net.cn ~]# /usr/local/mariadb/bin/mysqladmin -u root -p -P 3307 processlist
# 查看实例日志
[root@fgedu.net.cn ~]# tail -f /mariadb/instance1/logs/error.log
[root@fgedu.net.cn ~]# tail -f /mariadb/instance2/logs/error.log
[root@fgedu.net.cn ~]# tail -f /mariadb/instance3/logs/error.log
[root@fgedu.net.cn ~]# systemctl start mariadb-instance1
[root@fgedu.net.cn ~]# systemctl stop mariadb-instance2
[root@fgedu.net.cn ~]# systemctl restart mariadb-instance3
# 查看实例状态
[root@fgedu.net.cn ~]# systemctl status mariadb-instance1
# 监控实例性能
[root@fgedu.net.cn ~]# /usr/local/mariadb/bin/mysqladmin -u root -p -P 3306 extended-status
[root@fgedu.net.cn ~]# /usr/local/mariadb/bin/mysqladmin -u root -p -P 3307 processlist
# 查看实例日志
[root@fgedu.net.cn ~]# tail -f /mariadb/instance1/logs/error.log
[root@fgedu.net.cn ~]# tail -f /mariadb/instance2/logs/error.log
[root@fgedu.net.cn ~]# tail -f /mariadb/instance3/logs/error.log
风哥提示:安全开发是防止SQL注入的第一道防线
Part05-风哥经验总结与分享
5.1 部署常见问题与解决
- 端口冲突:确保每个实例使用不同的端口
- 权限问题:确保数据目录权限正确
- 配置错误:检查配置文件语法
- 资源不足:合理分配系统资源
- 服务启动失败:查看错误日志定位问题
5.2 最佳实践
风哥提示:多实例部署应根据服务器硬件资源和业务需求进行合理规划,避免资源竞争。
5.3 维护建议
- 定期备份每个实例的数据
- 监控每个实例的性能和资源使用
- 统一管理实例配置
- 制定合理的维护计划
- 考虑使用容器化技术简化管理
from MariaDB视频:www.itpux.com
本文由风哥教程整理发布,仅用于学习测试使用,转载注明出处:http://www.fgedu.net.cn/10327.html
