MariaDB (MySQL) の起動確認

MariaDBのインストール」ができたので,以下の情報を参考に起動確認する。

データベースディレクトリーの新規作成

MariaDBのインストール直後ではデータベースディレクトリーができていない。そこで,以下のコマンドでデータベースディレクトリーを作成する。

mysql_install_db --user=$LOGNAME --datadir=$HOME/.local/var/lib/mysql

なお,このコマンドはデータベースディレクトリーが存在しない初回にだけ実行する。既にデータベースディレクトリーが存在する場合,エラーが出るだけなので,実行しない。

--userでmysqldの実行ユーザーを指定し,--datadirでデータベースディレクトリーを指定する。

datadirのデフォルトは存在しない。しかし,UNIX系OSでは/etc/mysql/my.cnfdatadir = /var/lib/mysqlとの記載があることが多く,実質的にこれがデフォルトとなる。

また,–userのデフォルト値は現在のログインユーザーである。しかし,これも/etc/mysql/my.cnfuser = mysqlの指定があることが多く,実質的にこれがデフォルトとなる。

そのため,明示的にこれらの値を指定してMariaDBのデータベースディレクトリーを作成する。実行すると以下のメッセージが表示される。

Installing MariaDB/MySQL system tables in '/home/senooken/.local/var/lib/mysql' 
...
2019-05-04 14:15:42 140062743342784 [Warning] Ignoring user change to 'senooken'
 because the user was set to 'mysql' earlier on the command line

2019-05-04 14:15:42 140062743342784 [Note] /usr/sbin/mysqld (mysqld 10.1.38-Mari
aDB-0ubuntu0.18.04.1) starting as process 4559 ...
OK
Filling help tables...
2019-05-04 14:15:51 139816947715776 [Warning] Ignoring user change to 'senooken'
 because the user was set to 'mysql' earlier on the command line

2019-05-04 14:15:51 139816947715776 [Note] /usr/sbin/mysqld (mysqld 10.1.38-MariaDB-0ubuntu0.18.04.1) starting as process 4588 ...
OK
Creating OpenGIS required SP-s...
2019-05-04 14:15:54 139961816178368 [Warning] Ignoring user change to 'senooken' because the user was set to 'mysql' earlier on the command line

2019-05-04 14:15:54 139961816178368 [Note] /usr/sbin/mysqld (mysqld 10.1.38-MariaDB-0ubuntu0.18.04.1) starting as process 4617 ...
OK

To start mysqld at boot time you have to copy
support-files/mysql.server to the right place for your system

PLEASE REMEMBER TO SET A PASSWORD FOR THE MariaDB root USER !
To do so, start the server, then issue the following commands:

'/usr/bin/mysqladmin' -u root password 'new-password'
'/usr/bin/mysqladmin' -u root -h TP-E440 password 'new-password'

Alternatively you can run:
'/usr/bin/mysql_secure_installation'

which will also give you the option of removing the test
databases and anonymous user created by default.  This is
strongly recommended for production servers.

See the MariaDB Knowledgebase at http://mariadb.com/kb or the
MySQL manual for more instructions.

You can start the MariaDB daemon with:
cd '/usr' ; /usr/bin/mysqld_safe --datadir='/home/senooken/.local/var/lib/mysql'

You can test the MariaDB daemon with mysql-test-run.pl
cd '/usr/mysql-test' ; perl mysql-test-run.pl

Please report any problems at http://mariadb.org/jira

The latest information about MariaDB is available at http://mariadb.org/.
You can find additional information about the MySQL part at:
http://dev.mysql.com
Consider joining MariaDB's strong and vibrant community:
Get Involved

これで初回のデータベースディレクトリーの作成が完了だ。

以下のメッセージの通り,デフォルトだとrootユーザーのパスワードが設定されていない。ローカルで検証作業時には,パスワードは不要だが,必要に応じて起動確認後にパスワードを設定する。

'/usr/bin/mysqladmin' -u root password 'new-password'
'/usr/bin/mysqladmin' -u root -h TP-E440 password 'new-password'
my.cnfの定

データベースディレクトリーを作って起動するだけでは以下のようなエラーが出る。

