公司的gitlab服务器是前任运维搭建的,用户管理用的ldap是apacheds,现在经常出现用户被锁,有几次自己的管理员账号都被锁了,还好有备用的管理员账号才得以脱险,现在忍不了准备利用gitlab的backup文件迁移数据库。

通过backup还原gitlab需要两边的gitlab版本一致,查到目前使用的版本是8.6.1,于是上官网下载,在新服务器部署好,修改url后,让gitlab先跑起来在去导备份文件(16G左右)。通过gitlab-rake gitlab:backup:restore BACKUP=xxx 导入备份文件,发现总报数据库语法错误,单独解压tar包,把sql导入到postgres里没问题啊....对比了半天现在生产环境的gitlab默认的是mysql5.5数据库,刚在官网下载的默认是postgres数据库,心塞...先把刚部署的gitlab数据库改成mysql吧

现在生产数据库是mysql5.5


刚部署的gitlab 数据库是postgresql





安装mysql,建库,赋权。

添加mysql源

vim /etc/yum.repos.d/mysql.repo


[mysql56-community]

name=MySQL 5.6Community Server

baseurl=http://repo.mysql.com/yum/mysql-5.6-community/el/6/$basearch/

enabled=1

gpgcheck=0


安装mysql

yum install mysql-community-server mysql-devel


/etc/init.d/mysqld start  启动mysql

mysql_secure_installation  初始化

mysql –u root –p


创建数据库和赋权

CREATE DATABASE IF NOT EXISTS `gitlab_production` DEFAULT CHARACTER SET `utf8` COLLATE `utf8_unicode_ci`;

GRANT all privileges ON gitlab_production.* TO 'gitlab'@'%' identified by 'channel' with grant option;

flush privileges;

2.修改gitlab配置如下

vim /etc/gitlab/gitlab.rb



vi  /opt/gitlab/embedded/service/gitlab-rails/.bundle/config

将mysql替换成postgres


安装插件ruby插件,要不然执行gitlab:check 会报错,如果没有安装mysql-devel库也会有提示的。

cd /opt/gitlab/embedded/bin/

./gem install -i/opt/gitlab/embedded/service/gem/ruby/2.1.0 mysql2

./gem install -i/opt/gitlab/embedded/service/gem/ruby/2.1.0 mysql2 -v "0.3.20"


通过gitlab-rake gitlab:setup初始化mysql数据库,按照提示输入yes就好了


再次gitlab-rake gitlab:check 通过了,重启gitlab查看数据库变化。

登录gitlab,发现数据已经切换成mysql了.


将备份文件tar包传到新服务器/var/opt/gitlab/backups目录,注意将文件所属修改为git:git


先停止和数据库有关的服务在还原备份。

gitlab-ctl stop unicorn

gitlab-ctl stop sidekiq

gitlab-rake gitlab:backup:restore BACKUP=1527394255

特么的,还有sql语法错误,我就郁闷了仔细看了下错误提示,原来是有个表名keys占用了关键字,导入备份drop表的时候报错了,登录到数据库drop tables `keys`;成功删除表后,重新导入备份,16G的备份7分钟就导完了,还是很效率的。

重启服务后登录gitlab,发现默认跳转到老gitlab地址,检查了nginx等确认没有做过跳转。仔细分析了下,可能是之前配置文件url存在数据库中,我导库直接带过来的,直接改数据库吧。

改完home_page_url和home_page_url后,跳转问题解决了。没有登录权限,之前ldap模式禁止本地登录了,于是有打开本地登录。


mysql -u gitlab -p

use gitlab_production;

update  application_settings set signin_enabled= '1';

update  application_settings set home_page_url = 'http://git.xxx.com';

update  application_settings set after_sign_out_path = 'http://git.xxx.com'

一切修改完后,再次登录,肯定登录失败的,因为之前关联ldap,现在改成本地用户了,只能暴力获取gitlab管理员密码了。

gitlab-rails console production
Loading production environment (Rails 4.2.5.2)
irb(main):001:0> user = User.where(id:1).first
irb(main):002:0> user.password='channel!@#'
irb(main):003:0> user.save!

修改完密码,终于可以用管理员登录了。


用户信息,权限,key都在,唯一要改的就是用户本地密码。

git clone push merage等都没有问题,算是迁移成功了,后面有问题我在发出来。



Logo

开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!

更多推荐