QQ登录

只需一步,快速开始

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 1698|回复: 0

[系列.八成原创]Linux不完全攻略_07

[复制链接]
发表于 2004-11-4 15:12:19 | 显示全部楼层 |阅读模式
回复贴到 http://www.linuxfans.org/nuke/modules.php?name=Forums&file=viewtopic&t=91508 。不要回复本贴。

[code:1]
7        数据库
        版本:2004-10-28-01

        7.1        准备工作

    如果你不需要视图之类的功能,你可以选择MySQL,它的速度相当快。你也可以选择Oracle,这种王牌级别的东东安装麻烦程度及对硬件要求,和它强悍的功能同样让人吃惊。

    当然,如果你希望找一个折中的,或者你是一个狂热的自由软件拥护者,PostgreSQL应该是不二的选择,它是自由软件中唯一能够媲美商业软件的数据库管理系统。你可以去 http://www.pgsqldb.org 看看这个数据库管理系统的特点和发展历史,那里有很多资料。

        7.2        安装

    到 http://www.pgsql.org 下载源代码。我下载的版本是 PostgreSQL7.3.4 ,保存为“/opt/prog/tmp/postgresql-7.3.4.tar.gz”。下载后,开终端(rxvt),进这个目录:
[root@TFW-RFL40F root]# cd /opt/prog/tmp

    解压安装文件:
[root@TFW-RFL40F tmp]# tar zxvfp ./postgresql-7.3.4.tar.gz
……
……
……
[root@TFW-RFL40F tmp]#
    得到一个目录“postgresql-7.3.4”。

    进这个目录:
[root@TFW-RFL40F tmp]# cd postgresql-7.3.4
[root@TFW-RFL40F postgresql-7.3.4]#

    预编译:
[root@TFW-RFL40F postgresql-7.3.4]# ./configure --prefix=/opt/prog/c/PostgreSQL --enable-locale --enable-multibyte --with-perl --with-odbc --with-tcl
……
……
……
[root@TFW-RFL40F postgresql-7.3.4]#
    对于这个版本的PostgreSQL,“./configure”不加任何选项,系统将按默认的设置安装,查看configre的相关选项可以使用命令“./configure -help”。

    一些最常用的选项如下:

--prefix=BASEDIR
    参考文档原话为“为安装 PostgreSQL 选择一个不同的基础路径”,其实就是选择安装到哪里。默认安装到“/usr/local/pgsql”。安装前我不知道这个软件能否到处移动,就把安装路径选为“/opt/prog/c/PostgreSQL”。

--enable-locale
    如果想用本地化支持。

--enable-multibyte
    允许使用多字节字符编码。这个选项主要用于象日语,韩语或中文这样的语言。

--with-perl
    添加 Perl 模块接口。请注意 Perl 接口将安装到 Perl 模块的常用位置(典型的是在 /usr/lib/perl),所以要成功使用这个选项,你必须有 root 权限。

--with-odbc
    制作 ODBC 驱动包。

--with-tcl
    制作 Tcl/Tk 需要的接口库和程序,包括 libpgtcl,pgtclsh,和 pgtksh。

    预编译时输入的这些参数将告诉编译器如何编译PostgreSQL。开始编译:
[root@TFW-RFL40F postgresql-7.3.4]# make
……
……
……
[root@TFW-RFL40F postgresql-7.3.4]#
    这是个相对漫长的过程。

    把编译好的东东安装到预编译所指定的位置:
[root@TFW-RFL40F postgresql-7.3.4]# make install
……
……
……
[root@TFW-RFL40F postgresql-7.3.4]#

    中间不报错的话,安装就完成了。如果中途出错而停止,解决办法可以参考软件安装那个章节,在此不再赘述。

        7.2        初始化

    创建一个存放数据库文件的目录:
[root@TFW-RFL40F postgresql-7.3.4]# mkdir /opt/prog/c/PostgreSQL-DataBase

    设置环境变量,修改适当的环境变量文件。由于安全原因,PostgreSQL是不让“root”等特权用户用的。为了方便,我就用日常工作的“typhoon”身份管理PostgreSQL,但是建议大家为管理PostgreSQL新创建一个用户。“bash”使用者要修改的文件为个人主目录下的“.bash_profile”。

    我的环境变量文件里中相关部分内容如下:
