日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 人文社科 > 生活经验 >内容正文

生活经验

mysql 主从 MySQLroute_mysql主从复制

發(fā)布時間:2023/11/27 生活经验 41 豆豆
生活随笔 收集整理的這篇文章主要介紹了 mysql 主从 MySQLroute_mysql主从复制 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

一: mysql主從復制大體流程

1. master會將變動記錄到二進制日志里面

2. master有一個i/o將二進制日志發(fā)送到slave

3. slave有一個i/o線程把master發(fā)送來的二進制寫入到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')

創(chuàng)建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自動操作

創(chuàng)建router.py文件(在里面寫入如上面的router.py文件)

問題: (分庫)

app01中的表在default數據庫創(chuàng)建

app02中的表在db1數據庫創(chuàng)建

如何解決不同的應用使用不同的數據庫?

實現步驟:(settings配置如上)

1.

python manage.py makemigrations

2.

#app01中的表在default數據庫創(chuàng)建

python manage.py migrate app01 --database=default

3.

#app02中的表在db1數據庫創(chuàng)建

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,那么表示交給后續(xù)的router,如果后續(xù)沒有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主从复制的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。