从 SQLite 迁移到 MySQL

首先请确认 MySQL 的 Python 模块已经安装. Ubuntu 下,安装命令为 apt-get install python-mysqldb.

请按以下步骤操作:

  1. 停止 Seafile 和 Seahub
  2. 下载 sqlite2mysql.pysqlite2mysql.sh到 Seafile 的安装根目录(/data/haiwen)里.
  3. 运行 sqlite2mysql.sh 脚本
  chmod +x sqlite2mysql.sh
  ./sqlite2mysql.sh

这个脚本将生成三个文件:`ccnet-db.sql`, `seafile-db.sql`, `seahub-db.sql`。
  1. 新建3个数据库,分别命名为 ccnet-db, seafile-db, seahub-db.
  create database `ccnet-db` character set = 'utf8';
  create database `seafile-db` character set = 'utf8';
  create database `seahub-db` character set = 'utf8';

  1. 修改 /etc/my.conf, 添加下列语句,并重启 mysql (sudo service mysql restart),这个语句主要是确保数据库使用 UTF8 编码
    [mysqld]
    collation-server = utf8_unicode_ci
    init-connect='SET NAMES utf8'
    character-set-server = utf8

  1. 运行 sql 文件:
  mysql> use `ccnet-db`
  mysql> source ccnet-db.sql
  mysql> use `seafile-db`
  mysql> source seafile-db.sql
  mysql> use `seahub-db`
  mysql> source seahub-db.sql

  1. 更改配置

    conf/ccnet.conf 中增加以下语句:

    [Database]
    ENGINE=mysql
    HOST=127.0.0.1
    USER=root
    PASSWD=root
    DB=ccnet-db
    CONNECTION_CHARSET=utf8

注意: 使用 `127.0.0.1`, 不要使用 `localhost`.

将 `seafile.conf` 中的数据库配置信息更改文以下语句:

    [database]
    type=mysql
    host=127.0.0.1
    user=root
    password=root
    db_name=seafile-db
    connection_charset=utf8

在 `seahub_settings.py` 中增加以下语句:

    DATABASES = {
        'default': {
            'ENGINE': 'django.db.backends.mysql',
            'USER' : 'root',
            'PASSWORD' : 'root',
            'NAME' : 'seahub-db',
            'HOST' : '127.0.0.1',
            'OPTIONS': {
                "init_command": "SET storage_engine=INNODB",
            }
        }
    }

  1. 重启 Seafile and Seahub

FAQ

遇到 errno: 150 "Foreign key constraint is incorrectly formed" 错误。

这个报错,一般是因为当前创建的表包含外键,但外键对应的主键所在的表,还没有被创建。所以,请检查脚本生成 sql 文件中,数据库表的创建顺序。正确的的顺序是:

auth_user
auth_group
auth_permission
auth_group_permissions
auth_user_groups
auth_user_user_permissions

post_office_emailtemplate
post_office_email
post_office_attachment
post_office_attachment_emails

Last modified by lian-name-lian, 2023-10-18

FAQ