PostgreSQL安装及配置
1、pgsql安装
1.1 安装核心功能
# 1. 下载源码
$ cd /usr
$ sudo mkdir localsoft
$ cd localsoft
$ sudo mkdir pgsql
$ cd pgsql
# 下载 下载地址:https://www.postgresql.org/ftp/source/ 找到对应版本下载即可
# wget 下载
$ sudo wget https://ftp.postgresql.org/pub/source/v13.3/postgresql-13.3.tar.gz
$ sudo tar xf postgresql-13.3.tar.gz
$ cd postgresql-13.3
# 2. 检查编译环境
$ sudo ./configure --with-openssl
# 这个地方后边的 --with-options 是编译选项(带上openssl),还有其他的选项可以使用,看官方文档即可
# 用的比较多的是 uuid,如果要使用uuid,使用下边的命令
$ sudo ./configure --with-openssl --with-uuid=e2fs # 这个地方我没有使用ossp,这个包已经停止维护了,所以使用的是linux下常用的e2fs
# 新系统可能会出现个问题: no acceptable C compiler found in $PATH
# 解决方案就是需要安装 gcc 用下面的安装gcc 就行
# 注意:这个地方可能会出现xxx找不到,例如:readline、gcc、zlib library 这些找不到,那么需要安装
# 这几个安装任何的linux软件,都是需要的,所以需要安装
# 安装 readline : sudo apt-get install libreadline-dev
# 安装 gcc : sudo apt-get install build-essential
# 安装 zlib:sudo apt-get install zlib1g-dev
# 安装 crypto:sudo apt-get install libssl-dev
# 如果使用了uuid,可能会出现configure: error: library 'uuid' is required for E2FS UUID,这个是要我们配置一个uuid的库,使用 sudo apt-get install uuid-dev 安装即可
# 3. 编译
# 最后的结果输出 All of PostgreSQL successfully made. Ready to install. 就算是完成了,如果是其他的提示,那需要网上翻,找到问题
$ sudo make
# 4. 安装
# 输出:PostgreSQL installation complete. 就算是成功了。如果是其他的提示,那需要网上翻,找到问题
$ sudo make install
1.2 安装扩展模块
上边我们已经安装了pgsql的核心功能,但是有一些扩展功能还是很有用的,比如说UUID,下边我们主要是安装两个扩展uuid-ossp
和pgcrypto
,前边那个主要是用来处理随机值,后边那个模块提供了很多类似sha1
、md5
等等这些算法的。
1.2.1 安装uuid-ossp
注意:这个模块安装需要上边./configure
的时候,后边带上uuid的选项,否则安装这个扩展是没有意义的
$ cd /usr/localsoft/pgsql/postgresql-13.3/contrib
$ cd uuid-ossp
$ sudo make
$ sudo make install
安装完成后,会有下边提示
/usr/bin/install -c -m 755 uuid-ossp.so '/usr/local/pgsql/lib/uuid-ossp.so'
/usr/bin/install -c -m 644 ./uuid-ossp.control '/usr/local/pgsql/share/extension/'
/usr/bin/install -c -m 644 ./uuid-ossp--1.1.sql ./uuid-ossp--1.0--1.1.sql '/usr/local/pgsql/share/extension/'
然后进入到响应的目录,去看文件是否存在即可,如果存在,那么说明安装已经完成
1.2.2 安装 pgcrypto
$ cd pgcrypto
$ sudo make
$ sudo make install
安装完成后会有下列提示
/usr/bin/install -c -m 755 pgcrypto.so '/usr/local/pgsql/lib/pgcrypto.so'
/usr/bin/install -c -m 644 ./pgcrypto.control '/usr/local/pgsql/share/extension/'
/usr/bin/install -c -m 644 ./pgcrypto--1.3.sql ./pgcrypto--1.2--1.3.sql ./pgcrypto--1.1--1.2.sql ./pgcrypto--1.0--1.1.sql '/usr/local/pgsql/share/extension/'
注意:上边只是把这两个扩展导入进来了,使用的时候,还是需要按照官网文档导入一下。
2、配置
安装完成后,默认的会把pgsql安装到 /usr/local/pgsql 路径下
2.1 创建用户
root用户不能启动postgresql,所以我们需要创建一个普通用户来启动和管理(通常都是使用postgres这个用户)
$ sudo groupadd -g 1111 postgres # 1111是组ID
$ sudo useradd -g 1111 -u 1111 postgres # 前边那个1111是组ID,后边那个1111是指定用户ID
$ sudo passwd postgres # 设置密码 huahansoft_123
$ id postgres # 查看postgres用户信息
2.2 创建数据目录和日志目录
$ sudo mkdir /usr/local/pgsqldata/13.3/{data,logs}
# 将数据目录和日志目录权限赋予postgres
$ sudo chown -R postgres.postgres /usr/local/pgsqldata
2.3 初始化数据目录
$ su postgres
$ /usr/local/pgsql/bin/initdb -D /usr/local/pgsqldata/13.3/data -U postgres -W
# -D 指定数据目录
# -U 设置数据库超级用户的用户名,默认是postgres ,如果你建立的设置的超级用户就是postgres的话,那么就没有必要加了
# -W 在initdb的过程中为数据库超级用户设置一个密码。上边我们已经为postgres这个用户设置了一个密码,这个地方重新输入一下那个密码就可以。
# 执行完上边的命令后,会有 /usr/local/pgsql/bin/pg_ctl -D /usr/local/pgsqldata/13.3/data -l logfile start 的提示,这个命令就可以启动数据库,但是不要执行
2.4 创建linux服务
注意:创建服务不能使用postgres用户,所以需要切换到登录用户或者新开一个连接
$ cd /etc/systemd/system
$ sudo vim pgsql-13.3.service # 注意:这个名称是自己起的
将下边的内容拷贝进去(注意路径)
pgsql服务文件
[Unit]
Description=PostgreSQL 13.3 database server
Documentation=man:postgres(1)
[Service]
Type=forking
User=postgres
ExecStart=/usr/local/pgsql/bin/pg_ctl -D /usr/local/pgsqldata/13.3/data -l /usr/local/pgsqldata/13.3/logs/serve.log start
ExecReload=/bin/kill -HUP $MAINPID
KillMode=mixed
KillSignal=SIGINT
TimeoutSec=0
[Install]
WantedBy=multi-user.target
保存,退出
执行下边的命令,重新加载服务文件
$ sudo systemctl daemon-reload
启动pgsql
$ sudo systemctl start pgsql-13.3
# 设置开机启动
$ sudo systemctl enable pgsql-13.3
# 查看启动状态
$ sudo systemctl status pgsql-13.3
# 关闭服务
$ sudo systemctl stop pgsql-13.3
# 重启服务
$ sudo systemctl restart pgsql-13.3
2.5 修改端口和ip
$ sudo vim /usr/local/pgsqldata/13.3/data/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)
#port = 5432
这两个一个是ip,一个是端口。按照实际的需求修改既可。默认都是没有启动的,需要把前边的#
去掉。
3、创建数据库
数据库创建有两种情况
3.1 在内网上或者其他服务器上没有创建
这种情况就是开发的时候创建
$ sudo -u postgres /usr/local/pgsql/bin/psql # 使用默认端口连接
$ /usr/local/pgsql/bin/psql postgres postgres -p 5980 # 使用指定端口连接
# 创建用户"huahansoft"并设置密码
$ postgres=# create user huahansoft with password 'huahansoft';
# 创建数据库,所有者为huahansoft
$ postgres=# create database dhhhuahantest owner huahansoft;
# 将DHHHuaHanTest数据库的所有权限赋予huahansoft,否则huahansoft只能登陆psql,没有任何操作数据库的权限
$ grant all privileges on database dhhhuahantest to huahansoft;
3.1.1 修改可以远程访问
$ sudo vim /usr/local/pgsqldata/13.3/data/pg_hba.conf
该配置文件就是它所在数据库实例的“防火墙”,文件格式如下
TYPE DATABASE USER ADDRESS METHOD
host dhhhuahantest huahansoft 0.0.0.0/0 md5
按照实际业务情况,添加一条既可
修改完成以后重启postgre的服务。
3.2 从其他服务器上拷贝过来
这个就简单了,上边已经安装完成,并且data
目录已经初始化完成,下边要做的就是把其他服务器上的文件夹拷贝过来即可。
在目标服务器上执行
$ sudo mv /usr/local/pgsqldata/13.3/data /usr/local/pgsqldata/13.3/data.bak
在原服务器上执行
$ sudo scp -r /usr/local/pgsqldata/12.4/data ubuntu@81.71.123.29:~
-r
后边的是要拷贝的文件夹
ubuntu@81.71.123.29:~
是目标服务器上的用户名和IP,:
后边的是目标服务器上的地址,就是将这个文件夹拷贝到目标服务器上什么地方。
接着,在目标服务器上执行
$ sudo cp -r ~/data /usr/local/pgsqldata/13.3
# 修改data的所有者
$ sudo chown postgres.postgres /usr/local/pgsqldata/13.3/data
然后修改data下边的postgresql.conf
,将IP和端口修改成自己想要的即可。
修改pg_hba.conf
,将跟该项目没有关系的数据库访问清除一下,这个地方只是将访问限制清除了,想彻底清除,还需要使用postgres用户登录一下,然后使用drop database
命令将所有没有用的数据库清空。
完成上边的命令后,重启数据库服务即可。