目录html
目前大多数Linux 发行版都包含了 PostGreSql的安装源,经过yum或apt-get能够快速的安装好数据库。
在一些状况下,咱们须要经过源码方式进行安装。 例如发行版的软件版本不知足咱们的需求,或者生产环境没法对接外网下载软件等等。
下面将从头至尾介绍手动源码安装PostGres的全过程,供你们参考。linux
通常咱们会为数据库挂载一个独立的磁盘用于数据存放,能够参考下面的操做完成磁盘格式化。web
不须要挂载磁盘的可跳过这部分sql
A.查看磁盘信息数据库
kwe1000570040:~ # fdisk -l Disk /dev/vda: 85.9 GB, 85899345920 bytes 255 heads, 63 sectors/track, 10443 cylinders, total 167772160 sectors Units = sectors of 1 * 512 = 512 bytes Sector size (logical/physical): 512 bytes / 512 bytes I/O size (minimum/optimal): 512 bytes / 512 bytes Disk identifier: 0x000aa73e Device Boot Start End Blocks Id System /dev/vda1 * 2048 75505663 37751808 83 Linux /dev/vda2 75505664 83886079 4190208 82 Linux swap / Solaris Disk /dev/vdb: 322.1 GB, 322122547200 bytes
这里找到待使用的磁盘为 /dev/vdbide
B.使用parted设置分区工具
//设置分区格式(gpt) parted -s /dev/vdb mklabel gpt //执行分区(1GB预留) --第一个分区用于存放工做软件 parted -a optimal -s /dev/vdb mkpart primary 1GB 100GB //执行分区 --第二个分区用于存放数据 parted -a optimal -s /dev/vdb mkpart extend 100GB 100%
关于 Parted工具的使用可参考这里post
C. 格式化并挂载分区性能
推荐使用XFS文件系统格式,在挂载分区时指定noatime,nodiratime选项可提高一些性能。编码
//XFS数据分区格式化 mkfs.xfs -f /dev/vdb1 mkfs.xfs -f /dev/vdb2 //建立数据目录 mkdir -p /opt/local mkdir -p /data chmod -R 755 /opt/local chmod -R 755 /data //写入FSTAB echo "/dev/vdb1 /opt/local xfs noatime,nodiratime 0 0">> "/etc/fstab" echo "/dev/vdb2 /data xfs noatime,nodiratime 0 0">> "/etc/fstab" //挂载目录 mount -a
需事先安装 readline,不然编译过程会报错
wget https://ftp.gnu.org/gnu/readline/readline-6.0.tar.gz tar -xzvf readline-6.0.tar.gz cd readline ./configure make && make install
执行下面的命令,将会完成源码下载、编码以及安装
wget https://ftp.postgresql.org/pub/source/v10.6/postgresql-10.6.tar.gz tar -xzvf postgresql-10.6.tar.gz cd postgresql-10.6 ./configure --prefix=/opt/local/postgres make && make install
--prefix表示安装的目标路径,在安装完成后能够进入该目录找到对应的执行程序。
这里使用的是postgresql-10.6的版本,能够从这里下载到不一样的版本。
编辑 /etc/profile 文件,在末尾加入:
export PG_HOME=/opt/local/postgres export PATH=$PG_HOME/bin:$PATH
再次执行 source /etc/profile即完成环境变量设置。
接下来,须要设置动态连接库的加载路径(LD_LIBRARY_PATH),不然会报找不到libpq.so.5的错误,以下:
./psql: error while loading shared libraries: libpq.so.5: cannot open shared object file: No such file or directory
设置连接库路径
sudo /sbin/ldconfig /opt/local/pgsql/lib
或经过编辑/etc/profile,加入:
LD_LIBRARY_PATH=/usr/local/pgsql/lib export LD_LIBRARY_PATH
groupadd postgres useradd -G postgres postgres passwd postgres ...
//执行初始化 su postgres -c 'pg_ctl -D /data/pgsql/data initdb' //启动数据库 su postgres -c 'pg_ctl start -D /data/pgsql/data -l serverlog'
su postgres -c '...'表示以postgres 的权限来执行程序。
pg_ctl 是postgres 提供的控制程序,可用于初始化、启动、中止数据库进程。
执行完上述的命令,能够发如今 /data/pgsql/data目录中生成了一系列的数据库文件,以下:
-rw------- 1 postgres users 3 Mar 5 17:18 PG_VERSION drwx------ 6 postgres users 50 Mar 5 18:22 base drwx------ 2 postgres users 4.0K Mar 5 17:50 global drwx------ 2 postgres users 6 Mar 5 17:18 pg_commit_ts drwx------ 2 postgres users 6 Mar 5 17:18 pg_dynshmem -rw------- 1 postgres users 4.5K Mar 5 17:18 pg_hba.conf -rw------- 1 postgres users 1.6K Mar 5 17:18 pg_ident.conf drwx------ 4 postgres users 65 Mar 5 18:28 pg_logical drwx------ 4 postgres users 34 Mar 5 17:18 pg_multixact drwx------ 2 postgres users 17 Mar 5 17:49 pg_notify drwx------ 2 postgres users 6 Mar 5 17:18 pg_replslot drwx------ 2 postgres users 6 Mar 5 17:18 pg_serial drwx------ 2 postgres users 6 Mar 5 17:18 pg_snapshots drwx------ 2 postgres users 6 Mar 5 17:49 pg_stat drwx------ 2 postgres users 60 Mar 7 16:06 pg_stat_tmp drwx------ 2 postgres users 17 Mar 5 17:18 pg_subtrans drwx------ 2 postgres users 6 Mar 5 17:18 pg_tblspc drwx------ 2 postgres users 6 Mar 5 17:18 pg_twophase drwx------ 3 postgres users 58 Mar 5 17:18 pg_wal drwx------ 2 postgres users 17 Mar 5 17:18 pg_xact -rw------- 1 postgres users 88 Mar 5 17:18 postgresql.auto.conf -rw------- 1 postgres users 23K Mar 5 17:18 postgresql.conf -rw------- 1 postgres users 57 Mar 5 17:49 postmaster.opts -rw------- 1 postgres users 83 Mar 5 17:49 postmaster.pid -rw-r--r-- 1 postgres users 1.2K Mar 5 18:22 serverlog
其中,须要了解的几个文件:
文件 | 描述 |
---|---|
postmaster.pid | 首行记录了进程PID |
serverlog | 数据库日志 |
postgresql.conf | 主配置文件(可作定制 |
pg_hba.conf | 鉴权相关文件 |
PG_VERSION | 当前主版本号 |
编辑 pg_hba.conf文件,在末尾添加一行:
host all all 0.0.0.0/0 md5
为了让 postgres用户能够远程访问,能够经过 psql 设置密码:
alter user postgres with password 'postgres';
开启远程访问
默认状况下 postgresql 仅仅监听本机的端口,须要编辑 /webdata/pgsql/data/postgresql.conf 文件开启远程IP的访问
listen_addresses = '*'
若是须要定制端口,能够执行脚本:
postgres -p 5430 -D /data/pgsql/data >serverlog 2>&1 &
检查进程是否存活:
netstat -nlp |grep `head -1 /data/pgsql/data/postmaster.pid`
中止数据库进程
kill -INT `head -1 /data/pgsql/data/postmaster.pid`
数据库通常须要设置为随系统启动运行,省去每次重启要手动拉起进程的麻烦。
找到源码目录中 contrib/start-scripts/linux脚本文件,拷贝为 /etc/init.d/postgres。
修改内容以下:
# 程序所在目录 prefix=/opt/local/postgres # 数据目录 PGDATA="/data/pgsql/data" # 运行用户 PGUSER=postgres # 日志文件 PGLOG="$PGDATA/serverlog"
设置执行权限
chmod +x /etc/init.d/postgres
此后,执行如下命令能够方便的启停服务
//手动启动服务 service postgres start //查看服务状态 service postgres status //手动中止服务 service postgres stop
执行如下命令:
//设置开机启动 chkconfig --add postgres
若是须要对数据库作一些参数修改,能够编辑 $DATA_DIR/postgres.conf 这个文件
按照前面的步骤作好了数据库的安装及配置以后,输入如下命令:
psql -U postgres -p 5432 > select version();
回车,能够看到如下输出:
version --------------------------------------------------------------------------------------------------------------------- PostgreSQL 10.6 on x86_64-pc-linux-gnu, compiled by gcc (SUSE Linux) 4.3.4 [gcc-4_3-branch revision 152973], 64-bit (1 row)
至此,咱们就已经完成了整个源码的安装过程!