MySQL のインストール。
takatoh@tk2-254-36564:~$ sudo apt install mysql-server
途中で root のパスワードを訊かれるので入力(2回)。
バージョンの確認。
takatoh@tk2-254-36564:~$ mysql --version
mysql Ver 14.14 Distrib 5.7.18, for Linux (x86_64) using EditLine wrapper
設定ファイルは /etc/mysql/my.cnf。
takatoh@tk2-254-36564:~$ cd /etc/mysql
takatoh@tk2-254-36564:/etc/mysql$ cat my.cnf
#
# The MySQL database server configuration file.
#
# You can copy this to one of:
# - "/etc/mysql/my.cnf" to set global options,
# - "~/.my.cnf" to set user-specific options.
#
# One can use all long options that the program supports.
# Run program with --help to get a list of available options and with
# --print-defaults to see which it would actually understand and use.
#
# For explanations see
# http://dev.mysql.com/doc/mysql/en/server-system-variables.html
#
# * IMPORTANT: Additional settings that can override those from this file!
# The files must end with '.cnf', otherwise they'll be ignored.
#
!includedir /etc/mysql/conf.d/
!includedir /etc/mysql/mysql.conf.d/
…と思ったら、何やら追加の設定は別のファイルに書くらしい。/etc/mysql/conf.d と /etc/mysql/mysql.conf.d の下に .cnf ファイルを置けば読み込んでくれるってことでいいのかな。2つのディレクトリの下にはファイルが用意されている。
takatoh@tk2-254-36564:/etc/mysql$ ls conf.d
mysql.cnf mysqldump.cnf
takatoh@tk2-254-36564:/etc/mysql$ ls mysql.conf.d
mysqld.cnf mysqld_safe_syslog.cnf
日本語を扱えるようにデフォルトの charset を utf-8 にするため、それぞれのファイルに次のように設定してみた(色を付けたところが追記したところ)。
[mysql]
default-character-set=utf8
[/crayon]
[crayon title="etc/mysql/conf.d/mysqldump.cnf" mark="5"]
[mysqldump]
quick
quote-names
max_allowed_packet = 16M
default-character-set=utf8
(前略)
[mysqld]
#
# * Basic Settings
#
user = mysql
pid-file = /var/run/mysqld/mysqld.pid
socket = /var/run/mysqld/mysqld.sock
port = 3306
basedir = /usr
datadir = /var/lib/mysql
tmpdir = /tmp
lc-messages-dir = /usr/share/mysql
skip-external-locking
character-set-server=utf8
skip-character-set-client-handshake
default-storage-engin=InnoDB
(後略)
これでいいはず。
MySQL を再起動してみよう。
takatoh@tk2-254-36564:/etc/mysql$ sudo systemctl restart mysqld
Failed to restart mysqld.service: Unit mysqld.service not found.
あれ?だめだ。Unit ファイルがないってか?
takatoh@tk2-254-36564:/etc/mysql$ sudo /etc/init.d/mysql restart
[....] Restarting mysql (via systemctl): mysql.serviceJob for mysql.service failed because the control process exited with error code. See "systemctl status mysql.service" and "journalctl -xe" for details.
failed!
/etc/init.d/mysql を直接叩いてもダメだ。メッセージに従って詳細を見てみよう。
takatoh@tk2-254-36564:/etc/mysql$ systemctl status mysql.service
* mysql.service - MySQL Community Server
Loaded: loaded (/lib/systemd/system/mysql.service; enabled; vendor preset: enabled)
Active: activating (start-post) (Result: exit-code) since Thu 2017-05-04 12:59:31 JST; 21s ago
Process: 8060 ExecStart=/usr/sbin/mysqld (code=exited, status=1/FAILURE)
Process: 8051 ExecStartPre=/usr/share/mysql/mysql-systemd-start pre (code=exited, status=0/SUCCESS)
Main PID: 8060 (code=exited, status=1/FAILURE); : 8061 (mysql-systemd-s)
CGroup: /system.slice/mysql.service
`-control
|-8061 /bin/bash /usr/share/mysql/mysql-systemd-start post
`-8125 sleep 1
May 04 12:59:01 tk2-254-36564 systemd[1]: Starting MySQL Community Server...
May 04 12:59:04 tk2-254-36564 systemd[1]: mysql.service: Main process exited, code=exited, status=1/FAILURE
なんかエラー?
takatoh@tk2-254-36564:/etc/mysql$ journalctl -xe
こちらの出力は長くて載せられないけど、やっぱりエラーになってるらしい。
mysql.servece ファイルが無いとの事なので調べげ見ると、/etc/systemd/system にはないけど、/lib/systemd/system にはあることがわかった。てことは、リンクを張ればいいのかな。
takatoh@tk2-254-36564:/etc/mysql$ cd
takatoh@tk2-254-36564:~$ sudo ln -s /lib/systemd/system/mysql.service /etc/systemd/system/mysql.service
takatoh@tk2-254-36564:~$ ls -l /etc/systemd/system
total 32
drwxr-xr-x 2 root root 4096 May 4 10:01 default.target.wants
drwxr-xr-x 2 root root 4096 May 4 10:00 getty.target.wants
drwxr-xr-x 2 root root 4096 May 4 10:20 graphical.target.wants
drwxr-xr-x 2 root root 4096 May 4 11:47 multi-user.target.wants
lrwxrwxrwx 1 root root 33 May 4 13:08 mysql.service -> /lib/systemd/system/mysql.service
drwxr-xr-x 2 root root 4096 May 4 10:01 network-online.target.wants
drwxr-xr-x 2 root root 4096 May 4 10:22 sockets.target.wants
lrwxrwxrwx 1 root root 31 May 4 10:23 sshd.service -> /lib/systemd/system/ssh.service
drwxr-xr-x 2 root root 4096 May 4 10:23 sysinit.target.wants
lrwxrwxrwx 1 root root 35 May 4 10:01 syslog.service -> /lib/systemd/system/rsyslog.service
drwxr-xr-x 2 root root 4096 May 4 10:01 timers.target.wants
これでどうだ。
takatoh@tk2-254-36564:~$ sudo systemctl restart mysql
Job for mysql.service failed because the control process exited with error code. See "systemctl status mysql.service" and "journalctl -xe" for details.
だめか。
Unit ファイルのなかを覗いてみる。
# MySQL systemd service file
[Unit]
Description=MySQL Community Server
After=network.target
[Install]
WantedBy=multi-user.target
[Service]
User=mysql
Group=mysql
PermissionsStartOnly=true
ExecStartPre=/usr/share/mysql/mysql-systemd-start pre
ExecStart=/usr/sbin/mysqld
ExecStartPost=/usr/share/mysql/mysql-systemd-start post
TimeoutSec=600
Restart=on-failure
RuntimeDirectory=mysqld
RuntimeDirectoryMode=755
うん、わからん。
PermissionsStartOnly=true って行が気になる。start だけってことなのかな。サーバ自体を再起動してみるか。
うーん、再起動してもダメだなあ。
とりあえずここまでにしよう。後で追記する。
[追記]
いったん MySQL サーバをアンインストールして、再インストールしたらどうかと思ってやってみたら、今度はインストールすらエラーが出るようになってしまった。
こりゃダメか。最初からやり直しだな。