主要涉及两种情景:
1)把数据迁移到k8s内的postgresql中
2)把数据迁移到非k8s内的postgresql中
1 查看当前使用的目录
sudo -u postgres psql
SHOW data_directory;
2 方案一
该方案适用于能够对data目录进行操作的场景
sudo systemctl stop postgresql-11
sudo cp -rf /var/lib/pgsql/11/data/* /data/database/postgres/
sudo chown -R postgres.postgres /data/database/postgres/
sudo chmod 700 /data/database/postgres/
sudo vim /usr/lib/systemd/system/postgresql-11.service
Environment=PGDATA=/data/database/postgres/
sudo systemctl daemon-reload
sudo systemctl start postgresql-11
3 方案二
如果无法对data目录直接进行操作。如,把数据迁移到k8s内的postgresql中的话,该postgresql使用了ceph作为data后端存储。
3.1 实操——以迁移sonarqube数据库为例
- 在原数据库机器上——进行逻辑备份
su - postgres
pg_dump db_sonarqube > /tmp/test_sonar.sql
#将/tmp/test_sonar.sql传到k8s集群中
- 在新数据库机器上——准备数据库
CREATE DATABASE db_sonarqube;
CREATE USER sonarqube WITH ENCRYPTED PASSWORD '<sonar-user-password>';
GRANT ALL PRIVILEGES ON DATABASE db_sonarqube TO sonarqube;
ALTER DATABASE db_sonarqube OWNER TO sonarqube;
- 恢复数据
kubectl -n database cp /tmp/test_sonar.sql pg-stolon-proxy-6bb84d96b-dz5vb:/tmp/
kubectl -n database exec -it pg-stolon-proxy-6bb84d96b-dz5vb bash
su postgres
psql -U sonarqube -p 5432 db_sonarqube < /tmp/test_sonar.sql
#这个过程我大概花了7分钟
- 连接数据库
kubectl -n sonarqube edit deploy sonarqube
jdbc:postgresql://pg-stolon-proxy.database/db_sonarqube
- 登录页面查看数据是否迁移成功