さくらのVPSプラン乗り換え計画(4)

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

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

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