您的位置:首页 > 数据库 > MySQL

在类Unix系统上,安装MySQL之后的后续处理

2015-03-04 00:00 176 查看
摘要: 这实质上是MySQL源代码说明文档的节选。个人觉得挺有用的。所以特意志翻译出来,希望对大家有用。

    2.10.1 在类Unix系统上,安装MySQL之后的后续处理

在安装MySQL在类Unix系统之后,你必须初始化权限表,启动服务器, 确定服务器正确运行。你也可能想把服务器设置为随机器启动。你应该同时也需要在权限表中设置用户密码。在类Unix系统中,权限表是由mysql_install_db脚本程序所创建的。在某些安装方式下,如果没有现成的数据库存在的话,该程序会自动运行。具体来说,如下的情况中,mysql_install_db脚本程序会自动运行。
* 用RPM包在Linux上安装MySQL时,服务器会自动运行mysql_install_db脚本程序
* 很多Linux平台都有自带的软件安装及安装工具,典型的就如Debian,Ubuntu,Gentoo等Linux系统,就有这类工具。在使用这类工具来安装MySQL时, mysql_install_db脚本程序,也是会被自动调用的。例如在Ubuntu上你用apt安装MySQL时,该脚本就会被自动调用。

* 如果你在苹果的OS X系统上用DMG包,安装MySQL的话,mysql_install_db脚本程序同样会自动调用。对于其它平台及其安装方式,你都需要自己手动运行mysql_install_db脚本程序。这就包括了以二进制文件安装方式及源代码安装方式。

接下来的一步,就是说述一下如何初始化权限表(如果你前面没有完成该工作的话),及启动服务器。这里同时提议了数个命令,让你可以测试服务器是否正确运行。关于自动启动及自动关闭服务器的更多信息可以参盾2.10.1.2小节:"随机器启动MySQL"的内容。 在你完成上面的设置并让服务走了起来后,你应该为mysql_install_db脚本程序所生成的帐户设置密码,同时有可能你对测试数据库的访问会被限制住(不能进行某些操作)。

下面所示的例子中,我们用“mysql”这个登录帐户作为用户ID来运行服务器。这其实就假设了该帐户已经存在。如果你还没有建创"mysql"这个帐户,或者你想用其它帐户来进行设置,你都可以在2.2小节“以通用二进制文件在类Unix系统上安装MySQL”中找到帮助。下面是具体的操作,及说明:

操作1. 
shell> cd BASEDIR
用cd改变当前目录至MySQL的安装目录根目录。下面的步骤假设你已经把当前目录设置为安装目录根目录。在安装目录中,对于安装来说,最重要的是bin及scripts两个子目录。在bin子目录中,包含了服务器及客户端程序。你应该把该子目录的全路径,加入到PATH环境变量中去,以便shell能正确地找到MySQL的各个程序。可参看“2.12”小节:“环境变量”。在scripts子目录中,包含mysql_install_db程序。该程序用于初始化mysql包含权限表的数据库。权限表保存了服务器的用户权限。

操作2.
shell> chown -R mysql .
shell> chgrp -R mysql .
如果需要的话,我们可设置“mysql”用户,可访问发布包安装后的所有内容。当然,如果你是使用“mysql”用户安装发布包的话,那就无需进一步的操作。如果你是在“root”用户安装发布包的话,安装的内容将会归“root”用户所有(普通用户不能访问).所以我们要在安装目录的根目录下,用“root”用户权限运行上面的命令。第一个命令是修改所有文件的拥有者为“mysql”用户。第二个命令则是把所有文件所归属的组设置为“mysql”组。

