MySQL单独部署多个服务管理多实例
单独部署多个服务管理多实例:
1. 准备环境
确保服务器满足以下条件:
- 安装了必要的软件包:gcc, cmake, make, libaio, openssl-devel, ncurses-devel, bison, libaio-devel
- 创建两个独立的 MySQL 数据目录和配置文件。
2. 下载并解压 MySQL 二进制包
# 下载二进制包wget https://dev.mysql.com/get/Downloads/MySQL-8.0/mysql-8.0.35-linux-glibc2.12-x86_64.tar.xz# 解压tar -xvf mysql-8.0.35-linux-glibc2.12-x86_64.tar.xz# 重命名mv mysql-8.0.35-linux-glibc2.12-x86_64 /usr/local/mysql
3. 创建独立的数据目录
为每个实例创建独立的数据和日志目录。
mkdir -p /data/mysql3306 /data/mysql3307mkdir -p /data/mysql3306/logs /data/mysql3307/logs
4. 添加 MySQL 用户和组
groupadd mysqluseradd -r -g mysql -s /bin/false mysqlchown -R mysql:mysql /data/mysql3306 /data/mysql3307
5. 创建独立的配置文件
为每个 MySQL 实例创建不同的 my.cnf
配置文件,注意端口、数据目录等差异。
配置文件 1: /etc/my3306.cnf
[mysqld]basedir=/usr/local/mysqldatadir=/data/mysql3306socket=/tmp/mysql3306.sockport=3306log-error=/data/mysql3306/logs/mysql_error.logpid-file=/data/mysql3306/mysql.pid# 其他必要的配置...
配置文件 2: /etc/my3307.cnf
[mysqld]basedir=/usr/local/mysqldatadir=/data/mysql3307socket=/tmp/mysql3307.sockport=3307log-error=/data/mysql3307/logs/mysql_error.logpid-file=/data/mysql3307/mysql.pid# 其他必要的配置...
6. 初始化两个 MySQL 实例
/usr/local/mysql/bin/mysqld --defaults-file=/etc/my3306.cnf --initialize --user=mysql/usr/local/mysql/bin/mysqld --defaults-file=/etc/my3307.cnf --initialize --user=mysql
7. 创建系统服务文件
为每个 MySQL 实例创建独立的系统服务文件。
服务文件 1: /etc/systemd/system/mysql3306.service
[Unit]Description=MySQL Server 3306After=network.target[Service]Type=forkingExecStart=/usr/local/mysql/bin/mysqld --defaults-file=/etc/my3306.cnf --daemonize --pid-file=/data/mysql3306/mysql.pidExecStop=/usr/local/mysql/bin/mysqladmin --defaults-file=/etc/my3306.cnf shutdownUser=mysqlGroup=mysql[Install]WantedBy=multi-user.target
服务文件 2: /etc/systemd/system/mysql3307.service
[Unit]Description=MySQL Server 3307After=network.target[Service]Type=forkingExecStart=/usr/local/mysql/bin/mysqld --defaults-file=/etc/my3307.cnf --daemonize --pid-file=/data/mysql3307/mysql.pidExecStop=/usr/local/mysql/bin/mysqladmin --defaults-file=/etc/my3307.cnf shutdownUser=mysqlGroup=mysql[Install]WantedBy=multi-user.target
8. 启动并管理服务
启用并启动两个 MySQL 实例。
systemctl daemon-reloadsystemctl enable mysql3306.servicesystemctl enable mysql3307.servicesystemctl start mysql3306.servicesystemctl start mysql3307.service
9. 验证安装
使用以下命令验证 MySQL 实例是否成功启动:
systemctl status mysql3306.servicesystemctl status mysql3307.service/usr/local/mysql/bin/mysqladmin -S /tmp/mysql3306.sock -uroot -p status/usr/local/mysql/bin/mysqladmin -S /tmp/mysql3307.sock -uroot -p status
至此,你已经成功在同一台 Linux 服务器上安装并运行了两个独立的 MySQL 实例,分别在端口 3306 和 3307。
使用 mysql_multiMySQL管理多实例
通过 mysql_multi
管理多个 MySQL 实例也是一种有效的方式,尤其适合多个实例的启动、停止和监控。下面是详细步骤,如何通过 mysql_multi
来管理两个 实例(端口 3306 和 3307)的过程。
1. 准备环境
确保已经满足以下条件:
- 下载并安装 MySQL 二进制包(参考之前步骤)
- 为 MySQL 实例创建了不同的数据目录
2. 安装并配置 mysql_multi
mysql_multi
工具是 MySQL 自带的一个管理工具。首先要确保 MySQL 客户端工具已经在路径中,并且你有权限执行它。
3. 修改主配置文件 my.cnf
需要在一个 my.cnf
文件中定义所有实例。建议将配置文件路径设为 /etc/my.cnf
或 /etc/mysql_multi.cnf
。
配置文件 /etc/my.cnf
[mysqld_multi]mysqld = /usr/local/mysql/bin/mysqld_safemysqladmin = /usr/local/mysql/bin/mysqladminuser = rootpassword = your_password[mysqld1]socket = /tmp/mysql3306.sockport = 3306pid-file = /data/mysql3306/mysql.piddatadir = /data/mysql3306log-error = /data/mysql3306/logs/error.logbasedir = /usr/local/mysqluser = mysql[mysqld2]socket = /tmp/mysql3307.sockport = 3307pid-file = /data/mysql3307/mysql.piddatadir = /data/mysql3307log-error = /data/mysql3307/logs/error.logbasedir = /usr/local/mysqluser = mysql
4. 初始化 MySQL 实例
使用 mysqld
命令初始化每个 MySQL 实例的数据目录。
初始化 3306 实例:
/usr/local/mysql/bin/mysqld --defaults-file=/etc/my.cnf --datadir=/data/mysql3306 --initialize --user=mysql --socket=/tmp/mysql3306.sock
初始化 3307 实例:
/usr/local/mysql/bin/mysqld --defaults-file=/etc/my.cnf --datadir=/data/mysql3307 --initialize --user=mysql --socket=/tmp/mysql3307.sock
5. 使用 mysql_multi 管理实例
接下来,使用 mysql_multi
工具来启动、停止和查看实例的状态。
启动所有实例:
/usr/local/mysql/bin/mysql_multi start
启动特定实例(如 3306 和 3307):
/usr/local/mysql/bin/mysql_multi start 1/usr/local/mysql/bin/mysql_multi start 2
停止所有实例:
/usr/local/mysql/bin/mysql_multi stop
停止特定实例:
/usr/local/mysql/bin/mysql_multi stop 1/usr/local/mysql/bin/mysql_multi stop 2
查看实例状态:
/usr/local/mysql/bin/mysql_multi report
6. 验证 MySQL 实例
使用 mysqladmin
来验证实例是否启动。
验证 3306 实例:
/usr/local/mysql/bin/mysqladmin -S /tmp/mysql3306.sock -uroot -p status
验证 3307 实例:
/usr/local/mysql/bin/mysqladmin -S /tmp/mysql3307.sock -uroot -p status
7. 设置自启动(可选)
在系统启动时,自动启动所有 MySQL 实例。
创建启动脚本 /etc/init.d/mysql_multi:
#!/bin/bashcase "$1" in start) /usr/local/mysql/bin/mysql_multi start ;; stop) /usr/local/mysql/bin/mysql_multi stop ;; restart) /usr/local/mysql/bin/mysql_multi stop /usr/local/mysql/bin/mysql_multi start ;; status) /usr/local/mysql/bin/mysql_multi report ;; *) echo "Usage: $0 {start|stop|restart|status}" exit 1esacexit 0
设置权限:
chmod +x /etc/init.d/mysql_multi
添加到开机启动:
chkconfig --add mysql_multichkconfig mysql_multi on
8. 结语
通过以上步骤,你可以使用 mysql_multi
管理两个或多个 MySQL 实例。这种方法特别适合同时运行多个 MySQL 实例的场景,能有效地统一管理这些实例的启动、停止和状态监控。