主夫ときどきプログラマ

データベース、Webエンジニアリング、コミュニティ、etc

MySQLの入門セミナーに参加しました

f:id:masayuki14:20190531204702j:plain
今回のノベルティ!!

Oracleが主催している MySQLセミナーに参加しました。会場はOracle大阪オフィス。
本当は3月にあったMySQL 8.0 入門セミナー ~チューニング基礎編、SQLチューニング編~」の方が参加したかったですが、都合がつかず・・・。
今回はMySQL 8.0 入門セミナー ~インストール&アーキテクチャ基礎編~」で、昨年夏の開催にも参加したのであまり内容は変わっていないだろうなぁという感じ。実際にはメインに8.0を据えていることもあり5.7への言及はなく、資料もボリュームアップしていました。

個人的には入門編ということもあり知っていることも多かったですが、よい復習になりました。

そんな中でもいくつかキャッチアップできたポイントがあるので紹介します。

インストール時の依存関係

rpmでmysql8.0をインストールする場合は、依存関係があるので、以下の3つを同時にインストールする必要がある、というもの。

  • mysql-community-libs-compat
  • mysql-community-libs
  • mysql-community-common

以前 ubuntu に APT でインストールした時には特に依存関係でハマったことはないし、インストールガイドも充実してるので大丈夫なんじゃないかなあという印象。最近はDockerで使うことも多くなってるし。

dev.mysql.com

コマンド例

shell> tar xvf mysql-8.0.16-2.el7.x86_64. rpm-bungle.tar
shell> rpm -Uvh mysql-community-libs-compat-8.0.16-2.el7.x86_64.rpm \
    mysql-community-libs-8.0.16-2.el7.x86_64.rpm
    mysql-community-common-8.0.16-2.el7.x86_64.rpm
shell> rpm -ivh mysql-community-server-8.0.16-2.el7.x86_64.rpm \
    mysql-community-client-8.0.16-2.el7.x86_64.rpm \
shell> sudo systemctl start mysqld
shell> sudo systemctl stop mysqld

innodb_dedicated_server

MySQL8.0から追加されたパラメータで、innodb_buffer_pool_size などを自動で設定してくれるオプションです。デフォルトでは OFFとなります。 サーバーマシンがMySQL専用として使える場合に利用できるもので、WebサーバーやAppサーバーが一緒に動いているサーバーマシンで利用すると良くないことが起こる可能性があります。

innodb_buffer_pool_size はデフォルトの設定(128MB)では大抵の場合に小さすぎるため、リソースの消費量をホストにマッチさせられないかどうか、という課題に対して導入されたパラメータのようです。 このパラメータを ON にすると以下のルールに従っていくつかのパラメータが自動で設定されます。

**innodb_buffer_pool_size**

server_memory < 1G ? 128M (デフォルトと同じ)
server_memory <= 4G ? server_memory * 0.5
server_memory > 4G ? server_memory * 0.75

**innodb_log_file_size**

buffer_pool_size < 8GB ? 512M
buffer_pool_sieze <=128GB ? 1024M
buffer_pool_size > 128GB ? 2048M


**innodb_log_files_in_group**

buffer_pool_size < 8GB ? ROUND(buffer pool size)
buffer_pool_size <= 128GB ? ROUND(buffer pool size * 0.75)
buffer_pool_sieze > 128GB ? 64

**innodb_flush_method**

innodb_flush_method = O_DIRECT_NO_FSYNC

あまり使うことないかなぁと思ったけど、コンテナで使う場合によさそうです。 まだ不勉強なので dockerコンテナのメモリ割り当てがどうなってるかわからないけど、このオプションをつけて、MySQLに任せてしまってもいいかもしれない。

ドキュメントはこちら。 dev.mysql.com

1台のマシンで複数のmysqldを動かすには

1台のサーバーで複数のmysqldを動かすには以下のパラメータをそれぞれ変えて起動すれば良いとのこと。

  • datadir
  • port
  • socket
  • pid-file
  • log-error
  • log-bin
  • server_id

これらのパラメータをそれぞれ変えて設定した my.cnf を用意して以下のように実行すれば良いです。

$ mysqld --defaults-file=my1.cnf
$ mysqld --defaults-file=my2.cnf

Master-Slave のレプリケーションInnoDB Cluster を試す時にはこれでOKですね。

フリスビーもらえた

途中で質問コーナーがあったので、「複数マシンでmysqldを動かすときに innodb_dedicated_server をONにするとまずいですよね」という旨の質問をしました(セミナー中には専有マシンで使える、ということは理解できていなかった)。

最前列に座っていたからか、最初に質問したからかわかりませんがMySQLロゴ入りのフリスビーをいただきました。これ結構レアなんじゃないか。ボールペンと合わせて2つのノベルティをゲットしました。

次回の開催は

今回のセミナー資料は こちら で公開されるとのことです。 また7月頃にも関西で別のセミナーが開催されるようです。またいこう。