1. 首页 > MySQL教程 > 正文

MySQL教程FG018-MySQL单机多实例安装

本文档风哥主要介绍MySQL单机多实例的安装和配置方法,包括多实例的概念、部署方式、配置和管理等内容。风哥教程参考MySQL官方文档Installing MySQL等。更多视频教程www.fgedu.net.cn

Part01-基础概念与理论知识

1.1 MySQL多实例概述

MySQL多实例是指在同一台服务器上运行多个MySQL服务实例,每个实例有自己的配置文件、数据目录、端口号等。学习交流加群风哥微信: itpux-com

1.2 多实例部署方式

MySQL多实例的部署方式包括:

  • 基于不同配置文件的多实例
  • 基于不同端口号的多实例
  • 基于不同数据目录的多实例

1.3 多实例架构规划

根据业务需求规划多实例架构,包括实例数量、资源分配、端口规划等。

Part02-生产环境规划与建议

2.1 硬件规划

根据多实例的数量和负载,规划服务器硬件配置,包括CPU、内存、存储等。

2.2 资源分配

为每个实例分配合理的资源,包括内存、CPU、磁盘空间等。

2.3 网络规划

规划多实例的网络配置,包括端口号、防火墙规则等。

Part03-生产环境项目实施方案

3.1 多实例安装准备

MySQL多实例安装的准备工作:

# 步骤1:安装MySQL
# 以CentOS 7为例
# yum install -y mysql-server

# 步骤2:创建多实例目录结构
# mkdir -p /mysql/instance1/data
# mkdir -p /mysql/instance1/logs
# mkdir -p /mysql/instance1/binlog

# mkdir -p /mysql/instance2/data
# mkdir -p /mysql/instance2/logs
# mkdir -p /mysql/instance2/binlog

# 步骤3:设置目录权限
# chown -R mysql:mysql /mysql

# 步骤4:创建配置文件
# vi /mysql/instance1/my.cnf
[mysqld]
# 基础配置
datadir=/mysql/instance1/data
socket=/mysql/instance1/mysql.sock
log-error=/mysql/instance1/logs/error.log
pid-file=/mysql/instance1/mysqld.pid
port=3306

# 内存配置
innodb_buffer_pool_size=1G
key_buffer_size=128M

# 日志配置
slow_query_log=1
slow_query_log_file=/mysql/instance1/logs/slow.log
long_query_time=1
log_bin=/mysql/instance1/binlog/mysql-bin
expire_logs_days=7

# vi /mysql/instance2/my.cnf
[mysqld]
# 基础配置
datadir=/mysql/instance2/data
socket=/mysql/instance2/mysql.sock
log-error=/mysql/instance2/logs/error.log
pid-file=/mysql/instance2/mysqld.pid
port=3307

# 内存配置
innodb_buffer_pool_size=1G
key_buffer_size=128M

# 日志配置
slow_query_log=1
slow_query_log_file=/mysql/instance2/logs/slow.log
long_query_time=1
log_bin=/mysql/instance2/binlog/mysql-bin
expire_logs_days=7

3.2 多实例配置

MySQL多实例的配置步骤:

# 步骤1:初始化实例1
# mysqld –initialize –user=mysql –datadir=/mysql/instance1/data –basedir=/usr

# 步骤2:初始化实例2
# mysqld –initialize –user=mysql –datadir=/mysql/instance2/data –basedir=/usr

# 步骤3:启动实例1
# mysqld_safe –defaults-file=/mysql/instance1/my.cnf –user=mysql &

# 步骤4:启动实例2
# mysqld_safe –defaults-file=/mysql/instance2/my.cnf –user=mysql &

# 步骤5:获取临时密码
# grep ‘temporary password’ /mysql/instance1/logs/error.log
2026-04-01T10:00:00.123456Z 6 [Note] [MY-010454] [Server] A temporary password is generated for root@localhost: xxxxxxxx

# 步骤6:修改实例1的root密码
# mysql -u root -p -S /mysql/instance1/mysql.sock
Enter password: 输入临时密码
mysql> ALTER USER ‘root’@’localhost’ IDENTIFIED BY ‘Password123!’;
mysql> FLUSH PRIVILEGES;

