Сервер 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
когда я вхожу ulimit -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
, я могу создавать файлы и открывать их.
Это потому, что я переместил MySQL в KVM?
РЕДАКТИРОВАТЬ: Я также изменил диски с / dev / vda (VirtIO) на / dev / sda (IDE). Но все то же поведение. Может дело не в KVM, просто что-то не так в самом госте.
Увидимся,
Я предполагаю, что это проблема с разрешениями или владением в одном из подкаталогов MySQL, вероятно, в каталоге файлов данных.
В сообщении об ошибке написано «Код ошибки: 13». Ты можешь использовать перрор чтобы проверить сообщение, связанное с этой конкретной ошибкой, и подтвердить, что это действительно где-то ошибка разрешения.
shell> perror 13
error code 13: Permission denied
Убедитесь, что пользователь MySQL может получить доступ к каталогу файлов данных и писать в нем. Кажется, в этом проблема.
С другой стороны, иногда файлы журналов вводят в заблуждение или не так точны, как должны быть. В таком случае, Strace приходит на помощь. strace - очень мощный системный трассировщик, который отслеживает все системные вызовы, выполняемые процессом.
Его использовать легко:
strace -f -o strace.output /etc/init.d/mysql.server start
Это напечатает все системные вызовы, сделанные при запуске сервера MySQL, в файле с именем strace.output.
Надеюсь это поможет.
Проверьте права чтения / записи в вашей папке, большинство ошибок, по-видимому, являются результатом сбоя записи. Убедитесь, что раздел или диск не находится в режиме только для чтения и что папка mysql доступна для записи. Попробуйте создать тестовый файл с помощью vi, nano / pico, чтобы попытаться воспроизвести проблемы чтения / записи.
Во-первых, в Ubuntu есть 3 вещи, которые могут ограничить доступ к файлам:
Can't create test file /mysql/datadir/dbslave3.lower-test
появляется при запуске, где mysql проверяет вашу файловую систему на чувствительность к регистру. Итак, mysql еще не создал столько дескрипторов!)Чтобы решить эту проблему, вам нужно настроить /mysql/** rwk,
в /etc/apparmor.d/usr.sbin.mysqld
В Linux ограничения настраиваются PAM (pam_limits) во время входа в систему и применяются для каждого процесса. У вас есть 2 ограничения: один - жесткий, а другой - мягкий. Мягкий может быть изменен процессом и увеличен, пока не достигнет жесткого предела.
Вы можете найти ограничения для запущенного процесса с помощью:
cat /proc/<PID>/limits
Чтобы найти ограничения для текущей оболочки, вы можете использовать:
ulimit -a #soft limits
ulimit -Ha #hard limits
Вы также можете strace
процесс и посмотрите, почему открывается так много дескрипторов файлов (которые могут быть сокетами, файлами, каналами ...):
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
поиск файлов для open
, socket
, pipe
.
Для запущенного процесса вы можете увидеть дескрипторы файлов с помощью:
ls -l /proc/<PID>/fd
Убедитесь, что у вас есть /mysql/logs/
папка. Бревна должны быть где-то внутри /var/log/
Надеюсь, поможет.