华为欧拉openEuler 20.03 (LTS-SP3)安装postgresql14数据库迁移
openEuler 20.03 (LTS-SP3)
安装docker
换源
将源换成华为源/私有源
cd /etc/yum.repos.d/
cp openEuler.repo openEuler.repo.bak
vi /etc/yum.repos.d/openEuler.repo
直接把repo.openeuler.org全部替换为repo.huaweicloud.com/openeuler,后面的不变
:%s/repo.openeuler.org/repo.huaweicloud.com\/openeuler/g

更新系统中所有安装的软件包,及内核
sudo yum update
执行下面的命令添加 yum 软件源:
sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
sudo sed -i 's/download.docker.com/mirrors.aliyun.com\/docker-ce/g' /etc/yum.repos.d/docker-ce.repo
替换$releasever为8
:%s/$releasever/8/g

安装前准备
执行以下命令安装依赖包
sudo yum install -y yum-utils
出现以下错误

执行
wget -O /etc/yum.repos.d/CentOS-Base.repo https://mirrors.aliyun.com/repo/Centos-vault-8.5.2111.repo

安装 Docker
可以参考链接
更新 yum 软件源缓存,并安装 docker-ce
sudo yum install docker-ce docker-ce-cli containerd.io
出现下载资源失败

解决方法,添加可用的镜像源
[docker-ce-stable-scmie]
name=Docker CE Stable - $basearch
baseurl=https://download.docker.com/linux/centos/8/$basearch/stable
enabled=1
gpgcheck=1
gpgkey=https://download.docker.com/linux/centos/gpg

查看docker版本

添加服务
sudo systemctl enable docker
sudo systemctl start docker
建立 docker 用户组
默认情况下,docker 命令会使用 Unix socket 与 Docker 引擎通讯。而只有 root 用户和 docker 组的用户才可以访问 Docker 引擎的 Unix socket。出于安全考虑,一般 Linux 系统上不会直接使用 root 用户。因此,更好地做法是将需要使用 docker 的用户加入 docker 用户组。
建立 docker 组:
sudo groupadd docker
将当前用户加入 docker 组:
sudo usermod -aG docker $USER
退出当前终端并重新登录,进行如下测试。
测试 Docker 是否安装正确
docker run --rm hello-world

若能正常输出以上信息,则说明安装成功。
安装postgresql+postgis
安装postgis(包含了postgres,无须安装postgresql)
拉取镜像
docker官网拉取镜像

docker pull postgis/postgis:14-3.4-alpine

创建volumes
创建volumes,用于存储postgresql配置文件以及数据库文件,Docker 卷与容器的文件系统分离,因此它们的生命周期可以独立于容器。这意味着,当容器被删除时,数据仍然保留在宿主机的 Docker 卷中,可以供其他容器使用。
docker volume create postgis_data
docker volume create pg_data
运行postgresql
docker run --name pgsql14 --restart=always -e POSTGRES_USER=postgres -e POSTGRES_PASSWORD=postgres -e POSTGRES_DBNAME=gis_db -p 5432:5432 -v postgis_data:/var/lib/postgis/data -v pg_data:/var/lib/postgresql/data -d postgis/postgis:14-3.4-alpine
docker run --name pgsql14 --restart=always -e POSTGRES_USER=postgres -e POSTGRES_PASSWORD="HnQM]B804^>d#mod)r" -e POSTGRES_DBNAME=gis_db -p 5432:5432 -v postgis_data:/var/lib/postgis/data -v pg_data:/var/lib/postgresql/data -d postgis/postgis:14-3.4-alpine
进入容器
docker exec -it pgsql14 bash
安装拓展
psql -h localhost -p 5432 -U postgres -d postgres
CREATE EXTENSION postgis;
CREATE EXTENSION postgis_topology;
CREATE EXTENSION postgis_sfcgal;
CREATE EXTENSION fuzzystrmatch;
CREATE EXTENSION address_standardizer;
CREATE EXTENSION address_standardizer_data_us;
CREATE EXTENSION postgis_tiger_geocoder;

创建 Docker 容器并挂载卷
docker run -d -v pg_data:/var/lib/postgresql/data 56fc19a2f661
修改postgresql.conf
docker exec -it f5eccb0b4d17 bash
vim var/lib/postgresql/data/postgresql.conf
编辑或添加下面一行,使PostgreSQL可以接受来自任意IP的连接请求

修改pg_hba.conf
还需在pg_hba.conf中配置服务端允许的认证方式
# IPv6 local connections:
host all all ::1/128 md5
host all all 0.0.0.0/0 md5

重启容器
docker restart pgsql14
修改密码
docker exec -it 085adad4e140 /bin/bash
psql postgres postgres
\password postgres
还原数据库
备份,可采用以下几种方式(推荐第二种)
#备份
pg_dump -h 192.168.124.58 -d hnsggas -U postgres > E:\pgdata\hnsggas.bak
#按照模式导出
pg_dump -h 192.168.124.58 -d gzgas -U postgres -n gzsjcj > E:\pgdata\gzsjcj_schema.sql
#备份成二进制文件
pg_dump -h <hostname> -p <port> -U <username> -d <databasename> -n <schemaname> -Fc -f /path/to/backupfile
pg_dump -h 192.168.124.58 -p 5432 -U postgres -d gzgas -n gzsjcj -Fc -f E:\pgdata\gzsjcj_schema
拷贝文件到docker volumes
docker cp /usr/pg14/hnsggas.bak 80fb430dc3fd:/bak/hnsim
psql -h localhost -p 5432 -U postgres -d postgres
创建数据库和模式:
CREATE DATABASE hngas;
\c hngas;
CREATE SCHEMA hnsjcj;
导入备份文件:
使用 pg_restore 命令将备份文件导入到指定的模式中。
pg_restore -h <hostname> -p <port> -U <username> -d dbname -n schemaname /path/to/backupfile
pg_restore -h localhost -p 5432 -U postgres -d hngas -n hnsjcj /var/lib/postgresql/data/bak/hnsim/gzsjcj_schema.sql
#上述不行的话采用此种方式导入
\i /var/lib/postgresql/data/bak/hnsim/gzsjcj_schema.sql
连接到 PostgreSQL 数据库
psql -h localhost -p 5432 -U postgres -d hngas
切换到 hnsjcj 模式:
SET search_path TO hnsjcj;
查看表信息

浙公网安备 33010602011771号