# 步骤7:修改实例2的root密码
# mysql -u root -p -S /mysql/instance2/mysql.sock
Enter password: 输入临时密码
mysql> ALTER USER ‘root’@’localhost’ IDENTIFIED BY ‘Password123!’;
mysql> FLUSH PRIVILEGES;

# 步骤8:创建远程访问用户
# 实例1
# mysql -u root -p -S /mysql/instance1/mysql.sock
mysql> CREATE USER ‘fgedu’@’%’ IDENTIFIED BY ‘Password123!’;
mysql> GRANT ALL PRIVILEGES ON *.* TO ‘fgedu’@’%’ WITH GRANT OPTION;
mysql> FLUSH PRIVILEGES;

# 实例2
# mysql -u root -p -S /mysql/instance2/mysql.sock
mysql> CREATE USER ‘fgedu’@’%’ IDENTIFIED BY ‘Password123!’;
mysql> GRANT ALL PRIVILEGES ON *.* TO ‘fgedu’@’%’ WITH GRANT OPTION;
mysql> FLUSH PRIVILEGES;

# 步骤9:验证实例状态
# netstat -tlnp | grep mysql
tcp 0 0 0.0.0.0:3306 0.0.0.0:* LISTEN 12345/mysqld
tcp 0 0 0.0.0.0:3307 0.0.0.0:* LISTEN 67890/mysqld

3.3 多实例管理

MySQL多实例的管理方法:

# 启动实例1
# mysqld_safe –defaults-file=/mysql/instance1/my.cnf –user=mysql &

# 启动实例2
# mysqld_safe –defaults-file=/mysql/instance2/my.cnf –user=mysql &

# 停止实例1
# mysqladmin -u root -p -S /mysql/instance1/mysql.sock shutdown

# 停止实例2
# mysqladmin -u root -p -S /mysql/instance2/mysql.sock shutdown

# 重启实例1
# mysqladmin -u root -p -S /mysql/instance1/mysql.sock shutdown
# mysqld_safe –defaults-file=/mysql/instance1/my.cnf –user=mysql &

# 重启实例2
# mysqladmin -u root -p -S /mysql/instance2/mysql.sock shutdown
# mysqld_safe –defaults-file=/mysql/instance2/my.cnf –user=mysql &

# 连接实例1
# mysql -u root -p -S /mysql/instance1/mysql.sock

# 连接实例2
# mysql -u root -p -S /mysql/instance2/mysql.sock

# 通过端口连接实例1
# mysql -u root -p -h 127.0.0.1 -P 3306

# 通过端口连接实例2
# mysql -u root -p -h 127.0.0.1 -P 3307

# 查看实例1的状态
# mysql -u root -p -S /mysql/instance1/mysql.sock -e “SHOW GLOBAL STATUS;”

# 查看实例2的状态
# mysql -u root -p -S /mysql/instance2/mysql.sock -e “SHOW GLOBAL STATUS;”

Part04-生产案例与实战讲解

4.1 多实例安装实战

MySQL多实例安装的实际案例:

# 案例:在CentOS 7上部署两个MySQL实例

# 步骤1:安装MySQL
# yum install -y mysql-server

# 步骤2:创建多实例目录结构
# mkdir -p /mysql/instance1/{data,logs,binlog}
# mkdir -p /mysql/instance2/{data,logs,binlog}

# 步骤3:设置目录权限
# chown -R mysql:mysql /mysql

# 步骤4:创建配置文件
# vi /mysql/instance1/my.cnf
[mysqld]
datadir=/mysql/instance1/data
socket=/mysql/instance1/mysql.sock
log-error=/mysql/instance1/logs/error.log
pid-file=/mysql/instance1/mysqld.pid
port=3306
user=mysql
bind-address=0.0.0.0

# 内存配置
innodb_buffer_pool_size=1G
key_buffer_size=128M
sort_buffer_size=2M
read_buffer_size=2M
read_rnd_buffer_size=4M
join_buffer_size=4M

# 连接配置
max_connections=500
max_connect_errors=10000
wait_timeout=3600
interactive_timeout=3600

# 日志配置
slow_query_log=1
slow_query_log_file=/mysql/instance1/logs/slow.log
long_query_time=1
log_bin=/mysql/instance1/binlog/mysql-bin
expire_logs_days=7

# 存储引擎配置
innodb_file_per_table=1
innodb_flush_method=O_DIRECT
innodb_log_file_size=512M
innodb_log_buffer_size=32M

