为什么要升级到3.1.1

3.1.1 似乎并非是一个正式的版本, 但是浙江工业大学的数据库原理课程使用此版本的 Opengauss, 在实验中,如果使用其下的版本将会遇到 with check option 未实现的问题

升级的解决方案

通过虚拟机安装 openEuler (正如我这篇博客)

即使是最新的22.03 LTS 版本,自动安装的也还是3.1.0

而手动更新想毕是繁琐的(笔者并未尝试)

于是决定在 enmotech-docker-opengauss 3.1.0的基础上进行修改,直接打包一个3.1.1版本的docker镜像。

目前笔者只打包了amd架构版本的镜像文件,已经上传到docker.io

以下为安装此版本的方式

安装笔者自己打包的3.1.1docker镜像的步骤

0. 确保docker已经安装并且运行

理论上docker是跨平台的优秀解决方案。 笔者在archlinux下使用没有障碍。

由于笔者精力有限,windows, mac 下的docker并未测试过 以下命令均在 archlinux 6.2.8 arch-1-1, ubuntu 20.03 下经过测试。

1. 停止原先3.1.0版本的运行

如果您正在使用3.1.0版本的镜像,请先停止其的运行(但是并不要删除)

1
sudo docker stop [your-container-name]

[your-container-name]是你的opengauss3.1.0镜像的容器名称

如果忘记可以通过

1
sudo docker ps

查看

2. 安装docker镜像

1
sudo docker run --name [container-name] --privileged=true -p 5432:5432 -d -e GS_PASSWORD=[Pass@word] finleyge/opengauss:3.1.1
  • [container-name] 是容器的名称,可以随意填写
  • [Pass@word] 是 omm 的密码,需要大小写、数字、特殊字符四选三。

3. 配置docker镜像

1
2
sudo docker start [container-name]
sudo docker exec -it [container-name] /bin/sh

此时应该进入了docker容器的交互环境中。 应该显示类似如下:

1
#

如果没能进入,则可能出现了其他问题。

1
2
su - omm
cd /var/lib/opengauss/data

修改postgres.sql文件

1
vim postgresql.conf

加入以下三条

1
2
3
listen_addresses = '*'
local_bind_address = '0.0.0.0'
password_encryption_type = 1

重启数据库

1
gs_ctl restart

执行上述命令后docker容器将关闭,使用

1
docker start [container-name]

重新开启

4. 配置数据库

配置数据库建议使用和3.1.0一样的数据库、用户名和密码

可以省去修改数据库管理软件(navicat等)的修改。

1
2
3
sudo docker exec -it [container-name] /bin/sh
su - omm
gsql

创建用户

1
2
3
CREATE USER [name] PASSWORD '[Pass@word]';
ALTER ROLE [name] sysadmin;
\q

创建数据库

先使用刚刚创建的用户登入

1
gsql -p 5432 -d postgres -U [name]

然后创建数据库

1
CREATE DATABASE [database-name];

数据迁移

可以使用gs_dump gsql gs_restore等工具进行数据迁移。 需要注意,要手动创建用户和数据库,可见上一小节末尾。

1. 回到3.1.0 转储数据

1
2
3
sudo docker stop [3.1.1-container-name]
sudo docker start [3.1.0-container-name]
sudo docker exec -it [3.1.0-container-name] /bin/sh

在交互环境中

1
2
3
4
su - omm
gs_dump -d [database-name] -f dump.sql
exit
exit

[database-name] 是你之前使用的数据库名称。

2. 导出转储文件

在docker外面,使用

1
docker cp [3.1.0-container-name]:/home/omm/dump.sql dump.sql

将转储文件导出

3. 开启3.1.1并导入

1
2
sudo docker stop [3.1.0-container-name]
sudo docker start [3.1.1-container-name]

导入

1
sudo docker cp dump.sql [3.1.1-container-name]:/home/omm

4. 导入转储文件到数据库

进入docker

1
sudo docker exec -it [3.1.1-container-name] /bin/sh

在交互环境中, 首先修改转储文件的权限(当前用户是root)

1
2
cd /home/omm
chown omm dump.sql

导入数据库

1
2
3
su - omm
cd ~
gsql -p 5432 -d [database-name] -f dump.sql

数据迁移完成。