当前位置: 移动技术网 > IT编程>开发语言>PHP > laravel学习:主从读写分离配置的实现

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

2019年11月06日  | 移动技术网IT编程  | 我要评论

本篇文章给大家带来的内容是关于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

/**

 * 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的配置应该如下

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

如对本文有疑问, 点击进行留言回复!!

相关文章:

验证码:
移动技术网