Unix下安装mysql后的过程 初始化授权表
时间:2008-05-24 来源:poplar.xu
在Unix上安装MySQL后,需要初始化授权表、启动服务器,并确保服务器工作正常。你还要让服务器随系统的启动和停止自动启动和停止。应当为授权表中的账户指定密码。
在Unix中,由mysql_install_db设置 授权表。在某些安装中,该程序自动运行:
· 如果你使用RPM分发版在Linux上安装MySQL,服务器RPM运行mysql_install_db。
· 如果你使用PKG分发版在Mac OS X上安装MySQL,安装器运行mysql_install_db。
否则,你需要自己运行mysql_install_db。
下面的过程描述了如何初始化授权表 (如果还没有初始化)并启动服务器。还推荐了一些你可以用来测试服务器是否可以访问以及是否工作正确的命令。关于自动启动和停止服务器的信息,参见2.9.2.2节,“自动启动和停止MySQL”。
你完成过程并让服务器运行后,你应当为mysql_install_db创建的账户指定密码。2.9.3节,“使初始MySQL账户安全”中列出了相关说明。
在本节的例子中,服务器用MySQL登录账户的用户ID运行。假定存在这样的账户。如果不存在,要么创建账户,或用其它已有的用来运行服务器的登录账户来替代。
1. 进入MySQL的顶级安装目录,此处为BASEDIR:
2. shell> cd BASEDIR
BASEDIR可能为/usr/local/mysql 或/usr/local。以下步骤假定你位于该目录。
3. 根据需要,运行mysql_install_db 程序设置含有确定如何让用户连接服务器的权限的初始MySQL授权表。如果你使用的分发版类型不能运行程序,你需要执行该步骤。
典型,只有首次安装MySQL时,才需要运行mysql_install_db,因此如果你升级已有的安装你可以跳过该步骤,但mysql_install_db不会覆盖已有的 授权表,因此可以在任何环境下安全运行。
要想初始化授权表,根据mysql_install_db是位于bin还是scripts目录下,使用下面的一个命令:
shell> bin/mysql_install_db --user=mysql
shell> scripts/mysql_install_db --user=mysql
mysql_install_db脚本创建数据目录、拥有所有数据库权限的mysql数据库和可以用来测试MySQL的test数据库。脚本为root账户和匿名用户账户创建 授权表条目。账户一开始没有密码。2.9.3节,“使初始MySQL账户安全”中描述了初始权限。简单说,这些权限允许MySQL root用户执行任何操作,允许任何人使用test名创建或使用数据库或用test_启动。
一定要确保由mysql登录账户拥有数据库目录和文件,以便在以后运行时 服务器具有读、写访问权限。为此,如果你用root用户运行mysql_install_db,应当使用--user选项。否则,当以mysql登录时,应当执行脚本,你可以省略命令中的--user选项。
mysql_install_db在mysql数据库中创建几个表,包括user、db、host、 tables_priv、columns_priv和func以及其它。5.7节,“MySQL访问权限系统”中有完整的列表和描述。
如果你不想要test数据库,启动服务器后,可以用mysqladmin -u root drop test卸掉。
如果有mysql_install_db相关问题,参见2.9.2.1节,“与运行mysql_install_db有关的问题”。
有一些选择运行mysql_install_db脚本,正如MySQL分发版中所提供的:
· 如果想让初始权限与标准默认值不同,你可以在运行前修改mysql_install_db。然而,最好是在设置 授权表后使用GRANT和REVOKE来更改权限。换句话说,你可以运行mysql_install_db,然后通过MySQL root用户使用mysql -u rootMySQL来连接服务器,以便发出GRANT和REVOKE命令。
如果你想要在几个机器上用相同的权限安装MySQL,可以将GRANT和REVOKE语句放入一个文件中,以脚本方式执行文件,运行mysql_install_db之后使用mysql。例如:
shell> bin/ mysql_install_db --user=mysql
shell> bin/mysql -u root < your_script_file
这样,你就可以避免在每台机器上手动发出命令。
· 完全可以重新创建授权表。如果你刚刚知道如何使用GRANT和REVOKE,并且运行mysql_install_db 之后进行了许多修改,想要关闭表重新启动,你可能想要这样操作。
要想重新创建授权表,从含有MySQL数据库的目录中移走所有 .frm、.MYI和 .MYD文件。(这是数据目录下面的mysql目录,当你运行mysqld --help 时,列为datadir值)。然后再次运行mysql_install_db 脚本。
· 可以使用--skip-grant-tables选项手动启动mysqld,并使用mysql自己增加权限信息:
· shell> bin/mysqld_safe --user=mysql --skip-grant-tables &
· shell> bin/mysql mysql
手动从mysql执行mysql_install_db中的SQL命令。确保后面钥运行mysqladmin flush-privileges或mysqladmin reload,让服务器重载授权表。
请注意不使用mysql_install_db,不仅需要手动安装授权表,还需要先创建。
4. 启动MySQL服务器:
5. shell> bin/mysqld_safe --user=mysql &
一定要让MySQL服务器使用非权限(non-root) 登录账户运行。为此,如果你以系统root运行mysql_safe,应当使用--user选项。否则,你应当用mysql登录到系统来执行脚本,这样可以省略命令中的--user选项。
A.3.2节,“如何以普通用户身份运行MySQL”中给出了非特权用户运行MySQL的说明。
如果在执行该步前你忘记了创建授权表,当你启动服务器时,在错误日志文件中将出现下面的消息:
mysqld: Can't find file: 'host.frm'
如果启动服务器时遇到其它问题,查阅2.9.2.3节,“启动MySQL服务器以及其故障诊断和排除”。
6. 使用mysqladmin验证服务器在运行中。以下命令提供了简单的测试,可检查服务器是否已经启动并能响应连接:
7. shell> bin/mysqladmin version
8. shell> bin/mysqladmin variables
mysqladmin version的输出根据平台和MySQL版本的不同而稍有变化,但是应当类似于:
shell> bin/mysqladmin version
mysqladmin Ver 8.41 Distrib 5.1.2-alpha, for pc-linux-gnu on i686
Copyright (C) 2000 MySQL AB & MySQL Finland AB & TCX DataKonsult AB
This software comes with ABSOLUTELY NO WARRANTY. This is free software,
and you are welcome to modify and redistribute it under the GPL license
Server version 5.1.2-alpha-Max
Protocol version 10
Connection Localhost via UNIX socket
UNIX socket /var/lib/mysql/mysql.sock
Uptime: 14 days 5 hours 5 min 21 sec
Threads: 1 Questions: 366 Slow queries: 0
Opens: 0 Flush tables: 1 Open tables: 19
Queries per second avg: 0.000
要想看还可以怎样使用mysqladmin,用-- help选项调用它。
9. 验证可以关闭服务器:
10. shell> bin/mysqladmin -u root shutdown
11.验证是否可以重启服务器。可以直接使用mysqld_safe或调用mysqld。例如:
12. shell> bin/mysqld_safe --user=mysql --log &
如果mysqld_safe失败,参见2.9.2.3节,“启动MySQL服务器以及其故障诊断和排除”。
13.进行一些简单的测试,验证你可以从服务器查询信息。输出应当类似于:
14. shell> bin/mysqlshow
15. +-----------+
16. | Databases |
17. +-----------+
18. | mysql |
19. | test |
20. +-----------+
21.
22. shell> bin/mysqlshow mysql
23. Database: mysql
24. +---------------------------+
25. | Tables |
26. +---------------------------+
27. | columns_priv |
28. | db |
29. | func |
30. | help_category |
31. | help_keyword |
32. | help_relation |
33. | help_topic |
34. | host |
35. | proc |
36. | procs_priv |
37. | tables_priv |
38. | time_zone |
39. | time_zone_leap_second |
40. | time_zone_name |
41. | time_zone_transition |
42. | time_zone_transition_type |
43. | user |
44. +---------------------------+
45.
46. shell> bin/mysql -e "SELECT Host,Db,User FROM db" mysql
47. +------+--------+------+
48. | host | db | user |
49. +------+--------+------+
50. | % | test | |
51. | % | test_% | |
52. +------+--------+------+
53.在sql-bench目录(在MySQL安装目录下)中有一个基准套件,可以用来比较MySQL在不同平台上的执行情况。基准套件在Perl中编写。它使用Perl DBI模块来为各种数据库提供一个与数据库无关的接口,并且还需要其它Perl模块来运行基准套件。必须安装以下模块:
54. DBI
55. DBD::mysql
56. Data::Dumper
57. Data::ShowTable
可以从CPAN(http://www.cpan.org/)获得这些模块。请参见2.13.1节,“在Unix中安装Perl”。
sql-bench/Results目录包含了在不同数据库和平台上的各种运行结果。要想进行测试,执行命令:
shell> cd sql-bench
shell> perl run-all-tests
如果没有sql-bench目录,你可能使用RPM文件安装了MySQL,没有使用源码RPM。(源码RPM包括sql-bench benchmark目录)。 此时,必须先安装基准套件后才能使用。有一个单独的mysql-bench-VERSION-i386.rpm基准RPM文件,其中包含了基准代码和数据。
如果你有源码分发版,其tests子目录中也有一些测试可供运行。例如,要运行auto_increment.tst,从源码分发版的顶级目录执行该命令:
shell> mysql -vvf test < ./tests/auto_increment.tst
期望的结果被显示在“ ./tests/auto_increment.res”文件中。
58.至此,你应当可以运行服务器了。然而,初始MySQL账户均没有密码,因此应当使用2.9.3节,“使初始MySQL账户安全”中的说明来指定密码。
MySQL 5.1安装过程在MySQL数据库中创建时区表。但是,必须手动装载表。相关说明参见5.10.8节,“MySQL服务器时区支持”。