如何备份PostgreSQL数据库 常见的几个备份命令使用

一般我们建站使用较多的还是固定开源CMS程序,且基本上也使用的是PHP+MYSQL程序,所以数据库上较多的还是使用的MYSQL数据库。但是前几天老左有遇到一个网友他使用的是PostgreSQL数据库,实际上这个数据库我们在使用虚拟主机的时候也是有见过的,但是确实用的不多。 如果我们需要备份PostgreSQL数据库的话,一般如果我们服务器WEB环境自带的管理小工具是可以直接导出备份的,但是如果是运维工程师自己编译的WEB系统,那我们就需要用到其他的单独命令备份,这里我们记录下如何通过PostgreSQL命令备份数据库。 第一、一键快速备份单数据库 su – postgres 这里我们登陆数据库。 pg_dump laozuo.org > laozuo.org.bak 通过命令一键将我们的数据库名换成我们需要备份的,然后备份。这里我们可以将备份的数据下载到本地。 psql laozuo < dbname.bak 如果我们需要恢复数据库可以用psql命令来恢复,是不是有点像我们MYSQL恢复数据一样。 第二、远程备份数据库 一般远程备份数据库我们个人使用的不多的,我们还是老老实实在当前服务器操作比较多见,但是这里的方法老左也记录一下。 pg_dump -h 1.1.1.1 -p 1234 dbname > dbname.bak 根据命令及端口进行备份,注意数据库名修改成我们自己的。 第三、设置定时自动备份 这个我们很多朋友都有用的,一般项目文件动的不多,一般都是数据库在增减。所以我们定期备份数据库即可,但是我们需要做到的是定时备份。 1、登录数据库 su – postgres 和上面一样,我们要登录数据库,然后设置定时任务。 2、创建备份目录 mkdir -p ~/dbbackups 我们需要创建一个备份目录。 3、创建定时任务 crontab -e 然后需要编辑文件。 0 0 * * 0 pg_dump -U postgres laozuo> ~/dbbackups/laozuo.org.bak 编辑完毕保存后,我们运营一次看看,是否备份进入文件夹。 这里我们在备份完毕PostgreSQL数据库之后,我们还是需要定期下载或者SCP推送到其他服务器。之前有个朋友确实会定时备份,但是他备份到的还是自己当前服务器。于是前几天发现服务器故障数据丢失,他悲剧了。所以我们还是需要备份到本地。   from:https://www.laozuo.org/16772.html

sysbench的安装详解

sysbench是一个压力测试工具、可以用它来测试cpu、mem、disk、thread、mysql、postgr、oracle;然而作为一个mysql dba 我当然是用它来压测mysql啦!   一、从哪里可以下载到sysbench: sysbench的源码可以在github上面下载的到,sysbench的主页

  二、sysbench的一些安装依赖:

在我的机器上已经安装上了mysql相关的所有包,如果你机器上还没有安装过这些,那你还要安装上mysql的开发包,由于系统自带mariadb 这个mysql分支,所以在安装mysql-devel时应该是安装mariadb-devel   三、安装sysbench: 1  进入到sysbench源码目录

2  执行autogen.sh用它来生成configure这个文件

3  执行configure && make && make install 来完成sysbench的安装

我这里之所以要这样写是因为我的mysql安装在/usr/local/;而不是默认的rpm的安装位置   四、测试是否安装成功:

到目前为止sysbench的安装就算是完成了!   五、sysbench的帮助内容如下:

  六、sysbench对数据库进行压力测试的过程: 1  prepare 阶段 这个阶段是用来做准备的、比较说建立好测试用的表、并向表中填充数据。 2  run       阶段 这个阶段是才是去跑压力测试的SQL 3  cleanup 阶段 这个阶段是去清除数据的、也就是prepare阶段初始化好的表要都drop掉   七、sysbench 中的测试类型大致可以分成内置的,lua脚本自定义的测试: 1、内置: fileio 、cpu 、memory 、threads 、 mutex 2、lua脚本自定义型: sysbench 自身内涵了一些测试脚本放在了安装目录下的:

  八、通过sysbench自带的lua脚本对mysql进行测试: 1、第一步 prepare

2、第二步 run

3、第三步 cleanup

  from:https://www.cnblogs.com/JiangLe/p/7059136.html

SQL语句优化(转载)

