首页 > 技术文章 > 在SAE上同步djanogo的mysql数据库

cjyfff 2014-05-13 19:05 原文

折腾了一个下午,终于搞掂了把djanogo应用的mysql数据库导入到SAE上了,归根到底麻烦的根源是SAE限制多多。下面简单记录一下过程以备日后参考使用。

首先还是修改settings.py,把数据库设置部分修改如下,以便在线上,或是在本机也能调用到数据库:

if 'SERVER_SOFTWARE' in os.environ:
    from sae.const import (
        MYSQL_HOST, MYSQL_PORT, MYSQL_USER, MYSQL_PASS, MYSQL_DB,
    )
else:
    MYSQL_HOST = 'localhost'
    MYSQL_PORT = '3306'
    MYSQL_USER = 'local_user'
    MYSQL_PASS = 'local_passwd'
    MYSQL_DB = 'app_cjyfff'

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.mysql',
        'NAME': MYSQL_DB,
        'USER': MYSQL_USER,
        'PASSWORD': MYSQL_PASS,
        'HOST': MYSQL_HOST,
        'PORT': MYSQL_PORT,
    }
}

SAE的文档说可以线上创建自己的数据库的,但是我找了半天都没找到创建选项,只看到一个默认存在的数据库(本例中的app_cjyfff,这个名字取决于你所创建的app名称),于是我只好也在本地mysql上创建一个同名的数据库。注意创建时指定utf-8编码,否则中文会出现乱码。另外SAE对于个人用户,数据库只支持MyISAM引擎,所以在创建数据库之前记得修改my.cnf把默认引擎改为MyISAM。创建好app_cjyfff这个数据库后,到django的目录执行python manage.py syncdb命令在数据库中创建表,然后用mysqldump导出为sql文件。另外还要注意的是,可能由于SAE没有开放LOCK、UNLOCK的操作权限给用户,因此假如sql文件中有LOCK、UNLOCK语句的话会导致导入失败。把sql文件中的LOCK、UNLOCK语句删除即可。然后用SAE自带的phpMyAdmin把这个sql文件导入到SAE中吧。

推荐阅读