久久精品人人爽,华人av在线,亚洲性视频网站,欧美专区一二三

使用Django怎么實現MySQL讀寫分離

159次閱讀
沒有評論

共計 3775 個字符,預計需要花費 10 分鐘才能閱讀完成。

自動寫代碼機器人,免費開通

本篇文章為大家展示了使用 Django 怎么實現 MySQL 讀寫分離,內容簡明扼要并且容易理解,絕對能使你眼前一亮,通過這篇文章的詳細介紹希望你能有所收獲。

主從同步介紹和優點

在多臺數據服務器中,分為主服務器和從服務器。一臺主服務器對應多臺從服務器。
主服務器只負責寫入數據,從服務器只負責同步主服務器的數據,并讓外部程序讀取數據。
主服務器寫入數據后,即刻將寫入數據的命令發送給從服務器,從而使得主從數據同步。
應用程序可以隨機讀取某一臺從服務器的數據,這樣就可以分攤讀取數據的壓力。
當從服務器不能工作時,整個系統將不受影響;當主服務器不能工作時,可以方便地從從服務器選舉一臺來當主服務器
使用主從同步的優點:
提高讀寫性能
因為主從同步之后,數據寫入和讀取是在不同的服務器上進行的,而且可以通過增加從服務器來提高數據庫的讀取性能。
提高數據安全
因為數據已復制到從服務器,可以在從服務器上備份而不破壞主服務器相應數據。
主從同步機制
注意:MySQL 服務器之間的主從同步是基于二進制日志機制,主服務器使用二進制日志來記錄數據庫的變動情況,從服務器通過讀取和執行該日志文件來保持和主服務器的數據一致。Docker 安裝運行 MySQL 從機
本項目中我們搭建一主一從的主從同步。主服務器:ubuntu 操作系統中的 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 從機之前,需要準備好從機的配置文件。
為了快速準備從機的配置文件,我們直接把主機的配置文件拷貝到從機中。
# 創建 MySQL 從機配置文件夾
mkdir mysql_slave
# 創建裝數據庫數據文件夾
mkdir datacp -r /etc/mysql/mysql.conf.d ./

修改 MySQL 從機配置文件編輯 ~/mysql_slave/mysql.conf.d/mysqld.cnf 文件。
由于主從機都在同一個電腦中,所以我們選擇使用不同的端口號區分主從機,從機端口號是 8306。
# 從機端口號
port = 8306
# 關閉日志
general_log = 0
# 從機唯一編號
server-id = 2

Docker 安裝運行 MySQL 從機創建 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

測試從機是否創建成功 mysql -uroot -pmysql -h 127.0.0.1 –port=8306

主從同步實現
配置主機(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

從機備份主機原有數據# 在做主從同步時,如果從機需要主機上原有數據,就要先復制一份到從機
# 1. 收集主機原有數據
mysqldump -uroot -pmysql –all-databases –lock-all-tables ~/master_db.sql# 2. 從機復制主機原有數據
mysql -uroot -pmysql -h227.0.0.1 –port=8306 ~/master_db.sql

主從同步實現# 登錄到主機
$ mysql –uroot –pmysql
# 創建從機賬號
$ 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;
# 展示從機服務狀態
$ show slave status \G

Django 實現 MySQL 讀寫分離
增加 slave 數據庫的配置
DATABASES = {
    default : {# 寫(主機)
        ENGINE : django.db.backends.mysql , # 數據庫引擎
        HOST : XXXX , # 數據庫主機
        PORT : 3306, # 數據庫端口
        USER : XX , # 數據庫用戶名
        PASSWORD : XXX , # 數據庫用戶密碼
        NAME : XXX # 數據庫名字
    },
    slave : {# 讀(從機)
        ENGINE : django.db.backends.mysql ,
        HOST : XXXX ,
        PORT : 8306,
        USER : XXX ,
        PASSWORD : XXX ,
        NAME : XXX
    }
}

創建和配置數據庫讀寫路由
創建數據庫讀寫路由# 在 meiduo_mall.utils.db_router.py 中實現讀寫路由

class MasterSlaveDBRouter(object):
    數據庫讀寫路由     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):
        是否運行關聯操作
        return True

