主从分离:https://blog.csdn.net/weixin_39726347/article/details/88051089
1.在项目settings.py下的读写数据库配置如下:
DATABASES = { 'default': { 'ENGINE': 'django.db.backends.mysql', 'NAME': 'wanwen', 'USER':'root', 'PASSWORD':'root', 'HOST':'192.168.1.102', 'PORT': '3306', # 数据库使用的端口 'OPTIONS':{'init_command':'SET default_storage_engine=INNODB;'}, #设置数据库为INNODB,为第三方数据库登录用 'CONN_MAX_AGE':600, #数据库持久化,此处设置600秒即10分钟,有助于减少内存泄漏或导致一种片状连接的问题,可以设置更长,建议不超过1小时 #设置的持久化连接每次都将存活10分钟 }, 'slave': { 'ENGINE': 'django.db.backends.mysql', 'NAME': 'wanwenread', 'USER': 'readuser', 'PASSWORD': 'redpasswd', 'HOST': '192.168.1.102', 'PORT': '8306', # 数据库使用的端口 'OPTIONS': {'init_command': 'SET default_storage_engine=INNODB;'}, # 设置数据库为INNODB,为第三方数据库登录用 'CONN_MAX_AGE': 600, # 数据库持久化,此处设置600秒即10分钟,有助于减少内存泄漏或导致一种片状连接的问题,可以设置更长,建议不超过1小时 # 设置的持久化连接每次都将存活10分钟 } }
2.1.在项目根目录下创建数据库路由文件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.2 .一主多从
2.3.分库分表
2.4. 手动分离
3.项目setting配置文件中配置读写分离路由:
# 数据库配置读写分离
DATABASE_ROUTERS = ['db_router.MasterSlaveDBRouter',] # 指定你的路由分发类,读都在"slave"上,写都在"default"上
4.创建数据库表:
python manage.py makemigrations # 在migrations文件夹下生成记录 python manage.py migrate --database default # 默认可以不写参数 ,直接使用 python manage.py migrate python manage.py migrate --database slave # 在从库再迁移一次,就可以在上面建立相同的表,这里的database后面的名字(slave)要和设置中的数据库设置的名字(slave)一样,注意不是库名(readuser)
5.数据库配置
5.1.进入服务器,使用 :
cd //
find . -name my.cnf
找到my.cnf配置,默认安装的数据库位置为./etc/my.cnf,lampp的数据库配置文件位置为:/opt/lampp/etc/my.cnf
5.2.