yii2 配合 mysql-MGR 配置高可用链接

yii2 db 单机配置

'db' => [
        'class' => 'yii\db\Connection',
        'dsn' => 'mysql:host=localhost;dbname=newplan',
        'username' => 'root',
        'password' => 'root',
        'charset' => 'utf8',
        'tablePrefix' => 's_',//前缀
]
...

配合mgr 多主配置 (本地docker 下起来3台mysql 服务端组了mgr,如何组建mgr集群请看docker mysql mgr 集群)

'db' => [
        'class' => 'yii\db\Connection',
        'shuffleMasters' => true,  // 随机选择数据库链接

        'masterConfig' => [
            'username' => 'root',
            'password' => 'root',
            'charset' => 'utf8',
            'tablePrefix' => 's_',//前缀
            'attributes' => [
                // use a smaller connection timeout
                PDO::ATTR_TIMEOUT => 10,
            ],
        ],
        'masters' => [
            ['dsn' => 'mysql:host=localhost;port=3306;dbname=newplan'],
            ['dsn' => 'mysql:host=localhost;port=3307;dbname=newplan'],
            ['dsn' => 'mysql:host=localhost;port=3308;dbname=newplan']
        ],
]

可能出现的报错

  1. yii2 None of the master DB servers is available 极少数出现,按照错误提示是没有找到可以链接的主机, 首先排除当前配置的主机是非能够链接的上,先使用但数据库的配置链接查看是否有问题
  2. Server sent charset unknown to the client. Please, report to the developers 在我数据库设置完成之后,使用yii链接单个数据库做测试发现了这个错误,原因是:MySQL 8将默认字符集更改为utfmb4。但有些客户并不知道这个规则。因此,当服务器向客户端报告其默认字符集时,客户端不知道服务器是什么意思,就会抛出此错误。
    解决方案,修改mysql配置加上:
[client]
default-character-set=utf8

[mysql]
default-character-set=utf8

[mysqld]
collation-server = utf8_unicode_ci
character-set-server = utf8
default_authentication_plugin = mysql_native_password

3.注意,如果集群中有mysql节点出现故障下线,虽然yii自己会处理不去连接故障服务器,但是故障处理完成的时候要小心,如果你的mgr集群没有开启 loose-group_replication_start_on_boot=ON #是否随服务器启动而自动启动组复制 的话,当你的mysql回复正常能够正常连接,yii 有可能连上这台没有加入集群没有开启组复制的mysql节点,这个节点是没有写入能力的(super_read_only),所以写入操作会导致报错(mgr的机制),
解决方案:
1.因为不是很建议loose-group_replication_start_on_boot开启,所以在集群节点发生故障下线的时候,直到节点恢复加入集群之前,都先将配置文件中的该节点去除。
2.开启loose-group_replication_start_on_boot

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • feisky云计算、虚拟化与Linux技术笔记posts - 1014, comments - 298, trac...
    不排版阅读 3,939评论 0 5
  • Group Replication [TOC] 关于 Group Greplication 异步复制 半同步复制 ...
    saup007阅读 5,892评论 0 4
  • 一直觉得两个相恋的人,在步入婚姻殿堂之前应该做一次两个人的旅行,是否合适基本可知。 旅行不单是看沿途的风景,其实也...
    江南茱儿阅读 327评论 2 3
  • 有很多时候在想,一个人去旅行是什么样的。想要一场轰轰烈烈的爱情,不受限制的学习,但最后还是屈服于这个现实的世界。
    冰淇淋哇阅读 103评论 2 1
  • 我所做的第一件事是打开音乐。 音乐开始流淌出来了,我听了一会,前奏结束的时候我打开笔袋。 我刚才要做什么? 我拿出...
    Bread桑阅读 162评论 0 0