命令行运维:

https://blog.csdn.net/zhangzeyuaaa/article/details/77941039

安装流程:

先准备类库:

yum -y install readline-devel zlib-devel

下载postgresql-9.6.9.tar.gz到两台机器上解压后进入并:

./configure --prefix=/main/postgresql

然后make  make install就ok,接着改一下属主:

adduser postgres
passwd postgres
chown -R postgres:postgres /main/postgresql

创建数据文件目录

mkdir -p /main/postgresql/data

创建log文件

mkdir /main/postgresql/logs
touch /main/postgresql/logs/postgresql.log

初始化数据库:

/main/postgresql/bin/initdb -D /main/postgresql/data

可以看到data下多出来一堆文件

[postgres@iz2zej5nlztmm1frnyl4wxz postgresql]$ ll data/
总用量
drwx------ postgres postgres 7月 : base
drwx------ postgres postgres 7月 : global
drwx------ postgres postgres 7月 : pg_clog
drwx------ postgres postgres 7月 : pg_commit_ts
drwx------ postgres postgres 7月 : pg_dynshmem
-rw------- postgres postgres 7月 : pg_hba.conf
-rw------- postgres postgres 7月 : pg_ident.conf
drwx------ postgres postgres 7月 : pg_logical
drwx------ postgres postgres 7月 : pg_multixact
drwx------ postgres postgres 7月 : pg_notify
drwx------ postgres postgres 7月 : pg_replslot
drwx------ postgres postgres 7月 : pg_serial
drwx------ postgres postgres 7月 : pg_snapshots
drwx------ postgres postgres 7月 : pg_stat
drwx------ postgres postgres 7月 : pg_stat_tmp
drwx------ postgres postgres 7月 : pg_subtrans
drwx------ postgres postgres 7月 : pg_tblspc
drwx------ postgres postgres 7月 : pg_twophase
-rw------- postgres postgres 7月 : PG_VERSION
drwx------ postgres postgres 7月 : pg_xlog
-rw------- postgres postgres 7月 : postgresql.auto.conf
-rw------- postgres postgres 7月 : postgresql.conf

设置环境变量:

export PGDATA=/main/postgresql/data
export PATH=${JAVA_HOME}/bin:/main/mysql5.6.41/bin:/main/postgresql/bin:$PATH

source一下生效之

启动下测试下:

pg_ctl -D /main/postgresql/data/ -l /main/postgresql/logs/postgresql.log start

看看日志:

cat postgresql.log
LOG: could not bind IPv6 socket: 无法指定被请求的地址
HINT: Is another postmaster already running on port ? If not, wait a few seconds and retry.
LOG: database system was shut down at -- :: CST
LOG: MultiXact member wraparound protections are now enabled
LOG: database system is ready to accept connections
LOG: autovacuum launcher started

连一下:

psql
psql (9.6.)
Type "help" for help. postgres=#

ok

接下来可以开始配置主从---------------------------------

主库创建同步用户:

psql
psql (9.6.)
Type "help" for help. postgres=# create role repl login replication encrypted password 'xxxxx';

可以查到用户:

postgres=# select usename from pg_user;
usename
----------
postgres
repl
( rows)

vim pg_hba.conf设置访问权限,开放从节点密码读取:

xx.xx.xx.xx是从节点的ip

host    replication     repl        xx.xx.xx.xx/            md5

同时开放其他局域网内的应用节点密码访问:

host    all             all             yy.yy.yy./            md5

修改核心配置文件:

Listen_adresses = ‘*’
wal_level = hot_standby 主从设置为热血模式,流复制必选
max_wal_senders= 流复制允许连接进程
wal_keep_segments =
max_connections = 默认参数,非主从配置相关参数,表示到数据库的连接数

从节点:

从库安装完成后,不初始化,若已经初始化,删除其data目录

从节点从主节点去读取:

pg_basebackup -h 172.17.222.161 -p 5432 -U repl -F p -P -D /main/postgresql/data
Password: 输入密码
/ kB (%), / tablespace
NOTICE: WAL archiving is not enabled; you must ensure that all required WAL segments are copied through other means to complete the backup

在基础备份时,初始化文件是从主库复制来的,所以配置文件一致,注释掉
wal_level,
max_wal_senders 
wal_keep_segments等参数
打开如下参数:
vi /postgres/data/postgresql.conf
hot_standby = on   #在备份的同时允许查询
max_standby_streaming_delay = 30s #可选,流复制最大延迟
wal_receiver_status_interval = 10s #可选,从向主报告状态的最大间隔时间
hot_standby_feedback = on #可选,查询冲突时向主反馈
max_connections = 1000 #默认参数,非主从配置相关参数,表示到数据库的连接数,一般从库做主要的读服务时,设置值需要高于主库

创建恢复文件recovery.conf

cp ../share/recovery.conf.sample recovery.conf
调整参数:
recovery_target_timeline = 'latest'
standby_mode = on
primary_conninfo = 'host=172.17.222.161 port=5432 user=repl password=xxxxx'

备注:
recovery.conf    #在做基础备份时,也可通过-R参数在备份结束后自动生产一个recovery.conf文件
standby_mode = on  #指明从库身份
primary_conninfo = 'host=10.0.120.150 port=5432 user=repl password=repl1234'  #连接到主库信息
recovery_target_timeline = 'latest'     #同步到最新数据
指定触发文件,文件存在时,将触发从库提升为主库,前提是必须设置”standby_mode = on”;如果不设置此参数,也可采用”pg_ctl promote“触发从库切换成主库

