为了备份一个MySQL数据,可以使用mysqldump工具。例如,为了备份一个叫data的数据库,用户可以进行如下操作:
$ mysqldump -u webuser --password=pass data >data.dump
因为通常情况下,mysqldump采用的是标准格式,你应该将这一标准格式改写成一个文件名(在本例中写成data.dump)。对于这种自动备份的方法,唯一缺陷就是必须在命令行指定密码。
为了备份一个PostgreSQL数据库,可以使用pg_dump工具。访问数据库的用户需要运行这一工具。根据PostgreSQL规定的主机访问规则,你可能不需要给数据库输入密码就可以获得该数据库的信息。操作过程如下:
$ pg_dump data >data.dump
这与mysqldump工具同样有效,但是后者不要求用户名或者密码之类的信息,因为你是作为有权限访问该数据库的用户身份来运行这一工具。
在这两种数据库备份方法中,生成的输出文件提供了重新创建整个数据库的操作说明。因此,这一输出文件包含了数据和表格结构,这正是你创建数据库所必要的信息。
通过以上两类命令,你还可以使用另外一些命令行获取想保存的数据。对于这两类命令,你可以登录网站主页与阅读所有操作信息,并自定义你的数据库备份操作。PostgreSQL与MySQL命令比较
PostgreSQL | MySQL |
服务启动: | 服务启动: MySQL的进程号为1663 |
第一次进入数据库: | 第一次进入数据库: #mysql |
创建用户:(用户zhoz,密码:123) $psql =#create user zhoz with password ‘123’ | 创建用户:(用户zhoz,密码:123) (注意:同还可以分配权限,这里是ALL) |
创建数据库(My): #su – postgres =#create database My with owner = ajian template = template1 encoding=’UNICODE’; | 创建数据库(My): 1)#mysql Mysql>create database My; 2)#mysqladmin create My |
查看用户和数据库: #su – postgres $psql =#\l (查看数据库) | 查看用户和数据库: 1)#mysql Mysql>show databases; (看数据库) 2)#mysqlshow |
新建用户登录: (首先修改配置文件) # vi /var/lib/pgsql/data/pg_hba.conf(在最后加)host all all 127.0.0.1 255.255.255.255 md5 再重启服务:#service postgresql restart 登录:#psql –h 127.0.0.1 –U ajian My Password: | 新建用户登录: 1)#mysql –u ajian –p (带口令登录) 2)#mysql Mysql>use My; (不带口令登录一般用于本机) |
创建表(employee): =#create table employee( (#employee_id int primary key, (#name char(8), (#sex char(2)); | 创建表: >create table employee( ->employee_id int primary key, ->name char(8), ->sex char(2)); |
查看表: =#\dt | 查看表: >show tables; |
查看表的结构: =#\d employee | 查看表的结构: >sescribe employee; |
向表中添加数据: =#insert into employee values -#(‘1’,’zhang’,’F’); -#(‘2’,’chen’,’M’,); | 向表中添加数据: >insert into employee values ->(‘1’,’zhang’,’F’); ->(‘2’,’chen’,’M’,); |
查看表的数据: =#select * from emlpoyee | 查看表的数据: >select * from emlpoyee; |
创建索引(IN_employee): =#create index IN_employee on employee(name); 查看索引: =#\di 删除索引: =#drop index IN_employee on employee; 重建索引: =#reindex table employee;(重建employee所有的) =#reindex index IN_employee;(重建指定的) | 创建索引(IN_employee): 1)>create index IN_employee on employee(name); 2)>alter table employee add index IN_employee(name); 查看索引: >show index from employee; 删除索引: 1)>drop index IN_employee on employee; 2)>alter table emlpoyee drop index IN_employee; |
删除表: =#drop table employee; | 删除表: >drop table employee; |
删除数据库:(注意命令前面的标志) 1)=#drop database ajian; 2)$dropdb ajian | 删除数据库:(注意命令前面的标志) 1)>drop database ajian; 2)#mysqladmin drop ajian |
本文中,我们选用mysql4.0.2-alpha与postgresql7.2进行比较,因为mysql4.0.2-alpha开始支持事务的概念,因此这样的比较对于mysql应该较为有利。
我们这样的比较不想仅仅成为一份性能测试报告,因为至少从我个人来看,对于一个数据库,稳定性和速度并不能代表一切。对于一个成熟的数据库,稳定性肯定会日益提供。而随着硬件性能的飞速提高,速度也不再是什么太大的问题。
一、两者的共同优势
这两个产品都属于开放源码的一员,性能和功能都在高速地提高和增强。mysqlab的人们和postgresql的开发者们都在尽可能地把各自的数据库改得越来越好,所以对于任何商业数据库使用其中的任何一个都不能算是错误的选择。
二、两者不同的背景
mysql的背后是一个成熟的商业公司,而postgresql的背后是一个庞大的志愿开发组。这使得mysql的开发过程更为慎重,而postgresql的反应更为迅速。
这样的两种背景直接导致了各自固有的优点和缺点。
三、mysql的主要优点
1、首先是速度,mysql通常要比postgresql快得多。mysql自已也宣称速度是他们追求的主要目标之一,基于这个原因,mysql在以前的文档中也曾经说过并不准备支持事务和触发器。但是在最新的文档中,我们看到mysql4.0.2-alpha已经开始支持事务,而且在mysql的todo中,对触发器、约束这样的注定会降低速度的功能也列入了日程。但是,我们仍然有理由相信,mysql将有可能一直保持速度的优势。
2、mysql比postgresql更流行,流行对于一个商业软件来说,也是一个很重要的指标,流行意味着更多的用户,意味着经受了更多的考验,意味着更好的商业支持、意味着更多、更完善的文档资料。
3、与postgresql相比,mysql更适宜在windows环境下运行。mysql作为一个本地的windows应用程序运行(在nt/win2000/winxp下,是一个服务),而postgresql是运行在cygwin模拟环境下。postgresql在windows下运行没有mysql稳定,应该是可以想象的。
4、mysql使用了线程,而postgresql使用的是进程。在不同线程之间的环境转换和访问公用的存储区域显然要比在不同的进程之间要快得多。
5、mysql可以适应24/7运行。在绝大多数情况下,你不需要为mysql运行任何清除程序。postgresql目前仍不完全适应24/7运行,这是因为你必须每隔一段时间运行一次vacuum。
6、mysql在权限系统上比postgresql某些方面更为完善。postgresql只支持对于每一个用户在一个数据库上或一个数据表上的insert、select和update/delete的授权,而mysql允许你定义一整套的不同的数据级、表级和列级的权限。对于列级的权限,postgresql可以通过建立视图,并确定视图的权限来弥补。mysql还允许你指定基于主机的权限,这对于目前的postgresql是无法实现的,但是在很多时候,这是有用的。
7、由于mysql4.0.2-alpha开始支持事务的概念,因此事务对于mysql不再仅仅成为劣势。相反,因为mysql保留无事务的表类型。这就为用户提供了更多的选择。
8、mysql的merge表提供了一个独特管理多个表的方法。
9、mysql的myisampack可以对只读表进行压缩,此后仍然可以直接访问该表中的行。
四、postgresql的主要优点:
1、对事务的支持与mysql相比,经历了更为彻底的测试。对于一个严肃的商业应用来说,事务的支持是不可或缺的。
2、mysql对于无事务的myisam表。采用表锁定,一个长时间运行的查询很可能会长时间地阻碍对表的更新。而postgresql不存在这样的问题。
3、postgresql支持存储过程,而目前mysql不支持,对于一个严肃的商业应用来说,作为数据库本身,有众多的商业逻辑的存在,此时使用存储过程可以在较少地增加数据库服务器的负担的前提下,对这样的商业逻辑进行封装,并可以利用数据库服务器本身的内在机制对存储过程的执行进行优化。此外存储过程的存在也避免了在网络上大量的原始的sql语句的传输,这样的优势是显而易见的。
4、对视图的支持,视图的存在同样可以最大限度地利用数据库服务器内在的优化机制。而且对于视图权限的合理使用,事实上可以提供行级别的权限,这是mysql的权限系统所无法实现的。
5、对触发器的支持,触发器的存在不可避免的会影响数据库运行的效率,但是与此同时,触发器的存在也有利于对商业逻辑的封装,可以减少应用程序中对同一商业逻辑的重复控制。合理地使用触发器也有利于保证数据的完整性。
6、对约束的支持。约束的作用更多地表现在对数据完整性的保证上,合理地使用约束,也可以减少编程的工作量。
7、对子查询的支持。虽然在很多情况下在sql语句中使用子查询效率低下,而且绝大多数情况下可以使用带条件的多表连接来替代子查询,但是子查询的存在在很多时候仍然不可避免。而且使用子查询的sql语句与使用带条件的多表连接相比具有更高的程序可读性。
8、支持r-trees这样可扩展的索引类型,可以更方便地处理一些特殊数据。
9、postgresql可以更方便地使用udf(用户定义函数)进行扩展。
五、那么我究竟应该使用mysql还是postgresql
这个问题很难说得清,而且事实上除了mysql和postgresql外,使用oracle、sybase、informix等也是明智的选择。如何你确定只在mysql和postgresql中进行选择,以下规则总是有效的。
1、如果你的操作系统是windows,你应该使用mysql。
2、如果你对数据库并不了十分了解,甚至不知道事务、存储过程等究竟是什么,你应该使用mysql。
3、如果你的应用对数据的完整性和严肃性要求不高,但是追求处理的高速度。例如是一个论坛和社区,你应该使用mysql。
4、你的应用是一个严肃的商业应用,对数据完整性要求很高。而且你希望对一些商业数据逻辑进行很好的封装,例如是一个网上银行,你应该使用postgresql。
5、你的应用处理的是地理数据,由于r-trees的存在,你应该使用postgresql。
6、你是一个数据库内核的狂热爱好者,你甚至希望拥有你自己版本的数据库,毫无疑问,你必须使用postgresql,没准下一个postgresql版本中某一个模块的作者就是你。
后记
以上只是作者从自己的理解尽量客观公正地评价mysql和postgresql的优劣。其中的带有倾向性的意见只代表作者个人观点,有关这两个数据库,欢迎广大朋友提出自己的看法。
作者:@Everyday NetLog
地址:http://blog.zhoz.com/read.php?5
版权所有。转载时必须以链接形式注明作者和原始出处及本声明!