SQLite → MySQL 不建议直接手工转 SQL。
1
| gitea dump → MySQL初始化 → 导入dump的gitea-db.sql → 启动Gitea
|
Gitea 官方说明:备份一致性要求停机,gitea dump 会生成 ZIP 备份包。
1. docker-compose.yml 示例
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45
| services: mysql: image: mysql:8.0 container_name: gitea-mysql restart: always environment: MYSQL_ROOT_PASSWORD: rootpass123 MYSQL_DATABASE: gitea MYSQL_USER: gitea MYSQL_PASSWORD: gitea_pass123 TZ: Asia/Shanghai command: - --character-set-server=utf8mb4 - --collation-server=utf8mb4_unicode_ci volumes: - ./mysql:/var/lib/mysql networks: - gitea
gitea: image: gitea/gitea:latest container_name: gitea restart: always depends_on: - mysql ports: - "3000:3000" - "222:22" environment: USER_UID: 1000 USER_GID: 1000 GITEA__database__DB_TYPE: mysql GITEA__database__HOST: mysql:3306 GITEA__database__NAME: gitea GITEA__database__USER: gitea GITEA__database__PASSWD: gitea_pass123 GITEA__database__CHARSET: utf8mb4 volumes: - ./data:/data networks: - gitea
networks: gitea: driver: bridge
|
2. 迁移步骤
2.1 停止写入
2.2 用旧 SQLite 配置启动一次并导出
关闭端口映射本地等,禁止用户在访问。
如果容器已停,临时启动旧版配置后执行:
1
| docker exec -it gitea bash
|
容器内执行:
1 2
| cd /tmp gitea dump -c /data/gitea/conf/app.ini
|
会生成类似:
1
| /tmp/gitea-dump-xxxx.zip
|
复制到宿主机:
1
| docker cp gitea:/tmp/gitea-dump-xxxx.zip ./gitea-dump.zip
|
2.3 解压 dump
1 2 3 4
| mkdir gitea-restore unzip gitea-dump.zip -d gitea-restore cd gitea-restore ls
|
通常会看到:
1 2 3 4
| app.ini gitea-db.sql repos/ data/
|
2.4 启动 MySQL
1
| docker compose up -d mysql
|
确认 MySQL 正常:
1
| docker exec -it gitea-mysql mysql -ugitea -pgitea_pass123 -e "show databases;"
|
2.5 导入数据库
1 2
| cat gitea-db.sql | docker exec -i gitea-mysql \ mysql -ugitea -pgitea_pass123 gitea
|
2.6 修改 Gitea 配置
编辑:
1
| vi ./data/gitea/conf/app.ini
|
改成:
1 2 3 4 5 6 7
| [database] DB_TYPE = mysql HOST = mysql:3306 NAME = gitea USER = gitea PASSWD = gitea_pass123 CHARSET = utf8mb4
|
2.7 启动 Gitea
1
| docker compose up -d gitea
|
查看日志:
3. 验证
3.1 页面验证
1
| http://192.168.3.245:3000
|
确认:
- 用户正常
- 组织正常
- 仓库正常
- SSH Key 正常
- Issues / PR 正常
3.2 SSH 验证
1
| ssh -T git@192.168.3.245 -p 222
|
3.3 clone 验证
1
| git clone ssh://git@192.168.3.245:222/auto/xxx.git
|
4. 关键注意点
| 项 |
建议 |
| Gitea 版本 |
迁移前后保持一致,不要同时升级 |
| 数据目录 |
./data 先完整备份 |
| MySQL 字符集 |
必须用 utf8mb4 |
| 迁移窗口 |
停止Gitea写入后再dump |
| SQLite 文件 |
迁移成功前不要删除 |
最小安全备份:
1 2
| cp -a ./data ./data.bak.$(date +%F_%H%M%S) tar czf gitea-data-backup.tar.gz ./data
|