mysql主从基于docker和django怎么实现读写分离


1.主从搭建

从同步的流程或原理:

  • 1)master会将变动记录到二进制日志里面;

  • 2)master有一个I/O线程将二进制日志发送到sl*e;

  • 3) sl*e有一个I/O线程把master发送的二进制写入到relay日志里面;

  • 4)sl*e有一个SQL线程,按照relay日志处理sl*e的数据。

实操

创建两个文件夹 :

mkdir  /home/mysql/data/
touch /home/mysql/conf.d
touch /home/mysql/my.cnf
 
mkdir  /home/mysql2/data/
touch /home/mysql/conf.d
touch /home/mysql/my.cnf

修改配置文件:

主库的配置文件,server-id和开启binlog日志

[mysqld]
user=mysql
character-set-server=utf8
default_authentication_plugin=mysql_native_password
secure_file_priv=/var/lib/mysql
expire_logs_days=7
sql_mode=STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION
max_connections=1000
server-id=100  
log-bin=mysql-bin
[client]
default-character-set=utf8
[mysql]
default-character-set=utf8

从库的配置:

 多了下面两行

Mootion Mootion

Mootion是一个革命性的3D动画创作平台,利用AI技术来简化和加速3D动画的制作过程。

Mootion 232 查看详情 Mootion
log-bin=mysql-sl*e-bin  # 指定日志relay_log=edu-mysql-relay-bin 指定中继日志
[mysqld]
user=mysql
character-set-server=utf8
default_authentication_plugin=mysql_native_password
secure_file_priv=/var/lib/mysql
expire_logs_days=7
sql_mode=STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION
max_connections=1000
server-id=101 
log-bin=mysql-sl*e-bin
relay_log=edu-mysql-relay-bin
[client]
default-character-set=utf8
[mysql]
default-character-set=utf8

拉起两个mysql容器:

#启动主库容器(挂载外部目录,端口映射成33307,密码设置为123456)
docker run  -di -v /home/mysql/data/:/var/lib/mysql -v /home/mysql/conf.d:/etc/mysql/conf.d -v /home/mysql/my.cnf:/etc/mysql/my.cnf -p 33307:3306 --name mysql-master -e MYSQL_ROOT_PASSWORD=123456 mysql:5.7
#启动从库容器(挂载外部目录,端口映射成33306,密码设置为123456)
docker run  -di -v /home/mysql2/data/:/var/lib/mysql -v /home/mysql2/conf.d:/etc/mysql/conf.d -v /home/mysql2/my.cnf:/etc/mysql/my.cnf -p 33306:3306 --name mysql-sl*e -e MYSQL_ROOT_PASSWORD=123456 mysql:5.7

创建test用户,并授权

#在主库创建用户并授权
##创建test用户
create user 'test'@'%' identified by '123';
##授权用户
grant all privileges on *.* to 'test'@'%' ;
###刷新权限
flush privileges;
#查看主服务器状态(显示如下图)
show master status;
# 可以看到日志文件的名字,和现在处在哪个位置

连接从库,配置连接主库

使用命令 "show sl*e status\G" 可以查看 master_log_file 是否相同

#连接从库
mysql -h 172.16.209.100 -P 33306 -u root -p123456
#配置详解
/*
change master to 
master_host='MySQL主服务器IP地址', 
master_user='之前在MySQL主服务器上面创建的用户名', 
master_password='之前创建的密码', 
master_log_file='MySQL主服务器状态中的二进制文件名', 
master_log_pos='MySQL主服务器状态中的position值';
*/
# 输入命令如下
change master to master_host='101.133.225.166',master_port=33307,master_user='test',master_password='123',master_log_file='mysql-bin.000003',master_log_pos=0;
# 启用从库
start sl*e;
# 查看从库状态(如下图)
show sl*e status\G;
####这两个是yes表示配成功 ####
   Sl*e_IO_Running: Yes
   Sl*e_SQL_Running: Yes

测试:

#在主库上创建数据库test1
create database test1;
use test1;
#创建表
create table tom (id int not null,name varchar(100)not null ,age tinyint);
#插入数据
insert tom (id,name,age) values(1,'xxx',20),(2,'yyy',7),(3,'zzz',23);

2.django实现读写分离

settings.py配置

#1  在setting中配置
DATABASES = {
    # 主库
    'default': {
        'ENGINE': 'django.db.backends.mysql',
        'NAME': 'lqz1',
        'USER': 'root',
        'PASSWORD': '123456',
        'HOST': '101.133.225.166',
        'PORT': 33307,
    },
    # 从库
    'db1': {
        'ENGINE': 'django.db.backends.mysql',
        'NAME': 'lqz1',
        'USER': 'root',
        'PASSWORD': '123456',
        'HOST': '101.133.225.166',
        'PORT': 33306,
    },
}

手动指定读写分离

####手动来做
    # 向default库写,主库
    res=models.Book.objects.using('default').create(name='金瓶梅',price=33.4)
    # 去从库查
    res=models.Book.objects.using('db1').all().first()
    print(res.name)

自动指定(写router和配置setting)

在根目录下创建一个db_router.py

class Router1:
    def db_for_read(self, model, **hints):
        return 'db1'
    def db_for_write(self, model, **hints):
        return 'default'

在setting中注册

# 注册一下 # 4 以后只要是写操作,就会用default,只要是读操作自动去db1
	DATABASE_ROUTERS = ['db_router.Router1',]

更细粒度(分库分表时需要)

class Router1:
    def db_for_read(self, model, **hints):
        if model._meta.model_name == 'book':
            return 'db1'
        else:
            return 'default'
 
    def db_for_write(self, model, **hints):
        return 'default'

