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下,有三件事情可以限制文件访问:
Can't create test file /mysql/datadir/dbslave3.lower-test
出现在启动,其中mysql检查您的文件系统是否区分大小写。 所以mysql还没有创build这么多的句柄! ) 为了解决这个问题,你必须在/etc/apparmor.d/usr.sbin.mysqld
configuration/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
文件中searchopen
, socket
, pipe
。
对于正在运行的进程,您可以看到文件描述符:
ls -l /proc/<PID>/fd
确保你有/mysql/logs/
文件夹。 日志应该在/var/log/
希望能帮助到你。