欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

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

程序员文章站 2022-06-23 22:45:45
本篇文章给大家带来的内容是关于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

/**

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