# vi /mysql/instance2/my.cnf
[mysqld]
datadir=/mysql/instance2/data
socket=/mysql/instance2/mysql.sock
log-error=/mysql/instance2/logs/error.log
pid-file=/mysql/instance2/mysqld.pid
port=3307
user=mysql
bind-address=0.0.0.0

# 内存配置
innodb_buffer_pool_size=1G
key_buffer_size=128M
sort_buffer_size=2M
read_buffer_size=2M
read_rnd_buffer_size=4M
join_buffer_size=4M

# 连接配置
max_connections=500
max_connect_errors=10000
wait_timeout=3600
interactive_timeout=3600

# 日志配置
slow_query_log=1
slow_query_log_file=/mysql/instance2/logs/slow.log
long_query_time=1
log_bin=/mysql/instance2/binlog/mysql-bin
expire_logs_days=7

# 存储引擎配置
innodb_file_per_table=1
innodb_flush_method=O_DIRECT
innodb_log_file_size=512M
innodb_log_buffer_size=32M

# 步骤5:初始化实例
# mysqld –initialize –user=mysql –datadir=/mysql/instance1/data –basedir=/usr
# mysqld –initialize –user=mysql –datadir=/mysql/instance2/data –basedir=/usr

# 步骤6:启动实例
# mysqld_safe –defaults-file=/mysql/instance1/my.cnf –user=mysql &
# mysqld_safe –defaults-file=/mysql/instance2/my.cnf –user=mysql &

# 步骤7:修改root密码
# 实例1
# grep ‘temporary password’ /mysql/instance1/logs/error.log
# mysql -u root -p -S /mysql/instance1/mysql.sock
mysql> ALTER USER ‘root’@’localhost’ IDENTIFIED BY ‘Password123!’;
mysql> FLUSH PRIVILEGES;

# 实例2
# grep ‘temporary password’ /mysql/instance2/logs/error.log
# mysql -u root -p -S /mysql/instance2/mysql.sock
mysql> ALTER USER ‘root’@’localhost’ IDENTIFIED BY ‘Password123!’;
mysql> FLUSH PRIVILEGES;

# 步骤8:创建远程访问用户
# 实例1
# mysql -u root -p -S /mysql/instance1/mysql.sock
mysql> CREATE USER ‘fgedu’@’%’ IDENTIFIED BY ‘Password123!’;
mysql> GRANT ALL PRIVILEGES ON *.* TO ‘fgedu’@’%’ WITH GRANT OPTION;
mysql> FLUSH PRIVILEGES;

# 实例2
# mysql -u root -p -S /mysql/instance2/mysql.sock
mysql> CREATE USER ‘fgedu’@’%’ IDENTIFIED BY ‘Password123!’;
mysql> GRANT ALL PRIVILEGES ON *.* TO ‘fgedu’@’%’ WITH GRANT OPTION;
mysql> FLUSH PRIVILEGES;

# 步骤9:验证实例状态
# netstat -tlnp | grep mysql
tcp 0 0 0.0.0.0:3306 0.0.0.0:* LISTEN 12345/mysqld
tcp 0 0 0.0.0.0:3307 0.0.0.0:* LISTEN 67890/mysqld

# 步骤10:测试连接
# mysql -u fgedu -p -h 127.0.0.1 -P 3306
# mysql -u fgedu -p -h 127.0.0.1 -P 3307

4.2 多实例配置实战

MySQL多实例配置的实际案例:

# 案例:配置多实例的系统服务

# 步骤1:创建systemd服务文件
# vi /etc/systemd/system/mysql-instance1.service
[Unit]
Description=MySQL Instance 1
After=network.target

[Service]
Type=forking
User=mysql
ExecStart=/usr/bin/mysqld_safe –defaults-file=/mysql/instance1/my.cnf
ExecStop=/usr/bin/mysqladmin -u root -pPassword123! -S /mysql/instance1/mysql.sock shutdown
Restart=on-failure

[Install]
WantedBy=multi-user.target

# vi /etc/systemd/system/mysql-instance2.service
[Unit]
Description=MySQL Instance 2
After=network.target

[Service]
Type=forking
User=mysql
ExecStart=/usr/bin/mysqld_safe –defaults-file=/mysql/instance2/my.cnf
ExecStop=/usr/bin/mysqladmin -u root -pPassword123! -S /mysql/instance2/mysql.sock shutdown
Restart=on-failure

