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 サーバをアンインストールして、再インストールしたらどうかと思ってやってみたら、今度はインストールすらエラーが出るようになってしまった。
こりゃダメか。最初からやり直しだな。