MariaDB (MySQL) の起動確認
「MariaDBのインストール」ができたので,以下の情報を参考に起動確認する。
データベースディレクトリーの新規作成
MariaDBのインストール直後ではデータベースディレクトリーができていない。そこで,以下のコマンドでデータベースディレクトリーを作成する。
mysql_install_db --user=$LOGNAME --datadir=$HOME/.local/var/lib/mysql
なお,このコマンドはデータベースディレクトリーが存在しない初回にだけ実行する。既にデータベースディレクトリーが存在する場合,エラーが出るだけなので,実行しない。
--user
でmysqldの実行ユーザーを指定し,--datadir
でデータベースディレクトリーを指定する。
datadirのデフォルトは存在しない。しかし,UNIX系OSでは/etc/mysql/my.cnf
にdatadir = /var/lib/mysql
との記載があることが多く,実質的にこれがデフォルトとなる。
また,–userのデフォルト値は現在のログインユーザーである。しかし,これも/etc/mysql/my.cnf
にuser = 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
起動できるように,以下の設定ファイルを用意する。
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のデフォルト。 | |||
port | 3306 | 3406 | DBの待機ポート番号を指定する。OSのMySQLや他のMySQLサーバーとの競合を回避するために,別の値に変更する。 |
datadir | (/var/lib/mysql) | $HOME/.local/var/lib/mysql | DBディレクトリーの格納先。このディレクトリーにDBの実体のファイルやログが出力される。 |
pid-file | (/var/run/mysqld/mysqld.pid) | $HOME/.local/var/lib/mysql/mysql.pid | DBサーバー (mysqld) のプロセスIDの出力ファイル。 |
socket | /tmp/mysql.sock (/var/run/mysqld/mysqld.sock) | $HOME/.local/var/lib/mysql/mysql.sock | UNIX系OSでのDBサーバーのソケットファイル名。 |
language | /usr/local/mysql/share/mysql/english/ | $MYSQL_HOME/share/english | エラーメッセージに使用する言語設定。 |
general_log | 0 | 1 | 詳細ログの出力の有無を指定。 |
general_log_file | ホスト名.log | general.log | DBの詳細ログの出力先を指定。相対パスの場合,datadir内に出力される。絶対パスの指定も可能。 |
log_error | "" | mysqld.err | DBのエラーログの出力先を指定。項目の指定がない場合,標準エラー出力に出力される。値の指定がない場合,ホスト名.errに出力される (しかし,実際はmysqld.errだった)。相対パスの場合,datadir内に出力される。絶対パスの指定も可能。 |
skip_syslog | 0 | 1 | mysqld_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文としてサーバーを終了できる。
mysqladmin
もmysql
もどちらも管理者権限が必要で,必要に応じて-p
オプションでパスワードの指定が必要だ。
最後に推奨される停止方法はUNIXのkillコマンドでプロセスを強制終了させるものだ。datadirにpid-fileで指定したサーバーのPIDが出力されるファイルからPIDを読み込み,そのプロセスを終了させる。あるいは,kiiall mysqld
でmysqldプロセスを終了させても問題ない。
MariaDB (MySQL) を起動する上で必要な,データベースディレクトリーの作成,my.cnf
の設定,起動と終了方法を記した。この手順にしたがって,MariaDB (MySQL) を使ったサーバーの構築を進めていきたい。