技術分享 | 如何使用 dbdeployer 快速搭建 MySQL 測試環境

做者:餘振興

1、工具介紹

dbdeployer 是一款十分強大的數據庫測試環境部署工具,可實現一鍵部署不一樣架構、不一樣版本的數據庫環境。
如:MySQL 主從複製、GTID 模式複製、MySQL 組複製(單主模式、多主模式等)
完整的數據庫類型支持及版本,可在安裝完 dbdeployer 後使用 dbdeployer admin capabilities 命令進行查看,如下是當前已支持數據庫及組件類型
  • Oracle MySQL
  • Percona MySQL
  • MariaDB
  • TiDB
  • MySQL NDB Cluster
  • Percona XtraDB Cluster
  • mysql-shell

本文主要介紹基於 dbdeployer 工具快速搭建 MySQL 測試環境以及 dbdeployer 的基礎使用。完整的功能特性以及使用方式可查看 dbdeployer 文檔手冊,dbdeployer 的文檔手冊十分詳細的介紹了該工具特性及各種使用方式,可查看文末的相關連接。node

2、工具安裝

本文以 MacOS 下部署爲例,Linux 平臺安裝部署方式基本相似(該工具不提供 Windows 版本),可訪問mysql

https://github.com/datacharme...git

獲取最新版 dbdeployer 下載連接,如下內容中 shell> 表示命令行提示符github

## 下載當前最新版軟件包
shell> wget https://github.com/datacharmer/dbdeployer/releases/download/v1.42.0/dbdeployer-1.42.0.osx.tar.gz

## 軟件解壓後實際只有一個單獨的編譯好的可執行文件
shell> tar xzvf dbdeployer-1.42.0.osx.tar.gz

## 將解壓的軟件拷貝至系統可執行目錄下方便使用
shell> chmod +x dbdeployer-1.42.0.osx
shell> mv dbdeployer-1.42.0.osx /usr/local/bin/dbdeployer

## 驗證是否安裝成功
shell> dbdeployer --version
shell> dbdeployer --help

3、工具配置

該軟件默認使用當前用戶的 $HOME/.dbdeployer/config.json 做爲配置文件。該文件默認未生成,可以使用 dbdeployer defaults export path 命令導出一份並進行修改。如下我只修改配置文件中的 sandbox-binary 參數,將該目錄指定爲自定義的 $HOME/sandboxes/mysql_basesql

## 建立 MySQL 軟件包及解壓後的軟件目錄
shell> mkdir -p ~/sandboxes/{mysql_package,mysql_base}

## 將默認配置中 sandbox-binary 參數修改成已建立的目錄路徑
## 該部分也可以使用 dbdeployer defaults export /Users/yuzhenxing/.dbdeployer/config.json 先將配置文件導出,再 vim 手工編輯修改
shell> dbdeployer defaults update sandbox-binary $HOME/sandboxes/mysql_base

## 查看已修改的配置信息
## 配置中包含各種 MySQL 的初始化信息,可根據實際狀況靈活調整
shell> dbdeployer defaults show
# Configuration file: /Users/yuzhenxing/.dbdeployer/config.json
{
     "version": "1.39.0",
     "sandbox-home": "$HOME/sandboxes",
     "sandbox-binary": "$HOME/sandboxes/mysql_base",
     "use-sandbox-catalog": true,
     "log-sb-operations": false,
     "log-directory": "/Users/yuzhenxing/sandboxes/logs",
     "cookbook-directory": "recipes",
     "shell-path": "/bin/bash",
     "master-slave-base-port": 11000,
     "group-replication-base-port": 12000,
     "group-replication-sp-base-port": 13000,
     "fan-in-replication-base-port": 14000,
     "all-masters-replication-base-port": 15000,
     "multiple-base-port": 16000,
     "pxc-base-port": 18000,
     "ndb-base-port": 19000,
     "ndb-cluster-port": 20000,
     "group-port-delta": 125,
     "mysqlx-port-delta": 10000,
     "admin-port-delta": 11000,
     "master-name": "master",
     "master-abbr": "m",
     "node-prefix": "node",
     "slave-prefix": "slave",
     "slave-abbr": "s",
     "sandbox-prefix": "msb_",
     "imported-sandbox-prefix": "imp_msb_",
     "master-slave-prefix": "rsandbox_",
     "group-prefix": "group_msb_",
     "group-sp-prefix": "group_sp_msb_",
     "multiple-prefix": "multi_msb_",
     "fan-in-prefix": "fan_in_msb_",
     "all-masters-prefix": "all_masters_msb_",
     "reserved-ports": [
         1186,
         3306,
         33060,
         33062
     ],
     "remote-repository": "https://raw.githubusercontent.com/datacharmer/mysql-docker-minimal/master/dbdata",
     "remote-index-file": "available.json",
     "remote-completion-url": "https://raw.githubusercontent.com/datacharmer/dbdeployer/master/docs/dbdeployer_completion.sh",
     "remote-tarball-url": "https://raw.githubusercontent.com/datacharmer/dbdeployer/master/downloads/tarball_list.json",
     "pxc-prefix": "pxc_msb_",
     "ndb-prefix": "ndb_msb_",
     "timestamp": "Thu Nov 21 15:58:56 CST 2019"
 }