#trigger_file = ‘/main/postgres/data/trigger_activestandby’

从库启动

pg_ctl -D /main/postgresql/data/ -l /main/postgresql/logs/postgresql.log start

主库看看状态

主库进程:

从库进程:

测试:

create table test(id int primary key, name varchar(20));

从库只能读取------写入执行报错:

主库执行读写都ok,不过一般用来写:

主从分别查看同步状态:

pg_controldata /main/postgresql/data/

主节点:

从节点:

到此主从复制建立完成。

测试自动主从切换:

1)主库上执行:
su - postgres
pg_ctl stop -m fast         #停主库日志
pg_controldata /postgres/data/ #此时Database cluster state: shutdown
(2)从库切换为主库:
su - postgres
pg_ctl promote
pg_controldata /postgres/data #此时Database cluster state: Inproduction

修改了postgresql.conf中的端口
psql -p 23532
和pg_hba.conf中的访问权限,仅限内网访问

一、建立数据库连接

接入PostgreSQL数据库,切换到pg的用户:

psql -h IP地址 -p 端口  -U 数据库名

之后会要求输入数据库密码

二、访问数据库

1、列举数据库:\l
2、选择数据库:\c  数据库名
3、查看该某个库中的所有表:\dt
4、切换数据库:\c interface
5、查看某个库中的某个表结构:\d 表名
6、查看某个库中某个表的记录:select * from apps limit 1;
7、显示字符集:\encoding
8、退出psgl:\q

三、dump数据库

命令:pg_dump -h IP地址 -p 端口 -U 数据库用户名 -f 目标存储文件及路径 目标数据库名

之后会要求输入数据库用户密码

参数:

    # -h: PostgreSQL服务器的主机为192.168.149.137。
    # -U: 登录用户为postgres。
    # -t: 导出表名以test开头的数据表,如testtable。
    # -a: 仅仅导出数据,不导出对象的schema信息。
    # -f: 输出文件是当前目录下的my_dump.sql

实例:

    # mydatabase是此次操作的目标数据库。
/> pg_dump -h 192.168.149.137 -U postgres -t test* -a -f ./my_dump.sql mydatabase
#-c: 先输出删除数据库对象的SQL命令,在输出创建数据库对象的SQL命令,这对于部署干净的初始系统或是搭建测试环境都非常方便。
/> pg_dump -h 192.168.220.136 -U postgres -c -f ./my_dump.sql mydatabase
#导出mydatabase数据库的信息。在通过psql命令导入时可以重新指定数据库,如:/> psql -d newdb -f my_dump.sql
/> pg_dump -h 192.168.220.136 -U postgres -f ./my_dump.sql mydatabase
#导出模式为my_schema和以test开头的数据库对象名,但是不包括my_schema.employee_log对象。
/> pg_dump -t 'my_schema.test*' -T my_schema.employee_log mydatabase > my_dump.sql
#导出east和west模式下的所有数据库对象。下面两个命令是等同的,只是后者使用了正则。
/> pg_dump -n 'east' -n 'west' mydatabase -f my_dump.sql
/> pg_dump -n '(east|west)' mydatabase -f my_dump.sql

四、恢复dump的数据库

命令:psql -h IP地址 -p 端口 -U 数据库用户名 -d 目标数据库名 -f 目标存储文件及路径

之后会要求输入数据库用户密码

参数:

    # -h: PostgreSQL服务器的主机为192.168.149.137。
    # -U: 登录用户为postgres。
    # -f: 输出文件是当前目录下的my_dump.sql

五、压缩dump数据库及其恢复

压缩dump:pg_dump -h IP地址 -p 端口 -U 数据库用户名 -f 目标存储文件及路径 -Fc 目标数据库名

恢复:pg_restore -h IP地址 -p 端口 -U 数据库用户名 -Fc -d 目标数据库名 目标存储文件及路径

附:压缩dump后文件大小会缩小10倍

六、使用系统表查询数据库个数

执行sql命令:select count(*) from pg_database where datname like 'db%';

最新文章

  1. SpringMVC 数据转换 & 数据格式化 & 数据校验
  2. 部署Apache网站访问统计-AWStats分析系统
  3. How to implement a custom type for NHibernate property
  4. C++ Data Member内存布局
  5. Python: 解决pip安装源被墙的问题
  6. 利用 ffmpeg + ImageMagick + 批处理 生成高品质gif动画
  7. 三分钟了解Activity工作流
  8. understanding checkpoint_completion_target
  9. Webservice 中涉及的几个概念
  10. (译+注解)node.js的C++扩展入门
  11. 使用puppet
  12. MySQL数据库有哪些安全相关的参数需要修改?
  13. redis底层设计(一)——内部数据结构
  14. LOJ #2142. 「SHOI2017」相逢是问候(欧拉函数 + 线段树)
  15. sqlx使用说明
  16. Python参数传递(传值&传引用)
  17. idea 快键键
  18. vulnerability test
  19. python3 设置滚动条
  20. 微信小程序 - loading(组件)

热门文章

  1. FilenameFilter总结
  2. 【转】使用Log4Net进行日志记录
  3. js实现选中文字 分享功能
  4. centos7上设置中文字符集
  5. 6.29一个_rcv 面试题
  6. Centos下磁盘管理---分区
  7. EF中的预先加载和延迟加载
  8. limits.conf文件修改注意事项
  9. IAR 跳转路径错误
  10. io 流操作hdfs