MySQL 5.6 リファレンスマニュアル  /  ...  /  MySQL の UNIX ソケットファイルを保護または変更する方法

B.5.4.5 MySQL の UNIX ソケットファイルを保護または変更する方法

サーバーがローカルクライアントと通信するために使用する UNIX ソケットファイルのデフォルトの場所は、/tmp/mysql.sock です。(一部の配布形式ではディレクトリが異なる場合があり、たとえば RPM の場合は /var/lib/mysql です。)

UNIX の一部のバージョンでは、/tmp ディレクトリ内のファイル、または一時ファイルに使用されるほかの同様のディレクトリ内のファイルをだれでも削除できます。ソケットファイルがシステム上のそのようなディレクトリに配置されている場合は、問題となることがあります。

ほとんどのバージョンの UNIX では、/tmp ディレクトリを保護して、所有者またはスーパーユーザー (root) のみがファイルを削除できるようにすることができます。これを行うには、root としてログインして次のコマンドを使用することによって、/tmp ディレクトリにスティッキービットを設定します。

shell> chmod +t /tmp

スティッキービットが設定されたかどうかを確認するには、ls -ld /tmp を実行します。いちばん最後の権限文字が t である場合は、このビットが設定されています。

別の方法は、サーバーが UNIX ソケットファイルを作成する場所を変更することです。これを行う場合は、クライアントプログラムにもファイルの新しい場所を認識させてください。ファイルの場所を指定する方法はいくつかあります。

  • グローバルまたはローカルのオプションファイルにパスを指定します。たとえば、次の行を /etc/my.cnf に指定します。



  • mysqld_safe およびクライアントプログラムを実行するときに、--socket オプションをコマンド行に指定します。

  • MYSQL_UNIX_PORT 環境変数に UNIX ソケットファイルのパスを設定します。

  • 別のデフォルトの UNIX ソケットファイルの場所を使用するように、ソースから MySQL を再コンパイルします。CMake を実行するときに MYSQL_UNIX_ADDR オプションでファイルへのパスを定義します。セクション2.9.4「MySQL ソース構成オプション」を参照してください。


shell> mysqladmin --socket=/path/to/socket version

Download this Manual
EPUB - 7.5Mb
HTML Download (TGZ) - 7.1Mb
HTML Download (Zip) - 7.2Mb
User Comments
  Posted by on January 25, 2006
Thanks Elliot! Here's a more detailed example:

#!/opt/bin/perl -w
use DBI;
$ENV{MYSQL_UNIX_PORT} = "/home/me/mysql/mysql.sock";
my $dbh = DBI->connect("DBI:mysql:database=mydb;host=localhost", "user", "passwd", {'RaiseError' => 1});

Do work here...


  Posted by Peter Kristolaitis on October 10, 2006
Setting the sticky bit is sufficient in most cases, but a rogue process run in root's context (or the MySQL user context) can still remove the pipe file.

For additional security on BSD-based platforms (I tested with FreeBSD, I think OpenBSD also supports this), set the SAPPEND flag on the file:

chflags sappend /tmp/mysql.sock

This makes the file append-only (which is perfect for a pipe), and cannot be removed without first unsetting the flag.

My first inclination was to use the SCHG flag, but that means nothing can write to the pipe. :)

I don't think Linux has anything like BSD filesystem flags, so I don't think this works on Linux systems.

Sign Up Login You must be logged in to post a comment.