一、操作符优化 1、IN 操作符 用IN写出来的SQL的优点是比较容易写及清晰易懂,这比较适合现代软件开发的风格。但是用IN的SQL性能总是比较低的,从Oracle执行的步骤来分析用IN的SQL与不用IN的SQL有以下区别: ORACLE试图将其转换成多个表的连接,如果转换不成功则先执行IN里面的子查询,再查询外层的表记录,如果转换成功则直接采用多个表的连接方式查询。由此可见用IN的SQL至少多了一个转换的过程。一般的SQL都可以转换成功,但对于含有分组统计等方面的SQL就不能转换了。 推荐方案:在业务密集的SQL当中尽量不采用IN操作符,用EXISTS 方案代替。 2、NOT IN操作符 此操作是强列不推荐使用的,因为它不能应用表的索引。 推荐方案:用NOT EXISTS 方案代替 3、IS NULL 或IS NOT NULL操作(判断字段是否为空) 判断字段是否为空一般是不会应用索引的,因为索引是不索引空值的。 推荐方案:用其它相同功能的操作运算代替,如:a is not null 改为 a>0 或a>’’等。不允许字段为空,而用一个缺省值代替空值,如申请中状态字段不允许为空,缺省为申请。 4、> 及 < 操作符(大于或小于操作符) 大于或小于操作符一般情况下是不用调整的,因为它有索引就会采用索引查找,但有的情况下可以对它进行优化,如一个表有100万记录,一个数值型字段A,30万记录的A=0,30万记录的A=1,39万记录的A=2,1万记录的A=3。那么执行A>2与A>=3的效果就有很大的区别了,因为A>2时ORACLE会先找出为2的记录索引再进行比较,而A>=3时ORACLE则直接找到=3的记录索引。 5、LIKE操作符 LIKE操作符可以应用通配符查询,里面的通配符组合可能达到几乎是任意的查询,但是如果用得不好则会产生性能上的问题,如LIKE ‘%5400%’ 这种查询不会引用索引,而LIKE ‘X5400%’则会引用范围索引。 一个实际例子:用YW_YHJBQK表中营业编号后面的户标识号可来查询营业编号 YY_BH LIKE ‘%5400%’ 这个条件会产生全表扫描,如果改成YY_BH LIKE ’X5400%’ OR YY_BH LIKE ’B5400%’ 则会利用YY_BH的索引进行两个范围的查询,性能肯定大大提高。 6、UNION操作符 UNION在进行表链接后会筛选掉重复的记录,所以在表链接后会对所产生的结果集进行排序运算,删除重复的记录再返回结果。实际大部分应用中是不会产生重复的记录,最常见的是过程表与历史表UNION。如: select * from gc_dfys union select * from ls_jg_dfys 这个SQL在运行时先取出两个表的结果,再用排序空间进行排序删除重复的记录,最后返回结果集,如果表数据量大的话可能会导致用磁盘进行排序。 推荐方案:采用UNION ALL操作符替代UNION,因为UNION ALL操作只是简单的将两个结果合并后就返回。 select * from gc_dfys union all select * from ls_jg_dfys 二、SQL书写的影响 1、同一功能同一性能不同写法SQL的影响。 如一个SQL在A程序员写的为  Select * from zl_yhjbqk B程序员写的为 Select * from dlyx.zl_yhjbqk(带表所有者的前缀) C程序员写的为 Select * from DLYX.ZLYHJBQK(大写表名) D程序员写的为 Select *  from DLYX.ZLYHJBQK(中间多了空格) 以上四个SQL在ORACLE分析整理之后产生的结果及执行的时间是一样的,但是从ORACLE共享内存SGA的原理,可以得出ORACLE对每个SQL 都会对其进行一次分析,并且占用共享内存,如果将SQL的字符串及格式写得完全相同,则ORACLE只会分析一次,共享内存也只会留下一次的分析结果,这不仅可以减少分析SQL的时间,而且可以减少共享内存重复的信息,ORACLE也可以准确统计SQL的执行频率。 2、WHERE后面的条件顺序影响 WHERE子句后面的条件顺序对大数据量表的查询会产生直接的影响。如: Select * from zl_yhjbqk where dy_dj = '1KV以下' and xh_bz=1 Select * from zl_yhjbqk where xh_bz=1 and dy_dj = '1KV以下' 以上两个SQL中dy_dj(电压等级)及xh_bz(销户标志)两个字段都没进行索引,所以执行的时候都是全表扫描,第一条SQL的dy_dj = '1KV以下’条件在记录集内比率为99%,而xh_bz=1的比率只为0.5%,在进行第一条SQL的时候99%条记录都进行dy_dj及xh_bz的比较,而在进行第二条SQL的时候0.5%条记录都进行dy_dj及xh_bz的比较,以此可以得出第二条SQL的CPU占用率明显比第一条低。 3、查询表顺序的影响 在FROM后面的表中的列表顺序会对SQL执行性能影响,在没有索引及ORACLE没有对表进行统计分析的情况下,ORACLE会按表出现的顺序进行链接,由此可见表的顺序不对时会产生十分耗服物器资源的数据交叉。(注:如果对表进行了统计分析,ORACLE会自动先进小表的链接,再进行大表的链接) 三、SQL语句索引的利用 1、操作符优化(同上) 2、对条件字段的一些优化 采用函数处理的字段不能利用索引,如: substr(hbs_bh,1,4)=’5400’,优化处理:hbs_bh like ‘5400%’ trunc(sk_rq)=trunc(sysdate), 优化处理:sk_rq>=trunc(sysdate) and sk_rq<trunc(sysdate+1) 进行了显式或隐式的运算的字段不能进行索引,如:ss_df+20>50,优化处理:ss_df>30 ‘X’ || hbs_bh>’X5400021452’,优化处理:hbs_bh>’5400021542’ sk_rq+5=sysdate,优化处理:sk_rq=sysdate-5 hbs_bh=5401002554,优化处理:hbs_bh=’ 5401002554’,注:此条件对hbs_bh 进行隐式的to_number转换,因为hbs_bh字段是字符型。 条件内包括了多个本表的字段运算时不能进行索引,如:ys_df>cx_df,无法进行优化 qc_bh || kh_bh=’5400250000’,优化处理:qc_bh=’5400’ and kh_bh=’250000’ 四、其他 ORACLE的提示功能是比较强的功能,也是比较复杂的应用,并且提示只是给ORACLE执行的一个建议,有时如果出于成本方面的考虑ORACLE也可能不会按提示进行。根据实践应用,一般不建议开发人员应用ORACLE提示,因为各个数据库及服务器性能情况不一样,很可能一个地方性能提升了,但另一个地方却下降了,ORACLE在SQL执行分析方面已经比较成熟,如果分析执行的路径不对首先应在数据库结构(主要是索引)、服务器当前性能(共享内存、磁盘文件碎片)、数据库对象(表、索引)统计信息是否正确这几方面分析。 from:http://www.cnblogs.com/savorboard/p/3295242.html