########################################
#v        PostgreSQL        7.3.4
#        Compiled
#        Moveable
#        PostgreSQL
LD_LIBRARY_PATH="/opt/prog/m/PostgreSQL/lib"
export LD_LIBRARY_PATH
PGLIB="/opt/prog/m/PostgreSQL/lib"
PATH=$PATH:"/opt/prog/m/PostgreSQL-7.3.4/bin"
MANPATH=$MANPATH:"/opt/prog/m/PostgreSQL/man "
export PGLIB PATH MANPATH
########################################
#v        PostgreSQL-DataBase        7.3.4
#        Moveable
PGDATA="/opt/prog/m/PostgreSQL-Database"
export PGDATA
########################################
    其中的“#”对于“bash”来说只是注释符号,跟在它后面的都是注释,在此只起视觉分割作用。我发现“PostgreSQL”是那种说挪窝就能挪窝的软件,就把它移走了,“/opt/prog/m”是它现在的位置。

    “LD_LIBRARY_PATH”,PostgreSQL服务器的库文件;
    “PGLIB”,Linux客户端的库文件所在;
    “PATH”,不再解释;
    “MANPATH”,Linux/UNIX软件手册、帮助文档所在;
    “PGDATA”,PostgreSQL一般到这里找它的数据库;
    “export”,强制它后面跟的东西生效,并不是所有软件都需要,但最好还是加上,以防万一。

    刚才提到的那些目录都是在“root”身份下创建的,要让它们能为“typhoon”所用,还得改权限:
[root@TFW-RFL40F postgresql-7.3.4]# chown -R typhoon.typhoon /opt/prog/c/PostgreSQL
[root@TFW-RFL40F postgresql-7.3.4]# chown -R typhoon.typhoon /opt/prog/c/PostgreSQL-DataBase
[root@TFW-RFL40F postgresql-7.3.4]#
    即:
chown -R <PostgreSQL管理员所在组>.<PostgreSQL管理员用户名> <PostgreSQL的安装目录>
chown -R <PostgreSQL管理员所在组>.<PostgreSQL管理员用户名> <PodtgreSQL的数据库目录>

然后我关闭了X,并注销,再重新登录,以使环境变量生效。

    这个命令用来初始化PostgreSQL数据库,请确保执行前你放数据库文件的地方是空的。
[typhoon@TFW-RFL40F typhoon]$ initdb
……
……
……
[typhoon@TFW-RFL40F typhoon]$
    如果不想用“PGDATA”,或者没有指定“PGDATA”,可以用“initdb 你想存放数据库文件的目录”来初始化。PostgreSQL允许有多个存放数据库文件的目录,但是我没有试验过同时使用这些目录。

    初始化后建数据库的超级用户会自动创,用户名与安装、执行初始化的操作系统用户同名。可能还会自动创建一个与用户名同名的数据库。在我这里就是用户“typhoon”和数据库“typhoon”。直接执行“<--prefix所指的地方>/bin/psql”就能登录进去。“\q”可以退回操作系统的shell。如果这个数据库没有自动生成,请执行“<--prefix所指的地方>/bin/createdb [用户名]”,即以你的用户名创建一个数据库。这个数据库就相当于你的“Home”,没这个数据库,做某些事情就很不方便。不过在创建数据库之前必须启动PostgreSQL的数据库服务。

        7.3        启停方法

[typhoon@TFW-RFL40F typhoon]$ postmaster -i -D $PGDATA&
……
……
……
[typhoon@TFW-RFL40F typhoon]$
    这是开始数据库系统的服务。后面那个“&”最好带上,否则,……:-D

    上面说的启动方法是正规方法,PostgreSQL还提供了封装的控制脚本“<--prefix所指的地方>/bin/pg_ctl”:
[typhoon@TFW-RFL40 typhoon]$ pg_ctl -l 123/pg.log start
postmaster successfully started
[typhoon@TFW-RFL40 typhoon]$
    如果有“-l 文件名”这个参数,所有的错误都会被记录到这个文件里。

    停止服务:
[typhoon@TFW-RFL40 typhoon]$ pg_ctl stop
waiting for postmaster to shut down......done
postmaster successfully shut down
[typhoon@TFW-RFL40 typhoon]$
    既然是停止,就别管什么记录文件了。

    重新启动:
[typhoon@TFW-RFL40 typhoon]$ pg_ctl -l 123/pg.log restart
waiting for postmaster to shut down......done
postmaster successfully shut down
postmaster successfully started
[typhoon@TFW-RFL40 typhoon]$
    相当于先“stop”再“start”。

    如果对配置文件做了修改,想不中断服务而立即生效,就这样:
