大数跨境
0
0

话说postgresql数据库

话说postgresql数据库 云容灾备份安全治理
2018-12-20
1

概述

  PostgreSQL数据库是目前功能最强大的开源数据库,支持丰富的数据类型(如JSON和JSONB类型,数组类型)和自定义类型。而且它提供了丰富的接口,容易地扩展它的功能,如可以在GiST框架下实现自己的索引类型等,它还支持使用C语言写自定义函数、触发器,也支持使用流行的语言写自定义函数、比如其中的PL/Perl提供了使用Perl语言写自定义函数的功能,当然还有PL/Python,PL/Tcl,等。

PostgreSQL优势

  • PostgreSQL数据库是目前功能最强大的开源数据库,它是最接近工业标准SQL92的查询语言,正在实现新的功能以兼容最新的SQL标准:SQL2003。

  • 稳定可靠:PostgreSQL是唯一能够做到数据零丢失的开源数据库。有报道称国外部分银行也在使用PostgreSQL数据库。

  • 开源省钱:PostgreSQL数据库是开源的、免费的,是BSD协议,在使用和二次开发上基本没有限制。

  • 支持广泛:PostgreSQL数据库支持大量的主流开发语言包括C、C++、Perl、Python、Java、Tcl,以及PHP等。

  • PostgreSQL社区活跃:PostgreSQL基本每三个月推出一个补丁版本,这意味着已知的BUG很快会被修复,有应用场景的需求也会及时得到响应。

PostgreSQL安装

os:CentOS 6.5 x64
pg 版本:postgresql-9.2.4.tar.bz2

yum安装
[root@vm2 ~]# wget  
[root@vm2 ~]# rpm -vhi pgdg-
RedHat92-9.2-8.noarch.rpm 
[root@vm2 ~]# yum install postgresql92-server postgresql92-contrib -y

初始化并启动数据库
[root@vm2 ~]# /etc/init.d/postgresql-9.2 initdb 
正在初始化数据库:                                        [确定] 
[root@vm2 ~]# /etc/init.d/postgresql-9.2 start 
启动 postgresql-9.2 服务:                                [确定]

[root@vm2 ~]# echo "PATH=/usr/pgsql-9.2/bin:$PATH" >> /etc/profile 
[root@vm2 ~]# echo "export PATH" >> /etc/profile

测试
[root@vm2 ~]# su - postgres 
-bash-4.1$ psql 
psql (9.2.19) 
输入 "help" 来获取帮助信息. 
postgres=# \l 
                                    资料库列表 
  名称    |  拥有者  | 字元编码 |  校对规则  |    Ctype    |      存取权限        
-----------+----------+----------+-------------+-------------+----------------------- 
 postgres  | postgres | UTF8    | zh_CN.UTF-8 | zh_CN.UTF-8 |  
 template0 | postgres | UTF8    | zh_CN.UTF-8 | zh_CN.UTF-8 | =c/postgres          + 
          |          |          |            |            | postgres=CTc/postgres
 template1 | postgres | UTF8    | zh_CN.UTF-8 | zh_CN.UTF-8 | =c/postgres          + 
          |          |          |            |            | postgres=CTc/postgres
(3 行记录)  
postgres=#

1.4、修改管理员密码

修改PostgreSQL 数据库用户postgres的密码(注意不是linux系统帐号)
PostgreSQL 数据库默认会创建一个postgres的数据库用户作为数据库的管理员,默认密码为空,我们需要修改为指定的密码,这里设定为’postgres’。
postgres=# select * from pg_shadow; 
 usename  | usesysid | usecreatedb | usesuper | usecatupd | userepl | passwd | valuntil | useconfig  
----------+----------+-------------+----------+-----------+---------+--------+----------+----------- 
 postgres |      10 | t          | t        | t        | t      |        |          |  
(1 行记录) 
postgres=#  ALTER USER postgres WITH PASSWORD 'postgres'; 
ALTER ROLE 
postgres=# select * from pg_shadow; 
 usename  | usesysid | usecreatedb | usesuper | usecatupd | userepl |              passwd                | valuntil | useconfig  
----------+----------+-------------+----------+-----------+---------+----------------------------------
 postgres |      10 | t          | t        | t        | t      | md53175bce1d3201d16594cebf9d7eb3f9d |          |  
