MySQL5.1のサーバー起動スクリプトがどのようにサーバープログラム(mysqld)を起動し、オプションの設定、システム変数を設定しているのかなどをまとめました。
※CentOS6.9、mysql-server-5.1.73-8の環境で確認した内容を基にしています。
※目次をクリックすると目次の下部にコンテンツが表示されます。
/etc/rc.d/init.d/mysqld
→上記起動スクリプト内で”mysqld_safe”という起動スクリプトがコマンドラインオプションを指定されて実行される。
→”mysqld_safe”という起動スクリプトが”mysqld”というSQLデーモンを起動。
〇オプションファイル
/etc/my.cnf
[mysqld] datadir=/var/lib/mysql socket=/var/lib/mysql/mysql.sock user=mysql # Disabling symbolic-links is recommended to prevent assorted security risks symbolic-links=0 [mysqld_safe] log-error=/var/log/mysqld.log pid-file=/var/run/mysqld/mysqld.pid
〇コマンドラインオプションのパラメータ
–datadir=/var/lib/mysql
–socket=/var/lib/mysql/mysql.soc
–pid-file=/var/run/mysqld/mysqld.pid
–basedir=/usr
–user=mysql
・mysqlサーバは、様々なシステム変数を保有している。
〇グローバル変数とセッション変数
・グローバル変数はサーバの全体的なオペレーションに影響する。
・サーバが起動するとき、すべてのグローバル変数をデフォルト値に初期化する。
このデフォルト値はコマンドラインまたはオプション ファイルなどで指定できる。
・変数がグローバルであることを明示するには、GLOBALまたは@@global.で名前をプレフィックスする。
・グローバル変数を設定するにはSUPER権限が必要。
〇セッション変数
・それぞれのクライアント接続でのオペレーションに影響する。
・変数がセッションであることを明示するには、SESSION、@@session.、@@などで名前をプレフィックスする。
・セッション値の設定には特別の権限は不要だが、クライアントだけがそのセッション変数を変更できる。別のクライアントからはできない。
・LOCALおよび@@local.はSESSIONと@@session.のシノニム。
●システム変数の設定
〇起動時に設定
・それぞれのシステム変数にはデフォルト値があるが、サーバ起動時に、コマンドラインまたはオプションファイルなどを使用して変更できる。
〇実行中に動的に設定、変更
・大抵の場合、SETコマンド(SET GLOBAL、SET SESSION)を使用して実行中のサーバで動的に変更できる。
サーバを停止または再起動などで操作を中断しなくても変更することが可能。
・動的システム変数の一覧
MySQL :: MySQL 5.1 リファレンスマニュアル :: 4.2.4.2 動的システム変数
●システム変数の名前や値を確認する方法
〇mysqld(/usr/libexec/mysqld) –verbose –help
・サーバで使用しているコンパイルのデフォルト値や、読み込むオプションファイルの所在を確認するコマンド
〇mysqld –no-defaults –verbose –help
・サーバが元にするコンパイルのデフォルト値や、オプションファイルの設定がどうなっているか(無視するかどうか)を確認するコマンド
〇SHOW VARIABLES
実行中のサーバでカレント値を確認。
・SQLデーモン(MySQLサーバ)。
・クライアントがサーバへ接続することで、データベースへアクセスするという仕組みであるため、クライアントプログラムを使用するには、mysqldが稼動していることが条件となる。
・オプションファイル内の[mysqld]と[server]のグループからオプションを読み込む。
●サーバー起動スクリプト
〇/etc/rc.d/init.d/mysqld(mysql.server)
・System Vの実行ディレクトリを使用しているシステムで使用するスクリプト。
・MySQLサーバを起動するために、mysqld_safeを呼び出す。
・LinuxのRPMパッケージの場合は、mysql.serverスクリプトを/etc/init.dのディレクトリにmysqldという名前でインストールする。
・オプションファイル内の[mysql.server]や[mysqld] のセクションからオプションを読む。
〇mysqld_safe
・mysqldの起動を試行する。
・エラー発生時にサーバを再起動したり、ランタイム情報をログファイルに記録するなどのセキュリティ機能が加わる。
・オプションファイル内の[mysqld]、[server]、[mysqld_safe]のセクションからすべてのオプションを読み取る。
・通常、mysqld_safeのスクリプトは編集してはいけない。その必要がある場合には、mysqld_safeをmy.cnfオプションファイルの [mysqld_safe] セクションにあるコマンドラインオプションを使用する。
〇mysqld_multi
・複数サーバを使用している場合の起動、停止を行う。
●MySQLプログラムの起動とオプション
・mysql、mysqld、mysqld_safeなどのMySQLプログラムをコマンドラインから呼び出すには、プログラム名とオプションを指定する。
・オプションは、コマンドラインオプション、オプションファイル、環境変数によって指定される。
・MySQLはどのオプションが最初に与えられたかを環境変数内の調査、オプションファイルの読み取り、コマンドラインのチェックといった順番で判断する。
特定のオプションが複数回指定されると、最後のものが最優先されるようになっているので、環境変数は優位性が最も低く、コマンドラインのオプションは優位性が最も高い、ということになる。
・変数名をオプションに使用して、サーバのシステム変数の値を設定できる。
〇–datadir=path
・データディレクトリへのパス
〇–socket=path
・Unixでは、ローカル接続に使用するソケットファイルを指定する。
〇–pid-file=path
・プロセスID(PID)ファイルのパス。
・mysqld_safeなど、別プログラムでサーバのPIDを指定するときに使用するファイルのこと。
〇–basedir=path
・MySQLをインストールしているディレクトリへの基準パス。
〇–user={user_name|user_id}
・mysqldサーバを、user_name、またはuser_idを保持するユーザで実行する。
ここでの「ユーザ」は、権限テーブルにリストしているMySQLユーザではなく、システム ログインアカウントのこと。
1)コマンドラインオプションでオプションを指定
・プログラム起動時にコマンドラインのオプションで指定。
例)/etc/rc.d/init.d/mysqld内の”mysqld_safe”のコマンドラインオプション
exec="/usr/bin/mysqld_safe" ・・・ $exec --datadir="$datadir" --socket="$socketfile" \ --pid-file="$mypidfile" \ --basedir=/usr --user=mysql >/dev/null 2>&1 &
2)オプションファイルでオプションを指定
・プログラム起動時に読み込まれるオプションファイルの中にオプションをリストアップする。
・プログラム起動の度、自動的に読み込まれるように設定する際に有効。
〇雛形のオプションファイル
・あらかじめ形成されたオプションファイルがいくつか提供されている。
my-small.cnf、my-medium.cnf、my-huge.cnf、my-huge.cnfなど
・上記ファイルをリネームして、適切なディレクトリに配置するとそのまま使用できる。
〇Unix系の場合のオプションファイルの保存場所、用途
・/etc/my.cnf:グローバルオプション
・$MYSQL_HOME/my.cnf:サーバ固有のオプション
・defaults-extra-file:–defaults-extra-file=pathで指定されたファイル(あれば)
・~/.my.cnf:ユーザ固有のオプション
3)環境変数でオプションを指定
・オプションを環境変数を使ってリストアップ。
・プログラム起動の際、その都度設定する場合に便利。
・環境変数をセットするコマンドは効果を直ちに現わすため、ユーザのコマンドプロンプトで実行することができるが、このセッティングはログアウトするまでしか続かない。
・MySQLで使用される環境変数一覧
MySQL :: MySQL 5.1 リファレンスマニュアル :: 2.14 環境変数