[Install]
WantedBy=multi-user.target

# 步骤2:重载systemd配置
# systemctl daemon-reload

# 步骤3:启动服务
# systemctl start mysql-instance1
# systemctl start mysql-instance2

# 步骤4:设置开机自启
# systemctl enable mysql-instance1
# systemctl enable mysql-instance2

# 步骤5:查看服务状态
# systemctl status mysql-instance1
● mysql-instance1.service – MySQL Instance 1
Loaded: loaded (/etc/systemd/system/mysql-instance1.service; enabled; vendor preset: disabled)
Active: active (running) since Tue 2026-04-01 10:00:00 CST; 1min ago
Process: 12345 ExecStart=/usr/bin/mysqld_safe –defaults-file=/mysql/instance1/my.cnf (code=exited, status=0/SUCCESS)
Main PID: 12346 (mysqld_safe)
Tasks: 38
CGroup: /system.slice/mysql-instance1.service
├─12346 /bin/sh /usr/bin/mysqld_safe –defaults-file=/mysql/instance1/my.cnf
└─12347 /usr/sbin/mysqld –defaults-file=/mysql/instance1/my.cnf –basedir=/usr –datadir=/mysql/instance1/data –plugin-dir=/usr/lib64/mysql/plugin –user=mysql –log-error=/mysql/instance1/logs/error.log –pid-file=/mysql/instance1/mysqld.pid –socket=/mysql/instance1/mysql.sock –port=3306

# systemctl status mysql-instance2
● mysql-instance2.service – MySQL Instance 2
Loaded: loaded (/etc/systemd/system/mysql-instance2.service; enabled; vendor preset: disabled)
Active: active (running) since Tue 2026-04-01 10:01:00 CST; 59s ago
Process: 67890 ExecStart=/usr/bin/mysqld_safe –defaults-file=/mysql/instance2/my.cnf (code=exited, status=0/SUCCESS)
Main PID: 67891 (mysqld_safe)
Tasks: 38
CGroup: /system.slice/mysql-instance2.service
├─67891 /bin/sh /usr/bin/mysqld_safe –defaults-file=/mysql/instance2/my.cnf
└─67892 /usr/sbin/mysqld –defaults-file=/mysql/instance2/my.cnf –basedir=/usr –datadir=/mysql/instance2/data –plugin-dir=/usr/lib64/mysql/plugin –user=mysql –log-error=/mysql/instance2/logs/error.log –pid-file=/mysql/instance2/mysqld.pid –socket=/mysql/instance2/mysql.sock –port=3307

# 步骤6:测试服务管理
# 重启实例1
# systemctl restart mysql-instance1

# 停止实例2
# systemctl stop mysql-instance2

# 启动实例2
# systemctl start mysql-instance2

Part05-风哥经验总结与分享

5.1 常见问题与解决方案

MySQL多实例部署时常见的问题包括:

  • 端口冲突:确保每个实例使用不同的端口号
  • 资源竞争:合理分配内存和CPU资源
  • 权限问题:确保数据目录权限正确
  • 服务管理:使用systemd管理多实例服务

5.2 最佳实践建议

1. 合理规划实例数量:根据服务器资源和业务需求确定实例数量
2. 资源隔离:为每个实例分配合理的资源,避免资源竞争
3. 配置优化:根据每个实例的业务特点优化配置参数
4. 监控管理:为每个实例配置独立的监控
5. 备份策略:为每个实例配置独立的备份策略
6. 安全加固:为每个实例配置独立的安全措施
7. 服务管理:使用systemd管理多实例服务,确保服务可靠性
8. 文档记录:记录每个实例的配置和管理信息
学习交流加群风哥QQ113257174

风哥提示:在生产环境中部署MySQL多实例时,建议使用不同的端口号和数据目录,并为每个实例配置独立的监控和备份策略,确保服务的可靠性和数据的安全性。from MySQL:www.itpux.com

更多学习教程公众号风哥教程itpux_com
GF-MySQL数据库培训文档系列

本文由风哥教程整理发布,仅用于学习测试使用,转载注明出处:http://www.fgedu.net.cn/10327.html

联系我们

在线咨询:点击这里给我发消息

微信号:itpux-com

工作日:9:30-18:30,节假日休息