SlideShare a Scribd company logo
Giuseppe Maxia

Software explorer
Test complex database systems in a
laptop with dbdeployer
Who's this guy?
About me
‣ Giuseppe Maxia, a.k.a. "The Data Charmer"
‣ Software Explorer at VMware
‣ Several decades development and DB
experience
‣ Long timer MySQL community member.
‣ Blog: http://datacharmer.blogspot.com
‣ Twitter: @datacharmer
!2
Disclaimer
•None of what I say has
anything to do with my
company.

•I also don’t work for Oracle.
2006-2017: MySQL-Sandbox
• https://github.com/datacharmer/mysql-sandbox

• A cool utility to install many MySQL servers in user space.

• MySQL application of the year 2013

• A Perl package.

• Somehow difficult to install.

• Hard to run when the target system does not have Perl...

• Syntax evolved over years (since 2006!), and it's kinda messy.
!4
I had a dream
improve
MySQL-Sandbox
!5
I had a dream
rewrite
MySQL-Sandbox
in Python!
in Ruby!
in C++
in Java!
just
joking
in Go!
Actually, why not?
in Javascript!
not even
for a
second
!6
introducing
dbdeployer
MySQL-Sandbox (re)written in Go
!7
Why not Perl (6), Python,
Ruby, C++?
• Lost patience waiting for Perl 6 ...

• Tired of wrestling sys admins about Python 2.6/7 vs. 3.x ...

• Ruby has magically disappeared ...

• I still love C++, but I it has the same problem as the above ones:

• Burden of build/installation is on users!
Libraries dependencies are hell to solve
Why Go?
• Burden of build is on the developer.

• Users need only to download the executable.

• No dependencies (except a system able to run MySQL)

• Fast development

• Incredible wealth of public libraries for everything.

• Amazing community.
!9
dbdeployer
• Command line tool

• No dependencies (single binary per O.S.)

• Interface similar to git, docker

• Fast!

• Runs single database, replication, group replication,
multiple deployments, multi-source replication.

• Integrated help

• Easy to extend.
https://github.com/datacharmer/dbdeployer
What can it do? (1)
• Install a single MySQL sandbox

• Separated from any existing MySQL server

• Completely in user space

• Reasonably isolated

• Easy to use and administer
What can it do? (2)
• Install a group of sandboxes

• Isolated from each other

• Without any relationship

• With binary logging active
What can it do? (3)
• Install a master-slave replication cluster

• 1 master and 2 (or more) slaves

• Replication enabled

• Optional GTID

• Easy tools to run operations on all nodes at once
What can it do? (4)
• Install a group replication cluster (MySQL 5.7 and 8.0)

• 3 (or more) nodes

• Single-primary or multi-primary

• Group replication configured and enabled

• Easy tools to run operations on all nodes at once
What can it do? (5)
• Install a multi-source replication cluster (MySQL 5.7-8.0)

• 3 (or more) nodes

• fan-in or all-masters topologies

• Easy tools to run operations on all nodes at once
What can it do? (6)
• Administer sandboxes

• List available binaries

• List installed sandboxes

• start, restart (with options), stop

• check status

• test

• delete
What can it do? (7)
• Customize sandboxes

• Customizable initialization and database start

• Provide templates for every script

• Allow on-the-fly and permanent template replacement

• Change most of the default values

