2006年9月24日星期日

第二节 管理 MySQL

  MySQL 的适应性相当强,几乎可能运行在所有的 Linux 发行版上,现在又开始向 Windows 进军,相信今后 MySQL 的应用范围将越来越广。作为 Linux 数据库管理员,首要任务就是有效地管理 MySQL 服务器,为用户提供高质量的数据库服务。
 
1、安装 MySQL
 
  由于 MySQL 实在是太受欢迎了,因此许多 Linux 发行版都自带了 MySQL 服务器。对于 Red Hat Linux AS 4,只需在安装时选择『SQL数据库服务器』套件中的『mysql-server』就可以安装它了。如果暂时还不清楚当前 Linux 系统中是否安装了 MySQL 软件包,可以在命令行方式下用 rpm 命令查询一下:
 
  [root@kevin ~]#rpm -qagrep mysql
  mysql-server-3.23.54a-11 (# MySQL服务器软件)
  mysql-3.23.54a-11 (# MySQL客户端工具)
  mysql-devel-3.23.54a-11 (# MySQL开发包)
 
  如果没有看到如上的输出信息,则表明在安装 Red Hat Linux AS 4 时,没有选择 MySQL 服务器套件。不要着急,还是按老办法用 root 身份登录 KDE,然后单击 KDE 主菜单,从『系统设置』菜单项下选择『添加/删除应用程序』命令,当『软件包管理』窗口打开之后,在『服务器』区域中将『SQL数据库服务器』套件选中,如图 7-2-1 所示。
 

图 7-2-1 安装 SQL 服务器套件
 
  由于 MySQ L是一个可选的软件包,所以应该单击右侧的『细节』按钮,打开『SQL Database Server软件包细节』窗口,在『额外软件包』区域中将『mysql-server』项先中,如图 7-2-2 所示。
 

图 7-2-2 选择 MySQL 软件包
 
  选择好要安装的软件包后,单击『软件包管理』窗口中的『更新』按钮,然后再按照提示插入安装光盘就可以完成 MySQL 软件包的安装了。
 
2、启动 MySQL

  MySQL 服务器软件包总算是安装好了,不过在正式启动 MySQL 之前,还得先完成另外一项初始化工作,那就是建立 MySQL 的授权访问表。具体的做法是在命令行方式下执行 MySQL 软件包提供的 mysql_install_db 命令:
 
  [root@kevin ~]#mysql_install_db
 
  默认情况下,mysql_install_db 命令负责为 MySQL 服务器在/var/lib/mysql/目录下建立两个数据库:mysql 和 test(在Webmin中启动MySQL时,这两文件如果此时不存在,则也将自动生成),其中 mysql 中包含了 MySQL 运行时所依赖的基本信息,而 test 则仅仅用于测试目的。请注意妥善保护好 mysql,因为它包含了六个对 MySQL 数据库系统来说非常重要的表:user、db、host、tables_priv、columns_priv 和 func。
 
  好了,现在就可以启动 MySQL 服务器了。打开浏览器并登录 Webmin 后,单击『服务』图标,进入服务管理页面,如图 7-2-3 所示。
 

图 7-2-3 管理 MySQL 服务器
 
  单击『MySQL数据库服务器』图标,进入『MySQL数据库服务器』页面,如果此时尚未启动 MySQL 服务器,就可以通过单击『启动MySQL服务器』按钮来启动它,如图 7-2-4 所示。
 

图 7-2-4 启动 MySQL
 
  MySQL 数据库服务器正常启动后,就可以在 Webmin 中对其进行管理了。在『MySQL数据库』区域中可以看到 mysql_install_db 命令生成的两个数据库,而『全局选项』区域则用来对各种权限进行管理。如果想停止 MySQL 服务器,可以单击页面底部的『停止服务器』按钮,如图 7-2-5 所示。


图 7-2-5 停止 MySQL
 
  如果当前的 Linux 系统是专门作为数据库服务器使用,那就要将其设置成开机时自动启动。首先单击 Webmin 的『系统』图标,进入系统管理页面,然后单击『引导和关机』图标,打开『引导和关机』页面,在列表中找到 MySQL 服务,如图7-2-6 所示。
 

图 7-2-6 管理 MySQL 服务
 
  单击『mysqld』链接,进入『编辑操作』页面。在『引导时启动』区域中选择『是』单选框,就可以在系统启动时自动控制运行 MySQL 服务器了,如图 7-2-7所示。

图 7-2-7 开机自动启动 MySQL

  MySQL 服务器的确已经启动了,可是怎么知道它是否正常工作了?所以还得先测试一下。对 MySQL 服务器的测试可以按下面的三个步骤进行。

步骤一:证实服务器正常运行

  MySQL 服务器软件包中有一个管理程序 mysqladmin,使用它可以测试 MySQL服务器当前运行状态。

  [root@kevin ~]#mysqladmin status
  Uptime: 2128 Threads: 1 Questions: 7 Slow queries: 0 Opens: 6 Flush tables: 1 Open tables: 0 Queries per second avg: 0.003

  输出信息的个体含义如下:

  Threads:与 mysqld 相互作用的线程数
  Questions:mysqld 执行的 SQL 查询数
  Slow queries:超过 long_query_time(mysqld的一个配置参数)的查询数
  Opens:自从启动以来,mysqld 打开的表数
  Flush tables:执行刷新、重载、更新命令的次数
  Open tables:mysqld 当前打开的表数

  如果当前 MySQL 服务器无法正常工作,那么将看到类似下面的输出信息:

  [root@kevin ~]#mysqladmin status mysqladmin: connect to server at 'localhost' failed ......

步骤二:证实服务器可关闭

  一个运行良好的 MySQL 服务器不仅可以正常启动,还应该在需要时可以被顺利关闭。执行下面的命令可以测试 MySQL 服务器是否能够被正常关闭:

  [root@kevin ~]#mysqladmin shutdown

  MySQL 服务器关闭之后,可以用下面的命令查看 MySQL 是否被关闭了:

  [root@kevin ~]#mysqladmin ping

  mysqladmin:connect to server at "localhost" failed

  errot: 'can't connect to local MySQL server through sochet'/var/lob/mysql/mysql.sock' (2)'

  Check that mysqld is running and that the socket:'/var/lob/mysql/mysql.sock' exits!

步骤三:功能测试

  重新启动 MySQL 服务器后,就可以对其进行功能性测试了。首先用 mysqlshow命令查看 MySQL 服务器中现有的数据库:

  [root@kevin ~]#mysqlshow

图 7-2-8 查看现有数据库
 
  数据库 mysql 和 test 是 mysql_install_db 命令在进行数据库初始化时所建立的。关系型数据库是由二维表格组成的,如果想知道数据库 mysql 中所包含的表,同样可以用 mysqlshow 命令:
 
  [root@kevin ~]#mysqlshow mysql
 

图 7-2-9 查看数据库中的表
 
  最能说明问题的当然还是用 SQL,直接同 MySQL 数据库服务器对话了。没问题,只要使用 mysql 命令就可以达到目的了:
 
  [root@kevin ~]#mysql -e "SELECT host,db,user FROM db" mysql
 

图 7-2-10 查看表中的数据
 
  如果 MySQL 服务器能够顺利通过以上严格的测试,那就说明它的确已经准备好,下面就可以放心的使用了。
 
3、数据库管理
 
  既然 MySQL 是一个数据库系统,那管理员的任务自然就是管理好大大小小的各个数据库了。使用 mysqladmin 命令或者通过 mysql 这一客户端工具来执行 SQL语句都可以对 MySQL 数据库进行管理,但更便捷的方法仍是使用 Webmin。在『MySQL 数据库服务器』页面的『MySQL数据库』区域中,可以很方便地对数据库进行管理,如图 7-2-11 所示。
 

图 7-2-11 管理数据库
 
  如果要创建一个新的数据库,可以先单击『创建新的数据库』链接,进入『创建数据库』页面,然后在『数据库名』文本框中输入要创建的数据库名称,再单击『新建』按钮就可以了,如图 7-2-12 所示。


图 7-2-12 创建数据库
 
  数据库创建成功之后,就可以在『MySQL数据库服务器』页面中找到它所对应的图标了,如图 7-2-13 所示。之后再对该数据进行的任何操作,就都可以通过它来完成。
 

图 7-2-13 新创建的数据库
 
  单击刚刚创建的数据库所对应的图标,进入『编辑数据库』页面。有创建当然就有删除了,单击『删除数据库』按钮可以将该数据库删除,如图 7-2-14 所示。注意,删除数据库意味着将丢失其中的所有数据,所以千万三思而后行。
 

图 7-2-14 删除数据库
 
  数据库的职责是对数据进行有效的管理,将所有的数据都一古脑儿堆放在数据库里可不是修好办法,必须分门另类进行恰当的组织,才不至于需要时找不到。关系型数据库组织数据的方法是使用二维表格,除了创建数据库之外,管理员还得在数据库中维护一些真正用来存放数据的表格,之后才能利用数据库来存放自己的数据。
 
  要在数据库中创建一个表,首先在『编辑数据库』页面中的『字段』文本框中输入所要创建的表格列数,然后单击『新建一个表』按钮来创建表格,如图 7-2-15 所示。

图 7-2-15 创建表格

  进入『创建表』页面后,首先在『表名』文本框中输入表格的名称,然后在『初始字段』区域为表格中的各个字段设置恰当的属性,最后单击『新建』按钮,在当前数据库中创建一个表,如图 7-2-16 所示。

图 7-2-16 表格选项
 
  使用 Webmin 来管理数据库中的表也很简单,在『编辑数据库』页面中不难找到新创建的表所对应的图标,如图 7-2-17 所示。通过它可以很方便地修改数据表的各种属性。
 

图 7-2-17 数据表属性
 
  单击表格对应的图标,进入『编辑数据表』页面,数据表中各个列的属性在这里都可以看到,如图 7-2-18 所示。需要时可以对表中字段的名称、属性等进行修改。
 

图 7-2-18 数据表属性
 
  单击要修改的字段所对应的链接,进入『修改字段』页面,此时可以重新设置字段名或数据类型,另外还可能指定该字段是否允许空值,是否对大小写敏感等,如图 7-2-19 所示。字段属性设置好后,单击『保存』按钮即可。
 

图 7-2-19 修改字段
 
  在修改数据库中的表时,如果改变了字段的数据类型,可能将导致数据的丢失,所以最好在建表时就确定好整个表的结构,不到万不得已最好不要对数据表的结构进行修改。
 
  MySQL 允许你在创建数据表之后,再为其添加额外的字段,如果一开始设计数据表时没有考虑周到,这一功能可就帮上大忙了。在『编辑数据表』页面中的类型下拉框中为要添加的字段选择好数据类型,然后单击『增加字段,类型为』按钮,就可以为数据表添加一个新的字段,如图 7-2-20 所示。
 

图 7-2-20 添加字段
 
  此时将进入『增加字段』页面,在『字段参数』区域中设置好字段的名称、类型宽度、缺省值、主键等属性后,如图 7-2-21 所示,单击『新建』按钮,一个新的字段就被添加到数据表中了。
 

图 7-2-21 设置字段属性
 
  现在数据库创建好了,数据库中的表结构也已经定义好了,下面自然就是往表中添加数据了,这才是真正应该关心的东西。单击『编辑数据表』页面中的『查看数据』按钮,打开『表数据』页面,由于还没有往数据库里添加任何数据,所以当然是什么也没有了,如图 7-2-22 所示。
 

图 7-2-22 查看数据
 
  单击『增加行』按钮,打开『表数据』页面。在为数据表中的各个安段输入恰当的值后,单击『保存』按钮,就可以入数据表中添加一条记录,如图 7-2-23 所示。
 

图 7-2-23 添加记录
 
  以前的 MySQL 数据库管理员只能通过命令行的方式,或者编写相应的程序才能完成对数据库的操作,实现记录的添加、修改和删除。现在有了 Webmin 的帮助可就好多了,只需在『表数据』页面中选择所要修改或删除的记录,然后单击『编辑选择的行』或『删除选择的行』,就可以轻轻松松完成对表格的管理,如图7-2-24 所示。很显然,Webmin 将数据库管理员从冗长的 SQL 语句中解放出来了。
 

图 7-2-24 管理记录
 
  有经验的数据库管理员总会在必要时对数据库进行备份,也就是将数据库中所有信息保存下来,这样如果数据库发生意外时,就不至于手足无措了。单击『表数据』页面底部的『回到数据表列表』链接,返回到『编辑数据库』页面,现在单击『Backup Database』按钮就可以对数据库进行备份,如图 7-2-25 所示。

图 7-2-25 备份数据库

  此时将进入『Backup Database』页面,首先在『Database backup options』区域中的『Backup to file』文本框中输入用来保存备份的文件路径,然后在『Add drop table statements to backup』区域中选择『是』单先框,再单击『Backup Now』按钮就可以完成数据库的备份,如图 7-2-26 所示。

图 7-2-26 设置备份文件
 
  完成对数据库的备份后,管理员就可以高枕无忧了,因为即使数据库遭到毁灭性的破坏,也可以将其瞬间恢复过来,所以千万注意要保护好数据库备份文件(备份文件最好备份到其它的机器、硬盘、光盘可磁带机上)。在『编辑数据库』页面中虽然找不到专门用来恢复数据库的按钮,但单击『执行SQL』按钮可以开始数据库的恢复操作,如图 7-2-27 所示。
 

图 7-2-27 执行 SQL 来恢复数据库
 
  此时将进入『执行SQL』页面,在『Select SQL commands file to cxecute on database address』区域中选择『From local file』单选框,然后在随后的文本框中输入数据库备份文件所在的路径,再单击『执行』按钮就可以完成数据库的恢复。
 
4、权限管理
 
  在数据库中存放的数据往往都是很重要的,如果任何人都可以随意对它进行修改,那将造成严重的后果。正因如此,权限管理是数据管理员日常工作的重中之重。MySQL 数据库服务器的存取管理功能非常强大,而且比 PostgreSQL 要灵活的多。
 
  MySQL 主要是通过用户连接数据库时的身份认证和对数据库操作时的权限设置,来完成对数据库的保护。在『MySQL数据库服务器』页面的『全局选项』区域中,可以对 MySQL 支持的各种权限进行管理,如图 7-2-29 所示。
 

图 7-2-29 权限管理
 
  单击『用户权限』图标,进入『用户权限』页面,在这里可以对 MySQL 用户进行管理。首先要注意的是,MySQL 用户和 Linux 系统用户之间没有任何联系。初始时 MySQL 服务器中只有两个用户:root 和匿名用户,它们都是由mysql_install_db 命令创建的,如图 7-2-30 所示。
 

图 7-2-30 MySQL 用户
 
  MySQL 服务器的 root 用户具有最高的控制权,但没有密码,并且只能从本机登录。匿名用户对地址数据库或以“test_”开头的数据库具有完全的控制权,但无权访问其它数据库。
 
  要添加 MySQL 用户,可以单击『用户权限』页面中的『创建新用户』链接,进入『创建用户』页面。在『MySQL用户详情』区域中设置好用户名、口令、主机和权限后,单击『保存』按钮就可以添加一个新的 MySQL 用户,如图 7-2-31 所示。
 

图 7-2-31 创建 MySQL 用户
 
  在『主机』区域中应该输入允许用户从哪些主机登录 MySQL 服务器,可以是IP 地址或域名。如果允许多个地址,则可以使用通配符%,如 218.168.100.% 和%.mylinux.org。
 
  表 7-2-1 列出了可以被 MySQL 支持的权限,管理员的职责就是为用户分配恰当的权限。

 
表 7-2-1 用户权限
 
  权限    范围  描述
  SELECT  表   允许用户在表上执行选择操作
  INSERT  表   允许用户在表上执行插入操作
  UPDATE  表   允许用户在表上执行更新操作
  DELETE  表   允许用户在表上执行删除操作
  INDEX  表   允许用户创建和删除表索引
  ALTER  表   允许用户在表上执行 ALTERE 命令
  CREATE 数据库、表或索引 允许用户创建新的数据库或表
  DROP  数据库或表 允许用户删除现有的数据库或表
  GRANT 数据库或表 允许用户将自己的权限再赋予其它用户
  RELOAD 服务器管理 允许用户执行 mysqladmin 的下列命令:
            reload、refresh、flush-privileges、
            flush-hosts、flush-logs、flush-tables
  SHUTOWN 服务器管理 允许用户执行 mysqladmin 的 shutdown 命令,
             关闭 MySQL 服务器
  PROCESS 服务器管理 允许用户执行 mysqladmin 的 processlist 和
            shutdown 命令管理 MySQL 进程
  FILE   访问服务器文件 允许用户读写 MySQL 服务器上的文件
 
  为 MySQL 用户赋予恰当的权限是很有讲究的,一般只允许管理员才有权关闭数据库、刷新权限表等。普通用户则只拥有 SELECT、INSERT、DELETE 和 UPDATE 权限,管理员应该为他们赋予尽可能少的权限,以免造成不必要的麻烦。
 
  单击『用户权限』页面底部的『回到数据库列表』链接,重新回到『MySQL数据库服务器』页面,然后单击『数据库权限』图标,进入『数据库权限』页面。除了可以为用户分配恰当的权限外,MySQL 管理员还可以为每个数据库分别指定恰当的权限,如图 7-2-32 所示。根据实际需要分别为每个数据库指定恰当的权限,可以更好地保护好数据库中的数据。
 

图 7-2-32 数据库权限
 
  单击『创建新的数据库权限』链接,进入『创建数据库』权限页面。首先在『数据库权限选项』区域的『数据库』中选择要进行权限管理的数据库,然后在『用户名』和『主机』中指定允许对数据库进行操作的 MySQL 用户和主机地址,最后在权限列表中选择恰当的权限,如图 7-2-33 所示。
 

图 7-2-33 创建数据库权限
 
  在为数据库选择权限时还是同样的原则——只赋予必要的权限。在为数据库设置好权限后,单击『保存』按钮确定。
 
  单击『数据库权限』页面底部的『回到数据库列表』链接,返回到『MySQL数据库服务器』页面,然后再单击『主机权限』图标,你就可以对允许访问 MySQL 服务器的主机进行设置了,如图 7-2-34 所示。
 

图 7-2-34 主机权限
 
  通过限制能够访问 MySQL 服务器的主机,可以有效地拒绝某些非法访问的请求,MySQL 默认情况下没有定义权限。
 
  要定义新的主机权限,单击『主机权限』页面中的『创建新的主机权限』链接,进入『创建主机权限』页面。在『主机权限选项』区域中设置好允许访问的数据库、主机和权限后,再单击『保存』按钮就可以了,如图 7-2-35 所示。

图 7-2-35 创建主机权限

  通常来说,设置好用户权限、数据库权限和主机权限就可以应付绝大多数场合的需要了,但 MySQL 提供的权限管理机制还允许在表和字段一级设置权限,如图7-2-36 所示。

图 7-2-36 表权限和字段权限
 
  要为数据库中的表设置访问权限,可以单击『表权限』图标进入『表权限』页面,在下拉框中选择好表所在的数据库后,单击『在数据库中增加新权限』按钮,就可以创建新的表权限,如图 7-2-37 所示。

 
图 7-2-37 新建表权限
 
  此时将进入『创建表权限』页面,在『表权限选项』区域的『表』、『用户名』和『主机』中指明将要被赋予访问权限的表、用户名和允许的主机后,再在『表权限』和『字段权限』中选择恰当的权限,最后单击『保存』按钮就可以创建该表权限了,如图 7-2-38 所示。

 
图 7-2-38 表权限设置
 
  这段是数据库结构中最小的单击,MySQL 居然可以将对数据的访问权限精确到这一级别,的确令人佩服。在『MySQL数据库服务器』页面中单击『字段权限』图标,进入『字段权限』页面,在下拉框中选择好字段所在的数据表后,单击『在数据库和表中增加新权限』按钮可以创建新的字段权限,如图 7-2-39 所示。

 
图 7-2-39 新建字段权限
 
  此时将进入『创建字段权限』页面,在『字段』、『用户名』和『主机』中指明将要被赋予访问权限的表字段、用户名和允许的主机后,现从『权限』列表中为该字段选择合适的权限,最后单击『保存』按钮就可以创建该字段权限了,如图7-2-40 所示。

 
图 7-2-40 字段权限设置
 
5、MySQL 客户端工具

 
  管理 MySQL 客户端工具的软件有很多,笔者认为 MySQL_Front 是一款不错的软件。关于 MySQL_Front 笔者在《PHP_&_MySQL无需编程轻松创建数据库网站》一书中已做过详细介绍,如需要就查阅该书。

 
下载地址:
http://abcmmm.googlepages.com

没有评论: