详细介绍 DBDeployer 部署工具使用

2020-11-18 database mysql

通过 DBDeployer 可以在本地快速搭建一个强大的测试环境,包括了不同版本、不同架构的数据库环境,例如 MySQL 主从复制、GTID 模式复制、MySQL 组复制等等。

支持几乎当前所有版本的 MySQL 发行版本,除了官方的,还有 Percona MySQL、MariaDB、MySQL NDB Cluster、Percona XtraDB Cluster 等等,还有 MySQL-Shell 的安装,甚至还有 TiDB ,估计是 TiDB 团队贡献的代码吧。

这里会详细介绍其使用方法。

简介

在该工具之前,还存在一个 MySQL SandBox 的类似工具,好像是同一个作者,不过 MySQL-SandBox 是使用 Perl 语言编写的,而 DBDeployer 则是采用 GoLang 开发,如果是新手,建议还是使用 DBDeployer 这个工具了。

直接从安装部署一个简单的单实例开始。

安装

直接从 GitHub Release 上下载相应 OS 的版本,都是一些独立的二进制文件,所以,在多数 OS 中,直接添加到 PATH 环境变量所在路径即可,例如 /usr/bin 目录下。

然后,可以通过如下命令检查是否安装成功。

dbdeployer --version

另外,该工具还提供了命令行的自动补齐功能,在源码库中提供了 docs/dbdeployer_completion.sh 脚本,直接通过如下方式复制到对应目录即可。

cp dbdeployer_completion.sh /etc/bash_completion.d
source /etc/bash_completion.d/dbdeployer_completion.sh

在输入命令时可以尝试下 Tab 键的自动补齐功能。

另外,如果安装的是 MySQL 8.X 版本,会依赖 libncurses.so.5 libtinfo.so.5 libaio.so.1 库,在 Debain 中可以通过 apt install libncurses5 libaio1 命令进行安装。

配置环境

使用时,可以通过 SANDBOX_BINARYSANDBOX_HOME 两个环境变量配置路径,前者用来安装不同的 MySQL 二进制版本,后者是 MySQL 运行实例的路径。

mkdir -p /opt/MySQL/{binary,home,package}
export SANDBOX_HOME=/opt/MySQL/home
export SANDBOX_BINARY=/opt/MySQL/binary

这里同时增加一个 package 目录,用来存放下载的 MySQL 压缩包。

----- 查看环境变量等信息,会显示初始化环境的步骤,但是没有执行
dbdeployer init --dry-run

所谓的初始化环境,其实就是创建所需目录,下载对应的 MySQL 版本,可以通过 dbdeployer init -h 查看具体步骤。

如果可以联网,那么通过 dbdeployer init 会自动完成初始化环境,而离线,无非就是创建所需目录,添加上述的补全文件,以及如下的准备二进制文件。

下载二进制包

可以通过 dbdeployer 自动下载,也可以从 downloads.mysql.com 上获取所需的版本包,选择 版本号 + Linux - Generic + All 即可。

----- 查看当前支持的列表
dbdeployer downloads list
----- 貌似是下载并解压了,也可以分成get和unpack两步
dbdeployer downloads get-unpack mysql-5.7.31-linux-glibc2.12-x86_64.tar.gz

假设手动下载了版本 mysql-8.0.21-linux-glibc2.17-x86_64-minimal.tar.xz 包,那么可以通过如下命令安装。

dbdeployer unpack mysql-8.0.21-linux-glibc2.17-x86_64-minimal.tar.xz

启动实例

接着看看如何启动单个实例。

----- 启动单个实例
dbdeployer deploy single 8.0.21

此时已经启动了 MySQL 服务进程,对应的包会安装在 $SANDBOX_HOME/msb_8_0_21 目录下,可以通过该目录下的 use 脚本启动。

$ cd /opt/MySQL/home/msb_8_0_21
$ ./use
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 12
Server version: 8.0.21 MySQL Community Server - GPL

Copyright (c) 2000, 2020, Oracle and/or its affiliates. All rights reserved.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql [localhost:8021] {msandbox} ((none)) >

除了 use 脚本之外,还包括了 start status stop restart 等常用的启停脚本,以及 show_log show_binlog 等查看日志的脚本。

配置都保存在 my.sandbox.cnf 文件中,创建的用户信息可以查看 grants.mysql,密码默认都是 msandbox,只有主备复制用的 rsandbox 密码是 rsandbox

常用命令

----- 当前版本所支持的数据库类型及其版本等信息
dbdeployer admin capabilities

----- 已经安装的组件版本
dbdeployer versions

----- 当前已经配置的沙箱
dbdeployer sandboxes --header

----- 删除某个沙箱
dbdeployer delete msb_8_0_21

参考