Technology sharing | how to use dbdeployer to quickly build MySQL test environment

Time:2020-1-14

Author: Yu Zhenxing

1、 Tool introduction

Dbdeployer is a very powerful deployment tool for database test environment, which can deploy different architectures and versions of database environment with one click.
For example: MySQL master-slave replication, gtid mode replication, MySQL group replication (single master mode, multi master mode, etc.)
The complete database type support and version can be installed afterdbdeployerAfter usedbdeployer admin capabilitiesThe following is the currently supported database and component types

  • Oracle MySQL
  • Percona MySQL
  • MariaDB
  • TiDB
  • MySQL NDB Cluster
  • Percona XtraDB Cluster
  • mysql-shell

This paper mainly introduces how to quickly build MySQL test environment based on dbdeployer and how to use dbdeployer. The complete functional features and usage can be found in the dbdeployer documentation manual. The dbdeployer documentation manual describes the features and various usage of the tool in detail. You can see the relevant links at the end of the article.

2、 Tool installation

This paper takes the deployment under MacOS as an example, and the installation and deployment of Linux platform are basically similar(Windows version is not available for this tool), accessible

https://github.com/datacharme…

Get the latest version of dbdeployer download link, in the following contentshell>Represents a command line prompt

##Download the latest package
shell> wget https://github.com/datacharmer/dbdeployer/releases/download/v1.42.0/dbdeployer-1.42.0.osx.tar.gz

##After the software is decompressed, there is only a single compiled executable file
shell> tar xzvf dbdeployer-1.42.0.osx.tar.gz

##Copy the extracted software to the system executable directory for easy use
shell> chmod +x dbdeployer-1.42.0.osx
shell> mv dbdeployer-1.42.0.osx /usr/local/bin/dbdeployer

##Verify installation succeeded
shell> dbdeployer --version
shell> dbdeployer --help

3、 Tool configuration

The software defaults to the current user’s$HOME/.dbdeployer/config.jsonAs a profile. The file is not generated by default and can be useddbdeployer defaults export pathOrder to export a copy and make changes. I will only modify thesandbox-binaryParameter to specify the directory as a custom$HOME/sandboxes/mysql_base

##Creating MySQL package and decompressed software directory
shell> mkdir -p ~/sandboxes/{mysql_package,mysql_base}

##Change the sandbox binary parameter in the default configuration to the created directory path
##In this part, you can also use dbdeployer defaults export / users / yuzhenxing /. Dbdeployer / config.json to export the configuration file first, and then VIM to edit and modify it manually
shell> dbdeployer defaults update sandbox-binary $HOME/sandboxes/mysql_base

##View modified configuration information
##The configuration contains initialization information of all kinds of MySQL, which can be adjusted flexibly according to the actual situation
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、 Basic use

Before using, we need to download the MySQL software package of the corresponding operating system. The dbdeployer software provides the management command to download MySQL software. We can download it through the dbdeployer tool or download the MySQL software package ourselves. We will place the downloaded software in the previously created one~/sandboxes/mysql_packageUnder the directory. Take MacOS system as an example, Linux is similar.

1. Download MySQL using dbdeployer

##View the MySQL package that dbdeployer tool supports downloading
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

##Download and unzip the specified package
shell> cd sandboxes/mysql_package

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

2. Download MySQL by yourself

Visit https://downloads.mysql.com/a… To download different versions of MySQL

##Download and unzip MySQL package
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. Rapid deployment instance

The following example simply uses several commands to implement MySQL deployment of various architectures. For detailed usage, see the dbdeployer document link at the end of the article.

##Deploy a single node mysql, open gtid and specify character set
##Parameters such as gtid and character can also be specified in MySQL configuration file after deployment
##Note: the deployed database runs automatically by default. You can specify the -- skip start parameter to initialize but not start
shell> dbdeployer deploy single 8.0.17 --gtid --my-cnf-options="character_set_server=utf8mb4"

##Deploy a master-slave replication MySQL (initialize 3 nodes by default, one master and two slaves)
shell> dbdeployer deploy replication 8.0.17 --repl-crash-safe --gtid --my-cnf-options="character_set_server=utf8mb4"

##Deploy a single master Mgr (initialize 3 nodes by default)
shell> dbdeployer deploy --topology=group replication 8.0.17 --single-primary

##Deploy a multi master Mgr (initialize 3 nodes by default)
shell> dbdeployer deploy --topology=all-masters replication 8.0.17

4. Instance group operation

Once the one click deployment is completed, the$HOME/sandboxesThe data directory corresponding to each instance group is generated under the directory, which contains the following information (partial information)

  • One click start stop script for all instances of this group
  • One click login database script
  • One click Reset script for all instances of the group (clear all test data and re initialize to a new master-slave)
  • The data directory of the master-slave instance (the master database is the master database, and the slave databases are node1 and node2, respectively)

    • Profile of each instance
    • Default user authorization command
    • Individual start stop instance command
    • Binlog and relaylog parsing commands

Use example

##View the status of all instances of this group
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)

##One click restart all instances of the group
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

##Restart an instance of the group separately
shell> cd ~/sandboxes/rsandbox_8_0_17/master
shell> ./restart

##Log in to the specified instance
shell> ./use

5、 Dbdeployer common management commands

The following are the common commands summarized in the process of using dbdeployer. See the dbdeployer document link at the end of the article for details.

##View various database versions and version features supported by dbdeployer (the output information is too long or too much, and the output result has been omitted)
shell> dbdeployer admin capabilities
shell> dbdeployer admin capabilities percona
shell> dbdeployer admin capabilities mysql


##Use dbdeployer to view the basic information of the specified version of 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

##View all MySQL basic information currently installed
##Including schema type, version, port, etc. (output information is too long or too much, output result has been omitted)
shell> dbdeployer sandboxes --full-info

##View the operation of MySQL in each group
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)

##Batch stop all running MySQL (output information is too long or too much, output result has been omitted)
shell> dbdeployer global stop

##Delete the deployed MySQL instance
##If it is running, it will stop first, and then clear the instance related directory
shell> dbdeployer delete msb_8_0_17

##The instance can be locked to prevent deletion by mistake
##Dbdeployer sandboxes -- full info command to find out which group of instances are locked
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

Other more dbdeployer use and management commands can be viewed by executing dbdeployer or dbdeployer — help. For more detailed usage and examples, see the official dbdeployer manual link at the end of this article.

6、 Related links

  • Official Manual of dbdeployer

    • https://github.com/datacharme…
  • Download links of MySQL historical versions

    • https://downloads.mysql.com/a…
  • Functional features of dbdeployer

    • https://github.com/datacharme…