4、基本使用

在使用以前咱們須要先下載好對應操做系統的 MySQL 軟件包,dbdeployer 軟件提供了下載 MySQL 軟件的管理命令,咱們可經過 dbdeployer 工具下載,也可自行下載 MySQL 軟件包,咱們將下載的軟件放置在以前已建立好的 ~/sandboxes/mysql_package 目錄下。如下以 MacOS 系統爲例,Linux 相似。docker

1. 使用 dbdeployer 下載 MySQL

## 查看dbdeployer工具支持下載的MySQL軟件包
shell> dbdeployer downloads list
Available tarballs  ()
                       name                            OS     version     flavor        size   minimal
--------------------------------------------------- -------- --------- ------------- -------- ---------
 tidb-master-darwin-amd64.tar.gz                     Darwin     3.0.0   tidb           26 MB
 mysql-5.7.26-macos10.14-x86_64.tar.gz               Darwin    5.7.26   mysql         337 MB
 mysql-8.0.16-macos10.14-x86_64.tar.gz               Darwin    8.0.16   mysql         153 MB
 mysql-8.0.15-macos10.14-x86_64.tar.gz               Darwin    8.0.15   mysql         139 MB
 mysql-5.7.25-macos10.14-x86_64.tar.gz               Darwin    5.7.25   mysql         337 MB
 mysql-5.6.41-macos10.13-x86_64.tar.gz               Darwin    5.6.41   mysql         176 MB
 mysql-5.5.53-osx10.9-x86_64.tar.gz                  Darwin    5.5.53   mysql         114 MB
 mysql-5.1.73-osx10.6-x86_64.tar.gz                  Darwin    5.1.73   mysql          82 MB
 mysql-5.0.96-osx10.5-x86_64.tar.gz                  Darwin    5.0.96   mysql          61 MB
 mysql-cluster-8.0.16-dmr-macos10.14-x86_64.tar.gz   Darwin    8.0.16   ndb           252 MB
 mysql-8.0.17-macos10.14-x86_64.tar.gz               Darwin    8.0.17   mysql         155 MB
 mysql-5.7.27-macos10.14-x86_64.tar.gz               Darwin    5.7.27   mysql         337 MB
 mysql-cluster-gpl-7.6.10-macos10.14-x86_64.tar.gz   Darwin    7.6.10   ndb           482 MB
 mysql-cluster-8.0.17-rc-macos10.14-x86_64.tar.gz    Darwin    8.0.17   ndb           255 MB
 mysql-cluster-gpl-7.6.11-macos10.14-x86_64.tar.gz   Darwin    7.6.11   ndb           482 MB
 mysql-shell-8.0.17-macos10.14-x86-64bit.tar.gz      Darwin    8.0.17   mysql-shell    17 MB
 mysql-5.7.28-macos10.14-x86_64.tar.gz               Darwin    5.7.28   mysql         374 MB
 mysql-8.0.18-macos10.14-x86_64.tar.gz               Darwin    8.0.18   mysql         166 MB

## 下載並解壓指定軟件包
shell> cd sandboxes/mysql_package

shell> dbdeployer downloads get-unpack mysql-8.0.17-macos10.14-x86_64.tar.gz

2. 自行下載 MySQL

訪問 https://downloads.mysql.com/a... 可下載各不一樣版本的 MySQLshell

## 下載並解壓MySQL軟件包
shell> cd sandboxes/mysql_package

shell> wget https://downloads.mysql.com/archives/get/file/mysql-8.0.17-macos10.14-x86_64.tar.gz

shell> dbdeployer unpack mysql-8.0.17-macos10.14-x86_64.tar.gz

3. 快速部署實例

如下示例簡單使用幾條命令實現各類不一樣架構的 MySQL 部署,詳細使用方式可查看文末 dbdeployer 文檔連接。數據庫

## 部署一個單節點的MySQL,開啓GTID並指定字符集
## GTID和字符等參數也可在部署完成後在MySQL配置文件中指定
## 注意:部署的數據庫默認自動運行,能夠指定--skip-start參數只初始化但不啓動
shell> dbdeployer deploy single 8.0.17 --gtid --my-cnf-options="character_set_server=utf8mb4"

