OS: Ubuntu Server 16.04
MySQL 5.7.21
ミドルウェアをソースからインストールするとsystemdのユニットファイルが付属しないことが多いように感ずる。MySQLもデフォルトではそうであった。しかし乍ら、cmake実行の際に-DWITH_SYSTEMD=1
オプションを付けるとユニットファイルを拵えてくれる。
-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.
2.9.7 MySQL Source-Configuration Options
make install
後、インストールディレクトリにmysqld.service
という名でユニットファイルが放り込まれて居た。此れを然るべき場所へ配置する。然るべき場所は三箇所あり、Red Hatの解説に詳しい。優先順位は高いほうから
- /etc/systemd/system/
- /run/systemd/system/
- /usr/lib/systemd/system/
ということである。一先ずもっとも優先度の高い/etc/systemd/system/
を選択すればよかろうとおもう。
$ cd /usr/local/mysql $ sudo cp -av mysqld.service /etc/systemd/system/
次にMySQLの起動オプションを設定する。内容は/etc/default/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"
それからユニットファイルの内容も一部書き換えた。デフォルトのままであるとPIDファイルの読み込みに失敗してしまったのでPIDFile
やExecStart
を編集し、EnvironmentFile
には先に作成した起動オプションを書き付けたファイルを指定した。
$ 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
最後にOS起動時にMySQLサーバーが立ち上がるようsystemctl enable
を実行する。
$ sudo systemctl enable mysqld.service Created symlink from /etc/systemd/system/multi-user.target.wants/mysqld.service to /etc/systemd/system/mysqld.service.
試みにOSを再起動してみるとMySQLが無事、自動で立ち上がっていた。
$ systemctl status mysqld.service ● 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.