mysql|サーバー
MySQL サーバーの起動と停止
[Yanzi]
1. 非特権ユーザーとして MySQL サーバーを実行します
MySQL サーバーの起動方法を説明する前に、MySQL サーバーをどのようなユーザー ID で実行する必要があるかを考えてみましょう。サーバーは手動または自動で起動できます。手動で起動した場合、サーバーは Unix (Linux) にログインしたユーザーとして起動します。つまり、paul を使用して Unix にログインしてサーバーを起動した場合、su コマンドを使用してサーバーを起動すると、サーバーは paul で実行されます。 root にしてサーバーを実行すると、root として実行されます。ただし、ほとんどの場合、サーバーを手動で起動することはおそらく望ましくありません。おそらく、システムの起動時に、標準のブート プロセスの一部として MySQL サーバーが自動的に起動するように調整するでしょう。Unix では、このプロセスは次のように実行されます。システムの Unix ユーザー root、およびプロセス内で実行されているすべてのプロセスは root 権限で実行されます。
MySQL サーバーの起動プロセス中は 2 つの目標に留意する必要があります:
- サーバーを非 root ユーザーとして実行する必要があります。一般に、root 権限が本当に必要でない限り、実行中のプロセスの機能を制限する必要がありますが、MySQL では必要ありません。
- サーバーを常に同じユーザーとして実行したい場合、あるユーザーを使用し、別のユーザーを使用すると、データ ディレクトリに異なる所有者を持つファイルやディレクトリが作成される可能性があります。どのユーザーとして実行するかによっては、サーバーがデータベースまたはテーブルにアクセスできなくなる可能性があります。同じユーザーとしてサーバーを実行すると、この問題を回避できます。
通常の特権のないユーザーとしてサーバーを実行するには、次の手順に従います:
- サーバーを実行するユーザーを選択します。mysqld は任意のユーザーとして実行できます。ただし、概念的には、MySQL 操作用に別のユーザーを作成する方が明確です。 MySQL 専用のユーザー グループを選択することもできます。この記事では、ユーザー名とユーザー グループ名としてそれぞれ mysqladm と mysqlgrp を使用します。
自分のアカウントで MySQL をインストールしており、システムに対する特別な管理権限を持っていない場合は、自分のユーザー ID でサーバーを実行できる可能性があります。この場合、mysqladm と mysqlgrp を独自のログイン名とユーザー グループに置き換えます。
RedHat Linux 上で rpm ファイルを使用して MySQL をインストールする場合、インストールによって mysql という名前のアカウントが自動的に作成され、mysqladm の代わりにこのアカウントが使用されます。
- 必要に応じて、システムの通常のユーザー作成プロセスを使用してサーバー アカウントを作成します。これを行うには root である必要があります。
- サーバーが実行中の場合は、停止します。
- データディレクトリとサブディレクトリおよびファイルの所有権を変更し、mysqladm ユーザーが所有するようにします。たとえば、データ ディレクトリが /usr/local/var の場合、次のように mysqladm の所有者を設定できます (これらのコマンドを root として実行する必要があります):
#cd /usr/local/var
#chown -R mysqladm.mysqlgrp
- データ ディレクトリとサブディレクトリおよびファイルの権限を変更して、mysqladm ユーザーのみがアクセスできるようにします。データ ディレクトリが /usr/local/var の場合、データ ディレクトリとその内容を設定するときに、mysqladm が所有するものを設定できます:
# cd /usr/local/var
# chmod -R go-rwx
所有者とモードを指定するときは、シンボリック接続に注意してください。それらに従って、それらが指すファイルまたはディレクトリの所有権とモードを変更する必要があります。接続ファイルが配置されているディレクトリが自分の所有していない場所にあり、root になる必要がある場合、これは少し面倒になる可能性があります。
上記のプロセスを完了した後は、必ず mysqladm または root としてログインした状態でサーバーを起動し、サーバーがユーザー ID を切り替えられるように --user=mysqladm オプションを必ず指定してください。 mysqladm へ (システム起動プロセスにも適用可能)。 --user オプションは MySQL 3.22 で導入されました。古いバージョンを使用している場合は、root として実行するときに su コマンドを使用して、特定のユーザーでサーバーを実行するようにシステムに指示できます。
2. サーバーの起動方法
サーバーの実行に使用するアカウントを決定したら、サーバーを起動する方法を選択できます。コマンドラインから手動で実行することも、システム起動中に自動的に実行することもできます。サーバーを起動するには、主に 3 つの方法があります:
mysqld を直接呼び出します。 - これはおそらく最も一般的に使用されていない方法であり、これ以上使用しないことをお勧めします。そのため、この記事では詳しく紹介しません。
safe_mysqld スクリプトを呼び出します。
- safe_mysqld は、サーバー プログラムとデータ ディレクトリの場所を特定しようとします。次に、これらの値を反映するオプションを使用してサーバーが呼び出されます。 safe_mysqld は、標準エラー デバイスをサーバーからデータ ディレクトリ内のエラー ファイルに再配置し、その記録が残るようにします。サーバーの起動後、safe_mysqld もサーバーを監視し、サーバーが停止した場合は再起動します。 safe_mysqld は、BSD スタイルの Unix システムでよく使用されます。
sqfe_mysqld を root として起動するか、システムのブート中に起動すると、エラー ログは root によって所有されるため、後で権限のないユーザーでsafe_mysqld を呼び出そうとすると、「アクセス許可が拒否されました」エラーが発生する可能性があります。エラー ログを削除して再試行してください。時間。
mysql.server スクリプトを呼び出します。
- このスクリプトは、safe_mysqld.mysql.server を通じてサーバーを起動します。これは System V の起動および停止システムで使用することを目的としており、マシンが特定のランレベルに入るときまたは出るときに呼び出されるスクリプトを含むディレクトリがいくつか含まれています。 start または stop 引数を使用して、サーバーを起動するか停止するかを指定できます。
safe_mysqld スクリプトは、MySQL インストール ディレクトリの bin ディレクトリにインストールされるか、MySQL ソース コード配布の script ディレクトリにあります。 mysql.server スクリプトは、MySQL インストール ディレクトリの下の share/mysqld ディレクトリにインストールされるか、MySQL ソース コード配布の support_files ディレクトリにあります。これらを使用する場合は、適切なディレクトリにコピーする必要があります。
BSD スタイルのシステム (FreeBSD、OpenBSD など) の場合、通常、ブート中にサービスを初期化するために /etc ディレクトリにいくつかのファイルがあります。これらのファイルは通常、「rc」で始まる名前を持ち、1 つのファイルで構成されている場合があります。 「rc.local」という名前のファイル (または類似のもの)。特にローカルにインストールされたサービスを開始するために使用されます。このようなシステムでは、次のような行を rc.local ファイルに追加してサーバーを起動できます (safe_mysqld ディレクトリがシステムで異なる場合は、変更するだけです):
if [ -x /usr/local/bin/safe_mysqld ]; then /usr/local/bin/safe_mysqld &fi
ログイン後にコピー
System V スタイルのシステムの場合、 /etc の下の適切な起動ディレクトリに mysql.server を配置することでインストールできます。 Linux を実行していて、RPM ファイルから MySQL をインストールしている場合、これはすでに行われています。それ以外の場合は、メインの起動ディレクトリにスクリプトをインストールし、適切なランレベル ディレクトリにスクリプトへの接続を配置します。スクリプトを root だけが起動できるようにすることもできます。
起動ファイルのディレクトリ レイアウトはシステムによって異なるため、お使いのシステムで起動ファイルがどのように構成されているかを確認する必要があります。たとえば、Linux PPC では、ディレクトリは /etc/rc.d および /etc/rc.d/rc3.d であるため、次のようにスクリプトをインストールできます:
#cp mysql.server /etc/rc.d/init.d#cd /etc/init.d#chmod 500 mysql.server#cd /etc/rc.d/rc3.d#ln -s ../init.d/mysql.server S99mysql
ログイン後にコピー
Solaris では、メイン スクリプト ディレクトリは /etc/ です。 init.d、実行レベルのディレクトリは /etc/rd2.d であるため、コマンドは次のようになります:
#cp mysql.server /etc/rc.d/init.d#cd /etc/init.d#chmod 500 mysql.server#cd /etc/rc2.d#ln -s ../init.d/mysql.server S99mysql
ログイン後にコピー
システムが起動すると、S99mysql スクリプトが開始パラメータを使用して自動的に呼び出されます。 chkconfig コマンド (Linux で利用可能) がある場合は、上記のように手動でコマンドを実行する代わりに、それを使用して mysql.server スクリプトをインストールできます。
2.1 起動オプションを指定する
サーバーの起動時に追加の起動オプションを指定する場合は、2 つの方法があります。使用する起動スクリプト (safe_mysqld または mysql.server) を変更して、サーバーを呼び出す行に直接オプションを指定するか、オプション ファイルでオプションを指定できます。可能であれば、グローバル オプション ファイルでオプションを指定することをお勧めします。このファイルは通常 /etc/my.cnf (Unix) または c:my.cnf (Windows) にあります。
サーバーオプションでは特定の種類の情報を指定できません。これらについては、safe_mysqld を変更する必要がある場合があります。たとえば、サーバーがローカル タイム ゾーンを正しく選択できず、GMT で時刻値を返す場合は、TZ 環境変数を設定して指示を与えることができます。サーバーをsafe_mysqldまたはmysql.serverで起動すると、safe_mysqldにタイムゾーン設定を追加できます。サーバーを起動する行を見つけて、その行の前に次のコマンドを追加します:
TZ=US/Centralexport TZ
ログイン後にコピー
上記のコマンドの構文は Solaris です。他のシステムでは構文が異なる場合があります。関連するマニュアルを参照してください。起動スクリプトを変更する場合は、次回 MySQL をインストールするとき (新しいバージョンへのアップグレードなど)、最初に起動スクリプトを別の場所にコピーしない限り、変更内容は失われることに注意してください。新しいバージョンをインストールした後、古いスクリプトと新しいスクリプトを比較して、再構築する必要がある変更を確認します。
2.2 起動時にテーブルをチェックする
システム起動時にサーバーが起動するように準備することに加えて、myisamchk および isamchk スクリプトをインストールして、サーバーが起動する前にテーブルをチェックすることもできます。クラッシュ後に再起動している可能性があります。起動する前にテーブルを確認することが、問題を見つける良い方法です。
3. サーバーを停止します
サーバーを手動で起動するには、mysqladmin を使用します:
%mysqladmin shutdown
サーバーを自動的に停止するには、特別なことをする必要はありません。 BSD システムは通常、プロセスに TERM シグナルを送信することによってサービスを停止します。プロセスはそれに正しく応答するか、無作法に強制終了されます。 mysqld は、このシグナルを受信すると終了して応答します。 mysql.server を使用してサーバーを起動する System V スタイルのシステムの場合、停止プロセスは stop パラメーターを指定してスクリプトを呼び出し、サーバーに終了するように指示します (もちろん mysql.server がインストールされていると仮定します)。
4. サーバーに接続できない場合にサーバーの制御を取り戻す方法
場合によっては、サーバーに接続できないため、手動でサーバーを再起動することがあります。もちろん、これは少し矛盾しています。一般的にはサーバーに接続して手動でオフにするのが一般的ですが、なぜこれが起こるのでしょうか?
まず第一に、MySQL の root パスワードが知らない値に設定されている可能性があります。これは、パスワードを変更するとき、たとえば、新しいパスワードを入力するときに誤って非表示の制御文字を入力した場合に発生する可能性があります。パスワードを忘れてしまう可能性もあります。
次に、localhost への接続は通常、Unix ドメイン ソケット ファイル (通常は /tmp/mysql.sock) を介して行われます。ソケット ファイルが削除されると、ローカル クライアントは接続できなくなります。これは、システムが /tmp 内の一時ファイルを削除する cron ジョブを実行するときに発生する可能性があります。
如果你因为丢失套接字文件而不能连接,你可以简单地通过重启服务器重新创建得到它。因为服务器在启动时重新创建它。这里的骗局是你不能用套接字建立连接因为它不见了,你必须建立一个TCP/IP连接,例如,如果服务器主机是pit.snake.net,你可以这样连接:
%mysqladmin -p -u root -h pit.snake.net shutdown
如果套接字文件被一个cron任务删除,问题将重复出现,除非你修改cron任务或使用一个或使用一个不同的套接字文件,你可以使用全局选项文件指定一个不同的套接字,例如,如果数据目录是/usr/local/var,你可以通过将下列行加入/etc/my.cnf中,将套接字文件移到那里:
[mysqld]socket=/usr/local/var/mysql.sock[client]socket=/usr/local/var/mysql.sock
ログイン後にコピー
对服务器和客户均指定路径名,使得它们都使用同一个套接字文件。如果你只为服务器设置路径,客户程序将仍然期望在原位置执行套接字,在修改后重启服务器,使它在新位置创建套接字。
如果你由于忘记root口令或已经将它设置为不同于认为的值而不能连接,你需要重新获得对服务器的控制,是你能再次设置口令:
- 中断服务器
如果你以root登录服务器主机,你可以用kill命令终止服务器。你可以使用ps命令或通过寻找服务器的PID文件(通常在数据目录中)找出服务器进程的ID。
最好是首先尝试用一个向服务器发出一个TERM信号的正常kill看它是否将以正常终止应答。这种方式下,表和日志将正确地被清空。如果服务器阻塞并且不应答一个正常终止信号,你可以用kill -9强制终止它。这是最后的手段了,因为这可能有未清空的修改,而且你冒着让表处于一个不一致状态的风险。
如果你用kill -9终止服务器,要确保在启动服务器前用myisamchk和isamchk检查你的表。
- 用--skip-grant-table选项重启服务器。
这告诉服务器不使用授权表验证连接,这允许你以root连接而无须口令。在你已经连接后,改变root口令。
- 用mysqladmin flush-privileges告诉服务器再次使用授权表启动
如果你的mysqladmin版本不认识flash-privileges,试一试reload。
五、运行多个服务器
大多数再一台给定的机器上运行单个MySQL服务器,但在很多情况下,运行多个服务器是很有用的:
- 你可能想测试一个服务器的新版本,而保留你正在运行的生产服务器。在这种情况下,你会运行不同的服务器代码。
- 操作系统一般限制每个进程的打开文件句柄数量。如果你的系统很难提高这个限制,运行多个服务器是解决限制的一种方法。在这种情况下,你可能运行统一服务器的多个实例。
- ISP经常为其客户提供自己的MySQL安装,有必要涉及单独的服务器。在这种情况下,你可能运行同一版本的多个实例或不同版本,如果不同的客户想要不同版本的MySQL。
很自然地,运行多个服务器比只运行一个服务器要复杂得多。如果你安装多个版本,你不能在同一个地方安装所有东西。当服务器运行时,某些参数必须或很可能对每个服务器是唯一的,它们包括服务器在哪安装、其数据目录的路径名、TCP/IP端口和UNIX域套接字路径名以及用于运行服务器的UNIX账号(如果你不再同一账号下运行所有服务器)。如果你决定运行多个服务器,一定要注意你使用的参数,是你不至于丢失对所发生的事情的踪迹。
5.1 配置和安装多个服务器
如果你要运行不同版本的服务器而不是同一版本的多个实例,你必须在不同地点安装它们。如果你安装二进制分发(不用RPM),它们将安装在包含不同版本号的目录名下。如果你从源代码安装,最简单的方法是在每个版本运行configure配置MySQL安装过程中使用--with-prefix选项使得不同分发分开,这将使得所有东西安装在一个单独的目录下,你可以将目录域分发版本号联系起来,如,你可以象这样配置一个MySQL分发,其中version是MySQL版本号:
%.configure --with-prefix=/usr/local/mysql-version
--with-prefix选项也决定了服务器的一个唯一数据目录。你可能想加上其它服务器特定的选项,如TCP/IP端口号和套接字路径名(--with-tcp-port和--with-unix-socket)。
如果你想运行同一版本服务器的多个实例,任何必须基于一个服务器特定设置的选项将需要在运行时指定。
5.2 多服务器的启动过程
複数のサーバーを起動することは、1 つのサーバーを使用する場合よりも複雑になります。これは、safe_mysqld と mysql.server の両方が単一サーバー設定で最もよく機能するためです。 safe_mysqld を詳しく見て、修正したバージョンを使用して、独自のニーズに合わせてより正確に調整することができ、それを起動プロセスの基礎として使用することをお勧めします。
対処しなければならない問題の 1 つは、オプション ファイル (my.cnf) でオプションを指定する方法です。複数のサーバーの場合、異なるサーバー設定ごとに /etc/my.cnf を使用することはできません。このファイルは、すべてのサーバーの同じ設定に対してのみ使用できます。サーバーのコンパイル済みデータ ディレクトリの場所が異なる場合は、各サーバーのデータ ディレクトリの my.cnf ですべてのサーバーで使用される設定を指定し、DATADIR/my.cnf (ここでは DATADIR によって異なります) を使用してサーバー固有の設定を指定できます。サーバーからサーバーへ。
サーバー オプションを指定するもう 1 つの方法は、コマンド ラインの最初のオプションとして --default-file=path_name を使用し、サーバーに path_name という名前のファイルからオプションを読み取るように指示することです。これにより、サーバー オプションをファイルに入れることができます。これはサーバーに固有であり、起動時にそのファイルを読み取るようにサーバーに指示します。このオプションを指定すると、/etc/my.cnf などの通常のオプション ファイルは使用されないことに注意してください。