# 分布式数据库

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

配置`database.deploy` 为1 可以采用分布式数据库支持。如果采用分布式数据库,定义数据库配置信息的方式如下:

```

//分布式数据库配置定义

return [

// 启用分布式数据库

'deploy' => 1,

// 数据库类型

'type' => 'mysql',

// 服务器地址

'hostname' => '192.168.1.1,192.168.1.2',

// 数据库名

'database' => 'demo',

// 数据库用户名

'username' => 'root',

// 数据库密码

'password' => '',

// 数据库连接端口

'hostport' => '',

]

```

连接的数据库个数取决于`hostname`定义的数量,所以即使是两个相同的IP也需要重复定义,但是其他的参数如果存在相同的可以不用重复定义,例如:

```

'hostport'=>'3306,3306'

```

```

'hostport'=>'3306'

```

等效。

```

'username'=>'user1',

'password'=>'pwd1',

```

```

'username'=>'user1,user1',

'password'=>'pwd1,pwd1',

```

等效。

还可以设置分布式数据库的读写是否分离,默认的情况下读写不分离,也就是每台服务器都可以进行读写操作,对于主从式数据库而言,需要设置读写分离,通过下面的设置就可以:

```

'rw_separate' => true,

```

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

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

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

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

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

php 分布式数据库查询,分布式数据库 · Thinkphp5.0完全开发手册 · 看云相关推荐

  1. think php上传图片,上传 · ThinkPHP5.0完全开发手册 · 看云

    ## 上传文件 `ThinkPHP5.0`对文件上传的支持更加简单. > 内置的上传只是上传到本地服务器,上传到远程或者第三方平台的话需要自己扩展. 假设表单代码如下: ~~~ ~~~ 然后在控 ...

  2. php标签扩展,标签扩展 · ThinkPHP5.0完全开发手册 · 看云

    ## 标签库加载 模板中加载标签库,预加载自定义标签库,扩展内置标签库的加载 请参考:模板/标签库 >[info]建议开发者将自定义标签库请放置应用目录中,请勿放在框架系统目录内,以免使用`Co ...

  3. php 获取路由参数,路由参数 · ThinkPHP5.0完全开发手册 · 看云

    ## 路由参数 路由参数是指可以设置一些路由匹配的条件参数,主要用于验证当前的路由规则是否有效,主要包括: |参数|说明| |---|---| |method|请求类型检测,支持多个请求类型| |ex ...

  4. php控制器的作用,控制器定义 · ThinkPHP5.0完全开发手册 · 看云

    ThinkPHP V5.0的控制器定义比较灵活,可以无需继承任何的基础类,也可以继承官方封装的`\think\Controller`类或者其他的控制器类. ## 控制器定义 一个典型的控制器类定义如下 ...

  5. 多语言php,多语言 · ThinkPHP5.0完全开发手册 · 看云

    ThinkPHP内置通过`\think\Lang`类提供多语言支持,如果你的应用涉及到国际化的支持,那么可以定义相关的语言包文件.任何字符串形式的输出,都可以定义语言常量. ## 开启和加载语言包 默 ...

  6. php 实现域名路由器,域名路由 · ThinkPHP5.0完全开发手册 · 看云

    ThinkPHP支持完整域名.子域名和IP部署的路由和绑定功能,同时还可以起到简化URL的作用. 要启用域名部署路由功能,首先需要开启: ~~~ 'url_domain_deploy' => t ...

  7. 比较标签 php,比较标签 · ThinkPHP5.0完全开发手册 · 看云

    比较标签用于简单的变量比较,复杂的判断条件可以用if标签替换,比较标签是一组标签的集合,基本上用法都一致,如下: ~~~ {比较标签 name="变量" value="值 ...

  8. think php5目录结构,目录结构 · ThinkPHP5.1完全开发手册 · 看云

    ## 目录结构 >[info] 相对于`5.0`来说,`5.1`版本目录结构的主要变化是配置目录和路由定义目录独立出来,不再放入应用类库目录(并且不可更改). ~~~cmd www WEB部署目 ...

  9. php 助手函数,助手函数 · ThinkPHP5.1完全开发手册 · 看云

    >[info] 在5.1版本中,大部分的助手函数都可以归结为一个函数`app()`,因为5.1全面采用容器管理类的实例,而`app()`函数又是容器的"管家". ## 助手函 ...

最新文章

  1. Closure Compiler 使用
  2. php中的mysql模块
  3. 2021北京高考一分一段成绩查询,2021北京高考总成绩一分一段表出炉
  4. python 运算符 (算术运算符、比较(关系)运算符、赋值运算符、逻辑运算符、位运算符、成员运算符、身份运算符、运算符优先级)(与或非)(异或)
  5. ubuntu18.10 cosmic更换阿里云的源
  6. sql 触发器_一键生成某个sql的html--记录执行计划、统计信息、触发器等
  7. java 解决时间相减问题
  8. 北大青鸟java y2_Struts-2 北大青鸟 Y2学年 项目案例使用 2框架开发租房网站 Java Develop 249万源代码下载- www.pudn.com...
  9. IOT(10)---NB-IOT的物联网十大典型应用场景
  10. allure 测试报告本地打开_Allure自动化测试报告我是这样用的
  11. 4.16-4.22课题(拼团系统)进度汇报
  12. WT2003H语音芯片在红绿灯上的运用,一款可远程更新的语音IC方案
  13. MPC与LQR的详细对比分析
  14. 展锐Camera open failure log解析程序
  15. 面试题(2020)微信小程序常见面试题
  16. Python常见问题解决办法汇总
  17. Vue入门(10)axios
  18. Solution: Cannot start Microsoft outlook. Cannot open the outlook window. Invalid xml
  19. python编写coc部落冲突游戏辅助(1)
  20. 机器人行业的信息孤岛(2020)

热门文章

  1. 如何使用 Mybatis 实现数据库 CURD 操作?
  2. 整理了Kafka的一些常用工具,建议收藏备用!| 博文精选
  3. kappa和lambda对比 | 程序员硬核评测
  4. Spark精华问答 | Spark做大规模高性能数值计算可以吗?
  5. oracle打patch,Oracle初学者入门指南-How to get Oracle Patch?
  6. tika设置文件长度限制_MySQLInnoDB某些你没注意过的限制
  7. 克隆需要验证_[实验技巧]CRISPR实验中如何验证编辑?
  8. python 水仙花_python 水仙花
  9. 如何快速下载CentOS7镜像
  10. 企业实战_17_MyCat水平扩展_跨分片查询_ER分片