mysqld_safe &
190503 16:09:31 mysqld_safe Logging to syslog.
cat: /var/run/mysqld/mysqld.pid: Permission denied
rm: cannot remove '/var/run/mysqld/mysqld.pid': Permission denied
190503 16:09:31 mysqld_safe Fatal error: Can't remove the pid file:
/var/run/mysqld/mysqld.pid
Please remove it manually and start /home/senooken/.local/mysql/bin/mysqld_safe again;
mysqld daemon not started

起動できるように,以下の設定ファイルを用意する。

$HOME/.my.cnfの例
[mysqld]
port = 3406
datadir = /home/senooken/.local/var/lib/mysql
pid-file = /home/senooken/.local/var/lib/mysql/mysql.pid
socket = /home/senooken/.local/var/lib/mysql/mysql.sock
language = /home/senooken/.local/mysql/share/english

general_log
general_log_file = general.log
log_error = mysqld.err

[mysqld_safe]
datadir = /home/senooken/.local/var/lib/mysql
pid-file = /home/senooken/.local/var/lib/mysql/mysql.pid
socket = /home/senooken/.local/var/lib/mysql/mysql.sock

skip_syslog
log_error = mysqld.err

[client]
socket = /home/senooken/.local/var/lib/mysql/mysql.sock

my.cnf (.my.cnf) はMySQL (MariaDB) の設定ファイルだ。コマンド引数で指定可能なパラメーターを設定ファイルに記す。これにより,起動時のオプション指定を省略できる。

設定項目はグループを持っており,角括弧 ([]) でグループ名を記入することで,そのグループに設定を限定できる。[mysqld]のグループは他のグループからも読み込まれる設定だ。そのため,ここに設定を記入すれば,その他のグループに所属するコマンドの設定にもなる。

ただし,OSが持つ設定ファイルの/etc/mysql/my.cnfなどで[mysqld_safe][client]のグループに項目の指定がある場合,こちらが優先されて反映されないので,[mysqld]と同じ内容を[mysqld_safe][client]にも一部記している。

設定項目の詳細は「Server System Variables – MariaDB Knowledge Base」や個別のコマンド (mysqld, mysqld_safe, mysqladmin, mysql) の引数を参照する。ただし,デフォルト値に関しては/etc/mysql/my.cnfでも設定されている場合があるので注意する。

以下に起動に必要な設定項目の一覧とその説明を記す。

設定項目
設定項目デフォルト設定値説明



デフォルトの () は/etc/mysql/my.cnfのデフォルト。
port33063406DBの待機ポート番号を指定する。OSのMySQLや他のMySQLサーバーとの競合を回避するために,別の値に変更する。
datadir(/var/lib/mysql)$HOME/.local/var/lib/mysqlDBディレクトリーの格納先。このディレクトリーにDBの実体のファイルやログが出力される。
pid-file(/var/run/mysqld/mysqld.pid)$HOME/.local/var/lib/mysql/mysql.pidDBサーバー (mysqld) のプロセスIDの出力ファイル。
socket/tmp/mysql.sock (/var/run/mysqld/mysqld.sock)$HOME/.local/var/lib/mysql/mysql.sockUNIX系OSでのDBサーバーのソケットファイル名。
language/usr/local/mysql/share/mysql/english/$MYSQL_HOME/share/englishエラーメッセージに使用する言語設定。
general_log01詳細ログの出力の有無を指定。
general_log_fileホスト名.loggeneral.logDBの詳細ログの出力先を指定。相対パスの場合,datadir内に出力される。絶対パスの指定も可能。
log_error""mysqld.errDBのエラーログの出力先を指定。項目の指定がない場合,標準エラー出力に出力される。値の指定がない場合,ホスト名.errに出力される (しかし,実際はmysqld.errだった)。相対パスの場合,datadir内に出力される。絶対パスの指定も可能。
skip_syslog01mysqld_safe用の設定。syslogへのエラーログの出力を抑制する。/etc/mysql/my.cnfでの設定の上書き対策。

厳密にいうと,下4個のログに関する設定はなくても起動はできる。しかし,エラーが出た場合に困るため設定している。

ユーザーが指定可能な設定ファイルには,$MYSQL_HOME/my.cnf$HOME/.my.cnfが存在する。

