当前公司环境gitlab是docker-compose启动(https://github.com/sameersbn/docker-gitlab),当前镜像版本为sameersbn/gitlab:11.11.3,最新的gitlab版本已经是15.2.2了,所以近期考虑升级下版本,阅读了官方的changelog,发现gitlab对mysql的支持在12.1版本移除了,后续的版本只支持postgresql了,而我们恰恰使用的是mysql,所以在升级之前需要迁移mysql的数据到postgresql。
踩坑之路
官方有迁移的说明文档https://docs.gitlab.com/ee/update/mysql_to_postgresql.html,阅读了之后发现不太适合我们当前的gitlab部署方式,使用sameersbn/gitlab部署的gitlab遵循官方文档会掉坑(折腾了一个下午)后来到搜索issues,发现了有关mysql迁移到pg的,https://github.com/sameersbn/docker-gitlab/issues/1952,参考这个issues/1952
1.需要在原先的docker-compose.yaml内添加postgresql
postgresql:
restart: always
image: sameersbn/postgresql:10-2
volumes:
- ./postgresql-data:/var/lib/postgresql
environment:
- DB_USER=gitlab
- DB_PASS=*****
- DB_NAME=gitlabhq_production
- DB_EXTENSION=pg_trgm
gitlab环境变量添加pg的相关配置
gitlab:
image: sameersbn/gitlab:12.0.4
links:
- mysql
- redisio
- postgresql
ports:
- "10022:22"
- "10080:80"
- "15432:5432"
environment:
- DB_ADAPTER=postgresql
- DB_HOST=postgresql
- DB_PORT=5432
- DB_USER=gitlab
- DB_PASS=****
- DB_NAME=gitlabhq_production
2.重新启动docker-compose
docker-compose down
docker-compose up -d
3.关闭gitlab容器
docker-compose stop gitlab
4.执行初始化pg Init the Database with rake like
docker-compose run --rm gitlab app:rake db:create db:migrate
5.到pg映射的本地数据目录
使用pgloader工具来迁移mysql数据到pg,apt-get install pgloader安装的pgloader内存耗尽,所以需要ccl构建的pgloader,参考https://github.com/dimitri/pgloader/issues/327(我差不多被这个pgloader堆内存溢出搞抓狂了,报错居然是Heap exhausted, game over.)编辑需要安装ccl环境,其实可以直接从容器镜像里拷贝已经编译好的二进制文件pgloader,
docker run -itd --name pgloader1 dimitri/pgloader:ccl.latest
docker cp pgloader1:/usr/local/bin/pgloader .
6.编辑pgloader配置文件commands.load
LOAD DATABASE
FROM mysql://gitlab:******@172.17.0.14/gitlabhq_production
INTO postgresql://postgres@localhost/gitlabhq_production
WITH include no drop, truncate, disable triggers, create no tables,
create no indexes, preserve index names, no foreign keys,
data only,
batch rows = 1000
SET MySQL PARAMETERS
net_read_timeout = '90',
net_write_timeout = '180'
ALTER SCHEMA 'gitlabhq_production' RENAME TO 'public'
;
mysql的ip地址可以通过docker-compose exec mysql hostname -i 获取
执行成功如下
8.再次重新运行gitlab,使用
docker-compose down
docker-compose up -d
9.检查确认没有问题,就可以从docker-compose.yaml里去掉mysql了,若redis做了持久化需要注意清理下。
后面再考虑升级gitlab到新版本了。
本文暂时没有评论,来添加一个吧(●'◡'●)