Django-DBrouter连接mysql主从复制下多重数据库

DB-router

通过编写db-router可以灵性连接mysql主从复制等情况下的多数据库

  • 假设你已经配置好了类似MYSQL主从复制的服务,如果没有可以参照这里
打开日志用以分析,在 /etc/my.conf下加入
  • 可以通过配置mysql日志记录,用以查看主从在读写情况下的效果,主从都要配置。
#表示永远开启general_log
general_log=1
#表示general_log产生的日志文件都写在/var/lib/mysql/general.log里。
general_log_file=/var/lib/mysql/general.log
  • 查看是否开启和设置成功
show variables like '%log%';

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-1394MhAR-1593939327491)(Django-DBrouter/1.png)]

  • settings.py
DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.mysql',
        'HOST': '116.62.222.123',
        'PORT': 3306,
        'USER': 'master',
        'PASSWORD': '123456',
        'NAME': 'ccc',
    },
    'slave': {
        'ENGINE': 'django.db.backends.mysql',
        'HOST': '47.97.172.176',
        'PORT': 3306,
        'USER': 'root',
        'PASSWORD': '123456',
        'NAME': 'ccc'
    }
}

DATABASE_ROUTERS = ['test1.utils.MasterSlaveDBRouter']
  • 编写db-router,在主应用下(与settings.py同级)创建utils.py(自定义),写入下面代码
class MasterSlaveDBRouter:
    """数据库主从读写分离路由"""
    def db_for_read(self, model, **hints):
        """读数据库"""
        # print 用于测试
        print("给从")
        return "slave"

    def db_for_write(self, model, **hints):
        """写数据库"""
        print("给主")
        return "default"

    def allow_relation(self, obj1, obj2, **hints):
        """是否运行关联操作"""
        return True 
  • 如出现以下错误,修改主库binlog日志格式
django.db.utils.InternalError: (1665, 'Cannot execute statement: impossible to write to binary log since BINLOG_FORMAT = STATEMENT and at least one table uses a storage engine limited to row-based logging. InnoDB is limited to row-logging when transaction isolation level is READ COMMITTED or READ UNCOMMITTED.')


# 当迁移项目数据时出现上面的错误,在 /etc/my.conf下加入
binlog_format=mixed
  • 基本上ok后,可以通过查看general.log,来查看读写情况

    #进入 日志所在目录,通过下面代码查看后50行数据
    cat general.log | tail -n 50
    

原文链接: https://lienze.tech/blog/django/7b56b6f5.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值