本篇文章為大家展示了使用Django怎么實現(xiàn)MySQL讀寫分離,內容簡明扼要并且容易理解,絕對能使你眼前一亮,通過這篇文章的詳細介紹希望你能有所收獲。
創(chuàng)新互聯(lián)成都企業(yè)網站建設服務,提供成都做網站、網站設計、外貿營銷網站建設網站開發(fā),網站定制,建網站,網站搭建,網站設計,成都響應式網站建設,網頁設計師打造企業(yè)風格網站,提供周到的售前咨詢和貼心的售后服務。歡迎咨詢做網站需要多少錢:18980820575
主從同步介紹和優(yōu)點
在多臺數(shù)據服務器中,分為主服務器和從服務器。一臺主服務器對應多臺從服務器。
主服務器只負責寫入數(shù)據,從服務器只負責同步主服務器的數(shù)據,并讓外部程序讀取數(shù)據。
主服務器寫入數(shù)據后,即刻將寫入數(shù)據的命令發(fā)送給從服務器,從而使得主從數(shù)據同步。
應用程序可以隨機讀取某一臺從服務器的數(shù)據,這樣就可以分攤讀取數(shù)據的壓力。
當從服務器不能工作時,整個系統(tǒng)將不受影響;當主服務器不能工作時,可以方便地從從服務器選舉一臺來當主服務器
使用主從同步的優(yōu)點:
提高讀寫性能
因為主從同步之后,數(shù)據寫入和讀取是在不同的服務器上進行的,而且可以通過增加從服務器來提高數(shù)據庫的讀取性能。
提高數(shù)據安全
因為數(shù)據已復制到從服務器,可以在從服務器上備份而不破壞主服務器相應數(shù)據。
主從同步機制
注意:MySQL服務器之間的主從同步是基于二進制日志機制,主服務器使用二進制日志來記錄數(shù)據庫的變動情況,從服務器通過讀取和執(zhí)行該日志文件來保持和主服務器的數(shù)據一致。Docker安裝運行MySQL從機
本項目中我們搭建一主一從的主從同步。主服務器:ubuntu操作系統(tǒng)中的MySQL。從服務器:Docker容器中的MySQL獲取MySQL鏡像# 主從同步盡量保證多臺MySQL的版本相同或相近
sudo docker image pull mysql:5.7.22 # 5.7.22版本
sudo docker load -i 文件路徑/mysql_docker_5722.tar
指定MySQL從機配置文件在使用Docker安裝運行MySQL從機之前,需要準備好從機的配置文件。
為了快速準備從機的配置文件,我們直接把主機的配置文件拷貝到從機中。
# 創(chuàng)建MySQL從機配置文件夾
mkdir mysql_slave
# 創(chuàng)建裝數(shù)據庫數(shù)據文件夾
mkdir datacp -r /etc/mysql/mysql.conf.d ./
修改MySQL從機配置文件編輯 ~/mysql_slave/mysql.conf.d/mysqld.cnf文件。
由于主從機都在同一個電腦中,所以我們選擇使用不同的端口號區(qū)分主從機,從機端口號是8306。
# 從機端口號
port = 8306
# 關閉日志
general_log = 0
# 從機唯一編號
server-id = 2
Docker安裝運行MySQL從機創(chuàng)建 root 用戶的密碼為 mysql sudo docker run --name mysql-slave -e MYSQL_ROOT_PASSWORD=mysql -d --network=host -v /home/python/mysql_slave/data:/var/lib/mysql -v /home/python/mysql_slave/mysql.conf.d:/etc/mysql/mysql.conf.d mysql:5.7.22
測試從機是否創(chuàng)建成功mysql -uroot -pmysql -h 127.0.0.1 --port=8306
主從同步實現(xiàn)
配置主機(ubuntu中MySQL)配置文件如有修改,需要重啟主機。sudo service mysql restart
# 開啟日志
general_log_file = /var/log/mysql/mysql.log
general_log = 1
# 主機唯一編號
server-id = 1
# 二進制日志文件
log_bin = /var/log/mysql/mysql-bin.log
從機備份主機原有數(shù)據# 在做主從同步時,如果從機需要主機上原有數(shù)據,就要先復制一份到從機
# 1. 收集主機原有數(shù)據
mysqldump -uroot -pmysql --all-databases --lock-all-tables > ~/master_db.sql# 2. 從機復制主機原有數(shù)據
mysql -uroot -pmysql -h227.0.0.1 --port=8306 < ~/master_db.sql
主從同步實現(xiàn)# 登錄到主機
$ mysql –uroot –pmysql
# 創(chuàng)建從機賬號
$ GRANT REPLICATION SLAVE ON *.* TO 'slave'@'%' identified by 'slave';
# 刷新權限
$ FLUSH PRIVILEGES;
# 展示ubuntu中MySQL主機的二進制日志信息
$ SHOW MASTER STATUS;
# 可以看到master_log_file和master_log_pos=Position
# 登錄到從機
$ mysql -uroot -pmysql -h 127.0.0.1 --port=8306
# 從機連接到主機
$ change master to master_host='127.0.0.1', master_user='slave', master_password='slave',master_log_file=XXX, master_log_pos=XXX;
# 開啟從機服務
$ start slave;
# 展示從機服務狀態(tài)
$ show slave status \G
Django實現(xiàn)MySQL讀寫分離
增加slave數(shù)據庫的配置
DATABASES = {
'default': { # 寫(主機)
'ENGINE': 'django.db.backends.mysql', # 數(shù)據庫引擎
'HOST': 'XXXX', # 數(shù)據庫主機
'PORT': 3306, # 數(shù)據庫端口
'USER': 'XX', # 數(shù)據庫用戶名
'PASSWORD': 'XXX', # 數(shù)據庫用戶密碼
'NAME': 'XXX' # 數(shù)據庫名字
},
'slave': { # 讀(從機)
'ENGINE': 'django.db.backends.mysql',
'HOST': 'XXXX',
'PORT': 8306,
'USER': 'XXX',
'PASSWORD': 'XXX',
'NAME': 'XXX'
}
}
創(chuàng)建和配置數(shù)據庫讀寫路由
創(chuàng)建數(shù)據庫讀寫路由# 在meiduo_mall.utils.db_router.py中實現(xiàn)讀寫路由
class MasterSlaveDBRouter(object):
"""數(shù)據庫讀寫路由""" def db_for_read(self, model, **hints):
"""讀"""
return "slave" def db_for_write(self, model, **hints):
"""寫"""
return "default" def allow_relation(self, obj1, obj2, **hints):
"""是否運行關聯(lián)操作"""
return True
配置數(shù)據庫讀寫路由# 配置數(shù)據庫讀寫分離路由
DATABASE_ROUTERS = ['meiduo_mall.utils.db_router.MasterSlaveDBRouter']
冷備份
冷備份發(fā)生在數(shù)據庫已經正常關閉的情況下,當正常關閉時會提供給我們一個完整的數(shù)據庫。冷備份是將關鍵性文件拷貝到另外位置的一種說法。對于備份數(shù)據庫信息而言,冷備份是最快和最安全的方法。簡單說法就是:離線(沒有新的數(shù)據來)復制一份保存,有事就直接用這備份來恢復。
冷備份的優(yōu)點:
是非??焖俚膫浞莘椒ǎㄖ恍杩截愇募?br/>容易歸檔(簡單拷貝即可)
容易恢復到某個時間點上(只需將文件再拷貝回去)
能與歸檔方法相結合,作數(shù)據庫“最新狀態(tài)”的恢復。
低度維護,高度安全。
冷備份的缺點:
單獨使用時,只能提供到“某一時間點上”的恢復。
在實施備份的全過程中,數(shù)據庫必須要作備份而不能作其它工作。也就是說,在冷備份過程中,數(shù)據庫必須是關閉狀態(tài)。
若磁盤空間有限,只能拷貝到磁帶等其它外部存儲設備上,速度會很慢。
不能按表或按用戶恢復。
值得注意的是冷備份必須在數(shù)據庫關閉的情況下進行,當數(shù)據庫處于打開狀態(tài)時,執(zhí)行數(shù)據庫文件系統(tǒng)備份是無效的 。而且在恢復后一定要把數(shù)據庫文件的屬組和屬主改為mysql。熱備份
熱備份是在數(shù)據庫運行的情況下,備份數(shù)據庫操作的sql語句,當數(shù)據庫發(fā)生問題時,可以重新執(zhí)行一遍備份的sql語句。簡單說就是:在線的保存對數(shù)據庫操作的sql語句,有事就再跑一遍這些sql語句。# 在做主從同步時,如果從機需要主機上原有數(shù)據,就要先復制一份到從機
# 1. 收集主機原有數(shù)據
mysqldump -uroot -pmysql --all-databases --lock-all-tables > ~/master_db.sql# 2. 從機復制主機原有數(shù)據(在配置文件所在目錄下,數(shù)據會寫入data文件中)
mysql -uroot -pmysql -h227.0.0.1 --port=8306 < ~/master_db.sql
熱備份的優(yōu)點:
可在表空間或數(shù)據文件級備份,備份時間短。
備份時數(shù)據庫仍可使用。
可達到秒級恢復(恢復到某一時間點上)。
可對幾乎所有數(shù)據庫實體作恢復。
恢復是快速的,在大多數(shù)情況下在數(shù)據庫仍工作時恢復。
熱備份的缺點:
不能出錯,否則后果嚴重。
若熱備份不成功,所得結果不可用于時間點的恢復。
因難于維護,所以要特別仔細小心,不允許“以失敗而告終”
上述內容就是使用Django怎么實現(xiàn)MySQL讀寫分離,你們學到知識或技能了嗎?如果還想學到更多技能或者豐富自己的知識儲備,歡迎關注創(chuàng)新互聯(lián)-成都網站建設公司行業(yè)資訊頻道。
網站名稱:使用Django怎么實現(xiàn)MySQL讀寫分離-創(chuàng)新互聯(lián)
網站URL:http://www.rwnh.cn/article2/djoooc.html
成都網站建設公司_創(chuàng)新互聯(lián),為您提供虛擬主機、網站收錄、App設計、云服務器、商城網站、移動網站建設
聲明:本網站發(fā)布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經允許不得轉載,或轉載時需注明來源: 創(chuàng)新互聯(lián)