【TP5 :数据库】分布式数据库

版权声明:本文为ywcmoon原创文章,未经允许不得转载。 https://blog.csdn.net/qq_39251267/article/details/82344960

ThinkPHP内置了分布式数据库的支持,包括主从式数据库的读写分离
注意:分布式数据库必须是相同的数据库类型

deploy 设置 1,支持分布式数据库

配置database.deploy1可支持分布式数据库 ,其他配置信息:

//分布式数据库配置定义
return [
    // 启用分布式数据库
    'deploy'    =>  1,
    // 服务器地址
    'hostname'    => '192.168.1.1,192.168.1.2'
]

hostname 定义数量,连接多个数据库

连接的数据库个数取决于hostname定义的数量,所以即使是两个相同的IP也需要重复定义

但是其他不用,例:

'hostport'=>'3306,3306''hostport'=>'3306'
等效。


'username'=>'user1', 
'password'=>'pwd1', 
和
'username'=>'user1,user1', 
'password'=>'pwd1,pwd1',
等效。

rw_separate 设置 true,读写分离模式

设置分布式数据库的读写是否分离,默认的情况下读写不分离,也就是每台服务器都可以进行读写操作

对于主从式数据库而言,需要设置读写分离:

  // 数据库读写是否分离 主从式有效
    'rw_separate'    => true,

在读写分离的情况下,默认第一个数据库配置是主服务器的配置信息,负责写入数据,如果设置了master_num参数,则可以支持多个主服务器写入。其它的都是从数据库的配置信息,负责读取数据,数量不限制。每次连接从服务器并且进行读取操作的时候,系统会随机进行在从服务器中选择。

还可以设置 slave_no 指定某个服务器进行读操作。

// 指定从服务器序号
    'slave_no'       => '',

如果从数据库连接错误,会自动切换到主数据库连接。

调用模型的CURD操作的话,系统会自动判断当前执行的方法的读操作还是写操作,如果你用的是原生SQL,那么需要注意系统的默认规则: 写操作必须用模型的execute方法,读操作必须用模型的query方法,否则会发生主从读写错乱的情况。

注意:主从数据库的数据同步工作不在框架实现,需要数据库考虑自身的同步或者复制机制。

猜你喜欢

转载自blog.csdn.net/qq_39251267/article/details/82344960