systemdでOS起動時にMySQLを自動起動させる

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の解説に詳しい。優先順位は高いほうから

  1. /etc/systemd/system/
  2. /run/systemd/system/
  3. /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ファイルの読み込みに失敗してしまったのでPIDFileExecStartを編集し、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.

コメントする

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください