在 Ubuntu Lucid Lynx 上通过 aptitude 安装的 MySQL 服务器重新启动时出现问题

在 Ubuntu Lucid Lynx 上通过 aptitude 安装的 MySQL 服务器重新启动时出现问题

我正在使用 Ubuntu Lucid Lynx (10.04),并通过 aptitude 安装了 MySQL 服务器。安装自动添加了一个名为 mysql 的用户(它在开始时不存在于 /etc/passwd 文件中,安装后才存在。)并启动了 MySQL 服务器。

然后我需要修改 my.cnf(以便启用对 MySQL 服务器的远程访问)。当我使用以下命令重新启动 MySQL 服务器时

$ sudo /etc/init.d/mysql 重启

它挂了。但在另一个终端中通过“top”命令显示进程表明 MySQL 服务器正在以 root 用户身份运行。但 my.cnf 明确设置

用户 = mysql

然后我尝试

$ sudo 服务 mysql 重启

结果更糟糕,MySQL 服务器根本就没有启动。

据我记得,在以前的 Ubuntu 版本中我从未遇到过这样的问题。

我的问题是:

  1. 如何在 Ubuntu Lucid Lynx(10.04)中使用名为 mysql 的用户启动 MySQL 服务器?

  2. 在 Ubuntu Lucid Lynx (10.04) 中启动 MySQL 服务器最可靠的方法是什么?

    /etc/init.d/mysql启动

    或者

    服务 mysql 启动

    或者

    启动 mysql

    有什么区别?

先感谢您。

忠俊

答案1

/etc/init.d/xxxx start用于使用 SysV init 脚本启动服务。Ubuntu 使用暴发户而不是 SysV init,并且 init 脚本正在转换为本机 upstart 作业。通常,转换后的作业的 init 脚本会显示警告并调用暴发户

start xxxx与使用以下服务一起使用暴发户并且不适用于使用 SysV init 的服务。

service xxxx start自动选择正确的一个,所以总是可以安全地使用服务

据我所知,MySQL 在 10.04 中已转换为使用 upstart

答案2

谢谢 Florian 和 user46528,

根据 Florian 的回答,我开始只使用“service mysql start”。

然后根据用户46528的回答,我开始调查这个问题。

简而言之,问题在于在 my.cnf 中将 bind-address 设置为服务器的 IP 地址。

我发现的关键问题是:

  • 如果使用 Amazon EC2,bind-address 必须设置为私有 IP 地址。

  • 一旦“service mysql start”由于 Ubuntu Lucid Lynx 中 my.cnf 中的 bind-address 问题而失败,无论采取什么措施解决它,它都会一直挂起。我需要将 bind-address 设置为正确的 IP 地址并重新启动 Ubuntu。

对于所发生事情的更详细解释是:

  1. 我正在使用 Amazon EC2,它每个实例都有公共 IP 地址和私有 IP 地址,在我的情况下是 Ubuntu Lucid Lynx 实例。

  2. 使用 my.cnf 中的默认 bind-address 设置,即 bind-address = 127.0.0.1 (localhost),“service mysql stop”和“service mysql start”可以工作。

  3. 在 my.cnf 中,我将 bind-address 更改为 Amazon EC2 公共 IP 地址。然后“service mysql stop”起作用,但“service mysql start”挂起。

  4. 在 /var/log/mysql/error.log 中,我看到“[错误] 无法启动服务器:绑定在 TCP/IP 端口:无法分配请求的地址”。

  5. 在 my.cnf 中,我将 bind-address 更改为 Amazon EC2 私有 IP 地址。然后“service mysql stop”和“service mysql start”都挂了。

  6. 在 my.cnf 中,我将绑定地址改回默认的 127.0.0.1。“service mysql stop”和“service mysql start”仍然挂起。

  7. 在 my.cnf 中,我将 bind-address 更改为 Amazon EC2 私有 IP 地址。然后我重新启动了 Linux 服务器(通过 Amazon EC2 重启命令)。然后 MySQL 服务器以名为 mysql 的用户正确启动。

  8. “sudo netstat -na”显示端口 3306(MySQL 服务器的端口)和私有 IP 地址,状态为“LISTEN”。

  9. 通过“telnet私有 IP3306”表示已连接。

再次感谢您的帮助。没有他们的帮助,我无法解决这个问题。

诚挚的,忠利

答案3

如果它没有启动,即 ps ax | grep mysql 没有显示 safe_mysqld 和 mysqld 正在运行,请查看 /var/lib/mysql/hostname.err (其中 hostname 是您的机器的主机名)并且它有一个比较详细的日志。默认包中的 restart 会停止、启动,但是,我想知道 mysqld 是否实际上并没有停止。

/etc/init.d/mysql 停止

ps ax|grep mysql (确保没有正在运行的进程)

/etc/init.d/mysql启动

现在,如果您查看进程,safe_mysqld 以 root 身份运行,mysqld 进程以 mysql 身份运行。如果 mysqld 崩溃,safe_mysqld 会循环并尝试重新启动 mysql。您看到的以 root 身份运行的进程是 safe_mysqld 还是 mysqld?

答案4

默认的 my.cnf 为port = 3306bind-address = 127.0.0.1。如果您没有配置环回接口,则此绑定将失败。

要创建环回接口:

ifconfig lo up 127.0.0.1

相关内容