MySQL服务器不启动

mysql服务器运行在新安装的Ubuntu 8.04上。 (我想把mysql服务器移到KVM中,KVM本身是在ubuntu 10.04上运行的。)

/ mysql属于mysql:mysql并且可以访问。 所有的子文件也可以访问

我已经将/etc/security/limits.conf设置为以下值:

* soft nofile 65535 * hard nofile 65535 

当我尝试启动时出现以下错误:

 110406 10:34:45 [Warning] Could not increase number of max_open_files to more than 1024 (request: 2858) 110406 10:34:45 [Warning] Can't create test file /mysql/datadir/dbslave3.lower-test 110406 10:34:45 [Warning] Can't create test file /mysql/datadir/dbslave3.lower-test /usr/sbin/mysqld: File '/mysql/logs/mysql-slow.log' not found (Errcode: 13) 110406 10:34:45 [ERROR] Could not use /mysql/logs/mysql-slow.log for logging (error 13). Turning logging off for the whole duration of the MySQL server process. To turn it on again: fix the cause, shutdown the MySQL server and restart it. /usr/sbin/mysqld: File '/mysql/logs/mysql-bin.index' not found (Errcode: 13) 110406 10:34:45 [ERROR] Aborting 110406 10:34:45 [Note] /usr/sbin/mysqld: Shutdown complete 

当我inputulimit -n 65535 ,然后尝试启动服务器,我得到以下错误:

  110406 10:41:43 [Warning] Can't create test file /mysql/datadir/dbslave3.lower-test 110406 10:41:43 [Warning] Can't create test file /mysql/datadir/dbslave3.lower-test /usr/sbin/mysqld: File '/mysql/logs/mysql-slow.log' not found (Errcode: 13) 110406 10:41:43 [ERROR] Could not use /mysql/logs/mysql-slow.log for logging (error 13). Turning logging off for the whole duration of the MySQL server process. To turn it on again: fix the cause, shutdown the MySQL server and restart it. /usr/sbin/mysqld: File '/mysql/logs/mysql-bin.index' not found (Errcode: 13) 110406 10:41:43 [ERROR] Aborting 110406 10:41:43 [Note] /usr/sbin/mysqld: Shutdown complete 

那么这里有什么问题? 当做一个su - mysql -s /bin/bash ,我可以创build文件并打开它们。

是因为我把mysql移到了KVM中?

编辑:我也把磁盘从/ dev / vda(VirtIO)更改为/ dev / sda(IDE)。 但仍然是一样的行为。 也许这不是KVM,只是在客人本身有问题。

再见,

首先,在Ubuntu下,有三件事情可以限制文件访问:

  1. 文件系统访问权限(但是你已经说过,情况并非如此)
  2. ulimit nofile(但是这个错误信息: Can't create test file /mysql/datadir/dbslave3.lower-test出现在启动,其中mysql检查您的文件系统是否区分大小写。 所以mysql还没有创build这么多的句柄!
  3. AppArmor的! (这应该是你的问题,特别是,因为你已经移动了你的datadir!)

为了解决这个问题,你必须在/etc/apparmor.d/usr.sbin.mysqldconfiguration/mysql/** rwk,

我的猜测是这是一个MySQL子目录中的权限或所有权问题,可能在datafiles目录中。

错误消息显示“Errcode:13”。 您可以使用perror来检查与此特定错误相关的消息,并确认这确实是某处的权限错误。

 shell> perror 13 error code 13: Permission denied 

确保MySQL用户可以访问datafiles目录并在其中写入。 这似乎是问题所在。

另一方面,有时日志文件有误导性或者不够准确。 在这种情况下, strace来救援。 strace是一个非常强大的系统跟踪程序,可以监视进程所进行的系统调用。

它的使用很简单:

 strace -f -o strace.output /etc/init.d/mysql.server start 

这将打印在名为strace.output的文件中启动MySQL服务器时所做的所有系统调用。

希望这可以帮助。

检查您的文件夹的读/写权限,大部分错误似乎是写入失败的结果。 确保分区或磁盘不处于只读模式,并且mysql文件夹是可写的。 尝试使用vi,nano / pico创build一个testing文件来尝试复制读/写问题。

在Linux中,限制是由PAM(pam_limits)在login时configuration的,并在每个进程中应用。 你有2个限制,一个是硬限制,另一个是软限制。 软的可以通过这个过程来改变,直到达到硬限制。

您可以通过以下方式find正在运行的进程的限制:

 cat /proc/<PID>/limits 

要find当前shell的限制,你可以使用:

 ulimit -a #soft limits ulimit -Ha #hard limits 

你也可以直接看看这个过程,看看为什么打开这么多的文件描述符(可以是套接字,文件,pipe道等):

 strace -f mysql_start_script 2> strace.log strace -e 'open,socket,pipe,accept' -f mysql_start_script 2> strace.log # To have only the calls that generates file descriptors 

strace.log文件中searchopensocketpipe

对于正在运行的进程,您可以看到文件描述符:

 ls -l /proc/<PID>/fd 

确保你有/mysql/logs/文件夹。 日志应该在/var/log/

希望能帮助到你。