• Make sandboxes permanent (= can't be deleted)
What can it do? (8)
• Find free ports automatically

• Test replication flow

• Expose MySQL 8 dictionary tables

• Use semi-synch replication

• Run SQL command before and after loading grants

• enable/disable X-protocol
Installation
1. Go to https://github.com/datacharmer/dbdeployer

2. Find releases

3. Download the binary for your O.S.

4. Put it in a directory within your $PATH
5. Run it!
Test complex database systems in your laptop with dbdeployer
Test complex database systems in your laptop with dbdeployer
Using it
1. Download a MySQL binary tarball

2. Use dbdeployer to expand it

3. start creating sandboxes
Choose your download
Choose your download
Principles
https://dev.mysql.com/downloads/mysql/get a MySQL
binary tarball
1
mysql-5.7.22-yourOS.tar.gz
dbdeployer unpack2
$HOME/opt/mysql/5.7.22
dbdeployer deploy single3
$HOME/sandboxes/msb_5_7_22
dbdeployer deploy multiple3
$HOME/sandboxes/multi_msb_5_7_22
operations:
unpack once, use forever
$ dbdeployer unpack 
mysql-8.0.11-linux-glibc2.12-x86_64.tar.gz
Unpacking tarball mysql-8.0.11-linux-glibc2.12-
x86_64.tar.gz to $HOME/opt/mysql/8.0.11
$ dbdeployer available
8.0.11
$ dbdeployer deploy single 8.0.11
Database installed in $HOME/sandboxes/msb_8_0_11
dbdeployer help
$ dbdeployer --help
dbdeployer makes MySQL server installation an easy task.
Runs single, multiple, and replicated sandboxes.
Usage:
dbdeployer [command]
Available Commands:
admin sandbox management tasks
defaults tasks related to dbdeployer defaults
delete delete an installed sandbox
deploy deploy sandboxes
global Runs a given command in every sandbox
help Help about any command
sandboxes List installed sandboxes
unpack unpack a tarball into the binary directory
usage Shows usage of installed sandboxes
versions List available versions
unpack
$ dbdeployer unpack -h
If you want to create a sandbox from a tarball, you first need to
unpack it into the sandbox-binary directory. This command carries out
that task, so that afterwards you can call 'deploy single', 'deploy
multiple', and 'deploy replication' commands with only the MySQL
version for that tarball.
If the version is not contained in the tarball name, it should be
supplied using --unpack-version.
If there is already an expanded tarball with the same version, a new
one can be differentiated with --prefix.
Usage:
dbdeployer unpack MySQL-tarball [flags]
Flags:
--prefix string Prefix for the final expanded directory
--unpack-version string which version is contained in the
tarball
--verbosity int Level of verbosity during unpack (0-2)
deploy
$ dbdeployer deploy -h
Deploys single, multiple, or replicated
sandboxes
Usage:
dbdeployer deploy [command]
Available Commands:
multiple create multiple sandbox
replication create replication sandbox
single deploys a single sandbox
deploy flags (1)
Flags: (cont.)
--base-port int Overrides default base-port (for multiple
sandboxes)
--binary-version string Specifies the version for basedir directory
--bind-address string defines the database bind-address ("127.0.0.1")
--concurrent Runs multiple sandbox deployments concurrently
--custom-mysqld string Uses an alternative mysqld
-p, --db-password string database password (default "msandbox")
-u, --db-user string database user (default "msandbox")
--defaults strings Change defaults on-the-fly (--defaults=label:value)
--disable-mysqlx Disable MySQLX plugin (8.0.11+)
--enable-general-log Enables general log for the sandbox (MySQL 5.1+)
--enable-mysqlx Enables MySQLX plugin (5.7.12+)
--expose-dd-tables In MySQL 8.0+ shows data dictionary tables
--force Overwrite destination sandbox
--gtid enables GTID
--init-general-log uses general log during initialization (MySQL 5.1+)
-i, --init-options strings mysqld options to run during initialization
--keep-server-uuid Does not change the server UUID
--my-cnf-file string Alternative source file for my.sandbox.cnf
-c, --my-cnf-options strings mysqld options to add to my.sandbox.cnf
deploy flags (2)
Flags:
--native-auth-plugin in 8.0.4+, uses the native auth plugin
--port int Overrides default port
--post-grants-sql strings SQL queries after loading grants
--post-grants-sql-file string SQL file after loading grants
--pre-grants-sql strings SQL queries before loading grants
--pre-grants-sql-file string SQL file to run before loading grants
--remote-access string defines the database access ("127.%")
--rpl-password string replication password ("rsandbox")
--rpl-user string replication user ("rsandbox")
--sandbox-directory string Changes the default sandbox directory
--skip-load-grants Does not load the grants
--skip-report-host Does not include report host
--skip-report-port Does not include report port
--skip-start Does not start the database server
--use-template strings [template_name:file_name] Replace
existing template with one from file
deploy single
$ dbdeployer deploy single -h
single installs a sandbox and creates useful scripts for its use.
MySQL-Version is in the format x.x.xx, and it refers to a
directory named after the version
containing an unpacked tarball. The place where these directories
are found is defined by
--sandbox-binary (default: $HOME/opt/mysql.)
For example:
dbdeployer deploy single 5.7.21
For this command to work, there must be a directory $HOME/opt/
mysql/5.7.21, containing
the binary files from mysql-5.7.21-$YOUR_OS-x86_64.tar.gz
Use the "unpack" command to get the tarball into the right
directory.
Usage:
dbdeployer deploy single MySQL-Version [flags]
deploy multiple
$ dbdeployer deploy multiple -h
Creates several sandboxes of the same version, without any
replication relationship.
For this command to work, there must be a directory $HOME/opt/
mysql/5.7.21, containing the binary files from mysql-5.7.21-
$YOUR_OS-x86_64.tar.gz
Use the "unpack" command to get the tarball into the right
directory.
Usage:
dbdeployer deploy multiple MySQL-Version [flags]
Examples:
$ dbdeployer deploy multiple 5.7.21
Flags:
-n, --nodes int How many nodes will be installed (default 3)
deploy replication (1)
$ dbdeployer deploy replication -h
The replication command allows you to deploy several nodes
in replication.
Allowed topologies are "master-slave" for all versions,
and "group", "all-masters", "fan-in"
for 5.7.17+.
For this command to work, there must be a directory $HOME/
opt/mysql/5.7.21, containing
the binary files from mysql-5.7.21-$YOUR_OS-x86_64.tar.gz
Use the "unpack" command to get the tarball into the right
directory.
Usage:
dbdeployer deploy replication MySQL-Version [flags]
deploy replication (2)
$ dbdeployer deploy replication -h
Examples:
$ dbdeployer deploy replication 5.7.21
# (implies topology = master-slave)
$ dbdeployer deploy --topology=master-slave replication 5.7.21
# (explicitly setting topology)
$ dbdeployer deploy replication --topology=group 5.7.21
$ dbdeployer deploy replication --topology=group 8.0.4 
--single-primary
$ dbdeployer deploy --topology=all-masters replication 5.7.21
$ dbdeployer deploy --topology=fan-in replication 5.7.21
deploy replication (3)
Flags:
--master-ip string Which IP the slaves will
connect to ("127.0.0.1")
--master-list string Which nodes are masters in
a multi-source deployment ("1,2")
-n, --nodes int How many nodes (3)
--semi-sync Use semi-synchronous
--single-primary Using single primary
--slave-list string Which nodes are slaves in
a multi-source deployment (default "3")
-t, --topology string Which topology will be
installed
usage (single)
"./start", "./status", "./restart", and "./stop" do what their name
suggests.
start and restart accept parameters that are eventually passed to the
server.
e.g.:
./start --server-id=1001
./restart --event-scheduler=disabled
"./use" calls the command line client with the appropriate parameters,
Example:
./use -BN -e "select @@server_id"
./use -u root
"./clear" stops the server and removes everything from the data directory,
letting you ready to start from scratch. (Warning! It's irreversible!)
... and more
usage (multiple)
On a replication sandbox, you have the same commands (run
"dbdeployer usage single"),
with an "_all" suffix, meaning that you propagate the command
to all the members.
Then you have "./m" as a shortcut to use the master, "./s1"
and "./s2" to access the slaves (and "s3", "s4" ... if you
define more).
In group sandboxes without a master slave relationship (group
replication and multiple sandboxes) the nodes can be accessed
by ./n1, ./n2, ./n3, and so on.
start_all / status_all / restart_all / stop_all / use_all
clear_all / m / s1 / s2 / n1 / n2
The scripts "check_slaves" or "check_nodes" give the status
of replication in the sandbox.
... and more
Remote sandboxes
(since version 1.16.0)
$ dbdeployer remote list
Files available in https://
raw.githubusercontent.com/datacharmer/mysql-
docker-minimal/master/dbdata/available.json
5.7 -> [5.7.24 5.7.25]
8.0 -> [8.0.12 8.0.13]
4.1 -> [4.1.22]
5.0 -> [5.0.15 5.0.96]
5.1 -> [5.1.72]
5.5 -> [5.5.61 5.5.62]
5.6 -> [5.6.41 5.6.43]
$ dbdeployer remote get 8.0.13
File $HOME/your_path/8.0.13.tar.xz downloaded
Remote sandboxes
• Oracle will publish a repository of minimal tarballs

• SOON
• (Or so they said one year ago)
• Please all: remind MySQL Team at Oracle to do that

• Twitter @mysql “Where are the reduced tarballs?”

• Cc @lefred
LIVE DEMO
`
dbdeployer uses semantic versioning (https://semver.org)

Current version: 1.17.1
Version
component
When does it change? example
major
Backward Incompatible API changes.

(Including new features)
1.21.3 => 2.0.0
minor
Backward compatible API changes.

Backward compatible new features
1.21.3 => 1.22.0
revision
Bug fixes. 

Code refactoring. 

No API changes
1.21.3 => 1.21.4
Next steps
• Possible enhancements:
• Install sandbox from remote tarball (Just did it!)

• Unpack command to slim down tarball contents

• Install Docker containers as if they were sandboxes
(working on it!)
Parting thoughts
• dbdeployer is open source (Apache license)

• Contributions are welcome!
https://github.com/datacharmer/dbdeployer
Q&A
https://www.dbdeployer.com

More Related Content

PDF
Dbdeployer, the universal installer
PDF
Test like a_boss
PDF
MySQL NDB 8.0 clusters in your laptop with dbdeployer
PDF
Dbdeployer
PDF
Containers > VMs
PDF
Deploying VMware vCloud Hybrid Service with Puppet - PuppetConf 2013
PDF
Apache Cassandra and Go
PDF
OpenStack LA meetup Feb 18, 2015
Dbdeployer, the universal installer
Test like a_boss
MySQL NDB 8.0 clusters in your laptop with dbdeployer
Dbdeployer
Containers > VMs
Deploying VMware vCloud Hybrid Service with Puppet - PuppetConf 2013
Apache Cassandra and Go
OpenStack LA meetup Feb 18, 2015

What's hot (20)

PPTX
How (not) to kill your MySQL infrastructure
PPTX
Building Windows Images with Packer
PPTX
Powershell dcpp
PDF
Introduction of mesos persistent storage
PDF
Happy Browser, Happy User! WordSesh 2019
PDF
Composer Tools & Frameworks for Drupal
PDF
OpenNebulaConf2015 2.02 Backing up your VM’s with Bacula - Alberto García
PDF
Enhancing OpenShift Security for Business Critical Deployments
PDF
Cialug August 2021
PDF
Passwordless login with unix auth_socket
PDF
Building and deploying a distributed application with Docker, Mesos and Marathon
PPT
On MongoDB backup
PPTX
What I learned from FluentConf and then some
PPTX
PPTX
Ansible MySQL MHA
PPTX
Introduction To Apache Mesos
PPTX
An Ensemble Core with Docker - Solving a Real Pain in the PaaS
PDF
Docker security 101 (CfgMgmtCamp 2019)
PPTX
Ceph-Mesos framework
PDF
Cobbler, Func and Puppet: Tools for Large Scale Environments
How (not) to kill your MySQL infrastructure
Building Windows Images with Packer
Powershell dcpp
Introduction of mesos persistent storage
Happy Browser, Happy User! WordSesh 2019
Composer Tools & Frameworks for Drupal
OpenNebulaConf2015 2.02 Backing up your VM’s with Bacula - Alberto García
Enhancing OpenShift Security for Business Critical Deployments
Cialug August 2021
Passwordless login with unix auth_socket
Building and deploying a distributed application with Docker, Mesos and Marathon
On MongoDB backup
What I learned from FluentConf and then some
Ansible MySQL MHA
Introduction To Apache Mesos
An Ensemble Core with Docker - Solving a Real Pain in the PaaS
Docker security 101 (CfgMgmtCamp 2019)
Ceph-Mesos framework
Cobbler, Func and Puppet: Tools for Large Scale Environments
Ad

Similar to Test complex database systems in your laptop with dbdeployer (20)

PPTX
Devoxx France 2015 - The Docker Orchestration Ecosystem on Azure
PPTX
Docker San Francisco Meetup April 2015 - The Docker Orchestration Ecosystem o...
PDF
Docker dDessi november 2015
PPTX
WordPress Development Environments
PDF
Postgre sql linuxcontainers by Jignesh Shah
PPTX
Build MySQL virtual enviroment
PPTX
Docker Seattle Meetup April 2015 - The Docker Orchestration Ecosystem on Azure
PPTX
PostgreSQL and Linux Containers
PDF
Package your Java EE Application using Docker and Kubernetes
PDF
Postgres the hardway
PPTX
Docker New York Meetup May 2015 - The Docker Orchestration Ecosystem on Azure
PDF
MySQL Sandbox 3
PDF
Docker 1.9 Workshop
PPTX
BDM32: AdamCloud Project - Part II
PPT
Linux containers and docker
PDF
Road to Opscon (Pisa '15) - DevOoops
PDF
Cassandra and Docker Lessons Learned
PDF
Continuous Delivery with Maven, Puppet and Tomcat - ApacheCon NA 2013
KEY
20100425 Configuration Management With Puppet Lfnw
PDF
Gianluca Varisco - DevOoops (Increase awareness around DevOps infra security)
Devoxx France 2015 - The Docker Orchestration Ecosystem on Azure
Docker San Francisco Meetup April 2015 - The Docker Orchestration Ecosystem o...
Docker dDessi november 2015
WordPress Development Environments
Postgre sql linuxcontainers by Jignesh Shah
Build MySQL virtual enviroment
Docker Seattle Meetup April 2015 - The Docker Orchestration Ecosystem on Azure
PostgreSQL and Linux Containers
Package your Java EE Application using Docker and Kubernetes
Postgres the hardway
Docker New York Meetup May 2015 - The Docker Orchestration Ecosystem on Azure
MySQL Sandbox 3
Docker 1.9 Workshop
BDM32: AdamCloud Project - Part II
Linux containers and docker
Road to Opscon (Pisa '15) - DevOoops
Cassandra and Docker Lessons Learned
Continuous Delivery with Maven, Puppet and Tomcat - ApacheCon NA 2013
20100425 Configuration Management With Puppet Lfnw
Gianluca Varisco - DevOoops (Increase awareness around DevOps infra security)
Ad

More from Giuseppe Maxia (20)

PDF
Dbdeployer
PDF
A quick tour of Mysql 8 roles
PDF
MySQL document_store
PDF
Replication skeptic
PDF
Synchronise your data between MySQL and MongoDB
PDF
Juggle your data with Tungsten Replicator
PDF
MySQL in your laptop
PDF
Script it
PDF
Tungsten Replicator tutorial
PDF
Preventing multi master conflicts with tungsten
PDF
MySQL high availability power and usability
PDF
Solving MySQL replication problems with Tungsten
PDF
State of the art of MySQL replication and clustering
PDF
Testing mysql creatively in a sandbox
PDF
Mysql 5.5 and 5.6 replication
PDF
Lightning talks percona live mysql_2012
PDF
Replication 101
PDF
Testing early mysql releases in a sandbox
PDF
Testing mysql creatively in a sandbox
PDF
Building simple and complex clusters with tungsten replicator
Dbdeployer
A quick tour of Mysql 8 roles
MySQL document_store
Replication skeptic
Synchronise your data between MySQL and MongoDB
Juggle your data with Tungsten Replicator
MySQL in your laptop
Script it
Tungsten Replicator tutorial
Preventing multi master conflicts with tungsten
MySQL high availability power and usability
Solving MySQL replication problems with Tungsten
State of the art of MySQL replication and clustering
Testing mysql creatively in a sandbox
Mysql 5.5 and 5.6 replication
Lightning talks percona live mysql_2012
Replication 101
Testing early mysql releases in a sandbox
Testing mysql creatively in a sandbox
Building simple and complex clusters with tungsten replicator

Recently uploaded (20)

PPTX
20250228 LYD VKU AI Blended-Learning.pptx
PDF
Agricultural_Statistics_at_a_Glance_2022_0.pdf
PDF
Network Security Unit 5.pdf for BCA BBA.
PPTX
MYSQL Presentation for SQL database connectivity
PPT
Teaching material agriculture food technology
PDF
The Rise and Fall of 3GPP – Time for a Sabbatical?
PDF
Assigned Numbers - 2025 - Bluetooth® Document
PDF
Per capita expenditure prediction using model stacking based on satellite ima...
PDF
Advanced methodologies resolving dimensionality complications for autism neur...
PDF
Empathic Computing: Creating Shared Understanding
PDF
gpt5_lecture_notes_comprehensive_20250812015547.pdf
PPT
“AI and Expert System Decision Support & Business Intelligence Systems”
PPTX
sap open course for s4hana steps from ECC to s4
PDF
Reach Out and Touch Someone: Haptics and Empathic Computing
PDF
A comparative analysis of optical character recognition models for extracting...
PDF
Diabetes mellitus diagnosis method based random forest with bat algorithm
PPTX
A Presentation on Artificial Intelligence
PPTX
Programs and apps: productivity, graphics, security and other tools
PPTX
Machine Learning_overview_presentation.pptx
PPTX
ACSFv1EN-58255 AWS Academy Cloud Security Foundations.pptx
20250228 LYD VKU AI Blended-Learning.pptx
Agricultural_Statistics_at_a_Glance_2022_0.pdf
Network Security Unit 5.pdf for BCA BBA.
MYSQL Presentation for SQL database connectivity
Teaching material agriculture food technology
The Rise and Fall of 3GPP – Time for a Sabbatical?
Assigned Numbers - 2025 - Bluetooth® Document
Per capita expenditure prediction using model stacking based on satellite ima...
Advanced methodologies resolving dimensionality complications for autism neur...
Empathic Computing: Creating Shared Understanding
gpt5_lecture_notes_comprehensive_20250812015547.pdf
“AI and Expert System Decision Support & Business Intelligence Systems”
sap open course for s4hana steps from ECC to s4
Reach Out and Touch Someone: Haptics and Empathic Computing
A comparative analysis of optical character recognition models for extracting...
Diabetes mellitus diagnosis method based random forest with bat algorithm
A Presentation on Artificial Intelligence
Programs and apps: productivity, graphics, security and other tools
Machine Learning_overview_presentation.pptx
ACSFv1EN-58255 AWS Academy Cloud Security Foundations.pptx

Test complex database systems in your laptop with dbdeployer

  • 1. Giuseppe Maxia Software explorer Test complex database systems in a laptop with dbdeployer
  • 2. Who's this guy? About me ‣ Giuseppe Maxia, a.k.a. "The Data Charmer" ‣ Software Explorer at VMware ‣ Several decades development and DB experience ‣ Long timer MySQL community member. ‣ Blog: http://datacharmer.blogspot.com ‣ Twitter: @datacharmer !2
  • 3. Disclaimer •None of what I say has anything to do with my company. •I also don’t work for Oracle.
  • 4. 2006-2017: MySQL-Sandbox • https://github.com/datacharmer/mysql-sandbox • A cool utility to install many MySQL servers in user space. • MySQL application of the year 2013 • A Perl package. • Somehow difficult to install. • Hard to run when the target system does not have Perl... • Syntax evolved over years (since 2006!), and it's kinda messy. !4
  • 5. I had a dream improve MySQL-Sandbox !5
  • 6. I had a dream rewrite MySQL-Sandbox in Python! in Ruby! in C++ in Java! just joking in Go! Actually, why not? in Javascript! not even for a second !6
  • 8. Why not Perl (6), Python, Ruby, C++? • Lost patience waiting for Perl 6 ... • Tired of wrestling sys admins about Python 2.6/7 vs. 3.x ... • Ruby has magically disappeared ... • I still love C++, but I it has the same problem as the above ones: • Burden of build/installation is on users! Libraries dependencies are hell to solve
  • 9. Why Go? • Burden of build is on the developer. • Users need only to download the executable. • No dependencies (except a system able to run MySQL) • Fast development • Incredible wealth of public libraries for everything. • Amazing community. !9
  • 10. dbdeployer • Command line tool • No dependencies (single binary per O.S.) • Interface similar to git, docker • Fast! • Runs single database, replication, group replication, multiple deployments, multi-source replication. • Integrated help • Easy to extend. https://github.com/datacharmer/dbdeployer
  • 11. What can it do? (1) • Install a single MySQL sandbox • Separated from any existing MySQL server • Completely in user space • Reasonably isolated • Easy to use and administer
  • 12. What can it do? (2) • Install a group of sandboxes • Isolated from each other • Without any relationship • With binary logging active
  • 13. What can it do? (3) • Install a master-slave replication cluster • 1 master and 2 (or more) slaves • Replication enabled • Optional GTID • Easy tools to run operations on all nodes at once
  • 14. What can it do? (4) • Install a group replication cluster (MySQL 5.7 and 8.0) • 3 (or more) nodes • Single-primary or multi-primary • Group replication configured and enabled • Easy tools to run operations on all nodes at once
  • 15. What can it do? (5) • Install a multi-source replication cluster (MySQL 5.7-8.0) • 3 (or more) nodes • fan-in or all-masters topologies • Easy tools to run operations on all nodes at once
  • 16. What can it do? (6) • Administer sandboxes • List available binaries • List installed sandboxes • start, restart (with options), stop • check status • test • delete
  • 17. What can it do? (7) • Customize sandboxes • Customizable initialization and database start • Provide templates for every script • Allow on-the-fly and permanent template replacement • Change most of the default values • Make sandboxes permanent (= can't be deleted)
  • 18. What can it do? (8) • Find free ports automatically • Test replication flow • Expose MySQL 8 dictionary tables • Use semi-synch replication • Run SQL command before and after loading grants • enable/disable X-protocol
  • 19. Installation 1. Go to https://github.com/datacharmer/dbdeployer 2. Find releases 3. Download the binary for your O.S. 4. Put it in a directory within your $PATH 5. Run it!
  • 22. Using it 1. Download a MySQL binary tarball 2. Use dbdeployer to expand it 3. start creating sandboxes
  • 25. Principles https://dev.mysql.com/downloads/mysql/get a MySQL binary tarball 1 mysql-5.7.22-yourOS.tar.gz dbdeployer unpack2 $HOME/opt/mysql/5.7.22 dbdeployer deploy single3 $HOME/sandboxes/msb_5_7_22 dbdeployer deploy multiple3 $HOME/sandboxes/multi_msb_5_7_22
  • 26. operations: unpack once, use forever $ dbdeployer unpack mysql-8.0.11-linux-glibc2.12-x86_64.tar.gz Unpacking tarball mysql-8.0.11-linux-glibc2.12- x86_64.tar.gz to $HOME/opt/mysql/8.0.11 $ dbdeployer available 8.0.11 $ dbdeployer deploy single 8.0.11 Database installed in $HOME/sandboxes/msb_8_0_11
  • 27. dbdeployer help $ dbdeployer --help dbdeployer makes MySQL server installation an easy task. Runs single, multiple, and replicated sandboxes. Usage: dbdeployer [command] Available Commands: admin sandbox management tasks defaults tasks related to dbdeployer defaults delete delete an installed sandbox deploy deploy sandboxes global Runs a given command in every sandbox help Help about any command sandboxes List installed sandboxes unpack unpack a tarball into the binary directory usage Shows usage of installed sandboxes versions List available versions
  • 28. unpack $ dbdeployer unpack -h If you want to create a sandbox from a tarball, you first need to unpack it into the sandbox-binary directory. This command carries out that task, so that afterwards you can call 'deploy single', 'deploy multiple', and 'deploy replication' commands with only the MySQL version for that tarball. If the version is not contained in the tarball name, it should be supplied using --unpack-version. If there is already an expanded tarball with the same version, a new one can be differentiated with --prefix. Usage: dbdeployer unpack MySQL-tarball [flags] Flags: --prefix string Prefix for the final expanded directory --unpack-version string which version is contained in the tarball --verbosity int Level of verbosity during unpack (0-2)
  • 29. deploy $ dbdeployer deploy -h Deploys single, multiple, or replicated sandboxes Usage: dbdeployer deploy [command] Available Commands: multiple create multiple sandbox replication create replication sandbox single deploys a single sandbox
  • 30. deploy flags (1) Flags: (cont.) --base-port int Overrides default base-port (for multiple sandboxes) --binary-version string Specifies the version for basedir directory --bind-address string defines the database bind-address ("127.0.0.1") --concurrent Runs multiple sandbox deployments concurrently --custom-mysqld string Uses an alternative mysqld -p, --db-password string database password (default "msandbox") -u, --db-user string database user (default "msandbox") --defaults strings Change defaults on-the-fly (--defaults=label:value) --disable-mysqlx Disable MySQLX plugin (8.0.11+) --enable-general-log Enables general log for the sandbox (MySQL 5.1+) --enable-mysqlx Enables MySQLX plugin (5.7.12+) --expose-dd-tables In MySQL 8.0+ shows data dictionary tables --force Overwrite destination sandbox --gtid enables GTID --init-general-log uses general log during initialization (MySQL 5.1+) -i, --init-options strings mysqld options to run during initialization --keep-server-uuid Does not change the server UUID --my-cnf-file string Alternative source file for my.sandbox.cnf -c, --my-cnf-options strings mysqld options to add to my.sandbox.cnf
  • 31. deploy flags (2) Flags: --native-auth-plugin in 8.0.4+, uses the native auth plugin --port int Overrides default port --post-grants-sql strings SQL queries after loading grants --post-grants-sql-file string SQL file after loading grants --pre-grants-sql strings SQL queries before loading grants --pre-grants-sql-file string SQL file to run before loading grants --remote-access string defines the database access ("127.%") --rpl-password string replication password ("rsandbox") --rpl-user string replication user ("rsandbox") --sandbox-directory string Changes the default sandbox directory --skip-load-grants Does not load the grants --skip-report-host Does not include report host --skip-report-port Does not include report port --skip-start Does not start the database server --use-template strings [template_name:file_name] Replace existing template with one from file
  • 32. deploy single $ dbdeployer deploy single -h single installs a sandbox and creates useful scripts for its use. MySQL-Version is in the format x.x.xx, and it refers to a directory named after the version containing an unpacked tarball. The place where these directories are found is defined by --sandbox-binary (default: $HOME/opt/mysql.) For example: dbdeployer deploy single 5.7.21 For this command to work, there must be a directory $HOME/opt/ mysql/5.7.21, containing the binary files from mysql-5.7.21-$YOUR_OS-x86_64.tar.gz Use the "unpack" command to get the tarball into the right directory. Usage: dbdeployer deploy single MySQL-Version [flags]
  • 33. deploy multiple $ dbdeployer deploy multiple -h Creates several sandboxes of the same version, without any replication relationship. For this command to work, there must be a directory $HOME/opt/ mysql/5.7.21, containing the binary files from mysql-5.7.21- $YOUR_OS-x86_64.tar.gz Use the "unpack" command to get the tarball into the right directory. Usage: dbdeployer deploy multiple MySQL-Version [flags] Examples: $ dbdeployer deploy multiple 5.7.21 Flags: -n, --nodes int How many nodes will be installed (default 3)
  • 34. deploy replication (1) $ dbdeployer deploy replication -h The replication command allows you to deploy several nodes in replication. Allowed topologies are "master-slave" for all versions, and "group", "all-masters", "fan-in" for 5.7.17+. For this command to work, there must be a directory $HOME/ opt/mysql/5.7.21, containing the binary files from mysql-5.7.21-$YOUR_OS-x86_64.tar.gz Use the "unpack" command to get the tarball into the right directory. Usage: dbdeployer deploy replication MySQL-Version [flags]
  • 35. deploy replication (2) $ dbdeployer deploy replication -h Examples: $ dbdeployer deploy replication 5.7.21 # (implies topology = master-slave) $ dbdeployer deploy --topology=master-slave replication 5.7.21 # (explicitly setting topology) $ dbdeployer deploy replication --topology=group 5.7.21 $ dbdeployer deploy replication --topology=group 8.0.4 --single-primary $ dbdeployer deploy --topology=all-masters replication 5.7.21 $ dbdeployer deploy --topology=fan-in replication 5.7.21
  • 36. deploy replication (3) Flags: --master-ip string Which IP the slaves will connect to ("127.0.0.1") --master-list string Which nodes are masters in a multi-source deployment ("1,2") -n, --nodes int How many nodes (3) --semi-sync Use semi-synchronous --single-primary Using single primary --slave-list string Which nodes are slaves in a multi-source deployment (default "3") -t, --topology string Which topology will be installed
  • 37. usage (single) "./start", "./status", "./restart", and "./stop" do what their name suggests. start and restart accept parameters that are eventually passed to the server. e.g.: ./start --server-id=1001 ./restart --event-scheduler=disabled "./use" calls the command line client with the appropriate parameters, Example: ./use -BN -e "select @@server_id" ./use -u root "./clear" stops the server and removes everything from the data directory, letting you ready to start from scratch. (Warning! It's irreversible!) ... and more
  • 38. usage (multiple) On a replication sandbox, you have the same commands (run "dbdeployer usage single"), with an "_all" suffix, meaning that you propagate the command to all the members. Then you have "./m" as a shortcut to use the master, "./s1" and "./s2" to access the slaves (and "s3", "s4" ... if you define more). In group sandboxes without a master slave relationship (group replication and multiple sandboxes) the nodes can be accessed by ./n1, ./n2, ./n3, and so on. start_all / status_all / restart_all / stop_all / use_all clear_all / m / s1 / s2 / n1 / n2 The scripts "check_slaves" or "check_nodes" give the status of replication in the sandbox. ... and more
  • 39. Remote sandboxes (since version 1.16.0) $ dbdeployer remote list Files available in https:// raw.githubusercontent.com/datacharmer/mysql- docker-minimal/master/dbdata/available.json 5.7 -> [5.7.24 5.7.25] 8.0 -> [8.0.12 8.0.13] 4.1 -> [4.1.22] 5.0 -> [5.0.15 5.0.96] 5.1 -> [5.1.72] 5.5 -> [5.5.61 5.5.62] 5.6 -> [5.6.41 5.6.43] $ dbdeployer remote get 8.0.13 File $HOME/your_path/8.0.13.tar.xz downloaded
  • 40. Remote sandboxes • Oracle will publish a repository of minimal tarballs • SOON • (Or so they said one year ago) • Please all: remind MySQL Team at Oracle to do that • Twitter @mysql “Where are the reduced tarballs?” • Cc @lefred
  • 42. ` dbdeployer uses semantic versioning (https://semver.org) Current version: 1.17.1 Version component When does it change? example major Backward Incompatible API changes. (Including new features) 1.21.3 => 2.0.0 minor Backward compatible API changes. Backward compatible new features 1.21.3 => 1.22.0 revision Bug fixes. Code refactoring. No API changes 1.21.3 => 1.21.4
  • 43. Next steps • Possible enhancements: • Install sandbox from remote tarball (Just did it!) • Unpack command to slim down tarball contents • Install Docker containers as if they were sandboxes (working on it!)
  • 44. Parting thoughts • dbdeployer is open source (Apache license) • Contributions are welcome! https://github.com/datacharmer/dbdeployer