gitlab内置pgsql数据库迁移
创建gitlab备份
创建备份前,GitLab 配置中不用连接外部数据库
方法一,使用pg_dump备份
/opt/gitlab/embedded/bin/pg_dump -h /var/opt/gitlab/postgresql -U gitlab -d gitlabhq_production > backup.sql
默认的gitlab的账户是开启了对等和映射,如果出现下面的错误,请继续看,没有则跳过
pg_dump: error: connection to server on socket "/var/opt/gitlab/postgresql/.s.PGSQL.5432"
failed: FATAL: Peer authentication failed for user "gitlab"
检查 /var/opt/gitlab/postgresql/data/pg_hba.conf文件
下面的开启了对等和映射,直接登录的话,本地没有gitlab的会无法通过
接下面做gitlab用户映射到主机用户
sudo vim /var/opt/gitlab/postgresql/data/pg_ident.conf
加入 gitlab root gitlab ,讲gitlab映射到root用户
然后继续执行
/opt/gitlab/embedded/bin/pg_dump -h /var/opt/gitlab/postgresql -U gitlab -d gitlabhq_production > backup.sql
没问题,进入下一步
方法二 使用gitlab工具 gitlab-backup 备份
sudo gitlab-backup create
如图
默认会备份到 /var/opt/gitlab/backups路径中
tar -xvf /var/opt/gitlab/backups/1744254515_2025_04_10_17.5.1_gitlab_backup.tar
解压如下
其中db目录就是我们的数据库sql
运行sql文件
运行sql,恢复数据库
sudo psql -U bai -d gitlab-data -f backup.sql
没有报错就成功
注意:这里用工具可能会失败,作者亲测,psql成功
修改gitlab配置为连接到外部数据库
vim /etc/gitlab/gitlab.rb
# 外部pgsql
postgresql['enable'] = false
gitlab_rails['db_adapter'] = 'postgresql'
gitlab_rails['db_encoding'] = 'unicode'
gitlab_rails['db_host'] = '127.0.0.1'
gitlab_rails['db_port'] = 5432
gitlab_rails['db_username'] = 'gitlab'
gitlab_rails['db_password'] = 'gitlab123'
gitlab_rails['db_database'] = 'gitlab-data'
重载配置
sudo gitlab-ctl reconfigure
重启服务
sudo gitlab-ctl restart
注意事项
ERROR: extension “btree_gist” has no installation script nor update path for version “1.7”
这里需要安装pgsql17版本的,更换版本即可
sudo apt install postgresql-17 postgresql-contrib-17
检查状态
sudo systemctl status postgresql
btree_gist 找不到,缺失
请重新安装pgsql,或者安装
socket连接被拒绝
# /opt/gitlab/embedded/bin/pg_dump -U gitlab -d gitlabhq_production > backup.sql
pg_dump: error: connection to server on socket "/tmp/.s.PGSQL.5432" failed: 连接被拒绝
Is the server running locally and accepting connections on that socket?
查看gitlab的socket服务
这里需要正确选择socket路径
psql:/opt/gitlab/embedded/service/gitlab-rails/db/structure.sql:1: 错误: 对数据库 gitlab 权限不够
进入 pgsql
将数据库gitlab的权限,转移给用户
ALTER DATABASE gitlab OWNER TO <新用户名>;
psql: 错误: 连接到套接字"/var/run/postgresql/.s.PGSQL.5432"上的服务器失败:致命错误: 对用户"postgres"的对等认证失败
原因:postgres只开启了对等认证,可以用其他用户,或者修改postgres为md5密码认证
方法一的时候讲过了