容器环境gitlab数据库mysql切换到postgresql

当前公司环境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 downdocker-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.latestdocker cp pgloader1:/usr/local/bin/pgloader .

6.编辑pgloader配置文件commands.load

LOAD DATABASEFROM mysql://gitlab:******@172.17.0.14/gitlabhq_productionINTO postgresql://postgres@localhost/gitlabhq_productionWITH include no drop, truncate, disable triggers, create no tables,create no indexes, preserve index names, no foreign keys,data only,batch rows = 1000SET MySQL PARAMETERSnet_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 downdocker-compose up -d

9.检查确认没有问题,就可以从docker-compose.yaml里去掉mysql了,若redis做了持久化需要注意清理下。

后面再考虑升级gitlab到新版本了。

发表评论
留言与评论(共有 0 条评论) “”
   
验证码:

相关文章

推荐文章