在数据库迁移时,可以指定把哪个app的表结构迁移到哪个库

# django默认是default
python manage.py migrate app01 --database=default

以上就是mysql主从基于docker和django怎么实现读写分离的详细内容,更多请关注其它相关文章!


# 运行状态  # 金坛工厂网站建设  # 广安营销企业网站推广  # 电影网站推广图片  # 跨境推广营销方案范文  # 品牌营销推广哪家好做呢  # 漳河seo搜索推广推荐  # 手帐产品文案网站推广  # 互联网网站推广哪儿好学  # 成立网络营销推广部门的目的  # 百度关键词点击排名优化  # 端口映射  # Docker  # 分级管理  # 是一个  # 如下图  # 配置文件  # 设置为  # 有一个  # 如何设置  # 镜像  # django  # MySQL 


相关栏目: 【 Google疑问12 】 【 Facebook疑问10 】 【 优化推广96088 】 【 技术知识133117 】 【 IDC资讯59369 】 【 网络运营7196 】 【 IT资讯61894


相关推荐: 银信通自动开通原因揭秘  《小宇宙》标记不友善评论方法  哈尔滨城市通昵称修改方法  荣耀Magic6 Pro拍照成像偏暗_荣耀Magic6 Pro夜景优化  谷歌学术论文搜索引擎 谷歌学术官网入口论坛永久链接  《偃武》甘宁技能详解  解决Go encoding/json 将JSON大数字解析为浮点数的问题  yandex网页版直接登录 yandex官方入口平台访问方法  外卖小程序对接第三方配送  WooCommerce购物车:强制显示所有交叉销售商品教程  macosmonterey系统外接显示器驱动怎么安装_macosmonterey外接显示器驱动与分辨率调整  大熊猫抓取竹子的“大拇指”其实是什么?蚂蚁庄园课堂今天答案最新11月30日  研招网官方网站招生平台入口_中国研究生招生信息网官网登录  LINUX怎么查看显卡信息_LINUX查看GPU状态  J*a中的值传递到底指什么_值传递模型在参数传递中的真正含义说明  《异星探险家》古怪的物品作用介绍  Golang如何操作指针参数_Go pointer参数传递规则  大众点评了却看不到是怎么回事  composer 提示 "requires ext-soap" 缺少 SOAP 扩展怎么办?  《绿竹漫游》关闭消息通知方法  动漫之家观看全集库 动漫之家免费资源网地址  c++如何实现一个简单的RPC框架_c++远程过程调用原理与实践  使用逻辑应用(Logic Apps)自动处理邮件附件中的XML到Excel  J*aScript:从子元素中批量移除特定CSS类  VBA Outlook邮件自动化:高效集成Excel数据与列标题的策略  汽水音乐车机版官网5.0 汽水音乐车机版5.0版本下载入口  PHP安全加载非公开目录图片与动态内容类型处理指南  123网页端官方登录页 123邮箱网页版即时通讯服务  使用AI在VS Code中将代码从一种语言翻译成另一种  如何在CSS中使用伪类选择器_hover实现悬停效果  顺丰快递在线查询系统 顺丰快递官方查单入口  德邦物流在线查询系统 德邦快递货物运输追踪  电脑从睡眠中被自动唤醒怎么办_Windows唤醒源事件查看与禁用【解决】  《咸鱼之王》新版孙坚技能解析  搜狗浏览器如何查找页面中的文字 搜狗浏览器Ctrl+F页面搜索功能  哔哩哔哩的|直播|间怎么送礼物_哔哩哔哩|直播|送礼操作指南  纯CSS实现自适应宽度与响应式布局的水平按钮组  在VS Code中利用AI辅助进行代码迁移  Word如何将文字快速转成表格 Word文本转换成表格功能使用技巧【效率】  包子漫画在线观看入口 包子漫画网正版全集链接  猫眼电影app如何设置电影上映提醒_猫眼电影上映提醒设置教程  CSS如何在页面中引入重置样式_使用Normalize.css或Reset.css统一浏览器默认样式  PHP utf8_encode 字符编码转换陷阱与解决方案  Excel如何快速找到并断开外部数据源链接_Excel外部数据源断开方法  《杖剑传说》食谱大全  Win10怎么设置快速启动 Win10开启快速启动设置方法  苹果手机如何清理系统缓存数据 iPhone非越狱清理垃圾文件的技巧【系统优化】  Lar*el 中高效执行多列更新:单次查询实现  家里的小飞虫总是不断,用什么方法可以彻底根除?  服装短视频如何起号推广?服装短视频起号推广有什么要求? 

 2023-06-01

了解您产品搜索量及市场趋势,制定营销计划

同行竞争及网站分析保障您的广告效果

点击免费数据支持

提交您的需求,1小时内享受我们的专业解答。

运城市盐湖区信雨科技有限公司


运城市盐湖区信雨科技有限公司

运城市盐湖区信雨科技有限公司是一家深耕海外推广领域十年的专业服务商,作为谷歌推广与Facebook广告全球合作伙伴,聚焦外贸企业出海痛点,以数字化营销为核心,提供一站式海外营销解决方案。公司凭借十年行业沉淀与平台官方资源加持,打破传统外贸获客壁垒,助力企业高效开拓全球市场,成为中小企业出海的可靠合作伙伴。

 8156699

 13765294890

 8156699@qq.com

Notice

We and selected third parties use cookies or similar technologies for technical purposes and, with your consent, for other purposes as specified in the cookie policy.
You can consent to the use of such technologies by closing this notice, by interacting with any link or button outside of this notice or by continuing to browse otherwise.