Django中实现MySQL主从同步实现读写分离
1 MySQL主從同步1. 主從同步機制
1.主從同步介紹和優點
在多臺數據服務器中,分為主服務器和從服務器。一臺主服務器對應多臺從服務器。
主服務器只負責寫入數據,從服務器只負責同步主服務器的數據,并讓外部程序讀取數據。
主服務器寫入數據后,即刻將寫入數據的命令發送給從服務器,從而使得主從數據同步。
應用程序可以隨機讀取某一臺從服務器的數據,這樣就可以分攤讀取數據的壓力。
當從服務器不能工作時,整個系統將不受影響;當主服務器不能工作時,可以方便地從從服務器選舉一臺來當主服務器
使用主從同步的優點:
提高讀寫性能
因為主從同步之后,數據寫入和讀取是在不同的服務器上進行的,而且可以通過增加從服務器來提高數據庫的讀取性能。
提高數據安全
因為數據已復制到從服務器,可以在從服務器上備份而不破壞主服務器相應數據。
2.主從同步機制
?
MySQL服務器之間的主從同步是基于二進制日志機制,主服務器使用二進制日志來記錄數據庫的變動情況,從服務器通過讀取和執行該日志文件來保持和主服務器的數據一致。
2. Docker安裝運行MySQL從機
提示:
本項目中我們搭建一主一從的主從同步。
主服務器:ubuntu操作系統中的MySQL。
從服務器:Docker容器中的MySQL。
1.獲取MySQL鏡像
主從同步盡量保證多臺MySQL的版本相同或相近。
$ sudo docker image pull mysql:5.7.22或$ sudo docker load -i 文件路徑/mysql_docker_5722.tar
2.指定MySQL從機配置文件
在使用Docker安裝運行MySQL從機之前,需要準備好從機的配置文件。
為了快速準備從機的配置文件,我們直接把主機的配置文件拷貝到從機中。
$?cd?~$ mkdir mysql_slave$?cd?mysql_slave$ mkdir data$ cp -r /etc/mysql/mysql.conf.d ./
3.修改MySQL從機配置文件
編輯 ~/mysql_slave/mysql.conf.d/mysqld.cnf文件。
由于主從機都在同一個電腦中,所以我們選擇使用不同的端口號區分主從機,從機端口號是8306。
# 從機端口號port =?8306# 關閉日志general_log?=?0# 從機唯一編號server-id =?2
4.Docker安裝運行MySQL從機
MYSQL_ROOT_PASSWORD:創建 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
5.測試從機是否創建成功
$ mysql -uroot -pmysql -h?127.0.0.1?--port=83063. 主從同步實現
1.配置主機(ubuntu中MySQL)
配置文件如有修改,需要重啟主機。
sudo service mysql restart
# 開啟日志general_log_file = /var/log/mysql/mysql.loggeneral_log?=?1# 主機唯一編號server-id =?1# 二進制日志文件log_bin = /var/log/mysql/mysql-bin.log
2.從機備份主機原有數據
在做主從同步時,如果從機需要主機上原有數據,就要先復制一份到從機。
# 1. 收集主機原有數據$ mysqldump -uroot -pmysql --all-databases --lock-all-tables > ~/master_db.sql# 2. 從機復制主機原有數據$ mysql -uroot -pmysql -h127.0.0.1?--port=8306?< ~/master_db.sql
3.主從同步實現
1.創建用于從服務器同步數據的帳號
# 登錄到主機$ mysql –uroot –pmysql# 創建從機賬號$ GRANT REPLICATION SLAVE ON *.* TO?'slave'@'%'identified by?'slave';# 刷新權限$ FLUSH PRIVILEGES;
2.展示ubuntu中MySQL主機的二進制日志信息
$ SHOW MASTER STATUS;
3.Docker中MySQL從機連接ubuntu中MySQL主機
# 登錄到從機$ 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='mysql-bin.000250', master_log_pos=990250;# 開啟從機服務$ start slave;# 展示從機服務狀態$ show slave status \G
測試:
在主機中新建一個數據庫后,直接在從機查看是否存在。
2 Django實現MySQL讀寫分離1. 增加slave數據庫的配置DATABASES = {????'default': {?# 寫(主機)????????'ENGINE':?'django.db.backends.mysql',?# 數據庫引擎????????'HOST':?'192.168.103.158',?# 數據庫主機????????'PORT':?3306,?# 數據庫端口????????'USER':?'itcast',?# 數據庫用戶名????????'PASSWORD':?'123456',?# 數據庫用戶密碼????????'NAME':?'meiduo_mall'?# 數據庫名字????},????'slave': {?# 讀(從機)????????'ENGINE':?'django.db.backends.mysql',????????'HOST':?'192.168.103.158',????????'PORT':?8306,????????'USER':?'root',????????'PASSWORD':?'mysql',????????'NAME':?'meiduo_mall'????}}2. 創建和配置數據庫讀寫路由
1.創建數據庫讀寫路由
在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
2.配置數據庫讀寫路由
DATABASE_ROUTERS = ['meiduo_mall.utils.db_router.MasterSlaveDBRouter']
————————————————
版權聲明:本文為CSDN博主「xiaoyaGrace」的原創文章,遵循CC 4.0 BY-SA版權協議,轉載請附上原文出處鏈接及本聲明。
原文鏈接:https://blog.csdn.net/xiaoyaGrace/article/details/103627912
總結
以上是生活随笔為你收集整理的Django中实现MySQL主从同步实现读写分离的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 骁龙888和a14哪个强 旗舰芯即将泛
- 下一篇: 基金净值到4了 想要买入要注意这几