操作3.
shell> scripts/mysql_install_db --user=mysql
如果需要的话,运行mysql_install_db脚本程序,以便生成原始的MySQL权限表。该表中包含了权限信息决定了用户是被允许以何种方式来连接服务器的。如果你所用的所布版本的安装步骤中没有为你(自动)运行mysql_install_db脚本程序的话,你需要运行上面的命令。就典型情况来说,mysql_install_db脚本程序只需要在第一次安装MySQL时运行。所以你可以在升级一个已经存在的MySQL时,跳过这一步。然而,mysql_install_db脚本程序不会覆盖任何已经存在的根限表,所以(上面的命令)对于任何应用场景都应该是安全的。 如果我们在首次运行mysql_install_db脚本程序时,没有正标识安装目录的位置或数据目录的位置。可以运行如下命令重新指定:
shell> scripts/mysql_install_db --user=mysql \
--basedir=/opt/mysql/mysql \
--datadir=/opt/mysql/mysql/data
mysql_install_db脚本程序会以“mysql”作为拥有者创建数据目录。在数据目录下,该程序还会创建用于保存 权限表及测试用数据库的目录。该脚本程序为根用户及匿名用户在权限表中创建入口。这些帐户并没有初始化其密码。在2.10.2小节:“MySQL帐户安全初始化”说明了如何进行权限初始化。主要来说,这些权限设置允许MySQL的根用户进行任何操作,以及允许任何以"test"为名或以“test_”开头的用户创建数据库及使用之。在6.2小节《MySQL的访问权限系统》中有关于权限表的完整描述。 如果你想进行安全性更高的安装设定,那么请调用mysql_install_db脚本程序时加入--random-passwords选项。该选项将会为MySQL的根用户设置一个随机密码并将密码的属性设置为“失效”,同时删除所有匿名用户。进一步的细节请参看4.4.3小节《mysql_install_db初始化MySQL数据目录》.(使用RPM发布的MySQL在Unbreakable Linux Network系统并不受此影响,因为它不用mysql_install_db脚本).请确认数据库目录及文件的拥有者是否为操作
系统用户“mysql”,这很重要。这以便于服务器在后面的操作中读写他们。确实mysql_install_db脚本是否以根用户运行,并且,包含了--user选项正如上面所示。另一方面当你在使用“mysql”用户登录系统时,你可以在命令中省略--user选项。如果你并不想测试数据库,你可以在停止服务器后删除它。可使用2.10.2小节:"MySQL帐户的安全初始化"中提及的命令可完成该工作。如果你这时已经在mysql_install_db的使用上遇到了问题,那可以参看2.10.1.1小节:"mysql_install_db运行问题的解决"

操作4.(可选)
shell> chown -R root .
shell> chown -R mysql data
如果你喜欢的话,几乎所有的MySQL安装文件的拥有者都可以是"root"。不过数据目录是个例外,拥有者必须是“mysql”。要实这种拥有者差异化,可以用根用户权限在安装目录下使用上述命令。

操作5.(可选)
在“support-files”子目录中挑一些配置文件复制到etc目录
如果你是通过原代码安装SQL的话,在安装目录的“support-files”子目录下,会有很多预先写好的配置文件范本。这些配置文件的范本可用于不同的使用需求与服务类型,及不同的CPU与内存。如果你想使用这些范本,你应该将其复制到/etc/目录或/ect/mysql/目录下并在第一次启动MySQL服务器前,编辑检查这些设置。如果你不复制这些设置范本,那么MySQL将会以默认设置启动。 如果你想设置MySQL随机器启动的话,请把mysql.server这个范本复制到你系统存放启动文件的位置上。更多的信息可以在mysql.server文件中注释中找到。当然你也可以参看2.10.1.2小节:“随机器启动MySQL”的内容。

操作6.
shell> bin/mysqld_safe --user=mysql &

注意:在ubuntu上用 sudo ./bin/mysqld_safe --user=mysql &
这个命令时,sudo有可能失改,最好先用其它命令让shell记住sudo密码再执行上面的命令

启动 MySQL服务以无特权帐户(非root帐户)运行MySQL服务器是比较重要的.特别是在用root权限运行mysqld_safe时,更是如此。所以最好加上--user=mysql这个设置项,以指明用户。而如果当前系统登录用户已经是mysql的话,这个设置可以省略。关于MySQL运行于非特权帐户的更多说明可参看6.1.5小节:"如何以普通用户运行MySQL"。
如果命令立即失败,并打印mysqld 结束。可以在错误文件中找找信息(默认是在数据目录中 名为 host_name.err)如果你由于疏忽,忘记了用mysql_install_db脚本程序来创建权限表的话,来到这一步时,你启动用务器会有如下的错误信息显示。
mysqld: Can't find file: 'host.frm'
如果你用root权限运行mysql_install_db脚本程序,但又没有指定--user选项时,也会出现这个错误信息。这时你需求删除数据目录,并再次运行mysql_install_db 脚本程序,这次可要加入--user选项了。如何时你启动服务器时遇到了其它问题,请参看2.10.1.3小节:“启动MySQL及启动问题的解决”。需要更多关于mysqld_safe的信息的话,参看4.3.2小节:"mysqld_safe---MySQL服务器的启动脚本"。

操作7.
执行SELECT ... INTO DUMPFILE语句,
例如:sudo ./bin/mysql -e "SELECT Db FROM db INTO DUMPFILE '/home/jackey/installed/mysql/lib/plugin/test.dump'" mysql
(其中:/home/jackey/installed/mysql/lib/plugin/ 这个路径是系统变量plugin_dir的内容。 可以用命令:./bin/mysqladmin variables|grep plugin_dir 查出该变量的具体值)
如果插件目录(系统变量plugin_dir指定该目录的目录名)对于服务器是可写的,那么它就可能允许用户使用SELECT ... INTO DUMPFILE语句,编写可执行代码到一个该目录的一个文件中。这可以防止插件目录对于服务器是只读的,同样防止了被目录设置为--secure-file-priv。这样确保SELECT可安全写入。
(注:SELECT ... INTO DUMPFILE writes a single row to a file without any formatting.)

