本篇文章给大家带来的内容是关于laravel学习:主从读写分离配置的实现,有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助。 在DB的连接工厂中找到以下代码.../vendor/laravel/framework/src/Illuminate/Database/Connectors/Co ......
本篇文章给大家带来的内容是关于laravel学习:主从读写分离配置的实现,有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助。
在db的连接工厂中找到以下代码
.../vendor/laravel/framework/src/illuminate/database/connectors/connectionfactory.php
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
|
protected function getreadconfig( array $config )
{
$readconfig = $this ->getreadwriteconfig( $config , 'read' );
return $this ->mergereadwriteconfig( $config , $readconfig );
}
protected function getreadwriteconfig( array $config , $type )
{
if (isset( $config [ $type ][0])) {
return $config [ $type ][ array_rand ( $config [ $type ])];
}
return $config [ $type ];
}
protected function mergereadwriteconfig( array $config , array $merge )
{
return array_except( array_merge ( $config , $merge ), [ 'read' , 'write' ]);
}
|
工厂类通过随机获取读db配置来进行读取操作,由此可推出db的配置应该如下
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
|
'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' => '' ,
]
|
加强版,支持多主多从,支持独立用户名和密码,配置如下
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
|
'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变化来确定配置是否生效