SlideShare a Scribd company logo
Giuseppe Maxia

Software explorer
dbdeployer
the future of MySQL sandboxes
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!
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
• Single sandbox deployment

• unpack command

• multiple sandboxes

• master-slave replication

• "force" flag

• pre-post grants SQL action

• initialization options

• my.cnf options

• custom my.cnf
• friendly UUID generation

• global commands

• test replication flow

• delete command

• show data dictionary tables

• lock/unlock sandboxes

• finding free ports

• semi-sync replication

• load plugins
What both dbdeployer
and MySQL-Sandbox can do
• group replication Single Primary

• group replication Multi Primary

• prevent port collision

• visible initialization

• visible script templates

• replaceable templates

• configurable defaults

• command line completion

• list of source binaries
• list of installed sandboxes

• test script per sandbox

• integrated usage help

• custom abbreviations

• version flag

• sandboxes global catalog

• concurrent deployment

• fan-in

• all-masters
What dbdeployer can do
that MySQL-Sandbox can't
LIVE DEMO
`
dbdeployer uses semantic versioning (https://semver.org)

Current version: 1.6.0
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 (?)

• unpack command to slim down tarball contents
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

What's hot

Bare Metal to OpenStack with Razor and Chef
Bare Metal to OpenStack with Razor and ChefBare Metal to OpenStack with Razor and Chef
Bare Metal to OpenStack with Razor and Chef
Matt Ray
 
Puppet
PuppetPuppet
Puppet
csrocks
 
The state of the swarm
The state of the swarmThe state of the swarm
The state of the swarm
Mathieu Buffenoir
 
MySQL Oslayer performace optimization
MySQL  Oslayer performace optimizationMySQL  Oslayer performace optimization
MySQL Oslayer performace optimization
Louis liu
 
Squid proxy-configuration-guide
Squid proxy-configuration-guideSquid proxy-configuration-guide
Squid proxy-configuration-guidejasembo
 
Micro Datacenter & Data Warehouse
Micro Datacenter & Data WarehouseMicro Datacenter & Data Warehouse
Micro Datacenter & Data Warehouse
mdcdwh
 
Automating complex infrastructures with Puppet
Automating complex infrastructures with PuppetAutomating complex infrastructures with Puppet
Automating complex infrastructures with Puppet
Kris Buytaert
 
Using cobbler in a not so small environment 1.77
Using cobbler in a not so small environment 1.77Using cobbler in a not so small environment 1.77
Using cobbler in a not so small environment 1.77
chhorn
 
Powershell dcpp
Powershell dcppPowershell dcpp
Powershell dcpp
artisriva
 
Ceph-Mesos framework
Ceph-Mesos frameworkCeph-Mesos framework
Ceph-Mesos framework
Zhongyue Luo
 
Cobbler, Func and Puppet: Tools for Large Scale Environments
Cobbler, Func and Puppet: Tools for Large Scale EnvironmentsCobbler, Func and Puppet: Tools for Large Scale Environments
Cobbler, Func and Puppet: Tools for Large Scale Environments
ViSenze - Artificial Intelligence for the Visual Web
 
Managing PostgreSQL with Ansible - FOSDEM PGDay 2016
Managing PostgreSQL with Ansible - FOSDEM PGDay 2016Managing PostgreSQL with Ansible - FOSDEM PGDay 2016
Managing PostgreSQL with Ansible - FOSDEM PGDay 2016
Gulcin Yildirim Jelinek
 
Passwordless login with unix auth_socket
Passwordless login with unix auth_socketPasswordless login with unix auth_socket
Passwordless login with unix auth_socket
Otto Kekäläinen
 
Hands on Virtualization with Ganeti (part 1) - LinuxCon 2012
Hands on Virtualization with Ganeti (part 1)  - LinuxCon 2012Hands on Virtualization with Ganeti (part 1)  - LinuxCon 2012
Hands on Virtualization with Ganeti (part 1) - LinuxCon 2012
Lance Albertson
 
Introduction to Mesos
Introduction to MesosIntroduction to Mesos
Introduction to Mesoskoboltmarky
 
Docker on openstack by OpenSource Consulting
Docker on openstack by OpenSource ConsultingDocker on openstack by OpenSource Consulting
Docker on openstack by OpenSource Consulting
Open Source Consulting
 
Configure, Debug and Install OpenStack Trove
Configure, Debug and Install OpenStack TroveConfigure, Debug and Install OpenStack Trove
Configure, Debug and Install OpenStack Trove
Rama Krishna B
 
How to operate containerized OpenStack
How to operate containerized OpenStackHow to operate containerized OpenStack
How to operate containerized OpenStack
Nalee Jang
 
Building Windows Images with Packer
Building Windows Images with PackerBuilding Windows Images with Packer
Building Windows Images with Packer
Matt Wrock
 
OpenNebulaConf2015 2.02 Backing up your VM’s with Bacula - Alberto García
OpenNebulaConf2015 2.02 Backing up your VM’s with Bacula - Alberto GarcíaOpenNebulaConf2015 2.02 Backing up your VM’s with Bacula - Alberto García
OpenNebulaConf2015 2.02 Backing up your VM’s with Bacula - Alberto García
OpenNebula Project
 

What's hot (20)

Bare Metal to OpenStack with Razor and Chef
Bare Metal to OpenStack with Razor and ChefBare Metal to OpenStack with Razor and Chef
Bare Metal to OpenStack with Razor and Chef
 
Puppet
PuppetPuppet
Puppet
 
The state of the swarm
The state of the swarmThe state of the swarm
The state of the swarm
 
MySQL Oslayer performace optimization
MySQL  Oslayer performace optimizationMySQL  Oslayer performace optimization
MySQL Oslayer performace optimization
 
Squid proxy-configuration-guide
Squid proxy-configuration-guideSquid proxy-configuration-guide
Squid proxy-configuration-guide
 
Micro Datacenter & Data Warehouse
Micro Datacenter & Data WarehouseMicro Datacenter & Data Warehouse
Micro Datacenter & Data Warehouse
 
Automating complex infrastructures with Puppet
Automating complex infrastructures with PuppetAutomating complex infrastructures with Puppet
Automating complex infrastructures with Puppet
 
Using cobbler in a not so small environment 1.77
Using cobbler in a not so small environment 1.77Using cobbler in a not so small environment 1.77
Using cobbler in a not so small environment 1.77
 
Powershell dcpp
Powershell dcppPowershell dcpp
Powershell dcpp
 
Ceph-Mesos framework
Ceph-Mesos frameworkCeph-Mesos framework
Ceph-Mesos framework
 
Cobbler, Func and Puppet: Tools for Large Scale Environments
Cobbler, Func and Puppet: Tools for Large Scale EnvironmentsCobbler, Func and Puppet: Tools for Large Scale Environments
Cobbler, Func and Puppet: Tools for Large Scale Environments
 
Managing PostgreSQL with Ansible - FOSDEM PGDay 2016
Managing PostgreSQL with Ansible - FOSDEM PGDay 2016Managing PostgreSQL with Ansible - FOSDEM PGDay 2016
Managing PostgreSQL with Ansible - FOSDEM PGDay 2016
 
Passwordless login with unix auth_socket
Passwordless login with unix auth_socketPasswordless login with unix auth_socket
Passwordless login with unix auth_socket
 
Hands on Virtualization with Ganeti (part 1) - LinuxCon 2012
Hands on Virtualization with Ganeti (part 1)  - LinuxCon 2012Hands on Virtualization with Ganeti (part 1)  - LinuxCon 2012
Hands on Virtualization with Ganeti (part 1) - LinuxCon 2012
 
Introduction to Mesos
Introduction to MesosIntroduction to Mesos
Introduction to Mesos
 
Docker on openstack by OpenSource Consulting
Docker on openstack by OpenSource ConsultingDocker on openstack by OpenSource Consulting
Docker on openstack by OpenSource Consulting
 
Configure, Debug and Install OpenStack Trove
Configure, Debug and Install OpenStack TroveConfigure, Debug and Install OpenStack Trove
Configure, Debug and Install OpenStack Trove
 
How to operate containerized OpenStack
How to operate containerized OpenStackHow to operate containerized OpenStack
How to operate containerized OpenStack
 
Building Windows Images with Packer
Building Windows Images with PackerBuilding Windows Images with Packer
Building Windows Images with Packer
 
OpenNebulaConf2015 2.02 Backing up your VM’s with Bacula - Alberto García
OpenNebulaConf2015 2.02 Backing up your VM’s with Bacula - Alberto GarcíaOpenNebulaConf2015 2.02 Backing up your VM’s with Bacula - Alberto García
OpenNebulaConf2015 2.02 Backing up your VM’s with Bacula - Alberto García
 

Similar to Dbdeployer

Devoxx France 2015 - The Docker Orchestration Ecosystem on Azure
Devoxx France 2015 - The Docker Orchestration Ecosystem on AzureDevoxx France 2015 - The Docker Orchestration Ecosystem on Azure
Devoxx France 2015 - The Docker Orchestration Ecosystem on Azure
Patrick Chanezon
 
Docker San Francisco Meetup April 2015 - The Docker Orchestration Ecosystem o...
Docker San Francisco Meetup April 2015 - The Docker Orchestration Ecosystem o...Docker San Francisco Meetup April 2015 - The Docker Orchestration Ecosystem o...
Docker San Francisco Meetup April 2015 - The Docker Orchestration Ecosystem o...
Patrick Chanezon
 
Build MySQL virtual enviroment
Build MySQL virtual enviromentBuild MySQL virtual enviroment
Build MySQL virtual enviroment
Taras Vasylyuk
 
Postgre sql linuxcontainers by Jignesh Shah
Postgre sql linuxcontainers by Jignesh ShahPostgre sql linuxcontainers by Jignesh Shah
Postgre sql linuxcontainers by Jignesh Shah
PivotalOpenSourceHub
 
Docker Seattle Meetup April 2015 - The Docker Orchestration Ecosystem on Azure
Docker Seattle Meetup April 2015 - The Docker Orchestration Ecosystem on AzureDocker Seattle Meetup April 2015 - The Docker Orchestration Ecosystem on Azure
Docker Seattle Meetup April 2015 - The Docker Orchestration Ecosystem on Azure
Patrick Chanezon
 
Postgres the hardway
Postgres the hardwayPostgres the hardway
Postgres the hardway
Dave Pitts
 
PostgreSQL and Linux Containers
PostgreSQL and Linux ContainersPostgreSQL and Linux Containers
PostgreSQL and Linux Containers
Jignesh Shah
 
MySQL Sandbox 3
MySQL Sandbox 3MySQL Sandbox 3
MySQL Sandbox 3
Giuseppe Maxia
 
Docker New York Meetup May 2015 - The Docker Orchestration Ecosystem on Azure
Docker New York Meetup May 2015 - The Docker Orchestration Ecosystem on Azure Docker New York Meetup May 2015 - The Docker Orchestration Ecosystem on Azure
Docker New York Meetup May 2015 - The Docker Orchestration Ecosystem on Azure
Patrick Chanezon
 
Docker dDessi november 2015
Docker dDessi november 2015Docker dDessi november 2015
Docker dDessi november 2015
Massimiliano Dessì
 
Package your Java EE Application using Docker and Kubernetes
Package your Java EE Application using Docker and KubernetesPackage your Java EE Application using Docker and Kubernetes
Package your Java EE Application using Docker and Kubernetes
Arun Gupta
 
WordPress Development Environments
WordPress Development Environments WordPress Development Environments
WordPress Development Environments
Ohad Raz
 
BDM32: AdamCloud Project - Part II
BDM32: AdamCloud Project - Part IIBDM32: AdamCloud Project - Part II
BDM32: AdamCloud Project - Part II
David Lauzon
 
Docker 1.9 Workshop
Docker 1.9 WorkshopDocker 1.9 Workshop
Docker 1.9 Workshop
{code}
 
Continuous Delivery with Maven, Puppet and Tomcat - ApacheCon NA 2013
Continuous Delivery with Maven, Puppet and Tomcat - ApacheCon NA 2013Continuous Delivery with Maven, Puppet and Tomcat - ApacheCon NA 2013
Continuous Delivery with Maven, Puppet and Tomcat - ApacheCon NA 2013
Carlos Sanchez
 
Cassandra and Docker Lessons Learned
Cassandra and Docker Lessons LearnedCassandra and Docker Lessons Learned
Cassandra and Docker Lessons Learned
DataStax Academy
 
Setting up a MySQL Docker Container
Setting up a MySQL Docker ContainerSetting up a MySQL Docker Container
Setting up a MySQL Docker Container
Victor S. Recio
 
Binary Packaging for HPC with Spack
Binary Packaging for HPC with SpackBinary Packaging for HPC with Spack
Binary Packaging for HPC with Spack
inside-BigData.com
 
Linux containers & Devops
Linux containers & DevopsLinux containers & Devops
Linux containers & Devops
Maciej Lasyk
 
The State of Rootless Containers
The State of Rootless ContainersThe State of Rootless Containers
The State of Rootless Containers
Akihiro Suda
 

Similar to Dbdeployer (20)

Devoxx France 2015 - The Docker Orchestration Ecosystem on Azure
Devoxx France 2015 - The Docker Orchestration Ecosystem on AzureDevoxx France 2015 - The Docker Orchestration Ecosystem on Azure
Devoxx France 2015 - The Docker Orchestration Ecosystem on Azure
 
Docker San Francisco Meetup April 2015 - The Docker Orchestration Ecosystem o...
Docker San Francisco Meetup April 2015 - The Docker Orchestration Ecosystem o...Docker San Francisco Meetup April 2015 - The Docker Orchestration Ecosystem o...
Docker San Francisco Meetup April 2015 - The Docker Orchestration Ecosystem o...
 
Build MySQL virtual enviroment
Build MySQL virtual enviromentBuild MySQL virtual enviroment
Build MySQL virtual enviroment
 
Postgre sql linuxcontainers by Jignesh Shah
Postgre sql linuxcontainers by Jignesh ShahPostgre sql linuxcontainers by Jignesh Shah
Postgre sql linuxcontainers by Jignesh Shah
 
Docker Seattle Meetup April 2015 - The Docker Orchestration Ecosystem on Azure
Docker Seattle Meetup April 2015 - The Docker Orchestration Ecosystem on AzureDocker Seattle Meetup April 2015 - The Docker Orchestration Ecosystem on Azure
Docker Seattle Meetup April 2015 - The Docker Orchestration Ecosystem on Azure
 
Postgres the hardway
Postgres the hardwayPostgres the hardway
Postgres the hardway
 
PostgreSQL and Linux Containers
PostgreSQL and Linux ContainersPostgreSQL and Linux Containers
PostgreSQL and Linux Containers
 
MySQL Sandbox 3
MySQL Sandbox 3MySQL Sandbox 3
MySQL Sandbox 3
 
Docker New York Meetup May 2015 - The Docker Orchestration Ecosystem on Azure
Docker New York Meetup May 2015 - The Docker Orchestration Ecosystem on Azure Docker New York Meetup May 2015 - The Docker Orchestration Ecosystem on Azure
Docker New York Meetup May 2015 - The Docker Orchestration Ecosystem on Azure
 
Docker dDessi november 2015
Docker dDessi november 2015Docker dDessi november 2015
Docker dDessi november 2015
 
Package your Java EE Application using Docker and Kubernetes
Package your Java EE Application using Docker and KubernetesPackage your Java EE Application using Docker and Kubernetes
Package your Java EE Application using Docker and Kubernetes
 
WordPress Development Environments
WordPress Development Environments WordPress Development Environments
WordPress Development Environments
 
BDM32: AdamCloud Project - Part II
BDM32: AdamCloud Project - Part IIBDM32: AdamCloud Project - Part II
BDM32: AdamCloud Project - Part II
 
Docker 1.9 Workshop
Docker 1.9 WorkshopDocker 1.9 Workshop
Docker 1.9 Workshop
 
Continuous Delivery with Maven, Puppet and Tomcat - ApacheCon NA 2013
Continuous Delivery with Maven, Puppet and Tomcat - ApacheCon NA 2013Continuous Delivery with Maven, Puppet and Tomcat - ApacheCon NA 2013
Continuous Delivery with Maven, Puppet and Tomcat - ApacheCon NA 2013
 
Cassandra and Docker Lessons Learned
Cassandra and Docker Lessons LearnedCassandra and Docker Lessons Learned
Cassandra and Docker Lessons Learned
 
Setting up a MySQL Docker Container
Setting up a MySQL Docker ContainerSetting up a MySQL Docker Container
Setting up a MySQL Docker Container
 
Binary Packaging for HPC with Spack
Binary Packaging for HPC with SpackBinary Packaging for HPC with Spack
Binary Packaging for HPC with Spack
 
Linux containers & Devops
Linux containers & DevopsLinux containers & Devops
Linux containers & Devops
 
The State of Rootless Containers
The State of Rootless ContainersThe State of Rootless Containers
The State of Rootless Containers
 

More from Giuseppe Maxia

Dbdeployer
DbdeployerDbdeployer
Dbdeployer
Giuseppe Maxia
 
A quick tour of Mysql 8 roles
A quick tour of Mysql 8 rolesA quick tour of Mysql 8 roles
A quick tour of Mysql 8 roles
Giuseppe Maxia
 
MySQL document_store
MySQL document_storeMySQL document_store
MySQL document_store
Giuseppe Maxia
 
Replication skeptic
Replication skepticReplication skeptic
Replication skeptic
Giuseppe Maxia
 
Synchronise your data between MySQL and MongoDB
Synchronise your data between MySQL and MongoDBSynchronise your data between MySQL and MongoDB
Synchronise your data between MySQL and MongoDB
Giuseppe Maxia
 
Juggle your data with Tungsten Replicator
Juggle your data with Tungsten ReplicatorJuggle your data with Tungsten Replicator
Juggle your data with Tungsten Replicator
Giuseppe Maxia
 
MySQL in your laptop
MySQL in your laptopMySQL in your laptop
MySQL in your laptop
Giuseppe Maxia
 
Script it
Script itScript it
Script it
Giuseppe Maxia
 
Tungsten Replicator tutorial
Tungsten Replicator tutorialTungsten Replicator tutorial
Tungsten Replicator tutorial
Giuseppe Maxia
 
Preventing multi master conflicts with tungsten
Preventing multi master conflicts with tungstenPreventing multi master conflicts with tungsten
Preventing multi master conflicts with tungsten
Giuseppe Maxia
 
MySQL high availability power and usability
MySQL high availability power and usabilityMySQL high availability power and usability
MySQL high availability power and usability
Giuseppe Maxia
 
Solving MySQL replication problems with Tungsten
Solving MySQL replication problems with TungstenSolving MySQL replication problems with Tungsten
Solving MySQL replication problems with Tungsten
Giuseppe Maxia
 
State of the art of MySQL replication and clustering
State of the art of MySQL replication and clusteringState of the art of MySQL replication and clustering
State of the art of MySQL replication and clustering
Giuseppe Maxia
 
Testing mysql creatively in a sandbox
Testing mysql creatively in a sandboxTesting mysql creatively in a sandbox
Testing mysql creatively in a sandbox
Giuseppe Maxia
 
Mysql 5.5 and 5.6 replication
Mysql 5.5 and 5.6 replicationMysql 5.5 and 5.6 replication
Mysql 5.5 and 5.6 replication
Giuseppe Maxia
 
Lightning talks percona live mysql_2012
Lightning talks percona live mysql_2012Lightning talks percona live mysql_2012
Lightning talks percona live mysql_2012
Giuseppe Maxia
 
Replication 101
Replication 101Replication 101
Replication 101
Giuseppe Maxia
 
Testing early mysql releases in a sandbox
Testing early mysql releases in a sandboxTesting early mysql releases in a sandbox
Testing early mysql releases in a sandbox
Giuseppe Maxia
 
Testing mysql creatively in a sandbox
Testing mysql creatively in a sandboxTesting mysql creatively in a sandbox
Testing mysql creatively in a sandbox
Giuseppe Maxia
 
Building simple and complex clusters with tungsten replicator
Building simple and complex clusters with tungsten replicatorBuilding simple and complex clusters with tungsten replicator
Building simple and complex clusters with tungsten replicator
Giuseppe Maxia
 

More from Giuseppe Maxia (20)

Dbdeployer
DbdeployerDbdeployer
Dbdeployer
 
A quick tour of Mysql 8 roles
A quick tour of Mysql 8 rolesA quick tour of Mysql 8 roles
A quick tour of Mysql 8 roles
 
MySQL document_store
MySQL document_storeMySQL document_store
MySQL document_store
 
Replication skeptic
Replication skepticReplication skeptic
Replication skeptic
 
Synchronise your data between MySQL and MongoDB
Synchronise your data between MySQL and MongoDBSynchronise your data between MySQL and MongoDB
Synchronise your data between MySQL and MongoDB
 
Juggle your data with Tungsten Replicator
Juggle your data with Tungsten ReplicatorJuggle your data with Tungsten Replicator
Juggle your data with Tungsten Replicator
 
MySQL in your laptop
MySQL in your laptopMySQL in your laptop
MySQL in your laptop
 
Script it
Script itScript it
Script it
 
Tungsten Replicator tutorial
Tungsten Replicator tutorialTungsten Replicator tutorial
Tungsten Replicator tutorial
 
Preventing multi master conflicts with tungsten
Preventing multi master conflicts with tungstenPreventing multi master conflicts with tungsten
Preventing multi master conflicts with tungsten
 
MySQL high availability power and usability
MySQL high availability power and usabilityMySQL high availability power and usability
MySQL high availability power and usability
 
Solving MySQL replication problems with Tungsten
Solving MySQL replication problems with TungstenSolving MySQL replication problems with Tungsten
Solving MySQL replication problems with Tungsten
 
State of the art of MySQL replication and clustering
State of the art of MySQL replication and clusteringState of the art of MySQL replication and clustering
State of the art of MySQL replication and clustering
 
Testing mysql creatively in a sandbox
Testing mysql creatively in a sandboxTesting mysql creatively in a sandbox
Testing mysql creatively in a sandbox
 
Mysql 5.5 and 5.6 replication
Mysql 5.5 and 5.6 replicationMysql 5.5 and 5.6 replication
Mysql 5.5 and 5.6 replication
 
Lightning talks percona live mysql_2012
Lightning talks percona live mysql_2012Lightning talks percona live mysql_2012
Lightning talks percona live mysql_2012
 
Replication 101
Replication 101Replication 101
Replication 101
 
Testing early mysql releases in a sandbox
Testing early mysql releases in a sandboxTesting early mysql releases in a sandbox
Testing early mysql releases in a sandbox
 
Testing mysql creatively in a sandbox
Testing mysql creatively in a sandboxTesting mysql creatively in a sandbox
Testing mysql creatively in a sandbox
 
Building simple and complex clusters with tungsten replicator
Building simple and complex clusters with tungsten replicatorBuilding simple and complex clusters with tungsten replicator
Building simple and complex clusters with tungsten replicator
 

Recently uploaded

Accelerate your Kubernetes clusters with Varnish Caching
Accelerate your Kubernetes clusters with Varnish CachingAccelerate your Kubernetes clusters with Varnish Caching
Accelerate your Kubernetes clusters with Varnish Caching
Thijs Feryn
 
UiPath Test Automation using UiPath Test Suite series, part 3
UiPath Test Automation using UiPath Test Suite series, part 3UiPath Test Automation using UiPath Test Suite series, part 3
UiPath Test Automation using UiPath Test Suite series, part 3
DianaGray10
 
Builder.ai Founder Sachin Dev Duggal's Strategic Approach to Create an Innova...
Builder.ai Founder Sachin Dev Duggal's Strategic Approach to Create an Innova...Builder.ai Founder Sachin Dev Duggal's Strategic Approach to Create an Innova...
Builder.ai Founder Sachin Dev Duggal's Strategic Approach to Create an Innova...
Ramesh Iyer
 
From Daily Decisions to Bottom Line: Connecting Product Work to Revenue by VP...
From Daily Decisions to Bottom Line: Connecting Product Work to Revenue by VP...From Daily Decisions to Bottom Line: Connecting Product Work to Revenue by VP...
From Daily Decisions to Bottom Line: Connecting Product Work to Revenue by VP...
Product School
 
From Siloed Products to Connected Ecosystem: Building a Sustainable and Scala...
From Siloed Products to Connected Ecosystem: Building a Sustainable and Scala...From Siloed Products to Connected Ecosystem: Building a Sustainable and Scala...
From Siloed Products to Connected Ecosystem: Building a Sustainable and Scala...
Product School
 
GDG Cloud Southlake #33: Boule & Rebala: Effective AppSec in SDLC using Deplo...
GDG Cloud Southlake #33: Boule & Rebala: Effective AppSec in SDLC using Deplo...GDG Cloud Southlake #33: Boule & Rebala: Effective AppSec in SDLC using Deplo...
GDG Cloud Southlake #33: Boule & Rebala: Effective AppSec in SDLC using Deplo...
James Anderson
 
De-mystifying Zero to One: Design Informed Techniques for Greenfield Innovati...
De-mystifying Zero to One: Design Informed Techniques for Greenfield Innovati...De-mystifying Zero to One: Design Informed Techniques for Greenfield Innovati...
De-mystifying Zero to One: Design Informed Techniques for Greenfield Innovati...
Product School
 
The Art of the Pitch: WordPress Relationships and Sales
The Art of the Pitch: WordPress Relationships and SalesThe Art of the Pitch: WordPress Relationships and Sales
The Art of the Pitch: WordPress Relationships and Sales
Laura Byrne
 
Leading Change strategies and insights for effective change management pdf 1.pdf
Leading Change strategies and insights for effective change management pdf 1.pdfLeading Change strategies and insights for effective change management pdf 1.pdf
Leading Change strategies and insights for effective change management pdf 1.pdf
OnBoard
 
Neuro-symbolic is not enough, we need neuro-*semantic*
Neuro-symbolic is not enough, we need neuro-*semantic*Neuro-symbolic is not enough, we need neuro-*semantic*
Neuro-symbolic is not enough, we need neuro-*semantic*
Frank van Harmelen
 
Unsubscribed: Combat Subscription Fatigue With a Membership Mentality by Head...
Unsubscribed: Combat Subscription Fatigue With a Membership Mentality by Head...Unsubscribed: Combat Subscription Fatigue With a Membership Mentality by Head...
Unsubscribed: Combat Subscription Fatigue With a Membership Mentality by Head...
Product School
 
Dev Dives: Train smarter, not harder – active learning and UiPath LLMs for do...
Dev Dives: Train smarter, not harder – active learning and UiPath LLMs for do...Dev Dives: Train smarter, not harder – active learning and UiPath LLMs for do...
Dev Dives: Train smarter, not harder – active learning and UiPath LLMs for do...
UiPathCommunity
 
Generating a custom Ruby SDK for your web service or Rails API using Smithy
Generating a custom Ruby SDK for your web service or Rails API using SmithyGenerating a custom Ruby SDK for your web service or Rails API using Smithy
Generating a custom Ruby SDK for your web service or Rails API using Smithy
g2nightmarescribd
 
Kubernetes & AI - Beauty and the Beast !?! @KCD Istanbul 2024
Kubernetes & AI - Beauty and the Beast !?! @KCD Istanbul 2024Kubernetes & AI - Beauty and the Beast !?! @KCD Istanbul 2024
Kubernetes & AI - Beauty and the Beast !?! @KCD Istanbul 2024
Tobias Schneck
 
FIDO Alliance Osaka Seminar: Passkeys and the Road Ahead.pdf
FIDO Alliance Osaka Seminar: Passkeys and the Road Ahead.pdfFIDO Alliance Osaka Seminar: Passkeys and the Road Ahead.pdf
FIDO Alliance Osaka Seminar: Passkeys and the Road Ahead.pdf
FIDO Alliance
 
Software Delivery At the Speed of AI: Inflectra Invests In AI-Powered Quality
Software Delivery At the Speed of AI: Inflectra Invests In AI-Powered QualitySoftware Delivery At the Speed of AI: Inflectra Invests In AI-Powered Quality
Software Delivery At the Speed of AI: Inflectra Invests In AI-Powered Quality
Inflectra
 
GenAISummit 2024 May 28 Sri Ambati Keynote: AGI Belongs to The Community in O...
GenAISummit 2024 May 28 Sri Ambati Keynote: AGI Belongs to The Community in O...GenAISummit 2024 May 28 Sri Ambati Keynote: AGI Belongs to The Community in O...
GenAISummit 2024 May 28 Sri Ambati Keynote: AGI Belongs to The Community in O...
Sri Ambati
 
UiPath Test Automation using UiPath Test Suite series, part 4
UiPath Test Automation using UiPath Test Suite series, part 4UiPath Test Automation using UiPath Test Suite series, part 4
UiPath Test Automation using UiPath Test Suite series, part 4
DianaGray10
 
DevOps and Testing slides at DASA Connect
DevOps and Testing slides at DASA ConnectDevOps and Testing slides at DASA Connect
DevOps and Testing slides at DASA Connect
Kari Kakkonen
 
Elevating Tactical DDD Patterns Through Object Calisthenics
Elevating Tactical DDD Patterns Through Object CalisthenicsElevating Tactical DDD Patterns Through Object Calisthenics
Elevating Tactical DDD Patterns Through Object Calisthenics
Dorra BARTAGUIZ
 

Recently uploaded (20)

Accelerate your Kubernetes clusters with Varnish Caching
Accelerate your Kubernetes clusters with Varnish CachingAccelerate your Kubernetes clusters with Varnish Caching
Accelerate your Kubernetes clusters with Varnish Caching
 
UiPath Test Automation using UiPath Test Suite series, part 3
UiPath Test Automation using UiPath Test Suite series, part 3UiPath Test Automation using UiPath Test Suite series, part 3
UiPath Test Automation using UiPath Test Suite series, part 3
 
Builder.ai Founder Sachin Dev Duggal's Strategic Approach to Create an Innova...
Builder.ai Founder Sachin Dev Duggal's Strategic Approach to Create an Innova...Builder.ai Founder Sachin Dev Duggal's Strategic Approach to Create an Innova...
Builder.ai Founder Sachin Dev Duggal's Strategic Approach to Create an Innova...
 
From Daily Decisions to Bottom Line: Connecting Product Work to Revenue by VP...
From Daily Decisions to Bottom Line: Connecting Product Work to Revenue by VP...From Daily Decisions to Bottom Line: Connecting Product Work to Revenue by VP...
From Daily Decisions to Bottom Line: Connecting Product Work to Revenue by VP...
 
From Siloed Products to Connected Ecosystem: Building a Sustainable and Scala...
From Siloed Products to Connected Ecosystem: Building a Sustainable and Scala...From Siloed Products to Connected Ecosystem: Building a Sustainable and Scala...
From Siloed Products to Connected Ecosystem: Building a Sustainable and Scala...
 
GDG Cloud Southlake #33: Boule & Rebala: Effective AppSec in SDLC using Deplo...
GDG Cloud Southlake #33: Boule & Rebala: Effective AppSec in SDLC using Deplo...GDG Cloud Southlake #33: Boule & Rebala: Effective AppSec in SDLC using Deplo...
GDG Cloud Southlake #33: Boule & Rebala: Effective AppSec in SDLC using Deplo...
 
De-mystifying Zero to One: Design Informed Techniques for Greenfield Innovati...
De-mystifying Zero to One: Design Informed Techniques for Greenfield Innovati...De-mystifying Zero to One: Design Informed Techniques for Greenfield Innovati...
De-mystifying Zero to One: Design Informed Techniques for Greenfield Innovati...
 
The Art of the Pitch: WordPress Relationships and Sales
The Art of the Pitch: WordPress Relationships and SalesThe Art of the Pitch: WordPress Relationships and Sales
The Art of the Pitch: WordPress Relationships and Sales
 
Leading Change strategies and insights for effective change management pdf 1.pdf
Leading Change strategies and insights for effective change management pdf 1.pdfLeading Change strategies and insights for effective change management pdf 1.pdf
Leading Change strategies and insights for effective change management pdf 1.pdf
 
Neuro-symbolic is not enough, we need neuro-*semantic*
Neuro-symbolic is not enough, we need neuro-*semantic*Neuro-symbolic is not enough, we need neuro-*semantic*
Neuro-symbolic is not enough, we need neuro-*semantic*
 
Unsubscribed: Combat Subscription Fatigue With a Membership Mentality by Head...
Unsubscribed: Combat Subscription Fatigue With a Membership Mentality by Head...Unsubscribed: Combat Subscription Fatigue With a Membership Mentality by Head...
Unsubscribed: Combat Subscription Fatigue With a Membership Mentality by Head...
 
Dev Dives: Train smarter, not harder – active learning and UiPath LLMs for do...
Dev Dives: Train smarter, not harder – active learning and UiPath LLMs for do...Dev Dives: Train smarter, not harder – active learning and UiPath LLMs for do...
Dev Dives: Train smarter, not harder – active learning and UiPath LLMs for do...
 
Generating a custom Ruby SDK for your web service or Rails API using Smithy
Generating a custom Ruby SDK for your web service or Rails API using SmithyGenerating a custom Ruby SDK for your web service or Rails API using Smithy
Generating a custom Ruby SDK for your web service or Rails API using Smithy
 
Kubernetes & AI - Beauty and the Beast !?! @KCD Istanbul 2024
Kubernetes & AI - Beauty and the Beast !?! @KCD Istanbul 2024Kubernetes & AI - Beauty and the Beast !?! @KCD Istanbul 2024
Kubernetes & AI - Beauty and the Beast !?! @KCD Istanbul 2024
 
FIDO Alliance Osaka Seminar: Passkeys and the Road Ahead.pdf
FIDO Alliance Osaka Seminar: Passkeys and the Road Ahead.pdfFIDO Alliance Osaka Seminar: Passkeys and the Road Ahead.pdf
FIDO Alliance Osaka Seminar: Passkeys and the Road Ahead.pdf
 
Software Delivery At the Speed of AI: Inflectra Invests In AI-Powered Quality
Software Delivery At the Speed of AI: Inflectra Invests In AI-Powered QualitySoftware Delivery At the Speed of AI: Inflectra Invests In AI-Powered Quality
Software Delivery At the Speed of AI: Inflectra Invests In AI-Powered Quality
 
GenAISummit 2024 May 28 Sri Ambati Keynote: AGI Belongs to The Community in O...
GenAISummit 2024 May 28 Sri Ambati Keynote: AGI Belongs to The Community in O...GenAISummit 2024 May 28 Sri Ambati Keynote: AGI Belongs to The Community in O...
GenAISummit 2024 May 28 Sri Ambati Keynote: AGI Belongs to The Community in O...
 
UiPath Test Automation using UiPath Test Suite series, part 4
UiPath Test Automation using UiPath Test Suite series, part 4UiPath Test Automation using UiPath Test Suite series, part 4
UiPath Test Automation using UiPath Test Suite series, part 4
 
DevOps and Testing slides at DASA Connect
DevOps and Testing slides at DASA ConnectDevOps and Testing slides at DASA Connect
DevOps and Testing slides at DASA Connect
 
Elevating Tactical DDD Patterns Through Object Calisthenics
Elevating Tactical DDD Patterns Through Object CalisthenicsElevating Tactical DDD Patterns Through Object Calisthenics
Elevating Tactical DDD Patterns Through Object Calisthenics
 

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!
  • 20.
  • 21.
  • 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. • Single sandbox deployment • unpack command • multiple sandboxes • master-slave replication • "force" flag • pre-post grants SQL action • initialization options • my.cnf options • custom my.cnf • friendly UUID generation • global commands • test replication flow • delete command • show data dictionary tables • lock/unlock sandboxes • finding free ports • semi-sync replication • load plugins What both dbdeployer and MySQL-Sandbox can do
  • 40. • group replication Single Primary • group replication Multi Primary • prevent port collision • visible initialization • visible script templates • replaceable templates • configurable defaults • command line completion • list of source binaries • list of installed sandboxes • test script per sandbox • integrated usage help • custom abbreviations • version flag • sandboxes global catalog • concurrent deployment • fan-in • all-masters What dbdeployer can do that MySQL-Sandbox can't
  • 42. ` dbdeployer uses semantic versioning (https://semver.org) Current version: 1.6.0 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 (?) • unpack command to slim down tarball contents
  • 44. Parting thoughts • dbdeployer is open source (Apache license) • Contributions are welcome! https://github.com/datacharmer/dbdeployer