[Percona] Percona Server for MySQLをDockerで起動する

Percona Server for MySQLMySQLの互換データベースサーバです。

Percona Server for MySQL® is a free, fully compatible, enhanced, open source drop-in replacement for MySQL that provides superior performance, scalability and instrumentation. With over 4,400,000+ downloads, Percona Server for MySQL’s self-tuning algorithms and support for extremely high-performance hardware delivers excellent performance and reliability.

https://www.percona.com/software/mysql-database/percona-server
ここではPercona Server for MySQLDockerで起動する方法を紹介します。
※以降の実行例は、Ubuntu17.10で確認しています。

1. 事前準備

Dockerがインストールされていない場合は、Dockerのインストールを行います。Dockerのインストール方法は、ここを参考にしてください。

2. バージョン5.7のPercona Serverを起動する

Percona ServerDockerイメージは公式のDocker Hubで公開されています。
https://hub.docker.com/r/percona/percona-server/
公式のDockerイメージを利用して起動するパターンを紹介します。なお、ここで紹介しているパスワード設定は、MySQLのデータディレクトリが存在しない初期起動の場合のみ有効になります。

2.1. rootパスワードなしで起動する

rootパスワードなし(空パスワード)で起動するには、MYSQL_ALLOW_EMPTY_PASSWORD変数を設定します。

$ sudo docker run -d \
  --name ps \
  -e MYSQL_ALLOW_EMPTY_PASSWORD=yes \
  percona/percona-server:5.7

mysqlクライアントからrootパスワードなしで接続できるかを確認してみます。

$ sudo docker exec -it ps /bin/bash
mysql@d5a40c31080c:/$ mysql -uroot
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 2
Server version: 5.7.21-20 Percona Server (GPL), Release '20', Revision 'ed217b06ca3'

Copyright (c) 2009-2018 Percona LLC and/or its affiliates
Copyright (c) 2000, 2018, 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 '\h' for help. Type '\c' to clear the current input statement.

rootパスワードなしで接続できました。

2.2. rootパスワードを設定して起動する

rootパスワードを設定して起動するには、MYSQL_ROOT_PASSWORD変数を設定します。以下の例ではrootパスワードに’password’を設定して起動しています。

$ sudo docker run -d \
  --name ps2 \
  -e MYSQL_ROOT_PASSWORD=password \
  percona/percona-server:5.7

パスワードの設定が有効になっているか、mysqlクライアントからログインをして確認してみます。

$ sudo docker exec -it ps2 /bin/bash
mysql@09b03e09ce1e:/$ mysql -uroot  #パスワードなしではログインできない
ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: NO)
mysql@09b03e09ce1e:
mysql@09b03e09ce1e:/$ mysql -uroot -ppassword  #パスワードを指定してログインする
mysql: [Warning] Using a password on the command line interface can be insecure.
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 3
Server version: 5.7.21-20 Percona Server (GPL), Release '20', Revision 'ed217b06ca3'

Copyright (c) 2009-2018 Percona LLC and/or its affiliates
Copyright (c) 2000, 2018, 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 '\h' for help. Type '\c' to clear the current input statement.

パスワードが設定されていることが確認できました。

2.3. ランダムなrootパスワードを設定して起動する

ランダムなパスワードを自動設定して起動するには、MYSQL_RANDOM_ROOT_PASSWORD変数を設定します。
自動生成されたパスワードはコンテナ標準出力に出力されます。docker logsコマンドで確認をすることができます。

$ sudo docker run -d \
  --name ps3 \
  -e MYSQL_RANDOM_ROOT_PASSWORD=yes \
  percona/percona-server:5.7.13

2018.04.13時点では、MYSQL_RANDOM_ROOT_PASSWORDを利用した場合、Percona Server 5.7.14以上のバージョンではエラーがでて起動できません。

/entrypoint.sh: line 63: pwmake: command not found

このため、上記の起動例ではタグに5.7.13を指定しています。
5.7.14以上で起動できないエラーは、現在PullRequestで修正を依頼中です。

Percona Serverの起動後にログを確認すると、自動生成されたパスワードを見つけることができます。

$ sudo docker logs ps3
...
GENERATED ROOT PASSWORD: 90PYjpylElJoBjiPqIviJopwoMA
...

パスワードなしやコマンドラインでのパスワード指定は、セキュリティの観点から安全ではないので、ランダムなパスワードを生成する方法で起動することが推奨されています。

2.4. rootパスワードのオプションなしで起動する

rootパスワードの設定オプションなしでPercona Serverのコンテナを起動することはできません。

$ sudo docker run -d --name ps4 percona/percona-server:5.7
$ sudo docker logs ps4
error: database is uninitialized and password option is not specified
  You need to specify one of MYSQL_ROOT_PASSWORD, MYSQL_ROOT_PASSWORD_FILE,  MYSQL_ALLOW_EMPTY_PASSWORD or MYSQL_RANDOM_ROOT_PASSWORD

コンテナの初回起動時には以下のいづれかのroorパスワード設定オプションの指定が必要です。

  • MYSQL_ROOT_PASSWORD
  • MYSQL_ALLOW_EMPTY_PASSWORD
  • MYSQL_RANDOM_ROOT_PASSWORD

 
以上、Percona Server for MySQLDockerで起動する方法の紹介でした。