[typhoon@TFW-RFL40 typhoon]$ pg_ctl reload
postmaster successfully signaled
[typhoon@TFW-RFL40 typhoon]$
    但这不是对所有更改都有效。

    注意:PostgreSQL管理员最好从“Login:”、xdm或kdm登录系统,因为如果“su”过去操作将不能正常执行。

        7.4        安全管理

    初始化后,在数据库目录里会有这样两个文件:“postgresql.conf”和“pg_hba.conf”。

    修改“postgresql.conf”第30行左右的地方为顶格“tcpip_socket = true”,以允许网络访问。

    “pg_hba.conf”,基于主机的访问控制(Host Based Access)。左边有“#”的内容都是被注释掉的,起说明或参考等作用。

我以我现在的文件为例做说明(里面的中文为我的说明):
# PostgreSQL Client Authentication Configuration File
# ===================================================
#
# Refer to the PostgreSQL Administrator's Guide, chapter "Client
# Authentication" for a complete description.  A short synopsis
# follows.
#
# This file controls: which hosts are allowed to connect, how clients
# are authenticated, which PostgreSQL user names they can use, which
# databases they can access.  Records take one of three forms:
#
# local    DATABASE  USER  METHOD  [OPTION]
# host     DATABASE  USER  IP-ADDRESS  IP-MASK  METHOD  [OPTION]
# hostssl  DATABASE  USER  IP-ADDRESS  IP-MASK  METHOD  [OPTION]
#
# (The uppercase quantities should be replaced by actual values.)
# DATABASE can be "all", "sameuser", "samegroup", a database name (or
# a comma-separated list thereof), or a file name prefixed with "@".
# USER can be "all", an actual user name or a group name prefixed with
# "+" or a list containing either.  IP-ADDRESS and IP-MASK specify the
# set of hosts the record matches.  METHOD can be "trust", "reject",
# "md5", "crypt", "password", "krb4", "krb5", "ident", or "pam".  Note
# that "password" uses clear-text passwords; "md5" is preferred for
# encrypted passwords.  OPTION is the ident map or the name of the PAM
# service.
#
# This file is read on server startup and when the postmaster receives
# a SIGHUP signal.  If you edit the file on a running system, you have
# to SIGHUP the postmaster for the changes to take effect, or use
# "pg_ctl reload".

# Put your actual configuration here
# ----------------------------------
#
# CAUTION: The default configuration allows any local user to connect
# using any PostgreSQL user name, including the superuser, over either
# Unix-domain sockets or TCP/IP.  If you are on a multiple-user
# machine, the default configuration is probably too liberal for you.
# Change it to use something other than "trust" authentication.
#
# If you want to allow non-local connections, you need to add more
# "host" records.  Also, remember TCP/IP connections are only enabled
# if you enable "tcpip_socket" in postgresql.conf.

# TYPE  DATABASE    USER        IP-ADDRESS        IP-MASK           METHOD
#访问来源 数据库    用户        IP-地址           子网掩码          认证方式

local   typhoon     typhoon                                         md5
#对于来自本地的访问,数据库“typhoon”对用户“typhoon”采用“md5”加密口令认证

local   typhoon     all                                             reject
#对于来自本地的访问,数据库“typhoon”对上面没提到的所有用户无条件拒绝认证

host    typhoon     typhoon     255.255.255.255   127.0.0.1         md5
#对于来网络的访问,数据库“typhoon”对用户“typhoon”,如果提出访问的是本机,采用“md5”加密口令认证

host    typhoon     all         0.0.0.0           0.0.0.0           reject
#对于来网络的访问,数据库“typhoon”对上面没提到的所有用户,不管提出访问的哪台机器,也不管它来自哪个子网,无条件拒绝认证

local   all         all                                             md5
#对于来自本地的访问,上面没提到的所有数据库对上面没提到的所有用户采用“md5”加密口令认证
host    all         all         0.0.0.0           0.0.0.0           md5
#对于来网络的访问,上面没提到的所有数据库对上面没提到的所有用户,不管提出访问的哪台机器,也不管它来自哪个子网,采用“md5”加密口令认证

########################################
#        Others are all denied        其他访问一概无条件拒绝
local   all         all                                             reject
host    all         all         0.0.0.0           0.0.0.0           teject
########################################

