django项目之mysql读写分离

本文详细介绍了MySQL数据库主从同步的实现方法,包括配置过程、数据备份方式,并提供了Django框架下实现主从同步的具体步骤。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

今天是一个特殊的日子,百年不遇,中秋和国庆同一天,而且是我从第一家公司正式辞职的日子,哎!
主要介绍一下mysql数据库进行主从同步的实现方法
介绍:

简介:
	分主服务器和从服务器,主服务器负责写数据,从服务器负责读数据
	主服务器写入数据后,即刻将写入数据的命令发送给从服务器,从而使得主从数据同步
	mysql服务器之间的主从同步是基于二进制日志机制

目的:
	提高读写性能
	保证数据安全

具体实现步骤:

配置从服务器:(Docker安装mysql从机)
	获取镜像:
		sudo docker image pull mysql:5.7.22
		或
		suod docker load -i 文件路径/xxx.tar
	指定mysql从机配置文件:(把主机配置文件拷贝到从机)
		mkdir mysql_slave    # 创建文件夹,存放从机数据和配置文件
		mkdir data
		cp -r 主机配置文件地址 ./
	修改从机配置文件:
		# 修改端口或ip
		port = 8306
		# 关闭日志
		#general_log = 0
		# 配置从机唯一编码
		server-id = 2
	运行从机:
		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
		
主从同步实现:
	配置主机:
		修改主机配置文件:
			# 开启日志
			general_log_file = /var/log/mysql/mysql.log
			general_log = 1
			# 主机唯一编码
			server-id = 1
			# 二进制日志文件(最重要,主从就是根据二进制日志文件进行同步)
			log_bin = /var/log/mysql/mysql-bin.log
		从机备份主机原有数据:(冷备份,项目上线前配置)
			# 收集主机原有数据
			mysqldump -uroot -pmysql --all-databases --lock-all-tables > ~/master_db.sql
			# 从机复制主机原有数据
			mysql -uroot -pmysql -h127.0.0.1 --port=8306 < ~/master_db.sql
		从机备份主机原有数据:(热备份,项目上线后实时同步数据)(主机中创建一个从机的账号)
			# 创建从机账号
			GRANT REPLICATION SLAVE ON *.* TO 'slave'@'%' identified by 'slave';	
			# 刷新权限
			FLUSH PRIVILEGES;
			# 展示主机的二进制日志信息(很重要,在连接主机是要用到)
			SHOW MASTER STATUS;
			# 登录从机
			# 连接主机
			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;
			# 开启从机服务(mysql主从同步彻底完成)
			start slave;
			# 展示从机服务状态
			show slave status \G

总结:

总结:
	要想主从同步,先需要创建一个从机服务器
	创建从机服务器,需要设置从机配置文件,和数据
	然后分别修改主机和从机的配置文件
	然后设置从机同步备份主机的数据,可以分冷备份和热备份
	冷备份只能使从机和主机数据保持一致,但是主机修改数据后,从机不能同步更新,需要继续热备份

Django实现mysql主从同步方法:

增加从机数据库配置
创建和配置数据库读写路由:
	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 = ['路径']
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值