操作8.
shell> bin/mysqladmin version
shell> bin/mysqladmin variables
使用mysqladmin程序校验正在运行的服务器。面的命令提供了简单的测试方法,以确定服务器是否已经启动起来,并准备好响应连接.

“mysqladmin version”命令的输出会因应不台的平台及MySQL的版本而有所不同,不过大体会显示如下这样的信息:

shell> bin/mysqladmin version
mysqladmin Ver 14.12 Distrib 5.6.23, for pc-linux-gnu on i686
...

Server version 5.6.23
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

To see what else you can do with mysqladmin, invoke it
with the --help option.

操作9.
shell> bin/mysqladmin -u root shutdown
验证你是否可以关闭服务器。

操作10.
shell> bin/mysqld_safe --user=mysql &
验证你是否可以再次启动服务器。用mysqld_safe 或者直接调用mysqld来完成这个工作.如果mysqld_safe运行失败,可以参看2.10.1.3小节:"启动MySQL及启动问题的解决"的内容。

操作11.
shell> bin/mysqlshow
shell> bin/mysqlshow mysql
shell> bin/mysql -e "SELECT Host,Db,User FROM db" mysql

注意:调用上面的命令时所有的权限不同,所显示的结果也会有所不同。如果想看到全部的数据请用根权限

 运行一些小测试,以验证你可以从服务器取回信息。其输出大体如下:

shell> bin/mysqlshow
+--------------------+
| Databases |
+--------------------+
| information_schema |
| mysql |
| test |
+--------------------+

shell> bin/mysqlshow mysql
Database: mysql
+---------------------------+
| Tables |
+---------------------------+
| columns_priv |
| db |
| event |
| func |
| help_category |
| help_keyword |
| help_relation |
| help_topic |
| host |
| plugin |
| proc |
| procs_priv |
| servers |
| tables_priv |
| time_zone |
| time_zone_leap_second |
| time_zone_name |
| time_zone_transition |
| time_zone_transition_type |
| user |
+---------------------------+

shell> bin/mysql -e "SELECT Host,Db,User FROM db" mysql
+------+--------+------+
| host | db | user |
+------+--------+------+
| % | test | |
| % | test_% | |
+------+--------+------+

操作12.
shell> cd sql-bench
shell> perl run-all-tests
在MySQL的安装目录下有一个名为“sql-bench”的子目录,当中放着一个基准程序套件,你可以用这些套件来比较不同平台下MySQL的性能。这些基准程序是用Perl语言编写写的。它们需要使用到Perl的DBI模块以便为不同的数据库提供数据库无关接口,同时它们还使用到了其它一些Perl模块,如下:
DBI
DBD::mysql
Data::Dumper
Data::ShowTable
这些模块可以在CPAN网上找到(http://www.cpan.org/).请参看2.13.1小节:“在Unix安装Perl”的内容。在sql-bench/Results 子目录中保存了与众多不同的数据库及不同的平台对比的结果。你要运行所有这个测试的话请执行上面的命令。
如查你没有找到“ sql-bench”这个子目录,那么说明你使用了RPM文件而不是代码RPM.(代码RPM包含了该目录在这种情况下,你必须先安装好基准程序套件才能使用它。基准代码及数据被分别保存在多个文件名格式为mysql-bench-VERSION.i386.rpm的基准RPM文件中。如果你有了以源代码发布的本,在其tests子目录中有有你可以运行的测试。例如运行“run auto_increment.tst”时可以在安装目录根目录下执行如下命令:

shell> mysql -vvf test < ./tests/auto_increment.tst
测试结果会存存中 ./tests/auto_increment.res 文件中。

操作13.
在这时,你已经启动了服务器,然而所有的MySQL帐户都没有设置密码,也没有设置对测试数据库的访问防制。如果你想从严设置安全选项,那么你可以参看2.10.2小节的“MySQL帐户安全初始化”
MySQL5.6的安装程序在安装程序时会自动创建时区表,但不会填充它。所完成对时区表的充填,请参看10.6小节:“MySQL的时区支持”这一小节的说明。
可以把安装目录的binb子目录的路径加入到PATH环境变量中。这样方便调用MySQL的程序,可以在4.2.10小节:“设置环境变量”找到相关信息。

不求经典,但求实用。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: