laravel学习:主从读写分离配置的实现

2020-08-13 20:31:54
本篇文章给大家带来的内容是关于laravel学习:主从读写分离配置的实现,有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助。

在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变化来确定配置是否生效

相关文章推荐:

Laravel的功能测试:测试驱动开发(附代码)