他のサーバーとの競合を避けるには,サーバーごとに設定可能な$MYSQL_HOME/my.cnfに設定を記入する。インストール時に設定した通り,MYSQL_HOME=~/.local/mysqlを想定している。

複数のMySQLのサーバーを同時に起動しない場合,$HOME/.my.cnfで共通化したほうが便利だ。そのため,今回は$HOME/.my.cnfに配置する。

以下の項目は,サーバーごとに違う値にする必要がある。

  • datadir
  • port
  • socket
  • pid-file

そのため,これらの項目は作成したデータベースディレクトリー (例: $HOME/.local/var/lib/mysql) 配下に指定するとよいだろう。

my.cnfでは環境変数が使えないので,パスを指定する場合はフルパスで記入する。

参考までに,ここでの設定項目に関するエラーメッセージを以下に掲載する。

portの設定が他と競合している場合,起動時に以下のエラーが出る。

2018-04-30 20:03:57 139915809220416 [ERROR] Can't start server: Bind on TCP/IP port. Got error: 98: Address already in use
2018-04-30 20:03:57 139915809220416 [ERROR] Do you already have another mysqld server running on port: 3306 ?
2018-04-30 20:03:57 139915809220416 [ERROR] Aborting

sockの設定が他と競合している場合,以下のエラーが出る。

2018-04-30 20:15:48 140380743661376 [ERROR] Can't start server : Bind on unix socket: Address already in use
2018-04-30 20:15:48 140380743661376 [ERROR] Do you already have another mysqld server running on socket: /var/run/mysqld/mysqld.sock ?
2018-04-30 20:15:48 140380743661376 [ERROR] Aborting

pid-fileのアクセス権限に問題があれば以下のエラーが出る。

2018-04-30 20:23:37 139733545416448 [ERROR] mysqld: Can't create/write to file '/var/run/mysqld/mysqld.pid' (Errcode: 13 "Permission denied")
2018-04-30 20:23:37 139733545416448 [ERROR] Can't start server: can't create PID file: Permission denied
起動と終了

my.cnfの設定ができたのでMariaDB (MySQL) を起動する。

起動方法は4種類存在する (参考: Starting and Stopping MariaDB – MariaDB Knowledge Base)。ただし,知っておく必要があるのはそのうち2種類だ。

まずmysqldだ。これがMariaDB (MySQL) のメインのサーバープロセスのコマンドだ。

それともう一つ,mysqld_safeが存在する。こちらのコマンドは,mysqldのラッパーコマンドとなっている。エラーで強制終了した場合に,mysqldを自動的に再起動するなど安全対策が入っており,公式文書でもUNIX系OSでの手動起動にはこのコマンドを推奨している。したがって,基本的に常にmysqld_safeを使えばよいだろう。

設定に問題がなければ,以下のコマンドでDBを起動できる。

mysqld_safe &

datadir (~/.local/var/lib/mysql/) に指定したgeneral.logやmysqld.errにメッセージが出力されていれば,起動は問題ないだろう。

mysqldの終了方法は3種類存在する。以下にそれぞれのコマンドを記す。

mysqladmin -u root shutdown
mysql -u root -e "shutdown;"
kill $(cat ~/.local/var/lib/mysql/mysql.pid) # killall mysqld

一番望ましいのがmysqladmin shutdownだろう。この方法だと処理の停止を適切に行える。

次に望ましいのが,mysqlのSHUTDOWN指令だ。これはMariaDB 10.0.4から導入された。SQL文としてサーバーを終了できる。

mysqladminmysqlもどちらも管理者権限が必要で,必要に応じて-pオプションでパスワードの指定が必要だ。

最後に推奨される停止方法はUNIXのkillコマンドでプロセスを強制終了させるものだ。datadirにpid-fileで指定したサーバーのPIDが出力されるファイルからPIDを読み込み,そのプロセスを終了させる。あるいは,kiiall mysqldでmysqldプロセスを終了させても問題ない。

MariaDB (MySQL) を起動する上で必要な,データベースディレクトリーの作成,my.cnfの設定,起動と終了方法を記した。この手順にしたがって,MariaDB (MySQL) を使ったサーバーの構築を進めていきたい。

コメントを残す

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