今天应业务需求,在linux平台上安装了postgresql的一套环境,由于之前对postgresql不太了解,所以这里特地记录了一下安装过程。
文章整个安装过程比较干,纯步骤式的,如果觉得难以下咽,可以直接先点赞收藏,然后在有需要的时候翻出来看看即可。话不多说,开始上步骤。
01
安装前准备工作
环境介绍:
PostgreSQL版本12.0
1,源码下载 从官网下载一份源码即可
https://FTP.postgresql.org/pub/source/v12.1/postgresql-12.1.tar.gz
2,基础环境配置(安装必要的依赖包)
yum install -y perl-ExtUtils-Embed readline-devel zlib-devel pam-devel libxml2-devel libxslt-devel openldap-devel python-devel gcc-c++ openssl-devel cmake bison flex 1
02
安装过程
1,新建用户&用户组&目录&权限
groupadd postgres
useradd postgres -g postgres -d /home/postgres
mkdir -p /usr/local/pgsql
chown -R postgres:postgres /usr/local/pgsql
2,编译,其中${port}代表端口号
./configure --prefix=/usr/local/pgsql --with-pgport=${port} --with-perl --with-python --with-openssl --with-pam --with-ldap --with-libxml --with-libxslt --enable-thread-safety --with-wal-blocksize=16 --with-blocksize=16
其中:
--prefix指定安装路径,
–-with选项是指安装本文件依赖的库文件,
--with-pgport指定端口号,如果编译进去,就是一个该端口号专用的包
gmake world && gmake install-world
cd contrib && make && make install
3,相关配置
加载动态库,将库目录加入到系统库文件检索路径中:
echo "/usr/local/pgsql/lib/" >> /etc/ld.so.conf
为方便使用psql命令,向/home/postgres/.bash_profile文件中加入以下内容:
echo 'PATH=$PATH:/usr/local/pgsql/bin/' >> /home/postgres/.bash_profile
创建数据目录并修改权限
mkdir -p /data1/pg${port}/
chown -R postgres:postgres /data1/pg${port}
chmod 0700 /data1/pg${port}
4、初始化数据文件,类似mysql的initialize
# 切换到postgres目录下面
su - postgres
echo "export PGDATA=/data1/pg${port}" >> ~/.bash_profile
echo "export PGPORT=${port}" >> ~/.bash_profile
initdb --pgdata=/data1/pg${port}/ --encoding=utf8 --locale=C --username=postgres
至此数据文件初始化完成,初始化完成之后,会提示进行实例启动:
The files belonging to this database system will be owned by user "postgres".
This user must also own the server process.
The database cluster will be initialized with locale "C".
The default text search configuration will be set to "english".
ta page checksums are disabled.
fixing permissions on existing directory /data1/pg30104 ... ok
creating subdirectories ... ok
selecting dynamic shared memory implementation ... posix
selecting default max_connections ... 100
selecting default shared_buffers ... 128MB
selecting default time zone ... Asia/Shanghai
creating configuration files ... ok
running bootstrap script ... ok
performing post-bootstrap initialization ... ok
syncing data to disk ... ok
initdb: warning: enabling "trust" authentication for local connections
You can change this by editing pg_hba.conf or using the option -A, or
--auth-local and --auth-host, the next time you run initdb.
Success. You can now start the database server using:
pg_ctl -D /data1/pg30104/ -l logfile start
这里我的端口是30104,所以可以直接用上面红色字体部分的命令进行启动。
03
主从复制搭建
主从复制的搭建过程,需要在主库和从库上分别进行操作,操作过程大概如下:
主库上:
1、初始化一个单实例,并启动。如上述安装步骤,这里不再赘述。
2、创建复制用户,用户名replica,密码是123456
create role replica login replication encrypted password '123456';
3、增加主从复制的权限 ,修改客户端认证文件/data1/pgxxxx/pg_hba.conf,增加下面的记录:
host replication replica xx.xx.xx.xx/32 md5
其中,xx.xx.xx.xx为从库IP地址,replica是复制用户
4、修改主库的启动配置文件/data1/pgxxxx/postgresql.conf:
listen_addresses = '*' port = 30104 max_connections = 1000 superuser_reserved_connections = 10 full_page_writes = on wal_log_hints = off max_wal_senders = 50 hot_standby = on log_destination = 'csvlog' logging_collector = on log_directory = 'log' log_filename = 'postgresql-%Y-%m-%d_%H%M%S' log_rotation_age = 1d log_rotation_size = 10MB log_statement = 'mod' log_timezone = 'PRC' timezone = 'PRC' unix_socket_directories = '/tmp' shared_buffers = 20000MB temp_buffers = 16MB work_mem = 32MB effective_cache_size = 2GB maintenance_work_mem = 128MB #max_stack_depth = 2MB dynamic_shared_memory_type = posix ## PITR full_page_writes = on wal_buffers = 16MB wal_writer_delay = 200ms commit_delay = 0 commit_siblings = 5 wal_level = replica
5、重启主库这个单实例,让复制账号生效即可
pg_ctl -D /data1/pgxxxx/ restart
从库上:
1. 从库按照上述安装单实例的方法下载postgresql的软件包,安装完成后,不初始化,若已经初始化,清空data目录即可(不需要删除)
2. 拷贝主库数据目录到从库,
pg_basebackup -h xx.xx.xx.xx -p 30104 -U replica -F p -P -D /data1/pg30104/ -X stream
* 备注:
-h,主库主机,-p,主库服务端口;
-U,复制用户;
-F,p是默认输出格式,输出数据目录和表空间相同的布局,t表示tar格式输出;
-P,同--progress,显示进度;
-D,输出到指定目录;
* 因为主库采用的是md5认证,这里需要密码认证。
xx.xx.xx.xx代表主库IP,30104是我实验中的端口号。
3、从库配置文件
从库配置文件,可以直接复用主库,在主库配置文件基础上增加下面几项即可:
hot_standby = on
max_standby_streaming_delay = 30s
wal_receiver_status_interval = 10s
hot_standby_feedback = on
primary_conninfo = 'host=xx.xx.xx.xx port=xxxx user=replica password=123456 options=''-c wal_sender_timeout=5000'''
注意,从库配置文件中,直接在primary_conninfo里面写上连接主库的连接串即可。
4、在从库数据目录下创建文件standby.signal(重要),此文件用于标识从库
touch standby.signal
5. 启动从库服务
pg_ctl -D /data1/pg30104/ restart
6、配置完毕之后,可以在主库上使用命令查看从库了:
select * from pg_stat_replication;