之前使用Gitea时为了快速使用,就使用了SQLite数据库。但是SQLite限制永远摆在那,后续使用可能会遇到部分问题。所以准备切换到PostgreSQL数据库(MYSQL用够了,尝尝鲜) MySQL数据库(切换时发现sqlite到PostgreSQL会丢失数据,还是老老实实的切换为MySQL)

参考了一下官方文档,提示安装时最好就选定数据库,官方提供的迁移脚本并未经过充分测试,可能会存在问题。但是目前只能迎难而上了。

参考了下面两篇文档

https://docs.gitea.com/administration/backup-and-restore#using-gitea-dump-to-convert-database-typeshttps://zhuanlan.zhihu.com/p/17471984898

迁移前准备

因为之前安装时使用docker,则使用以下指令进入docker容器内

docker exec -it gitea /bin/bash

进入最终导出目录/tmp ,切换用户并检查目录是否有文件

su git
ls -l /tmp
cd /tmp

在尝试转换之前,请确保原始数据库是干净的。运行 gitea doctor check --all --fix gitea doctor recreate-table 来解决常见问题。

询问AI一般执行第一条指令即可,第二条会重建数据表

  • check --all --fix:适合常规维护和小问题修复,相对安全。

  • recreate-table:极端情况下的最后手段,需谨慎使用。

迁移

执行gitea dump --database mysql迁移数据,其中mysql就是最终的目标数据库;这条可按照实际需求改。

执行下一段指令,把最终文件从docker中拷贝出来。这段命令中前半段为容器名:文件路径,后半段为需要复制到的宿主机目录。注意文件名,可以通过ls 指令,查看导出的文件名。

docker cp gitea:/tmp/gitea-dump-1736409223.zip ~/

注意,使用gitea dump是备份完整的gitea内容,使用本备份可以还原gitea实例。后面的指令是把数据库转换为另一个数据库。

导入目标数据库

如何导入,可以自行研究,没有唯一方法。这里我使用https://www.heidisql.com/连接数据库导入备份。

根据官方的配置文件信息修改app.ini 配置文件为新的数据库。然后重启容器让配置文件生效即可。

https://docs.gitea.com/administration/config-cheat-sheet#database-database