gitea默认sqlite迁移到mysql

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 停止写入

1
docker stop gitea

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

查看日志:

1
docker logs -f 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