背景
Laravelでどうやってマスター(書き込み用), スレーブ(読み込み用)のDB接続設定をするのか調査したのでメモ
参考資料
設定方法
基本的に config/database.php
に read
と write
のDBホスト名を記述するだけで、共通部分(ID/PWなど)の設定は mysql
直下の設定が使われる。
複数ホスト名が書かれている場合はランダムに使われるとのこと。
'mysql' => [
'read' => [
'host' => [
'192.168.1.1',
'196.168.1.2',
],
],
'write' => [
'host' => [
'196.168.1.3',
],
],
'sticky' => true,
'driver' => 'mysql',
'database' => 'database',
'username' => 'root',
'password' => '',
'charset' => 'utf8mb4',
'collation' => 'utf8mb4_unicode_ci',
'prefix' => '',
],
sticky
設定について
有効にすると、書き込みクエリが1度でも発生すると同じリクエスト内では読み込みクエリでも書き込み用DB接続が使われるようになる、おそらくこれは「書き込み直後に読み込み処理で、データ同期がスレーブに反映される前に読み込みしてしまう」という問題を解決するためのもので、基本的に true
に設定しておくべきものと認識しておくのが良さそう。