配置數據庫讀寫路由# 配置數據庫讀寫分離路由
DATABASE_ROUTERS = [meiduo_mall.utils.db_router.MasterSlaveDBRouter]

冷備份
冷備份發生在數據庫已經正常關閉的情況下,當正常關閉時會提供給我們一個完整的數據庫。冷備份是將關鍵性文件拷貝到另外位置的一種說法。對于備份數據庫信息而言,冷備份是最快和最安全的方法。簡單說法就是:離線(沒有新的數據來)復制一份保存,有事就直接用這備份來恢復。
冷備份的優點:
是非??焖俚膫浞莘椒ǎㄖ恍杩截愇募?br />容易歸檔(簡單拷貝即可)
容易恢復到某個時間點上(只需將文件再拷貝回去)
能與歸檔方法相結合,作數據庫“最新狀態”的恢復。
低度維護,高度安全。
冷備份的缺點:
單獨使用時,只能提供到“某一時間點上”的恢復。
在實施備份的全過程中,數據庫必須要作備份而不能作其它工作。也就是說,在冷備份過程中,數據庫必須是關閉狀態。
若磁盤空間有限,只能拷貝到磁帶等其它外部存儲設備上,速度會很慢。
不能按表或按用戶恢復。
值得注意的是冷備份必須在數據庫關閉的情況下進行,當數據庫處于打開狀態時,執行數據庫文件系統備份是無效的。而且在恢復后一定要把數據庫文件的屬組和屬主改為 mysql。熱備份
熱備份是在數據庫運行的情況下,備份數據庫操作的 sql 語句,當數據庫發生問題時,可以重新執行一遍備份的 sql 語句。簡單說就是:在線的保存對數據庫操作的 sql 語句,有事就再跑一遍這些 sql 語句。# 在做主從同步時,如果從機需要主機上原有數據,就要先復制一份到從機
# 1. 收集主機原有數據
mysqldump -uroot -pmysql –all-databases –lock-all-tables ~/master_db.sql# 2. 從機復制主機原有數據(在配置文件所在目錄下,數據會寫入 data 文件中)
mysql -uroot -pmysql -h227.0.0.1 –port=8306 ~/master_db.sql
熱備份的優點:
可在表空間或數據文件級備份,備份時間短。
備份時數據庫仍可使用。
可達到秒級恢復(恢復到某一時間點上)。
可對幾乎所有數據庫實體作恢復。
恢復是快速的,在大多數情況下在數據庫仍工作時恢復。
熱備份的缺點:
不能出錯,否則后果嚴重。
若熱備份不成功,所得結果不可用于時間點的恢復。
因難于維護,所以要特別仔細小心,不允許“以失敗而告終”

上述內容就是使用 Django 怎么實現 MySQL 讀寫分離,你們學到知識或技能了嗎?如果還想學到更多技能或者豐富自己的知識儲備,歡迎關注丸趣 TV 行業資訊頻道。

向 AI 問一下細節

正文完
 
丸趣
版權聲明:本站原創文章,由 丸趣 2023-12-04發表,共計3775字。
轉載說明:除特殊說明外本站除技術相關以外文章皆由網絡搜集發布,轉載請注明出處。
評論(沒有評論)
主站蜘蛛池模板: 浙江省| 徐水县| 武邑县| 多伦县| 莆田市| 夏邑县| 珠海市| 长沙县| 北安市| 江达县| 灌南县| 澳门| 平昌县| 南投市| 阳东县| 阿拉尔市| 四川省| 皋兰县| 尚志市| 衡东县| 青州市| 天等县| 赫章县| 林芝县| 施甸县| 彭阳县| 沁水县| 甘孜| 偏关县| 石嘴山市| 静宁县| 巴南区| 清远市| 寿阳县| 仁布县| 永安市| 榆中县| 榆社县| 蓝山县| 白沙| 龙山县|