## 部署一個主從複製MySQL(默認初始化3個節點,一主兩從)
shell> dbdeployer deploy replication 8.0.17 --repl-crash-safe --gtid --my-cnf-options="character_set_server=utf8mb4"

## 部署一個單主模式的MGR(默認初始化3個節點)
shell> dbdeployer deploy --topology=group replication 8.0.17 --single-primary

## 部署一個多主模式的MGR(默認初始化3個節點)
shell> dbdeployer deploy --topology=all-masters replication 8.0.17

4. 實例組操做

一鍵部署完成後會在 $HOME/sandboxes 目錄下生成各實例組對應的數據目錄,該目錄包含如下信息(部分信息)macos

  • 一鍵啓停該組全部實例的腳本
  • 一鍵登陸數據庫腳本
  • 一鍵重置該組全部實例的腳本(清除全部測試數據並從新初始化成全新的主從)
  • 主從實例的數據目錄(主庫爲 master,從庫分別爲 node一、node2 依次遞增)json

    • 各實例的配置文件
    • 默認用戶受權命令
    • 單獨啓停實例命令
    • binlog、relaylog 解析命令

使用示例

## 查看該組全部實例狀態
shell> cd ~/sandboxes/rsandbox_8_0_17
shell> ./status_all
REPLICATION  /Users/yuzhenxing/sandboxes/rsandbox_8_0_17
master : master on  -  port    20718 (20718)
node1 : node1 on  -  port    20719 (20719)
node2 : node2 on  -  port    20720 (20720)

## 一鍵重啓該組全部實例
shell> ./restart_all
stop /Users/yuzhenxing/sandboxes/rsandbox_8_0_17/master
stop /Users/yuzhenxing/sandboxes/rsandbox_8_0_17/node1
stop /Users/yuzhenxing/sandboxes/rsandbox_8_0_17/node2
executing 'start' on master
. sandbox server started
executing 'start' on slave 1
. sandbox server started
executing 'start' on slave 2
. sandbox server started

## 單獨重啓該組某一實例
shell> cd ~/sandboxes/rsandbox_8_0_17/master
shell> ./restart

## 登陸指定實例
shell> ./use

5、dbdeployer 經常使用管理命令

如下是使用 dbdeployer 過程當中總結的經常使用命令,詳細使用方式可查看文末 dbdeployer 文檔連接。

## 查看 dbdeployer 支持的各種數據庫版本及版本特性(輸出信息過長或過多,已省略輸出結果)
shell> dbdeployer admin capabilities
shell> dbdeployer admin capabilities percona
shell> dbdeployer admin capabilities mysql


## 使用 dbdeployer 查看指定版本 MySQL 的基本信息
shell> dbdeployer downloads get-by-version 5.7 --newest --dry-run

Name:          mysql-5.7.28-macos10.14-x86_64.tar.gz
Short version: 5.7
Version:       5.7.28
Flavor:        mysql
OS:            Darwin
URL:           https://dev.mysql.com/get/Downloads/MySQL-5.7/mysql-5.7.28-macos10.14-x86_64.tar.gz
Checksum:      MD5: 00c2cabb06d8573b5b52d3dd1576731e
Size:          374 MB

## 查看當前已安裝的全部 MySQL 基本信息
## 包括架構類型、版本、端口等等(輸出信息過長或過多,已省略輸出結果)
shell> dbdeployer sandboxes --full-info

## 查看各組 MySQL 的運行狀況
shell> dbdeployer global status
MULTIPLE  /Users/yuzhenxing/sandboxes/all_masters_msb_8_0_17
node1 : node1 on  -  port    23818 (23818)
node2 : node2 on  -  port    23819 (23819)
node3 : node3 on  -  port    23820 (23820)

MULTIPLE  /Users/yuzhenxing/sandboxes/group_sp_msb_8_0_17
node1 : node1 off  -   (22718)
node2 : node2 off  -   (22719)
node3 : node3 off  -   (22720)

## 批量中止全部運行的 MySQL (輸出信息過長或過多,已省略輸出結果)
shell> dbdeployer global stop

## 刪除已部署的 MySQL 實例
## 如正在運行則會先中止,後清除實例相關目錄
shell> dbdeployer delete msb_8_0_17

## 可對實例加鎖,防止誤刪除
## dbdeployer sandboxes --full-info 命令可查的到哪組實例已加鎖
shell> dbdeployer admin lock group_sp_msb_8_0_17
shell> dbdeployer delete group_sp_msb_8_0_17
shell> dbdeployer admin unlock group_sp_msb_8_0_17
shell> dbdeployer sandboxes --full-info

其餘更多的 dbdeployer 使用和管理命令,可執行 dbdeployer 或dbdeployer --help 進行查看,更詳盡的使用方式和使用示例可查看文末的 dbdeployer 官方手冊連接。

6、相關連接

相關文章
相關標籤/搜索