首页 > 解决方案 > Laravel 5.7 迁移拆分读写数据库的问题

问题描述

我遇到以下情况:

我想将我的数据库拆分为单独的读写数据库。出于这个原因,我设置了 config/database.php

    'mysql' => [
        'driver' => 'mysql',
        'write' => ['host' => env('DB_HOST_WRITE', 'localhost'),],
        'read'  => ['host' => env('DB_HOST_READ', 'localhost'),],
        'port' => env('DB_PORT', '3306'),
        'database' => env('DB_DATABASE', 'forge'),
        'username' => env('DB_USERNAME', 'forge'),
        'password' => env('DB_PASSWORD', ''),
        'unix_socket' => env('DB_SOCKET', ''),
        'charset' => 'utf8mb4',
        'collation' => 'utf8mb4_unicode_ci',
        'prefix' => '',
        'strict' => true,
        'engine' => null,
    ],

我已经为运行数据库DB_HOST_WRITEDB_HOST_READ服务器设置了 IP 地址。

对于DB_DATABASE, DB_USERNAMEDB_PASSWORD我设置了数据库名称和登录凭据。

当我尝试使用如下 mysql 控制台命令访问它们时,两台服务器都可以访问:mysql -u USERNAME -h IPADDRESS -p

这是问题所在:当我尝试从这样的第三台服务器运行迁移时

php artisan migrate

但只有写入数据库被设置。

这是预期的行为吗?

我必须手动迁移每个数据库吗?

迁移命令是否有一个标志,允许我指定要迁移的连接?

当我搜索它时,我找不到任何关于读写数据库迁移的信息。

没有进行进一步的数据库设置。我的信息来源是以下指南:https ://laravel.com/docs/5.7/database#read-and-write-connections

非常欢迎提供有用指南或解决方案建议的链接。

感谢您的关注。

标签: mysqldatabasemigrationlaravel-5.7read-write

解决方案


致@Travis Britz:感谢您的提示。我错过了“MySQL 复制”一词,在 laravel 文档中没有评论。我错误地认为 laravel 算法自己处理同步,实际上并没有发生。

数据库服务器之间的同步由 MySQL 内部机制处理

在此处输入图像描述

使用这些 MySQL 算法,我能够实现这样的通信结构,这可能是 Web 应用程序部署步骤中的常见任务:

在此处输入图像描述

我按照数字海洋的本指南手动设置了 mysql 复制:https ://www.digitalocean.com/community/tutorials/how-to-set-up-master-slave-replication-in-mysql

Digital Ocean 是我托管我的应用程序的服务器提供商。

图片取自: https ://www.toptal.com/mysql/mysql-master-slave-replication-tutorial

最好的祝福。


推荐阅读