前几天为了上读写分离功能, MySQL5.1直接升到5.6 (而且5.1也不维护了)。。
新增的只读实例 找了半天才在管理控制台看到 常规实例点开+号,展开才能看到。 不是类型筛选(筛选只有一个选项常规实例)
自定义了django db router:
import random
class MasterSlaveRouter(object):
def db_for_read(self, model, **hints):
return random.choice(['slave1', 'slave2', 'slave3'])
def db_for_write(self, model, **hints):
return 'default'
def allow_relation(self, obj1, obj2, **hints):
return True
def allow_syncdb(self, db, model):
return True
settings.py 添加的配置如下:
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql', # Add 'postgresql_psycopg2', 'postgresql', 'mysql', 'sqlite3' or 'oracle'.
'NAME': 'xxxxxxx', # Or path to database file if using sqlite3.
'USER': 'xxxxxx', # Not used with sqlite3.
'PASSWORD': 'xxxxxx', # Not used with sqlite3.
'HOST': 'xxxxx.mysql.rds.aliyuncs.com', # Set to empty string for localhost. Not used with sqlite3.
'PORT': '', # Set to empty string for default. Not used with sqlite3.
'OPTIONS': {
'use_unicode': 'utf-8',
'init_command': 'SET storage_engine=INNODB',
}
},
'slave1': {
'ENGINE': 'django.db.backends.mysql', # Add 'postgresql_psycopg2', 'postgresql', 'mysql', 'sqlite3' or 'oracle'.
'NAME': 'xxxx', # Or path to database file if using sqlite3.
'USER': 'xxxxx', # Not used with sqlite3.
'PASSWORD': 'xxxxxx', # Not used with sqlite3.
'HOST': 'xxxxxxxxx.mysql.rds.aliyuncs.com', # Set to empty string for localhost. Not used with sqlite3.
'PORT': '', # Set to empty string for default. Not used with sqlite3.
'OPTIONS': {
'use_unicode': 'utf-8',
'init_command': 'SET storage_engine=INNODB',
}
}
}
DATABASE_ROUTERS = ['epub360.db_router.MasterSlaveRouter']
搞定, 这个功能对django版本好像是>=1.2 ,应该都能用吧,还是挺方便的。 python代码贴出来,格式就不对了。复制了还要自己改真心麻烦。
-------------------------
我们看能不能优化下,@xiaofanqie
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。