在某些情况下,您可能希望在一台计算机上运行多个MySQL实例。
每个实例可以使用不同的MySQL服务器二进制文件,也可以对多个实例使用相同的二进制文件,或者两种方法的任意组合。
限制
- 数据目录必须不同
- 配置文件安装路径不能相同
- socket 文件的生成路径不能相同
- 启动脚本不能同名
- 端口不能相同
为了获得更好的性能,可以为每个服务器不同地指定以下选项,以在多个物理磁盘之间分散负载:
- tmpdir=dir_name
部署
部署多实例有两种方式,
- 使用多个配置文件启动不同的进程来实现多实例,这种方式的优势逻辑简单,配置简单,缺点是管理起来不太方便;
- 通过官方自带的mysqld_multi使用单独的配置文件来实现多实例,对于同一版本的多实例
不同版本的多实例部署
环境
- 系统:
CentOS 7.6
- MySQL版本:
- mysql-5.6.48
- mysql-5.7.27
- mysql-8.0.18
解压
[root@testinit ~]# tar zxf mysql-5.6.48-linux-glibc2.12-x86_64.tar.gz -C /usr/local
[root@testinit ~]# tar zxf mysql-5.7.27-linux-glibc2.12-x86_64.tar.gz -C /usr/local
[root@testinit ~]# tar xf mysql-8.0.18-linux-glibc2.12-x86_64.tar -C /usr/local
[root@testinit local]# tar xf /usr/local/mysql-8.0.18-linux-glibc2.12-x86_64.tar.xz -C /usr/local
建立软链
cd /usr/local/
[root@testinit local]# ln -s /usr/local/mysql-5.6.48-linux-glibc2.12-x86_64 mysql56
[root@testinit local]# ln -s /usr/local/mysql-5.7.27-linux-glibc2.12-x86_64 mysql57
[root@testinit local]# ln -s /usr/local/mysql-8.0.18-linux-glibc2.12-x86_64 mysql80
创建用户
shell> groupadd mysql
shell> useradd -r -g mysql -s /bin/false mysql
创建数据文件路径
shell> mkdir -p /app/{mysql_data56,mysql_data57,mysql_data80}
授权
shell> chown mysql:mysql /app/{mysql_data56,mysql_data57,mysql_data80}
shell> chmod 750 /app/{mysql_data56,mysql_data57,mysql_data80}
设置my.cnf
在app目录下生成 my56.cnf my57.cnf my80.cnf,修改参数与路径
主要更改如下参数,修改为对应版本
[mysqld]
port= 3380
basedir=/usr/local/mysql80
datadir=/app/mysql_data80
socket = /app/mysql_data80/mysql.sock
初始化MySQL
5.6初始化
# 初始化
[root@testinit ~]# cd /usr/local/mysql56
[root@testinit mysql56]# scripts/mysql_install_db --defaults-file=/app/my56.cnf --user=mysql
# 启动
[root@testinit mysql56]# bin/mysqld_safe --defaults-file=/app/my56.cnf --user=mysql &
# 修改初始化密码
[root@initnode ~]# /usr/local/mysql56/bin/mysqladmin -u root -p123456 shutdown
5.7初始化
cd /usr/local/mysql57
[root@initnode mysql57]# bin/mysqld --defaults-file=/app/my57.cnf --initialize --user=mysql
# 启动
[root@initnode mysql57]# bin/mysqld_safe --defaults-file=/app/my57.cnf --user=mysql &
# 修改初始密码
[root@initnode mysql57]# cat /app/mysql_data57/error.log |grep password
[root@initnode mysql57]# /usr/local/mysql57/bin/mysql -uroot -S /app/mysql_data57/mysql.sock -p
mysql> alter user user() identified by '123456';
8.0初始化
cd /usr/local/mysql57
[root@initnode mysql80]# bin/mysqld --defaults-file=/app/my80.cnf --initialize --user=mysql
# 启动
[root@initnode mysql80]# bin/mysqld_safe --defaults-file=/app/my80.cnf --user=mysql &
# 修改初始密码
[root@initnode mysql80]# cat /app/mysql_data80/error.log |grep password
[root@initnode mysql80]# /usr/local/mysql80/bin/mysql -uroot -S /app/mysql_data80/mysql.sock -p
mysql> alter user user() identified by '123456';
切换执行环境
使用用户隔离
新建多个用户,每个用户的 .bash_profile 设置对应的环境变量
alternatives
使用 alternatives 进行环境切换
绝对路径
cd 到对应的绝对路径下去进行操作