Длительность запуска Mysqld слишком велика в файловой системе Luster (InnoDB: невозможно заблокировать./ibdata1, ошибка: 38)
Я могу запустить mysqld и использовать его как обычно. Но продолжительность старта очень большая (более 3 минут). Когда я проверяю файл журнала (/var/log/mysqld.log
), Я нашел InnoDB: Unable to lock ./ibdata1, error: 38
,
Недавно я перенес свои данные MySQL из /var/lib/mysql
в /home/user/mysql
потому что файлы слишком велики. Потом я поменял datadir
в /etc/my.cnf
а также /etc/init.d/mysqld
соответственно и поменял datasock
в etc/my.cnf
, Владелец и мод /home/user/mysql
и файлы в нем также правильно установлены.
/home
Том в этой установке находится в файловой системе Luster.
Когда я обнаружил, что в моей базе данных есть 3 таблицы движков innodb, я отбросил их. Но проблема все еще здесь.
Вот лог при запуске mysqld (/var/log/mysqld.log
).
141027 19:40:03 mysqld_safe mysqld from pid file /var/run/mysqld/mysqld.pid ended
141027 19:40:04 mysqld_safe Starting mysqld daemon with databases from /home/user/mysql
InnoDB: Unable to lock ./ibdata1, error: 38
141027 19:40:04 InnoDB: Retrying to lock the first data file
InnoDB: Unable to lock ./ibdata1, error: 38
InnoDB: Unable to lock ./ibdata1, error: 38
InnoDB: Unable to lock ./ibdata1, error: 38
InnoDB: Unable to lock ./ibdata1, error: 38
InnoDB: Unable to lock ./ibdata1, error: 38
InnoDB: Unable to lock ./ibdata1, error: 38
InnoDB: Unable to lock ./ibdata1, error: 38
InnoDB: Unable to lock ./ibdata1, error: 38
InnoDB: Unable to lock ./ibdata1, error: 38
InnoDB: Unable to lock ./ibdata1, error: 38
InnoDB: Unable to lock ./ibdata1, error: 38
InnoDB: Unable to lock ./ibdata1, error: 38
InnoDB: Unable to lock ./ibdata1, error: 38
InnoDB: Unable to lock ./ibdata1, error: 38
InnoDB: Unable to lock ./ibdata1, error: 38
InnoDB: Unable to lock ./ibdata1, error: 38
InnoDB: Unable to lock ./ibdata1, error: 38
InnoDB: Unable to lock ./ibdata1, error: 38
InnoDB: Unable to lock ./ibdata1, error: 38
InnoDB: Unable to lock ./ibdata1, error: 38
InnoDB: Unable to lock ./ibdata1, error: 38
InnoDB: Unable to lock ./ibdata1, error: 38
InnoDB: Unable to lock ./ibdata1, error: 38
InnoDB: Unable to lock ./ibdata1, error: 38
InnoDB: Unable to lock ./ibdata1, error: 38
InnoDB: Unable to lock ./ibdata1, error: 38
InnoDB: Unable to lock ./ibdata1, error: 38
InnoDB: Unable to lock ./ibdata1, error: 38
InnoDB: Unable to lock ./ibdata1, error: 38
InnoDB: Unable to lock ./ibdata1, error: 38
InnoDB: Unable to lock ./ibdata1, error: 38
InnoDB: Unable to lock ./ibdata1, error: 38
InnoDB: Unable to lock ./ibdata1, error: 38
InnoDB: Unable to lock ./ibdata1, error: 38
InnoDB: Unable to lock ./ibdata1, error: 38
InnoDB: Unable to lock ./ibdata1, error: 38
InnoDB: Unable to lock ./ibdata1, error: 38
InnoDB: Unable to lock ./ibdata1, error: 38
InnoDB: Unable to lock ./ibdata1, error: 38
InnoDB: Unable to lock ./ibdata1, error: 38
InnoDB: Unable to lock ./ibdata1, error: 38
InnoDB: Unable to lock ./ibdata1, error: 38
InnoDB: Unable to lock ./ibdata1, error: 38
InnoDB: Unable to lock ./ibdata1, error: 38
InnoDB: Unable to lock ./ibdata1, error: 38
InnoDB: Unable to lock ./ibdata1, error: 38
InnoDB: Unable to lock ./ibdata1, error: 38
141027 19:41:45 InnoDB: Unable to open the first data file
InnoDB: Error in opening ./ibdata1
141027 19:41:45 InnoDB: Operating system error number 38 in a file operation.
InnoDB: Error number 38 means 'Function not implemented'.
InnoDB: Some operating system error numbers are described at
InnoDB: http://dev.mysql.com/doc/refman/5.1/en/operating-system-error-codes.html
InnoDB: Could not open or create data files.
InnoDB: If you tried to add new data files, and it failed here,
InnoDB: you should now edit innodb_data_file_path in my.cnf back
InnoDB: to what it was, and remove the new ibdata files InnoDB created
InnoDB: in this failed attempt. InnoDB only wrote those files full of
InnoDB: zeros, but did not yet use them in any way. But be careful: do not InnoDB: remove old data files which contain your precious data!
141027 19:41:45 [ERROR] Plugin 'InnoDB' init function returned error.
141027 19:41:45 [ERROR] Plugin 'InnoDB' registration as a STORAGE ENGINE failed.
141027 19:41:45 [Note] Event Scheduler: Loaded 0 events
141027 19:41:45 [Note] /usr/libexec/mysqld: ready for connections.
Version: '5.1.52' socket: '/home/user/mysql/mysql.sock' port: 3306 Source distribution
1 ответ
Вы используете файловую систему Lustre для вашего /home
объем. Если вы не включите его специально для тома Luster, эта файловая система не поддерживает блокировку файлов. Но для правильной работы InnoDB необходимо заблокировать свои файлы. Поэтому, когда InnoDB выдает ioctl(2)
вызывает блокировку файла, файловая система отбрасывает назад "Функция не реализована". Вот что говорит ваш журнал ошибок.
InnoDB: Error in opening ./ibdata1
141027 19:41:45 InnoDB: Operating system error number 38 in a file operation.
InnoDB: Error number 38 means 'Function not implemented'.
Вот ссылка на старый список рассылки по этому вопросу. http://lists.lustre.org/pipermail/lustre-discuss/2007-August/003768.html Где-то в этой теме кто-то упоминает, как включить блокировку файлов.
Возможно, вы захотите поработать с людьми, управляющими вашими файловыми системами, для создания специального тома Luster для вашей базы данных MySQL, тома с включенной блокировкой.
Это критически важный сервер MySQL? Если это так, пожалуйста, сделайте много должной осмотрительности, прежде чем развертывать его в этой файловой системе.