PostgreSQL

PostgreSQL是以加州大学伯克利分校计算机系开发的 POSTGRES,现在已经更名为PostgreSQL,版本 4.2为基础的对象关系型数据库管理系统(ORDBMS)。PostgreSQL支持大部分 SQL标准并且提供了许多其他现代特性:复杂查询、外键、触发器、视图、事务完整性、MVCC。同样,PostgreSQL 可以用许多方法扩展,比如, 通过增加新的数据类型、函数、操作符、聚集函数、索引。免费使用、修改、和分发 PostgreSQL,不管是私用、商用、还是学术研究使用。 PostgreSQL 是一个自由的对象-关系数据库服务器(数据库管理系统),它在灵活的 BSD-风格许可证下发行。它提供了相对其他开放源代码数据库系统(比如 MySQL 和 Firebird),和专有系统(比如 Oracle、Sybase、IBM 的 DB2 和 Microsoft SQL Server)之外的另一种选择。 PostgreSQL 不寻常的名字导致一些读者停下来尝试拼读它,特别是那些把SQL拼读为"sequel"的人。PostgreSQL 开发者把它拼读为 "post-gress-Q-L"。它也经常被简略念为 "postgres"。[1] 事实上, PostgreSQL 的特性覆盖了 SQL-2/SQL-92 和 SQL-3/SQL-99,首先,它包括了可以说是目前世界上最丰富的数据类型的支持,其中有些数据类型可以说连商业数据库都不具备, 比如 IP 类型和几何类型等;其次,PostgreSQL 是全功能的自由软件数据库,很长时间以来,PostgreSQL 是唯一支持事务、子查询、多版本并行控制系统(MVCC)、数据完整性检查等特性的唯一的一种自由软件的数据库管理系统。 Inprise 的 InterBase 以及SAP等厂商将其原先专有软件开放为自由软件之后才打破了这个唯一。最后,PostgreSQL拥有一支非常活跃的开发队伍,而且在许多黑客的努力下,PostgreSQL 的质量日益提高。 从技术角度来讲,PostgreSQL 采用的是比较经典的C/S(client/server)结构,也就是一个客户端对应一个服务器端守护进程的模式,这个守护进程分析客户端来的查询请求,生成规划树,进行数据检索并最终把结果格式化输出后返回给客户端。为了便于客户端的程序的编写,由数据库服务器提供了统一的客户端 C 接口。而不同的客户端接口都是源自这个 C 接口,比如ODBC,JDBC,Python,Perl,Tcl,C/C++,ESQL等, 同时也要指出的是,PostgreSQL 对接口的支持也是非常丰富的,几乎支持所有类型的数据库客户端接口。这一点也可以说是 PostgreSQL 一大优点。 PostgreSQL强壮的一个原因源于它的架构。和商业数据库一样,PostgreSQL可以用于C/S(客户/服务器)环境。这对于用户和开发人员有很多好处。 PostgreSQL安装核心是数据库服务端进程。它允许在一个独立服务器上。需要访问存储在数据库中的数据的应用程序必须通过数据库进程。这些客户端程序无法直接访问数据,即使它们和服务程序在同一台机器上。