如果启动服务器时有问题,可以尝试:
· 指定你使用的储存引擎需要的任何特殊选项。
· 确保服务器知道从哪里找到数据目录。
· 确保服务器可以使用数据目录。数据目录和内容的所有权和允许必须设置成服务器可以访问和修改它们。
· 检查错误日志查看服务器为何不启动。
· 验证服务器想要使用的网络接口可用。
一些储存引擎有一些选项可以控制其行为。你可以创建一个my.cnf文件并为计划使用的引擎设置启动选项。如果你将要使用支持事务处理表 (InnoDB,BDB)的储存引擎,应确保启动服务器之前按照你的期望对它们进行了配置:
· 如果你正使用InnoDB表,参阅InnoDB-specific启动选项。如果你未指定选项,InnoDB使用默认值作为配置选项。请参见15.2.3节,“InnoDB配置”。
· 如果你正使用BDB (Berkeley DB)表,你应当熟悉不同的BDB-specific启动选项。请参见15.5.3节,“BDB启动选项”。
当mysqld服务器启动时,它进入数据目录。在这里它可以找到数据库并写入日志文件。在Unix中,服务器还在数据目录中写pid(过程 ID)文件。
当编译服务器时确定数据目录。这是服务器默认寻找数据目录的位置。如果数据目录位于系统中的其它位置,服务器不能正确工作。用--verbose和--help选项调用mysqld你可以找出默认路径设定值。
如果默认值与你的系统中的MySQL安装布局不匹配,你可以在命令行中为mysqld 或mysqld_safe指定选项来覆盖它们。你还可以在选项文件中列出选项。
要想明显指定数据目录的位置,使用--datadir选项。一般情况下,你可以告诉mysqld基本目录的位置,MySQL安装在该目录下,并且它在该目录中寻找数据目录。你可以使用--basedir选项来实现。
要想检查指定路径选项的结果,用--verbose和--help选项调用mysqld。例如,如果你进入mysqld的安装目录,然后运行下面的命令,它显示启动服务器的结果,基本目录为/usr/local:
shell> ./mysqld --basedir=/usr/local --verbose --help
你可以指定其它选项,例如--datadir,但是请注意--verbose和--help必须为最后的选项。
一旦你确定了你想要的路径设定值,用--verbose和-- help启动服务器。
如果mysqld正在运行,执行下列命令你可以找出它所使用的路径设定值:
shell> mysqladmin variables
或:
shell> mysqladmin -h host_name variables
host_name是MySQL服务器主机的名称。
如果启动mysqld时遇到Errcode 13(意味着Permission denied),这意味着数据目录或其内容的访问权限不允许服务器访问。此时,你需要更改所调用文件和目录的权限,使服务器有权使用它们。你还可以用root启动服务器,但是这样会造成安全问题,应当避免。
在Unix中,进入数据目录,检查数据目录和其内容的所有权,确保服务器可以访问。例如,如果数据目录是/usr/local/mysql/var,使用命令:
shell> ls -la /usr/local/mysql/var
如果数据目录或其文件或子目录不属于你运行服务器使用的账户,将所有权改为该账户:
shell> chown –R mySQL /usr/local/mysql/var shell> chgrp –R mySQL /usr/local/mysql/var
如果服务器不能正确启动,检查错误日志文件,看看是否可以找到原因。日志文件位于数据目录(在Windows中一般为C:\Program Files\MySQL\MySQL Server 5.1\data,Unix二进制分发版为/usr/local/mysql/data,Unix源码分发版为/usr/local/var)。查找数据目录中的host_name.err和host_name.log文件,其中host_name是你的服务器主机名。然后检查文件的最后几行。在Unix中,可以使用tail来显示:
shell> tail host_name.err shell> tail host_name.log
错误日志包含指示服务器不能启动的信息。例如,你可以看见日志中:
000729 14:50:10 bdb: Recovery function for LSN 1 27595 failed 000729 14:50:10 bdb: warning: ./test/t1.db: No such file or directory 000729 14:50:10 Can't init databases
这意味着你没有用--bdb-no-recover选项启动mysqld,Berkeley DB恢复数据库时发现其日志文件有一些问题。要想继续,你应当将旧的Berkeley DB 日志文件从数据库目录移到其它地方,以后你可以在那儿检查它们。BDB日志文件以log.0000000001开头,按顺序命名。
如果你运行支持BDB 表的mysqld,mysqld启动时内核崩溃,该可能是由于BDB 恢复日志的问题。此时,你可以尝试用--bdb-no-recover启动mysqld。如果有帮助,你应当从数据目录移走所有BDB日志文件并尝试不用--bdb-no-recover选项重新启动mysqld。
如果出现下面的错误,说明其它程序(也许是另一个mysqld服务器)正使用mysqld正试图使用的TCP/IP端口或Unix 套接字文件:
Can't start server: Bind on TCP/IP port: Address already in use Can't start server: Bind 在Unix中 socket...
使用ps来确定是否另有一个mysqld服务器正在运行。如果如此,关闭服务器重新启动mysqld。(如果另一个服务器正运行,你的确想要运行多个服务器,你可以在5.12节,“在同一台机器上运行多个MySQL服务器”中发现相关信息)。
如果没有其它服务器在运行,尝试执行命令 telnet your-host-name tcp-ip-port-number。(默认MySQL端口号是3306)。然后按两次Enter(回车)键。如果出现telnet: Unable to connect to remote host: Connection refused错误消息,其它程序正使用mysqld试图使用的 TCP/IP端口。你需要跟踪这是哪个程序并禁用它,或让mysqld用--port选项帧听其它端口。此时,当通过TCP/IP协议连接服务器时,你还需要为客户端程序指定端口号。
端口不能访问的另一个原因可能是防火墙正运行,阻挡了与它的连接。如果如此,修改防火墙设置允许对该端口的访问。
如果服务器已经启动但是你不能与它连接,你应当确保在/etc/hosts中有下面所示条目:
127.0.0.1 localhost
该问题只发生在没有工作线程库,并且MySQL必须配置为使用MIT-pthreads的系统。
如果你不能启动mysqld,你可以使用--debug选项尝试编写一个跟踪文件来找到问题。请参见E.1.2节,“创建跟踪文件”。
关于在Windows安装中排错的详细信息,参见2.3.14节,“在Windows环境下对MySQL安装的故障诊断与排除”。