文档章节

Laravel5.5 MySQL配置、读写分离及操作

M
 MichaelShu
发布于 2018/07/21 16:03
字数 572
阅读 266
收藏 1

【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>>

Laravel 让连接不同数据库以及对数据库进行增删改查操作:

参考:http://laravelacademy.org/post/854.html

配置读写分离

应用的数据库配置位于 config/database.php(但是数据库用户及密码等敏感信息位于 .env 文件)。在该文件中你可以定义所有的数据库连接,并指定哪个连接是默认连接。

'mysql' => [
        'driver' => 'mysql',
        'read' => [
            'host' => ['39.107.243.232','39.106.201.242',]
        ],
        
        'write' => [
            'host' => '39.107.243.232'
        ],
    
       'port' => env('DB_PORT', '3306'),
       'database' => env('DB_DATABASE', 'test'),
       'username' => env('DB_USERNAME', 'root'),
       'password' => env('DB_PASSWORD', 'aaaa'),
       'unix_socket' => env('DB_SOCKET', ''),
       'charset' => 'utf8mb4',
       'collation' => 'utf8mb4_unicode_ci',
       'prefix' => '',
       'strict' => true,
       'engine' => null,

    'modes'  => [
        'ONLY_FULL_GROUP_BY',
        'STRICT_TRANS_TABLES',
        'NO_ZERO_IN_DATE',
        'NO_ZERO_DATE',
        'ERROR_FOR_DIVISION_BY_ZERO',
        'NO_ENGINE_SUBSTITUTION',
    ],
],

Laravel 在读数据时会从提供的 IP 中随机选一个进行连接。目前Lavavel5.5读写分离仅支持单个写连接。

 

使用不同数据库连接:

1. 原生SQL:

$id = 2;
$users = DB::connection('mysql::read')->select('select * from users where id = ?',[$id]);
if( empty($users) )
{
   print("Record is not exist : id =  $id");
   return;
}
$users = json_decode(json_encode($users),true);
$user = $users[0];
print($user['name']);
$id = 1;
$user['name'] = 'abce21s';
$affected = DB::update('update users set name=? where id=?', [$user['name'],$id]);
if(true != $affected)
{
   print("Update data failed! : id = $id");
   return;
}
print('Update data successful!');
$id = 2;
$user['name'] = 'aaaa';
$affected = DB::insert('insert into users (id, name) values (?, ?)', [$id, $user['name']]);
if(true != $affected)
{
   print("Update data failed! : id = $id");
   return;
}
print('Update data successful!');

 

可以强制写到读或者写的数据库中:

$id = 1;
$user['name'] = 'ab1s';
$affected = DB::connection('mysql::read')
            ->update('update users set name=? where id=?', [$user['name'],$id]);
if(true != $affected)
{
   print("Update data failed! : id = $id");
   return;
}
print('Update data successful!');
$id = 1;
$user['name'] = '111';
$affected = DB::connection('mysql::write')
            ->update('update users set name=? where id=?', [$user['name'],$id]);
if(true != $affected)
{
   print("Update data failed! : id = $id");
   return;
}
print('Update data successful!');

 

2. 查询构建器:

$id = 2;
$user['name'] = 'abcde2';
$affected = DB::connection('mysql::read')
               ->table('users')
               ->where('id', $id)
               ->update(['name' => $user['name']]);
if(true != $affected)
{
   print("Update data failed! : id = $id");
   return;
}
print('Update data successful!');
$id = 1;
$user['name'] = '222';
$affected = DB::connection('mysql::write')
         ->table('users')
         ->where('id', $id)
         ->update(['name' => $user['name']]);
if(true != $affected)
{
   print("Update data failed! : id = $id");
   return;
}
print('Update data successful!');
$id = 2;
$user['name'] = 'bbb';

$affected = DB::connection('mysql::write')
   ->table('users')
   ->insert(['id'=> $id, 'name'=>$user['name']]);
if(true != $affected)
{
   print("Update data failed! : id = $id");
   return;
}
print('Update data successful!');

 

3. Eloquent ORM

参考:https://docs.golaravel.com/docs/5.5/eloquent/

 

http://laravelacademy.org/post/8060.html

© 著作权归作者所有

M
粉丝 7
博文 120
码字总数 25406
作品 0
海淀
技术主管
私信 提问
MySQL 读写分离 (基于Amoeba)

一.MySQL读写分离 主数据库处理事务性查询,从数据库处理select查询。数据库复制用来把事务性查询导致的变更同步到从数据库中。 二.最为常见的读写分离有两种: 1.基于程序代码实现 在代码中...

郭晓辉gg
2017/05/06
0
0
MySQL的主从复制与读写分离技术实例(二)读写分离

系统版本:CentOS 6.5 MySQL版本:mysql-5.5.38 Amoeba版本:amoeba-mysql-binary-2.2.0 JDK版本:jdk-6u14-linux-x64.bin 案例拓扑图: 案例环境: 搭建MySQL的读写分离 一、搭建MySQL读写分...

睿睿学IT
2016/02/29
0
0
探索MySQL高可用架构之MHA(5)

探索MySQL高可用架构之MHA(5) -----构建mysql高可用系列(共9篇) 上一篇文章介绍了本次架构的AB复制操作! 本篇文章主要介绍本次架构中的Atlas读写分离! 为什么要分库、分表、读写分离? 现在...

顺境其生
2015/07/22
0
0
14 | 高性能数据库集群:读写分离

高性能数据库集群的第一种方式是“读写分离”,其本质是将访问压力分散到集群中的多个节点,但是没有分散存储压力;第二种方式是“分库分表”,既可以分散访问压力,又可以分散存储压力。先来...

天赋异禀的柠柠
2018/07/26
0
0
为什么数据库读写分离可以提高性能

虽然知道处理大数据量时,数据库要做读写分离,但是为什么读写分离可以提高性能呢? 下面是搜来的一些解释,看看再说! 一 什么是读写分离 MySQL Proxy最强大的一项功能是实现“读写分离(Re...

candies
2014/02/26
28.5K
2

没有更多内容

加载失败,请刷新页面

加载更多

sed -i linux 批量替换命令

批量替换 /usr/local/rocketmq/conf 目录下 的 xml 里头的 ${user.home} 替换为 /usr/local/rocketmq # mkdir -p /usr/local/rocketmq/logs# cd /usr/local/rocketmq/conf && sed -i 's#${......

jxlgzwh
30分钟前
4
0
如何在嵌入式CSS中编写a:hover?

我有一种情况,我必须编写内联CSS代码,并且我想在锚点上应用悬停样式。 如何在HTML样式属性内的CSS中使用a:hover ? 例如,您不能在HTML电子邮件中可靠地使用CSS类。 #1楼 简短的答案:您不...

技术盛宴
38分钟前
4
0
一些常用工具下载

golang: https://dl.google.com/go/go1.13.5.window-amd64.zip https://dl.google.com/go/go1.13.5.linux-amd64.tar.gz 更换版本号可以下载其他版本。...

bobby2006
45分钟前
4
0
centos使用yum安装或者更新时总是提示被PackageKit占用

centos使用yum安装或者更新时总是提示被PackageKit占用 使用yum安装或更新软件时总是提示yum被PackageKit锁定占用 Existing lock /var/run/yum.pid: another copy is running as pid 13090. ...

流麦士
51分钟前
4
0
使用CSS内容添加HTML实体

如何使用CSS content属性添加html实体? 使用这样的东西只打印  到屏幕而不是不间断的空间: .breadcrumbs a:before { content: ' ';} #1楼 更新 :PointedEars提到正确的立...

javail
53分钟前
4
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部