(1 行记录) 
postgres=#

创建测试数据库
postgres=# create database testdb; 
CREATE DATABASE 
postgres=# \c testdb; 
您现在已经连线到数据库 "testdb",用户 "postgres". 
testdb=#

创建测试表
testdb=#  create table test (id integer, name text); 
CREATE TABLE 
testdb=# insert into test values(1,'lansgg'); 
INSERT 0 1 
testdb=# select * from test; 
 id |  name  
----+-------- 
  1 | lansgg 
(1 行记录)

查看表结构
testdb=# \d test; 
  资料表 "public.test"
 栏位 |  型别  | 修饰词  
------+---------+-------- 
 id  | integer |  name | text    |

备份和恢复

PostgreSQL自带一个客户端pgAdmin,里面有个备份,恢复选项,也能对数据库进行备份 恢复(还原),但最近发现数据库慢慢庞大的时候,经常出错,备份的文件过程中出错的几率那是相当大,手动调节灰常有限。所以一直寻找完美的备份恢复方案。

梦里寻他千百度,伊人却在灯火阑珊处...其实PostgreSQL内置不少的工具,寻找的备份恢复方案就在其中:pg_dump,psql。这两个指令 在数据库的安装目录下,比如我自己本地安装的,路径形如:C:\Program Files\PostgreSQL\9.5\;然后进入到bin文件夹,会看到不少的exe文件,这就是PostgreSQL内置的工具了。里面会找到 pg_dump.exe,psql.exe两个文件。我们怎么用他们?

用法:

备份数据库,指令如下:

pg_dump -h 164.82.233.54 -U postgres databasename > C:\databasename.bak

开始-运行-cmd 弹出dos控制台;然后 在控制台里,进入PostgreSQL安装目录bin下:

cd C:\Program Files\PostgreSQL\9.0\bin

最后执行备份指令:  

pg_dump -h 164.82.233.54 -U postgres databasename > C:\databasename.bak

指令解释:如上命令,pg_dump 是备份数据库指令,164.82.233.54是数据库的ip地址(必须保证数据库允许外部访问的权限哦~),当然本地的数据库ip写 localhost;postgres 是数据库的用户名;databasename 是数据库名。> 意思是导出到C:\databasename.bak文件里,如果没有写路径,单单写databasename.bak文件名,那么备份文件会保存在C: \Program Files\PostgreSQL\9.0\bin 文件夹里。

恢复数据库,指令如下:  

psql -h localhost -U postgres -d databasename <  C:\databasename.bak(测试没有成功)
pg_restore.exe --host localhost --port 5432 --username "postgres" --dbname "symbolmcnew" --no-password  --verbose "databasename.backup"(测试成功)

指令解释:如上命令,psql是恢复数据库命令,localhost是要恢复到哪个数据库的地址,当然你可以写上ip地址,也就是说能远程恢复(必须保证 数据库允许外部访问的权限哦~);postgres 就是要恢复到哪个数据库的用户;databasename 是要恢复到哪个数据库。<  的意思是把C:\databasename.bak文件导入到指定的数据库里。

以上所有的是针对windows而言的,如果在linux下,会不会有效? 

在linux里依然有效。有一个值得注意的是:如果直接进入PostgreSQL的安装目录bin下,执行命令,可能会出现 找不到pg_dump,psql的现象,我们在可以这样:

备份

/opt/PostgreSQL/9.5/bin/pg_dump -h 164.82.233.54 -U postgres databasename > databasename.bak

恢复: 

/opt/PostgreSQL/9.5/bin/psql -h localhost -U postgres -d databasename < databasename.bak


【声明】内容源于网络
0
0
云容灾备份安全治理
分享云灾备规划、实施、运营、备份与恢复、数据安全、数据治理;窥视国内外备份软件与监控软件知识前沿水平线; 越努力,越幸运!
内容 2171
粉丝 0
云容灾备份安全治理 分享云灾备规划、实施、运营、备份与恢复、数据安全、数据治理;窥视国内外备份软件与监控软件知识前沿水平线; 越努力,越幸运!
总阅读3.8k
粉丝0
内容2.2k