2019年11月7日木曜日

MySQL Shellのdba.deploySandboxInstanceでサクッとmysqldを起動する

TL;DR

  • いつからできたのかは知らないけれど、気が付いたらMySQL Shellに dba.deploySandboxInstance() なんてものが出来ていてそれが感動的に楽なので熱が冷めないうちにメモ

如何に「MySQLとMySQL Shell以外他に何もいらない」かの感動を伝えるために、 ubuntu:latest のDockerコンテナを起動しただけの状態から始めます。
取り敢えず、 MySQLのaptリポジトリ の依存に指定されてるやつらをインストール。
# apt update
# apt install wget lsb-release gnupg
MySQLのaptリポジトリ をインストール。最近の .deb ファイルなら向き先が mysql-8.0になっていると思われる。
# wget https://dev.mysql.com/get/mysql-apt-config_0.8.14-1_all.deb
# dpkg -i mysql-apt-config_0.8.14-1_all.deb
..
  1. MySQL Server & Cluster (Currently selected: mysql-8.0)  3. MySQL Preview Packages (Currently selected: Disabled)
  2. MySQL Tools & Connectors (Currently selected: Enabled)  4. Ok
Which MySQL product do you wish to configure? 4

# apt update
MySQL ServerとMySQL Shellをインストールする。
# apt install mysql-community-server mysql-shell
準備おしまい。

ただ /bin/bash を呼び出したコンテナなので他には何も浮いていない。
root@b2fbd7b7148f:~# ps auxww
USER       PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
root         1  0.0  0.2  18504  3432 pts/0    Ss   09:21   0:00 bash
root      4103  0.0  0.2  34396  2912 pts/0    R+   09:31   0:00 ps auxww
ここからおもむろに mysqlsh を起動。接続先は指定しない(し、しようもないし)
root@b2fbd7b7148f:~# mysqlsh
Logger: Tried to log to an uninitialized logger.
MySQL Shell 8.0.18

Copyright (c) 2016, 2019, Oracle and/or its affiliates. All rights reserved.
Oracle is a registered trademark of Oracle Corporation and/or its affiliates.
Other names may be trademarks of their respective owners.

Type '\help' or '\?' for help; '\quit' to exit.
 MySQL  JS >
接続先を指定せずに、サーバープロセスを起動させるためにクライアントを起動する、ってなんか sqlplus っぽさを感じます。
長いメソッドの名前とか憶えてられないので、 dba. まで打ち込んでからTabを2回で補完候補が現れる。
 MySQL  JS > dba.
checkInstanceConfiguration()       deploySandboxInstance()            rebootClusterFromCompleteOutage()
configureInstance()                dropMetadataSchema()               startSandboxInstance()
configureLocalInstance()           getCluster()                       stopSandboxInstance()
createCluster()                    help()                             verbose
deleteSandboxInstance()            killSandboxInstance()
たぶん deploySandboxInstance() だろ。実行。
 MySQL  JS > dba.deploySandboxInstance()
Dba.deploySandboxInstance: Invalid number of arguments, expected 1 to 2 but got 0 (ArgumentError)
エラった><
引数がおかしいのはわかるんだけど引数に何を指定すればいいのかわからないので、 dba.help('deploySandboxInstance') と実行。
 MySQL  JS > dba.help('deploySandboxInstance')
NAME
      deploySandboxInstance - Creates a new MySQL Server instance on localhost.

SYNTAX
      dba.deploySandboxInstance(port[, options])
..
ドバっと出てくる。使い方を引きやすい対話型クライアントは好きです。
取り敢えず、必須引数はportだということなので3306でいく。
 MySQL  JS > dba.deploySandboxInstance(3306)
A new MySQL sandbox instance will be created on this host in
/root/mysql-sandboxes/3306

Warning: Sandbox instances are only suitable for deploying and
running on your local machine for testing purposes and are not
accessible from external networks.

Please enter a MySQL root password for the new instance:

Deploying new MySQL instance...

Instance localhost:3306 successfully deployed and started.
Use shell.connect('root@localhost:3306'); to connect to the instance.
root@localhostのパスワードだけ対話入力するとおしまい。
root@b2fbd7b7148f:~# ps auxwww
USER       PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
root         1  0.0  0.2  18504  3432 pts/0    Ss   09:21   0:00 bash
root      4163  0.0  0.2  18372  3088 pts/0    S    09:36   0:00 /bin/bash /root/mysql-sandboxes/3306/start.sh --user=root
root      4164  2.0 32.8 2302340 418604 pts/0  Sl   09:36   0:00 /root/mysql-sandboxes/3306/bin/mysqld --defaults-file=/root/mysql-san
dboxes/3306/my.cnf --user=root
root      4208  0.0  0.2  34396  2864 pts/0    R+   09:36   0:00 ps auxwww
勿論、ポート番号を変えればこのノリでザクザク mysqld を起動できる。
データとかmy.cnfとかは $HOME/mysql-sandboxes あたりに転がるので、サンドボックス用途ならもう公式のツールだけで作れる時代になってしまったのだ。令和ばんざい。
ちなみに、mysqlx-portにport * 10を指定しようとするので、ポート番号に 6554 を超える値を渡そうとするとエラる。その場合は dba.deploySandboxInstance(13306, {"portx": 13307}) とか明示してやればおk
それでは、楽しいMySQL Shellライフを。

0 件のコメント :

コメントを投稿