45
Giuseppe Maxia Software explorer dbdeployer the future of MySQL sandboxes

dbdeployer...• 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 •

  • Upload
    others

  • View
    19

  • Download
    0

Embed Size (px)

Citation preview

Page 1: dbdeployer...• 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 •

Giuseppe MaxiaSoftware explorer

dbdeployer the future of MySQL sandboxes

Page 2: dbdeployer...• 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 •

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

Page 3: dbdeployer...• 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 •

Disclaimer

•None of what I say has anything to do with my company.

• I also don’t work for Oracle.

Page 4: dbdeployer...• 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 •

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

Page 5: dbdeployer...• 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 •

I had a dreamimprove

MySQL-Sandbox

!5

Page 6: dbdeployer...• 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 •

I had a dreamrewrite

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

Page 7: dbdeployer...• 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 •

introducing dbdeployer

MySQL-Sandbox (re)written in Go

!7

Page 8: dbdeployer...• 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 •

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

Page 9: dbdeployer...• 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 •

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

Page 10: dbdeployer...• 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 •

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

Page 11: dbdeployer...• 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 •

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

Page 12: dbdeployer...• 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 •

What can it do? (2)

• Install a group of sandboxes

• Isolated from each other

• Without any relationship

• With binary logging active

Page 13: dbdeployer...• 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 •

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

Page 14: dbdeployer...• 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 •

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

Page 15: dbdeployer...• 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 •

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

Page 16: dbdeployer...• 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 •

What can it do? (6)• Administer sandboxes

• List available binaries

• List installed sandboxes

• start, restart (with options), stop

• check status

• test

• delete

Page 17: dbdeployer...• 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 •

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)

Page 18: dbdeployer...• 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 •

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

Page 19: dbdeployer...• 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 •

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!

Page 20: dbdeployer...• 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 •
Page 21: dbdeployer...• 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 •
Page 22: dbdeployer...• 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 •

Using it

1. Download a MySQL binary tarball

2. Use dbdeployer to expand it

3. start creating sandboxes

Page 23: dbdeployer...• 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 •

Choose your download

Page 24: dbdeployer...• 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 •

Choose your download

Page 25: dbdeployer...• 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 •

Principleshttps://dev.mysql.com/downloads/mysql/get a MySQL

binary tarball1

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

Page 26: dbdeployer...• 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 •

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

Page 27: dbdeployer...• 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 •

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

Page 28: dbdeployer...• 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 •

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)

Page 29: dbdeployer...• 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 •

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

Page 30: dbdeployer...• 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 •

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

Page 31: dbdeployer...• 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 •

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

Page 32: dbdeployer...• 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 •

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]

Page 33: dbdeployer...• 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 •

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)

Page 34: dbdeployer...• 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 •

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]

Page 35: dbdeployer...• 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 •

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

Page 36: dbdeployer...• 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 •

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

Page 37: dbdeployer...• 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 •

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

Page 38: dbdeployer...• 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 •

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

Page 39: dbdeployer...• 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 •

• 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

Page 40: dbdeployer...• 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 •

• 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

Page 41: dbdeployer...• 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 •

LIVE DEMO

Page 42: dbdeployer...• 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 •

`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

revisionBug fixes.

Code refactoring. No API changes

1.21.3 => 1.21.4

Page 43: dbdeployer...• 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 •

Next steps

• Possible enhancements:

• Install sandbox from remote tarball (?)

• unpack command to slim down tarball contents

Page 44: dbdeployer...• 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 •

Parting thoughts

• dbdeployer is open source (Apache license)

• Contributions are welcome!

https://github.com/datacharmer/dbdeployer

Page 45: dbdeployer...• 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 •

Q&A

https://www.dbdeployer.com