上使用部署数据库
前言:
笔者在使用数据库时发现配置该数据库非常麻烦,每次配置都要划伤很久的时间,于是记录一下最近一次配置的过程,以防下次又不会配置了=.=
操作系统版本: CentOS Stream 9 64bit
CPU:2核 内存:4GB
建议使用带有管理员权限的用户配置。
此配置只是单节点配置。
1. 安装环境
使用的yum
直接安装即可。已安装就跳过这一步。
yum install docker
安装完毕后使用docker -v
查看docker
版本检验是否安装成功。
[root@VM-8-13-centos /]# docker -v
Emulate Docker CLI using podman. Create /etc/containers/nodocker to quiet msg.
podman version 5.0.2
该版本可能和操作系统有关。
CentOS Stream 9
似乎会安装podman-docker
,不过不影响使用。
2. 使用安装
在docker hub中直接搜索,找到摩天轮发布的openGauss镜像。或者直接访问enmotech/opengauss - Docker Image | Docker Hub,此为openGauss镜像地址。
接着在docker中下载该镜像:
docker pull enmotech/opengauss
会要求选择一个容器:
[root@VM-8-13-centos /]# docker pull enmotech/opengauss
Emulate Docker CLI using podman. Create /etc/containers/nodocker to quiet msg.
? Please select an image:
▸ registry.access.redhat.com/enmotech/opengauss:latest
registry.redhat.io/enmotech/opengauss:latest
docker.io/enmotech/opengauss:latest
选择第三个即可。
使用docker image list
命令查看当前的
[root@VM-8-13-centos /]# docker image list
Emulate Docker CLI using podman. Create /etc/containers/nodocker to quiet msg.
REPOSITORY TAG IMAGE ID CREATED SIZE
docker.io/enmotech/opengauss latest 6667e225e302 4 months ago 478 MB
已经pull
成功了。
引用镜像地址中教程的一段:
容器一旦被删除,容器内的所有数据和配置也均会丢失,而从镜像重新运行一个容器的话,则所有数据又都是呈现在初始化状态,因此对于数据库容器来说,为了防止因为容器的消亡或者损坏导致的数据丢失,需要进行持久化存储数据的操作。通过在
docker run
的时候指定-v
参数来实现。
因此此处选择在外部创建文件夹,进行持久化存储。[为演示,笔者的路径就为/docker/openGauss
]
创建文件夹
[root@VM-8-13-centos /]# mkdir -p /docker/openGauss
docker运行
[root@VM-8-13-centos /]# docker run --name opengauss --privileged=true -d -e GS_PASSWORD=aAaaaaBBb@123 \
-v /docker/openGauss:/var/lib/opengauss -u root -p 15432:5432 \
enmotech/opengauss:latest
TIP
-p 15432:5432
把本地服务器的15432端口绑定到了容器的5432端口(默认工作端口),因此访问服务器的15432端口即可访问到docker中的。-v /your/path
指定持久化存储的目录
-e GS_PASSWORD=aAaaaaBBb@123
指定默认的数据库账户的密码。另外还可以指定数据库账户和数据库端口:
-e GS_USERNAME=yourusername
指定数据库账户名
-e GS_USERNAME=5432
指定数据在容器中的端口号
-u root
建议和当前服务器的用户保持一致,以防出现一些不太妙的情况。。
该指令运行完成后,docker就会启动一个新的容器。并且会返回一个容器id:
[root@VM-8-13-centos /]# docker run --name opengauss --privileged=true -d -e GS_PASSWORD=aAaaaaBBb@123 \
-v /docker/openGauss:/var/lib/opengauss -u root -p 15432:5432 \
enmotech/opengauss:latest
Emulate Docker CLI using podman. Create /etc/containers/nodocker to quiet msg.
e18657154bcc9e5bafc9659af6a370a22db58e4c6a0c19d7c8bbe3b46a664acc
e18657154bcc9e5bafc9659af6a370a22db58e4c6a0c19d7c8bbe3b46a664acc
就是容器。
使用docer ps -a
查看容器的状态:
[root@VM-8-13-centos /]# docker ps -a
Emulate Docker CLI using podman. Create /etc/containers/nodocker to quiet msg.
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
e18657154bcc docker.io/enmotech/opengauss:latest gaussdb 4 minutes ago Up 4 minutes 0.0.0.0:15432->5432/tcp opengauss
openGauss容器正在运行~
3. 配置远程登录
通过命令docer exec -it opengauss bash
进入 opengauss容器的虚拟终端。
[root@VM-8-13-centos /]# docker exec -it opengauss bash
切换到能够登录数据库的omm
用户
root@e18657154bcc:/# su - omm
omm@e18657154bcc:~$
此时就可以使用gsql
(连接数据库),gs_ctl
等命令了。
使用gsql
连接数据库
omm@e18657154bcc:~$ gsql
gsql ((openGauss 5.1.0 build b5a8d5b0) compiled at 2023-09-28 00:39:45 commit 0 last mr )
Non-SSL connection (SSL connection is recommended when requiring high-security)
Type "help" for help.
omm=#
就可以对数据库进行操作了,比如创建数据库,创建用户。
创建一个名为wwd
的用户,且密码为wwdLDG@123
。
omm=# create user wwd with PASSWORD 'wwdLDG@123';
NOTICE: The encrypted password contains MD5 ciphertext, which is not secure.
CREATE ROLE
给wwd
用户赋予管理员权限。
omm=# alter user wwd sysadmin;
ALTER ROLE
详细地操作请查阅: openGauss 开发者指南.pdf
要想退出数据库连接,使用命令\q
omm=# \q
omm@e18657154bcc:~$
接着只需要连续使用exit
命令就可以回到服务器本身的终端。
omm@e18657154bcc:~$ exit
logout
root@e18657154bcc:/# exit
exit
[root@VM-8-13-centos /]#
最后以配置远程登录结束。
**实际上,由于远程连接是的操作是通过服务器的15432端口转发到docker容器的5432端口,以下配置改和不改都是可以的。**不过以后可能有不是部署的情况,也记录一下。
切换到用于持久化存储数据库文件的文件夹,之前docker run
的-v
参数的文件夹下的data
文件夹
[root@VM-8-13-centos openGauss]# cd /docker/openGauss/data
[root@VM-8-13-centos data]# ls
base global gswlm_userinfo.cfg pg_audit pg_csnlog pg_errorinfo pg_ident.conf pg_location pg_logical pg_notify pg_serial pg_stat_tmp pg_twophase pg_xlog postgresql.conf.lock postmaster.pid undo
gaussdb.state gs_gazelle.conf mot.conf pg_clog pg_ctl.lock pg_hba.conf pg_llog pg_log pg_multixact pg_replslot pg_snapshots pg_tblspc PG_VERSION postgresql.conf postmaster.opts postmaster.pid.lock
这就是opengauss容器的数据文件夹。
修改其中的postgresql.conf
文件:
[root@VM-8-13-centos data]# vim postgresql.conf
找到以下几行配置:
#listen_addresses = 'localhost' # what IP address(es) to listen on;
# comma-separated list of addresses;
# defaults to 'localhost'; use '*' for all
# (change requires restart)
#local_bind_address = '0.0.0.0'
#port = 5432
取消注释掉它们。并且把监听地址listen_address
设置为(任意地址)
修改其中的pg_hba.conf
文件:
vim pg_hba.conf
找到这几行配置:
# TYPE DATABASE USER ADDRESS METHOD
# "local" is for Unix domain socket connections only
local all all trust
# IPv4 local connections:
host all all 127.0.0.1/32 trust
# IPv6 local connections:
host all all ::1/128 trust
这里偷懒,把能访问的数据库和用户都设置为all
,所有用户都可以访问所有的数据库,地址也设置为0.0.0.0/0
表示连接的源地址可以是任何地址。使用md5
校验。
于是添加一条记录
host all all 0.0.0.0/0 md5
注意这条记录可能本来也存在于该配置文件中,可以往下滑一下看看,最终配置文件可以是这样的:
# TYPE DATABASE USER ADDRESS METHOD
# "local" is for Unix domain socket connections only
local all all trust
# IPv4 local connections:
host all all 127.0.0.1/32 trust
# IPv6 local connections:
host all all ::1/128 trust
# Allow replication connections from localhost, by a user with the
# replication privilege.
#local replication omm trust
#host replication omm 127.0.0.1/32 trust
#host replication omm ::1/128 trust
host all all 0.0.0.0/0 md5
使用docker restart opengauss
命令重启一下数据库:
[root@VM-8-13-centos data]# docker restart opengauss
Emulate Docker CLI using podman. Create /etc/containers/nodocker to quiet msg.
opengauss
配置工作就完成了!
4. 远程连接数据库
使用data studio
软件远程连接,当然也可以使用,或者是连接(推荐使用)
TIP默认创建的数据库名为,如果自己创建了数据库也可以连接到该数据库。
使用的包连接数据库:
const pg = require('pg');
var config = {
user:'gaussdb',
database:'postgres',
password:'Secretpassword@123', // 账户密码,数据库
host:'xx.xx.xx.xx', // 服务器IP
port:'15432' //端口
};
var pool = new pg.Pool(config); //创建查询池
pool.query(sql,(err,result) => { //使用sql语句查询
if(err){
console.log(err);
return;
}
console.log(result);
// 处理result
});
5. 后记
欢迎访问AHU-WWDLDG二手交易平台,一个基于openGauss数据库的项目~