作者:杨涛涛
资深数据库专家,专研 MySQL 十余年。善于 MySQL、PostgreSQL、MongoDB 等开源数据库相干的备份复原、SQL 调优、监控运维、高可用架构设计等。目前任职于爱可生,为各大运营商及银行金融企业提供 MySQL 相干技术支持、MySQL 相干课程培训等工作。
本文起源:原创投稿
* 爱可生开源社区出品,原创内容未经受权不得随便应用,转载请分割小编并注明起源。
之前写过应用 MySQL Shell 的 DBA 组件来搭建、运维 MySQL InnoDB Cluster。明天咱们来持续对 DBA 组件进行延长介绍,探讨如何用它定制化部署 MySQL 实例。
一、如何部署多个不同版本的 MySQL 实例:
默认应用 DBA 组件部署多个实例时,应用零碎内置的 MySQL 版本,也就是在环境变量 $PATH 蕴含的门路里搜查 mysqld 来确认具体的实例版本。比方我机器上,默认 MySQL 版本为 8.0,所以间接部署后的实例版本也是 8.0。
root@ytt-normal:~# mysqlsh --py
MySQL Shell 8.0.29
...
MySQL Py > dba.deploy_sandbox_instance(3350);
A new MySQL sandbox instance will be created on this host in
/root/mysql-sandboxes/3350
...
Instance localhost:3350 successfully deployed and started.
Use shell.connect('root@localhost:3350') to connect to the instance.
例如以上端口为 3350 的实例在部署实现后,新建一个连贯,胜利后客户端就会收到具体版本:Server version: 8.0.29 MySQL Community Server – GPL。
MySQL Py > \c root@localhost:3350
...
Your MySQL connection id is 12
Server version: 8.0.29 MySQL Community Server - GPL
如果想同时部署多个不同版本 MySQL 实例,只须要把对应版本的 mysqld 门路放入 $PATH 即可。须要留神的是,新门路与老 $PATH 拼接程序:新门路在前,老 $PATH 在后!部署实现后,记得再把 $PATH 内容还原。
比方我机器上 MySQL 5.7 版本安装包目录为:/root/opt/mysql/5.7.34,那么增加这个目录的子目录 bin 到环境变量 $PATH 即可:
root@ytt-normal:~# export PATH=/root/opt/mysql/5.7.34/bin:$PATH
从新进入 MySQL Shell 环境,和下面 MySQL 8.0 雷同的部署形式:能够看到,新部署的实例版本为 5.7.34-log MySQL Community Server (GPL)。
MySQL Py > dba.deploy_sandbox_instance(3351)
A new MySQL sandbox instance will be created on this host in
/root/mysql-sandboxes/3351
...
Instance localhost:3351 successfully deployed and started.
Use shell.connect('root@localhost:3351') to connect to the instance.
MySQL Py > \c root@localhost:3351
...
Your MySQL connection id is 7
Server version: 5.7.34-log MySQL Community Server (GPL)
二、如何更改部署实例的根本目录:
默认部署实例文件在~/mysql-sandboxes 下,依照实例端口划分,每个端口一个子目录。比方之前部署的两个 MySQL 实例,别离对应目录 /root/mysql-sandboxes/3350、/root/mysql-sandboxes/3351。
有两种办法能够更改部署实例的根本目录:
1. 调用 dba.deploy_sandbox_instance 时,显式指定部署目录:
- sandboxDir: path where the new instance will be deployed.
例如部署一个新实例 3352,指定根本目录为:/tmp/mysql-sandbox。
MySQL Py > dba.deploy_sandbox_instance(3352,{"sandboxDir":"/tmp/mysql-sandbox"})
A new MySQL sandbox instance will be created on this host in
/tmp/mysql-sandbox/3352
...
Instance localhost:3352 successfully deployed and started.
Use shell.connect('root@localhost:3352') to connect to the instance.
这种办法最大的毛病就是对于后续新实例的部署不具备通用性,须要针对每个新实例别离指定 sandboxDir 选项才能够。如果不显式指定,则持续应用默认目录:~/mysql-sandboxes。例如上面部署实例 3353,仍然应用默认目录。
MySQL Py > dba.deploy_sandbox_instance(3353)
A new MySQL sandbox instance will be created on this host in
/root/mysql-sandboxes/3353
接下来的形式间接在 MySQL Shell 的 Shell 组件里指定根本部署目录,对全局无效。
2. 显式设置 shell 组件的 options 字典属性,批改 KEY 名为 sandboxDir 的值为指定目录:
- sandboxDir: default path where the new sandbox instances for InnoDB cluster will be deployed
设置 sandboxDir 为 /tmp/mysql-sandbox:–persist 为永恒失效,相似 MySQL 里的 set persist 语法成果。
MySQL Py > \option --persist sandboxDir /tmp/mysql-sandbox
从新进入 MySQL Shell 环境,部署两个新实例,对应端口别离为 3353 和 3354:这两个实例都被部署在目录 /tmp/mysql-sandbox 下。
MySQL Py > for i in range(3353,3355):
-> dba.deploy_sandbox_instance(i)
->
A new MySQL sandbox instance will be created on this host in
/tmp/mysql-sandbox/3353
...
A new MySQL sandbox instance will be created on this host in
/tmp/mysql-sandbox/3354
...
三、如何更改新部署的实例参数:
下面部署的几个实例都没有设定具体参数,只应用了默认值。不论部署的实例用于什么场景,有些参数还是要随场景更改的。更改参数有以下两种形式:
1. 部署实例的同时对参数进行配置:适宜更改大量参数。
比方新部署一个实例 3355,别离指定以下参数:
server-id=1000
tmp_table_size=64M
read_buffer_size=1M
增加这几个参数到 mysqldOptions 数组即可。
MySQL Py > dba.deploy_sandbox_instance(3355,{"mysqldOptions":["server_id=1000","tmp_table_size=64M","read_buffer_size=1M"]})
A new MySQL sandbox instance will be created on this host in
/tmp/mysql-sandbox/3355
...
Instance localhost:3355 successfully deployed and started.
Use shell.connect('root@localhost:3355') to connect to the instance.
确认 my.cnf 曾经更改胜利:
root@ytt-normal:/tmp/mysql-sandbox/3355# grep "server_id\|tmp_table_size\|read_buffer_size" my.cnf
server_id = 1000
tmp_table_size = 64M
read_buffer_size = 1M
2. 部署实例后对参数进行配置:适宜更改大量参数。
间接更改对应的 my.cnf,完了重启即可。
总结:
应用 MySQL Shell 的 DBA 组件能够很不便的部署 MySQL 实例,然而不倡议上生产,因为进入 MySQL Shell 环境后,能够对这些实例随便保护,危险加大。