使用Django怎么实现MySQL读写分离
发布时间:2022-02-12 14:12:08 所属栏目:MySql教程 来源:互联网
导读:本篇文章为大家展示了使用Django怎么实现MySQL读写分离,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。 主从同步介绍和优点 在多台数据服务器中,分为主服务器和从服务器。一台主服务器对应多台从服务器。 主
本篇文章为大家展示了使用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读写分离,你们学到知识或技能了吗? (编辑:成都站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
站长推荐