MySQL单独部署多个服务管理多实例

作者:IT技术圈子 浏览量:96   发表于 2024-10-10 17:15 标签:

单独部署多个服务管理多实例:

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 实例的场景,能有效地统一管理这些实例的启动、停止和状态监控。