Laravel 5でデータベース接続にUNIXドメインソケットを使う

2017-02-28

備忘録として。Laravel 5でデータベース接続にUNIXドメインソケットを使う方法を解説します。なお、本記事の検証はLaravel 5.4及びMySQL 5.7で実施しています。

UNIXドメインソケットとは

UNIXドメインソケットとは、同一OSのプロセス間でデータを交換するためのデータ通信の終点及びその方法のことです。

同一のOSのプロセス間通信なので、Webサーバー及びデータベースサーバーが同一のOS(ホスト)上で動作している必要があります。いわゆる単一サーバー構成です。

一般的に、通常のTCP接続(MySQLなら127.0.0.1:3306での指定)よりもパフォーマンス的に有利とされています。

MySQLの設定

UNIXドメインソケットのパスを設定もしくは確認します。

MySQLの設定ファイル/etc/my.cnfを開き、以下の行を確認します。存在しない場合は、適当なパスを設定してください。

[mysqld]
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock

socket=に記載されているパス/var/lib/mysql/mysql.sockが、ソケットのパスです。このパスを控えておきましょう。

設定を変更した場合は、MySQLの再起動を忘れないようにしましょう。

MySQL以外の場合も、同様にソケットの場所を設定・確認します。

Laravelの設定

データベース設定ファイルconfig/database.phpへ、環境変数からUNIXドメインソケットのパスを設定するコードを追加します。

return [
    // ...
    'connections' => [
        // ...
        'mysql' => [
            // ...
            'unix_socket' => env('DB_UNIX_SOCKET', ''),  // この行を追加
            // ...
        ],
        // ...
    ],
    // ...
];

あとは、.envファイルで、環境変数DB_UNIX_SOCKET/var/lib/mysql/mysql.sockを設定すればおしまいです。

DB_CONNECTION=mysql
DB_UNIX_SOCKET=/var/lib/mysql/mysql.sock
DB_DATABASE=database_name
DB_USERNAME=username
DB_PASSWORD=password

まとめ

皆さんも、Laravel 5でデータベース接続にUNIXドメインソケットを使用してみてはいかがでしょうか。