共计 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]
冷备份
冷备份发生在数据库已经正常关闭的情况下,当正常关闭时会提供给我们一个完整的数据库。冷备份是将关键性文件拷贝到另外位置的一种说法。对于备份数据库信息而言,冷备份是最快和最安全的方法。简单说法就是:离线(没有新的数据来)复制一份保存,有事就直接用这备份来恢复。
冷备份的优点:
是非常快速的备份方法(只需拷贝文件)
容易归档(简单拷贝即可)
容易恢复到某个时间点上(只需将文件再拷贝回去)
能与归档方法相结合,作数据库“最新状态”的恢复。
低度维护,高度安全。
冷备份的缺点:
单独使用时,只能提供到“某一时间点上”的恢复。
在实施备份的全过程中,数据库必须要作备份而不能作其它工作。也就是说,在冷备份过程中,数据库必须是关闭状态。
若磁盘空间有限,只能拷贝到磁带等其它外部存储设备上,速度会很慢。
不能按表或按用户恢复。
值得注意的是冷备份必须在数据库关闭的情况下进行,当数据库处于打开状态时,执行数据库文件系统备份是无效的。而且在恢复后一定要把数据库文件的属组和属主改为 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 问一下细节