![在 Ubuntu Lucid Lynx 上通过 aptitude 安装的 MySQL 服务器重新启动时出现问题](https://linux22.com/image/517109/%E5%9C%A8%20Ubuntu%20Lucid%20Lynx%20%E4%B8%8A%E9%80%9A%E8%BF%87%20aptitude%20%E5%AE%89%E8%A3%85%E7%9A%84%20MySQL%20%E6%9C%8D%E5%8A%A1%E5%99%A8%E9%87%8D%E6%96%B0%E5%90%AF%E5%8A%A8%E6%97%B6%E5%87%BA%E7%8E%B0%E9%97%AE%E9%A2%98.png)
我正在使用 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 版本中我从未遇到过这样的问题。
我的问题是:
如何在 Ubuntu Lucid Lynx(10.04)中使用名为 mysql 的用户启动 MySQL 服务器?
在 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。
对于所发生事情的更详细解释是:
我正在使用 Amazon EC2,它每个实例都有公共 IP 地址和私有 IP 地址,在我的情况下是 Ubuntu Lucid Lynx 实例。
使用 my.cnf 中的默认 bind-address 设置,即 bind-address = 127.0.0.1 (localhost),“service mysql stop”和“service mysql start”可以工作。
在 my.cnf 中,我将 bind-address 更改为 Amazon EC2 公共 IP 地址。然后“service mysql stop”起作用,但“service mysql start”挂起。
在 /var/log/mysql/error.log 中,我看到“[错误] 无法启动服务器:绑定在 TCP/IP 端口:无法分配请求的地址”。
在 my.cnf 中,我将 bind-address 更改为 Amazon EC2 私有 IP 地址。然后“service mysql stop”和“service mysql start”都挂了。
在 my.cnf 中,我将绑定地址改回默认的 127.0.0.1。“service mysql stop”和“service mysql start”仍然挂起。
在 my.cnf 中,我将 bind-address 更改为 Amazon EC2 私有 IP 地址。然后我重新启动了 Linux 服务器(通过 Amazon EC2 重启命令)。然后 MySQL 服务器以名为 mysql 的用户正确启动。
“sudo netstat -na”显示端口 3306(MySQL 服务器的端口)和私有 IP 地址,状态为“LISTEN”。
通过“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 = 3306
和bind-address = 127.0.0.1
。如果您没有配置环回接口,则此绑定将失败。
要创建环回接口:
ifconfig lo up 127.0.0.1