OS: Ubuntu Server 16.04
MySQL 5.7.21
大変な権勢を誇っているsystemdで以ってMySQLの起動や停止を管理しようと息巻いてオンラインの文献を二、三斜め読みしたところでこれはえらいものに手を出してしまったぞと気付いた。マニュアルが多数あり分量も膨大でどこから手を付けていいか途方に暮れた。も少し軽薄に臨む心づもりでいたからこれには参った。とまれMySQLのドキュメントを見ているとcmakeのオプションでsystemd用のファイルをインストールするものがあるようである。
-DWITH_SYSTEMD=bool
Whether to enable installation of systemd support files. By default, this option is disabled. When enabled, systemd support files are installed, and scripts such as mysqld_safe and the System V initialization script are not installed. On platforms where systemd is not available, enabling WITH_SYSTEMD results in an error from CMake.
-DWITH_SYSTEMD=1を加えてMySQLをビルド、インストールしてみるとなるほどmysqld.serviceというファイルがインストールディレクトリに放り込まれて居る。どのような取り扱いが定石であるか判然としないけれども、手探りで設定したところなんだか希望どおりには動いている模様である。まずはMySQLの起動オプションを書き付けた。
$ sudo vi /etc/default/mysql MYSQLD_OPTS="--basedir=/usr/local/mysql --datadir=/usr/local/mysql/data --plugin-dir=/usr/local/mysql/lib/plugin --user=mysql --log-error=mysql.err --pid-file=/usr/local/mysql/data/mysql.pid"
次にユニットファイル(mysqld.service)を/etc/systemd/system/へコピーし、みずからの環境に合致するようオプションを編集した。
$ cd /usr/local/mysql $ sudo cp mysqld.service /etc/systemd/system/ $ sudo vi /etc/systemd/system/mysqld.service #PIDFile=/var/run/mysqld/mysqld.pid PIDFile=/usr/local/mysql/data/mysql.pid #ExecStart=/usr/local/mysql/bin/mysqld --daemonize --pid-file=/var/run/mysqld/mysqld.pid $MYSQLD_OPTS ExecStart=/usr/local/mysql/bin/mysqld --daemonize $MYSQLD_OPTS #EnvironmentFile=-/etc/sysconfig/mysql EnvironmentFile=-/etc/default/mysql
そうしたらシステムの起動時にMySQLが起動するようsystemctl enableコマンドで執り成してやる。マシンを再起動してみるとたしかにMySQLが自動で立ち上がっているので概ね成功と言ってよかろうとおもう。
$ sudo systemctl enable mysqld.service Created symlink from /etc/systemd/system/multi-user.target.wants/mysqld.service to /etc/systemd/system/mysqld.service. $ systemctl list-unit-files mysqld.service UNIT FILE STATE mysqld.service enabled
なお手動でMySQLを起動するならこういう具合である。ステータスを確認することもできるようである。
$ sudo systemctl start mysqld $ sudo systemctl status mysqld ● mysqld.service - MySQL Server Loaded: loaded (/etc/systemd/system/mysqld.service; enabled; vendor preset: enabled) Active: active (running) since Thu 2018-03-22 20:42:22 JST; 15s ago (snip) Mar 22 20:42:22 mysql-systemd-test systemd[1]: Started MySQL Server.
ユニットファイルの全貌はこういう塩梅である。
$ cat /etc/systemd/system/mysqld.service [Unit] Description=MySQL Server Documentation=man:mysqld(8) Documentation=http://dev.mysql.com/doc/refman/en/using-systemd.html After=network.target After=syslog.target [Install] WantedBy=multi-user.target [Service] User=mysql Group=mysql Type=forking PIDFile=/usr/local/mysql/data/mysql.pid TimeoutSec=0 PermissionsStartOnly=true ExecStartPre=/usr/local/mysql/bin/mysqld_pre_systemd ExecStart=/usr/local/mysql/bin/mysqld --daemonize --pid-file=/usr/local/mysql/data/mysql.pid $MYSQLD_OPTS EnvironmentFile=-/etc/default/mysql LimitNOFILE = 5000 Restart=on-failure RestartPreventExitStatus=1 PrivateTmp=false
参考:
systemd.exec
systemd – ArchWiki
systemd – Wikipedia
2.5.10 Managing MySQL Server with systemd
What is $OPTIONS in a systemd service file?