一: mysql主从复制大体流程

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

2. master有一个i/o将二进制日志发送到slave

3. slave有一个i/o线程把master发送来的二进制写入到relay日志里面

4. slave有一个SQL线程, 按照relay日志处理slave的数据

二: 主库和从库的配置

注意: 主库和从库的版本要一样

1. 主库配置

[mysqld]

character-set-server=utf8

collation-server=utf8_general_ci

server-id=100log-bin=mysql-bin

[client]

default-character-set=utf8

[mysql]

default-character-set=utf8

2. 从库配置

[mysqld]

character-set-server=utf8

collation-server=utf8_general_ci

server-id=101log-bin=mysql-slave-bin

relay_log=edu-mysql-relay-bin

[client]

default-character-set=utf8

[mysql]

default-character-set=utf8

三: 操作步骤

四: Python代码的实现(读写分离)

1. 实现读写分离的准备

settings.py配置

DATABASES ={

'default': {'ENGINE': 'django.db.backends.mysql','NAME': 'test','USER': 'root','PASSWORD': '123456','HOST': '39.105.40.122','PORT': 33307,

},'slave': {'ENGINE': 'django.db.backends.mysql','NAME': 'test','USER': 'root','PASSWORD': '123456','HOST': '39.105.40.122','PORT': 33306,

}

}

DATABASE_ROUTERS= ['router.Router1',]

views.py

from django.shortcuts importrender,HttpResponse#Create your views here.

from app01.models importBookdefindex(request):#Book.objects.using("default").create(title="xx",price=10)

#ret=Book.objects.all().using("slave")

#using 是queryset对象的方法

#print(ret)

#Book.objects.create(title="yyy", price=100)

ret =Book.objects.all()print(ret)return HttpResponse('ok')

创建router.py文件

classRouter1:

# 只读数据库def db_for_read(self, model, **hints):"""Attempts to read auth models go to auth_db."""

return 'slave'

# 只写数据库

def db_for_write(self, model, **hints):"""Attempts to write auth models go to auth_db."""

return 'default'

# 数据库进行迁移的时候进行约束(但不会报错)

def allow_migrate(self, db, app_label, model_name=None, **hints):#print("zzzz")

if db == 'slave' and app_label=="app01":return False

2. 实现读写分离(手动和自动操作)

2.1 共同操作

python manage.py makemigrations#python manage.py migrate app名字 --database=配置文件数据库名称 注意: 写数据库

python manage.py migrate app01 --database=default

2.2 手动操作(一般不使用)

#用using说明你要往哪个库写还是读

models.UserType.objects.using('default').create(title='普通用户')

result= models.UserType.objects.all().using('slave')

2.3自动操作

创建router.py文件(在里面写入如上面的router.py文件)

问题: (分库)

app01中的表在default数据库创建

app02中的表在db1数据库创建

如何解决不同的应用使用不同的数据库?

实现步骤:(settings配置如上)

1.

python manage.py makemigrations

2.

#app01中的表在default数据库创建

python manage.py migrate app01 --database=default

3.

#app02中的表在db1数据库创建

python manage.py migrate app02 --database=db1

手动操作

m1.UserType.objects.using('default').create(title='VVIP')

m2.Users.objects.using('db1').create(name='VVIP',email='xxx')

自动操作

classRouter1:def db_for_read(self, model, **hints):"""Attempts to read auth models go to auth_db."""

if model._meta.app_label == 'app01':return 'default'

else:return 'db1'

def db_for_write(self, model, **hints):"""Attempts to write auth models go to auth_db."""

if model._meta.app_label == 'app01':return 'default'

else:return 'db1'DATABASE_ROUTERS= ['db_router.Router1', ]

#使用:

m1.UserType.objects.using('default').create(title='VVIP')

m2.Users.objects.using('db1').create(name='VVIP', email='xxx')#其他:

classRouter1:#数据库迁移时进行约束:

def allow_migrate(self, db, app_label, model_name=None, **hints):"""All non-auth models end up in this pool."""

if db == 'db1' and app_label == 'app02':returnTrueelif db == 'default' and app_label == 'app01':returnTrueelse:returnFalse#如果返回None,那么表示交给后续的router,如果后续没有router,则相当于返回True

def db_for_read(self, model, **hints):"""Attempts to read auth models go to auth_db."""

if model._meta.app_label == 'app01':return 'default'

else:return 'db1'

def db_for_write(self, model, **hints):"""Attempts to write auth models go to auth_db."""

