天天看点

[PHP] Larval 主从读写分离配置

在DB的连接工厂中找到以下代码

.../vendor/laravel/framework/src/Illuminate/Database/Connectors/ConnectionFactory.php

/**       * Get the read configuration for a read / write connection.       *       * @param  array  $config       * @return array       */       protected function getReadConfig(array $config)       {           $readConfig = $this->getReadWriteConfig($config, 'read');           return $this->mergeReadWriteConfig($config, $readConfig);       }       /**       * Get a read / write level configuration.       *       * @param  array   $config       * @param  string  $type       * @return array       */       protected function getReadWriteConfig(array $config, $type)       {           if (isset($config[$type][0])) {               return $config[$type][array_rand($config[$type])];           }           return $config[$type];       }      /**      * Merge a configuration for a read / write connection.      *      * @param  array  $config      * @param  array  $merge      * @return array      */     protected function mergeReadWriteConfig(array $config, array $merge)     {         return array_except(array_merge($config, $merge), ['read', 'write']);     }           

工厂类通过随机获取读DB配置来进行读取操作,由此可推出DB的配置应该如下

'mysql' => [           'write'    => [               'host' => '192.168.1.180',           ],           'read'     => [               ['host' => '192.168.1.182'],               ['host' => '192.168.1.179'],           ],           'driver'    => 'mysql',           'database'  => 'database',           'username'  => 'root',           'password'  => '',           'charset'   => 'utf8',           'collation' => 'utf8_unicode_ci',           'prefix'    => '',      ]           

加强版,支持多主多从,支持独立用户名和密码,配置如下

'mysql' => [           'write'    => [               [                 'host' => '192.168.1.180',                 'username'  => '',                 'password'  => '',             ],           ],           'read'     => [               [                 'host' => '192.168.1.182',                 'username'  => '',                 'password'  => '',             ],               [                 'host' => '192.168.1.179',                 'username'  => '',                 'password'  => '',             ],           ],           'driver'    => 'mysql',           'database'  => 'database',              'charset'   => 'utf8',           'collation' => 'utf8_unicode_ci',           'prefix'    => '',      ]           

验证

开启MySQL的general-log,通过tail -f的方式监控log变化来确定配置是否生效