有时候,可能基于成本的考虑,我们希望在单台Linux机器上部署多个MySQL实例,比如用来做异地灾备数据库或者延迟从库。

这一节内容,就来聊一下怎样在一台Linux机器上启动多个实例。

1 分别启动多个实例

1.1 首先安装一个MySQL实例

使用脚本安装MySQL

1.2 复制数据目录和启动脚本

需要停掉之前的MySQL实例:

/etc/init.d/mysql.server stop

复制数据目录:

cp -rf /data/mysql /data/mysql3307

复制启动脚本:

cp /etc/init.d/mysql.server /etc/init.d/mysql3307.server

1.3 修改启动脚本和配置文件

编辑启动脚本

vim /etc/init.d/mysql3307.server

修改

:%s/\/data\/mysql/\/data\/mysql3307/g
lock_file_path="$lockdir/mysql3307"

修改配置文件

vim /data/mysql3307/conf/my.cnf

修改:

:%s/\/data\/mysql/\/data\/mysql3307/g
:%s/mysql.sock/mysql3307.sock/g
:%s/3306/3307/g

1.4 修改属组

chown mysql.mysql /data/mysql3307/ -R

1.5 启动MySQL

/etc/init.d/mysql.server start /etc/init.d/mysql3307.server start

1.6 测试登录两套MySQL

mysql -uroot -p
mysql -uroot -p -P 3307

2 使用mysqld_multi部署多实例

2.1 目录和配置文件准备

创建数据目录

mkdir -p /data/{mysql3311,mysql3312}/data

增加配置文件

mkdir -p /data/mysqld_multi/conf/mkdir /data/mysqld_multi/log/vim /data/mysqld_multi/conf/my.cnf

加入如下内容:

[mysqld_multi]
mysqld     = /usr/local/mysql/bin/mysqld_safe
mysqladmin = /usr/local/mysql/bin/mysqladmin
log        = /data/mysqld_multi/log/mysqld_multi.log
user = root
pass = martin

[mysqld3311]
socket     = /data/mysql3311/data/mysql3311.sock
port       = 3311
pid-file   = /data/mysql3311/data/mysql3311.pid
datadir    = /data/mysql3311/data/
user       = mysql

[mysqld3312]
socket     = /data/mysql3312/data/mysql3312.sock
port       = 3312
pid-file   = /data/mysql3312/data/mysql3312.pid
datadir    = /data/mysql3312/data/
user       = mysql

2.2 初始化

mysqld --datadir=/data/mysql3311/data/ --user=mysql --initialize
mysqld --datadir=/data/mysql3312/data/ --user=mysql --initialize

2.3 启动多实例

mysqld_multi --defaults-extra-file=/data/mysqld_multi/conf/my.cnf start

2.4 修改所有实例的root密码

登录MySQL

mysql -uroot -p -S /data/mysql3311/data/mysql3311.sock

修改root密码:

alter user user() identified by 'martin';

修改密码之后,查看多实例状态:

mysqld_multi --defaults-extra-file=/data/mysqld_multi/conf/my.cnf report

1715757485143357.png

2.5 关闭和启动其中一个实例

比如我们关闭其中一个实例,执行

mysqld_multi --defaults-extra-file=/data/mysqld_multi/conf/my.cnf stop 3311

再查看一次实例状态

mysqld_multi --defaults-extra-file=/data/mysqld_multi/conf/my.cnf report

1715757580756576.png

在启动关闭的实例

mysqld_multi --defaults-extra-file=/data/mysqld_multi/conf/my.cnf start 3311

2.6 登录多实例的方式

mysql -uroot -p -S /data/mysql3311/data/mysql3311.sock
mysql -uroot -p -S /data/mysql3311/data/mysql3311.sock