mysql 主从 MySQLroute_mysql主从复制
一: 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主从复制相关推荐
- hibernate mysql 主从_MYSQL主从复制和写分离
基础篇https://edu.51cto.com/course/19845.html https://edu.51cto.com/course/19845.html https://edu.51cto ...
- mysql主从skip1677_mysql主从复制部署
主从复制的用途: 实时灾备,用于故障切换 读写分离,提供查询服务 备份,避免影响业务 主从复制部署 必要条件 主库开启binlog日志(设置log-bin参数) 主从server-id不同 从库服务器 ...
- mysql 主从服务-主从复制数据一致性校验出现的问题
使用校验命令出现的问题 pt-table-checksum --nocheck-replication-filters --replicate=check_data.checksums --datab ...
- 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 ...
- mysql 主从1146_mysql 主从复制1146错误处理办法
错误现象: Replicate_Wild_Ignore_Table: Last_Errno: 1146 Last_Error: Error 'Table 'mydb.test1146' doesn't ...
- mysql 主从 now_MySql主从复制搭建方法
安装完成之后需要进行初始化,我这里直接写了一个shell的函数进行初始化,可以复制后直接调用.也可以手动初始化 Initialization_Mysql() { if [ ! -f /usr/bin/ ...
- 【图文教程】MySQL 主从
MySQL 主从 MySQL主从介绍 1. 配置 master 2. 配置 slave 3. 查看 slave 主从同步 4. 分别在 master 和 slave 上进行主从测试 5. 扩展 MyS ...
- mysql 主从 问题_Mysql主从复制的问题与解决
主从复制的原理 主库将变更的操作写入bin-log日志中(增,删,改操作). 从库中的I/O线程将主库的bin-log拷贝到本地,写入relay-log(中继日志中) 从库的SQL线程从中继日志中读取 ...
- Linux下MySQL 5.7 主从复制(主从同步)
首先要准备两台服务器,一台主服务器(Master),另一台从服务器(Slave),然后要保证Master与Slave的版本要相同且Master不能高于Slave的版本,一般稳健的做法都是使其版本相同, ...
最新文章
- ISA系列之ISA Server 2004 中的新增功能--利用多个网络
- Sqlserver中char,nchar,varchar与Nvarchar的区别
- SLAM: Ubuntu14.04_Kylin安装ROS-Indigo
- 26_多线程_第26天(Thread、线程创建、线程池)_讲义
- 如何在代码中让按钮高亮_各种博客的代码高亮是如何实现的
- 基于JAVA+SpringMVC+MYSQL的苗木销售系统
- Linux下php-fpm进程过多导致内存耗尽问题解决
- mysql主从备份 ssl_基于SSL的mysql主从复制
- S3C2440小板子-烧写笔记
- Webpack 2 视频教程 020 - Webpack 2 中的 HMR ( Hot Module Replacement )
- Linux系统备份与还原
- 分享文章到新浪微博(源码)
- vue3.0父传子,父传孙,子传孙,孙传父,孙传子的传值
- Field baseMapper in xxxxx required a bean of type 'xxxxxx' that could not be found 问题
- 逍遥模拟器使用指南(四、逍遥安卓模拟器电脑版xposed框架教程)
- 花了10分钟终于明白矩阵的逆怎么用了!
- R网格MIC与频繁项集
- Hive-cli(hive)与Beeline的区别
- VMware Workstation16 安装win10教程
- 彻底解决PPt一直弹出mathtype错误信息