########################################
#        All denied permissed, not safe
#        对所有访问都信任,太不安全,被我禁止掉了,只作为参考
#local   all         all                                             trust
#host    all         all         0.0.0.0           0.0.0.0           trust
########################################
这些认证的规则是从上到下一条一条加载的,要注意的是,里面的“all”并不是真正意义上的“所有”,只是前面的规定中没有提到的那部分。个人感觉用“other”也许更恰当。

这样,最终的结果是:
所有用户都能通过加密口令访问“typhoon”以外的数据库,但是只有用户“typhoon”能以加密口令访问数据库“typhoon”。

        7.5        基本操作

[客户端基本连接操作]====================
*查看PostgreSQL的系统表:
(摸索/查找中)

*终端登录:
psql -l[主机名/IP] -d[数据库名] -U[用户名]

*连接到另外一个数据库:
\c [数据库名]

*断开终端:
\q
========================================

[基本用户管理]==========================
*添加用户:
create user [用户名];

*修改用户密码:
alter user [用户名] with password [口令];

*删除用户:
drop user [用户名];

*查看用户信息:
(摸索/查找中)
========================================

[基本数据库操作]========================
*创建数据库:
create database [数据库名];

*查看数据库列表:
\l

*删除数据库:
drop database [数据库名];

*修改数据库的所有者:
(摸索/查找中)
========================================

[数据库内基本操作]======================
*给予某用户在某数据库创建表的授权:
(摸索/查找中)

*收回某用户在某数据库创建表的授权:
(摸索/查找中)

创建表:
create table ([字段名1] [类型1] <references 关联表名(关联的字段名)>,[字段名2] [类型2],......,<primary key (字段名m,字段名n,...)>);

*查看表名列表:
\d

*查看某个表的状况:
\d [表名]

*重命名一个表:
alter table [表名A] rename to [表名B];

*修改表的所有者:
(摸索/查找中)

*删除一个表:
drop table [表名];
========================================

[表内基本操作]==========================
*在已有的表里添加字段:
alter table [表名] add column [字段名] [类型];

*删除表中的字段:
alter table [表名] drop column [字段名];

*重命名一个字段:
alter table [表名] rename column [字段名A] to [字段名B];

*给一个字段设置缺省值:
alter table [表名] alter column [字段名] set default [新的默认值];

*去除缺省值:
alter table [表名] alter column [字段名] drop default;

*将已存在的表里某列设置为主码:
(摸索/查找中)

*将已存在的表里某几列设置为主码:
(摸索/查找中)

*取消某列的主码资格:
(摸索/查找中)

在表中插入数据:
insert into 表名 ([字段名m],[字段名n],......) values ([列m的值],[列n的值],......);

修改表中的某行某列的数据:
update [表名] set [目标字段名]=[目标值] where [该行特征];

删除表中某行数据:
delete from [表名] where [该行特征];
delete from [表名];--删空整个表
========================================

[备份]==================================
备份一个数据库:
pg_dump 数据库名 > 备份文件

把备份文件导回原数据库或导入新数据库:
cat 备份文件 | psql 数据库名
最好先把这个数据库的认证改为“trust”。

备份一个表:
pg_dump -t table1 dbname > bk1.sql
========================================

        7.6        挪窝

    如前所述,这个版本的PostgreSQL能放置在系统中的任何位置,只要数据库管理者对安装目录和数据库文件目录有足够权限,就能使它正常工作,而所做的修改只是改动环境变量文件中的那几行。

    移动数据库文件目录后,万一出现找不到数据库的情况,“initdb”和“pg_ctl”都能用参数“-D 目录名”使用指定的数据库目录文件。

        7.7        备注
    和大家共同进步。下面是我安装时曾经参考的帖子:
    http://www.freelamp.com/new/publish/1022414614/index_html
    http://chinaunix.net/jh/18/546.html
    http://chinaunix.net/jh/18/548.html

    我曾经四处查找链接里所说的“egcs-c++”,也没下载到,后来才知道“egcs-c++”已经被整合进高版本的“gcc”里了。我的“gcc”是3.2的。大家的“gcc”如果高于2.8,也就不要再到处找“egcs-c++”了。
[/code:1]

回复贴到 http://www.linuxfans.org/nuke/modules.php?name=Forums&file=viewtopic&t=91508 。不要回复本贴。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

GMT+8, 2024-11-15 17:52 , Processed in 0.139926 second(s), 15 queries .

© 2021 Powered by Discuz! X3.5.

快速回复 返回顶部 返回列表