if model._meta.app_label == 'app01':return 'default'

else:return 'db1'

mysql 主从 MySQLroute_mysql主从复制相关推荐

  1. hibernate mysql 主从_MYSQL主从复制和写分离

    基础篇https://edu.51cto.com/course/19845.html https://edu.51cto.com/course/19845.html https://edu.51cto ...

  2. mysql主从skip1677_mysql主从复制部署

    主从复制的用途: 实时灾备,用于故障切换 读写分离,提供查询服务 备份,避免影响业务 主从复制部署 必要条件 主库开启binlog日志(设置log-bin参数) 主从server-id不同 从库服务器 ...

  3. mysql 主从服务-主从复制数据一致性校验出现的问题

    使用校验命令出现的问题 pt-table-checksum --nocheck-replication-filters --replicate=check_data.checksums --datab ...

  4. mysql replicate-rewrite-db,mysql主从,_mysql 主从复制 replicate-rewrite-db 无效,mysql主从 - phpStudy...

    mysql 主从复制 replicate-rewrite-db 无效 主库配置: log-bin=mysql-bin server-id = 66 从库配置: server-id = 67 repli ...

  5. mysql 主从1146_mysql 主从复制1146错误处理办法

    错误现象: Replicate_Wild_Ignore_Table: Last_Errno: 1146 Last_Error: Error 'Table 'mydb.test1146' doesn't ...

  6. mysql 主从 now_MySql主从复制搭建方法

    安装完成之后需要进行初始化,我这里直接写了一个shell的函数进行初始化,可以复制后直接调用.也可以手动初始化 Initialization_Mysql() { if [ ! -f /usr/bin/ ...

  7. 【图文教程】MySQL 主从

    MySQL 主从 MySQL主从介绍 1. 配置 master 2. 配置 slave 3. 查看 slave 主从同步 4. 分别在 master 和 slave 上进行主从测试 5. 扩展 MyS ...

  8. mysql 主从 问题_Mysql主从复制的问题与解决

    主从复制的原理 主库将变更的操作写入bin-log日志中(增,删,改操作). 从库中的I/O线程将主库的bin-log拷贝到本地,写入relay-log(中继日志中) 从库的SQL线程从中继日志中读取 ...

  9. Linux下MySQL 5.7 主从复制(主从同步)

    首先要准备两台服务器,一台主服务器(Master),另一台从服务器(Slave),然后要保证Master与Slave的版本要相同且Master不能高于Slave的版本,一般稳健的做法都是使其版本相同, ...

最新文章

  1. ISA系列之ISA Server 2004 中的新增功能--利用多个网络
  2. Sqlserver中char,nchar,varchar与Nvarchar的区别
  3. SLAM: Ubuntu14.04_Kylin安装ROS-Indigo
  4. 26_多线程_第26天(Thread、线程创建、线程池)_讲义
  5. 如何在代码中让按钮高亮_各种博客的代码高亮是如何实现的
  6. 基于JAVA+SpringMVC+MYSQL的苗木销售系统
  7. Linux下php-fpm进程过多导致内存耗尽问题解决
  8. mysql主从备份 ssl_基于SSL的mysql主从复制
  9. S3C2440小板子-烧写笔记
  10. Webpack 2 视频教程 020 - Webpack 2 中的 HMR ( Hot Module Replacement )
  11. Linux系统备份与还原
  12. 分享文章到新浪微博(源码)
  13. vue3.0父传子,父传孙,子传孙,孙传父,孙传子的传值
  14. Field baseMapper in xxxxx required a bean of type 'xxxxxx' that could not be found 问题
  15. 逍遥模拟器使用指南(四、逍遥安卓模拟器电脑版xposed框架教程)
  16. 花了10分钟终于明白矩阵的逆怎么用了!
  17. R网格MIC与频繁项集
  18. Hive-cli(hive)与Beeline的区别
  19. VMware Workstation16 安装win10教程
  20. 彻底解决PPt一直弹出mathtype错误信息

热门文章

  1. 2022-2028年中国输配电设备全产业链投资分析及前景预测报告
  2. Python 标准库之 subprocesss
  3. Docker学习(八)-----Docker安装mysql
  4. LeetCode简单题之矩阵对角线元素的和
  5. Docker暴露端口服务器公网IP无法访问问题排查
  6. TensorFlow算子融合
  7. MinkowskiEngine语义分割
  8. TVM vs TensorRT比较
  9. 什么是智能医院?如何构建自己的解决方案?
  10. 个性化排序的神经协同过滤