Stylesheet conf/userstyle.css not found, please contact the developer of "dokuwiki_2024" template.
linux:mysql:mysql_errors
Различия
Показаны различия между двумя версиями страницы.
Предыдущая версия справа и слеваПредыдущая версия | |||
linux:mysql:mysql_errors [2022/08/01 01:21] – dx | linux:mysql:mysql_errors [2025/03/05 17:49] (текущий) – dx | ||
---|---|---|---|
Строка 1: | Строка 1: | ||
+ | ====== MySQL - коллекция ошибок и фиксов ====== | ||
+ | {{ : | ||
+ | |||
+ | См. также [[linux: | ||
+ | |||
+ | ===== Ошибки ===== | ||
+ | |||
+ | ==== ERROR 1045 (28000): Access denied ==== | ||
+ | |||
+ | Debian 12, MariaDB 10.11 | ||
+ | |||
+ | <code bash> | ||
+ | Nov 15 13:16:10 mail / | ||
+ | Nov 15 13:16:10 mail / | ||
+ | Nov 15 13:16:10 mail / | ||
+ | </ | ||
+ | |||
+ | Временное решение - добавить в файл ''/ | ||
+ | |||
+ | <code bash> | ||
+ | [client] | ||
+ | host = localhost | ||
+ | user = root | ||
+ | password = | ||
+ | [mysql_upgrade] | ||
+ | host = localhost | ||
+ | user = root | ||
+ | password = | ||
+ | </ | ||
+ | |||
+ | При случае проверить это | ||
+ | * [[https:// | ||
+ | * [[https:// | ||
+ | |||
+ | ==== Foreign key / Внешние ключи / Ошибка #1217 ==== | ||
+ | |||
+ | Теория в другом месте. Только фикс. | ||
+ | |||
+ | Текст ошибки может быть разным | ||
+ | |||
+ | <code sql> | ||
+ | #1217 - Cannot delete or update a parent row: a foreign key constraint fails\\ | ||
+ | #1217 - Невозможно удалить или обновить родительскую строку: | ||
+ | ERROR 1005 (HY000) at line 30: Can't create table (errno: 150) | ||
+ | Create table %table_name% with foreign key constraint failed. | ||
+ | </ | ||
+ | |||
+ | В mysql cli отключаем проверку внешних ключей, | ||
+ | |||
+ | <code sql> | ||
+ | SET FOREIGN_KEY_CHECKS = 0; | ||
+ | # пример, | ||
+ | LOAD DATA INFILE '/ | ||
+ | # пример, | ||
+ | SOURCE dump.sql; | ||
+ | # пример, | ||
+ | drop table if exists users; | ||
+ | # включаем проверку внешних ключей | ||
+ | SET FOREIGN_KEY_CHECKS = 1; | ||
+ | </ | ||
+ | |||
+ | UPD 1/08/2022 | ||
+ | |||
+ | можно ещё проще сделать | ||
+ | |||
+ | <code bash> | ||
+ | |||
+ | ==== Run ' | ||
+ | |||
+ | Warning: The unit file, source configuration file or drop-ins of mariadb.service changed on disk. Run ' | ||
+ | |||
+ | * https:// | ||
+ | * https:// | ||
+ | |||
+ | Помогло | ||
+ | |||
+ | < | ||
+ | |||
+ | ==== Can't init tc log ==== | ||
+ | |||
+ | < | ||
+ | rm -f / | ||
+ | mv / | ||
+ | </ | ||
+ | |||
+ | ==== MySQL “Got an error reading communication packet” errors ==== | ||
+ | |||
+ | Не успел разобраться с ошибкой - пропала сама. Оставлю ссылку на будущее https:// | ||
+ | |||
+ | ==== #1524 - Plugin ' | ||
+ | |||
+ | < | ||
+ | [mysqld] | ||
+ | plugin-load-add = auth_socket.so | ||
+ | </ | ||
+ | |||
+ | https:// | ||
+ | |||
+ | Или так | ||
+ | |||
+ | < | ||
+ | use mysql; | ||
+ | update user set plugin=" | ||
+ | flush privileges; | ||
+ | </ | ||
+ | |||
+ | Или см. [[linux: | ||
+ | |||
+ | ==== Can't create a new thread (errno 11) ==== | ||
+ | |||
+ | Ошибка **Can' | ||
+ | |||
+ | Как всегда ulimit - https:// | ||
+ | |||
+ | TL;DR | ||
+ | |||
+ | Лимиты установленные для MySQL в файле ''/ | ||
+ | |||
+ | < | ||
+ | mysql soft nofile 10240 | ||
+ | mysql hard nofile 40960 | ||
+ | mysql soft nproc 10240 | ||
+ | mysql hard nproc 40960 | ||
+ | </ | ||
+ | |||
+ | ==== #1698 - Access denied for user ' | ||
+ | |||
+ | Не работает phpmyadmin под root' | ||
+ | |||
+ | Добавляем отдельного пользователя для администрирования | ||
+ | |||
+ | < | ||
+ | CREATE USER ' | ||
+ | GRANT ALL PRIVILEGES ON *.* TO ' | ||
+ | </ | ||
+ | |||
+ | ИЛИ | ||
+ | |||
+ | < | ||
+ | # mysql -u root | ||
+ | mysql> use mysql; | ||
+ | mysql> update user set plugin='' | ||
+ | mysql> flush privileges; | ||
+ | mysql> exit; | ||
+ | </ | ||
+ | |||
+ | FIXME что-то там с sudo и unix_socket, | ||
+ | |||
+ | ==== mysqldump: Couldn' | ||
+ | |||
+ | Ошибка **mysqldump: | ||
+ | |||
+ | mysql_upgrade по рекомендациям тоже не работает с ошибкой **mysqldump: | ||
+ | |||
+ | И мне помог не cPanel, а [[https:// | ||
+ | |||
+ | В ''/ | ||
+ | |||
+ | Чтобы его найти выполним команду | ||
+ | |||
+ | < | ||
+ | |||
+ | **Решение** | ||
+ | |||
+ | Удалить/ | ||
+ | |||
+ | ==== #1214 - The used table type doesn' | ||
+ | |||
+ | Индексы FULLTEXT поддерживаются в таблицах InnoDB только начиная с MYSQL 5.6, поэтому попробуйте обновить MYSQL и после этого изменить команду таблицы | ||
+ | |||
+ | ==== Waiting for table metadata lock ==== | ||
+ | |||
+ | * https:// | ||
+ | * https:// | ||
+ | |||
+ | ==== No directory, logging in with HOME=/ ==== | ||
+ | |||
+ | < | ||
+ | # / | ||
+ | No directory, logging in with HOME=/ | ||
+ | </ | ||
+ | |||
+ | Подобная ошибка была в Debian с репозиторием dotdeb. | ||
+ | |||
+ | Надо поправить ''/ | ||
+ | |||
+ | < | ||
+ | # cat /etc/passwd | grep mysql | ||
+ | mysql: | ||
+ | </ | ||
+ | |||
+ | Должно быть так | ||
+ | |||
+ | < | ||
+ | |||
+ | ==== Can't create thread to kill server (errno= 11) ==== | ||
+ | |||
+ | Скорее всего на сервере недостаточно памяти для выбранных настроек в '' | ||
+ | |||
+ | Т.е. '' | ||
+ | |||
+ | Решение - уменьшить max_connections и другие параметры исходя из доступных ресурсов. | ||
+ | |||
+ | ==== Can't create a new thread (errno 11) ==== | ||
+ | |||
+ | Ошибка похожа на **Can' | ||
+ | |||
+ | * https:// | ||
+ | * http:// | ||
+ | |||
+ | В данном случае нужно увеличить количество открытых файлов и количество процессов ('' | ||
+ | |||
+ | По-умолчанию '' | ||
+ | |||
+ | Проверим, | ||
+ | |||
+ | < | ||
+ | |||
+ | Добавляем в файл ''/ | ||
+ | |||
+ | < | ||
+ | * soft nproc 40960 | ||
+ | * hard nproc 65535 | ||
+ | * soft nofile | ||
+ | * hard nofile | ||
+ | </ | ||
+ | |||
+ | Либо устанавливаем лимит только для mysql | ||
+ | |||
+ | < | ||
+ | mysql soft nofile | ||
+ | mysql hard nofile | ||
+ | mysql soft nproc 40960 | ||
+ | mysql hard nproc 65535 | ||
+ | </ | ||
+ | |||
+ | UPD | ||
+ | |||
+ | Нашёл рекомендацию добавить лимиты в отдельный файл '' | ||
+ | |||
+ | ==== unknown variable ' | ||
+ | |||
+ | Вот такая ошибка может возникнуть если бездумно копировать из разных блогов советы бывалых админов | ||
+ | |||
+ | '' | ||
+ | |||
+ | http:// | ||
+ | |||
+ | ==== Host ' | ||
+ | |||
+ | Ошибка возникает после 10 (по-умолчанию) неудачных соединений с базой. | ||
+ | |||
+ | < | ||
+ | |||
+ | Подробнее в документации MySQL - https:// | ||
+ | |||
+ | ==== Fatal error: Uncaught exception ' | ||
+ | |||
+ | < | ||
+ | # perror 24 | ||
+ | OS error code 24: Too many open files | ||
+ | </ | ||
+ | |||
+ | В логе '' | ||
+ | |||
+ | < | ||
+ | 170710 10:36:01 [ERROR] mysqld: Can't open file: ' | ||
+ | 170710 10:36:01 [ERROR] mysqld: Can't open file: ' | ||
+ | 170710 10:44:05 [ERROR] Error in accept: Too many open files | ||
+ | </ | ||
+ | |||
+ | Решение - см. запись ниже // | ||
+ | |||
+ | Текущее использование открытых файлов можно посмотреть так: | ||
+ | |||
+ | < | ||
+ | |||
+ | ==== InnoDB: mmap(137363456 bytes) failed; errno 12 ==== | ||
+ | |||
+ | Ошибка | ||
+ | |||
+ | < | ||
+ | InnoDB: Initializing buffer pool, size = 128.0M | ||
+ | InnoDB: mmap(137363456 bytes) failed; errno 12 | ||
+ | InnoDB: Completed initialization of buffer pool | ||
+ | InnoDB: Fatal error: cannot allocate memory for the buffer pool | ||
+ | </ | ||
+ | |||
+ | Решение - уменьшить '' | ||
+ | |||
+ | ==== Правильный UTF-8 ==== | ||
+ | |||
+ | В 5.0 было так | ||
+ | |||
+ | < | ||
+ | |||
+ | Теперь так | ||
+ | |||
+ | < | ||
+ | init_connect=' | ||
+ | init_connect=' | ||
+ | character-set-server=utf8 | ||
+ | collation-server=utf8_unicode_ci | ||
+ | skip-character-set-client-handshake | ||
+ | </ | ||
+ | |||
+ | ==== #1146 - Table ' | ||
+ | |||
+ | И [[https:// | ||
+ | |||
+ | Делаем | ||
+ | |||
+ | < | ||
+ | |||
+ | И всё начинает работать. До следующего адового бага. Продакшен реди итиху мать. | ||
+ | |||
+ | ==== / | ||
+ | |||
+ | Баг после апгрейда встретился только в Ubuntu | ||
+ | |||
+ | ЕМНИП нужно просто создать каталог / | ||
+ | |||
+ | < | ||
+ | |||
+ | ==== 'ERROR 1214 (HY000) at line 784: The used table type doesn' | ||
+ | |||
+ | FULLTEXT INDEX раньше работал только с MyISAM. С версии 5.6 доступен в InnoDB. | ||
+ | |||
+ | Так что либо апгрейд либо ALTER TABLE `yourtable` ENGINE = MyISAM; FIXME | ||
+ | |||
+ | ==== Got an error from unknown thread, / | ||
+ | |||
+ | Также в логах может быть что-то вроде **Incorrect key file for table ' | ||
+ | |||
+ | Казалось бы следует сделать '' | ||
+ | |||
+ | Скорее всего нет инодов или кончилось место или недоступен tmpdir в mysql. | ||
+ | |||
+ | Проверяем '' | ||
+ | |||
+ | ==== mysqldump: Got error: (Errcode: 24) when using LOCK TABLES ==== | ||
+ | |||
+ | Узнал о крутой утилите **perror**. По коду ошибки покажет, | ||
+ | |||
+ | < | ||
+ | Print a description for a system error code or a MySQL error code. | ||
+ | If you want to get the error for a negative error code, you should use | ||
+ | -- before the first error code to tell perror that there was no more options. | ||
+ | </ | ||
+ | |||
+ | Пример | ||
+ | |||
+ | < | ||
+ | # perror -v 24 | ||
+ | OS error code 24: Too many open files | ||
+ | </ | ||
+ | |||
+ | Ну и по ошибке выше - попробуйте добавить опцию ''< | ||
+ | |||
+ | ==== Error Number: 1364 ==== | ||
+ | |||
+ | Через tcpdump выловил ошибку в php-fpm | ||
+ | |||
+ | < | ||
+ | MySQL Error! | ||
+ | MySQL error in file: / | ||
+ | Error Number: < | ||
+ | The Error returned was: Field &# | ||
+ | SQL query: INSERT INTO dle_files (news_id, author) values (&# | ||
+ | </ | ||
+ | |||
+ | Виной всему старый код и новый (5.7) MySQL. | ||
+ | |||
+ | Почему так | ||
+ | |||
+ | * при вставке или обновлении данных у поля нет значения по-умолчанию | ||
+ | * [[http:// | ||
+ | |||
+ | Быстрый фикс - выключить так называемый **strict mode** | ||
+ | |||
+ | Для этого нужно добавить в '' | ||
+ | |||
+ | < | ||
+ | [mysqld] | ||
+ | sql_mode=IGNORE_SPACE, | ||
+ | </ | ||
+ | |||
+ | Можно также вынести в отдельный файл ''/ | ||
+ | |||
+ | Проверить **sql_mode** | ||
+ | |||
+ | < | ||
+ | |||
+ | ==== #1030 - Got error -1 from storage engine ==== | ||
+ | |||
+ | При попытке выполнить SQL запрос в phpmyadmin получаем ошибку **#1030 - Got error -1 from storage engine** | ||
+ | |||
+ | Вероятно включен '' | ||
+ | |||
+ | Проверяем логи. Если есть нечто подобное | ||
+ | |||
+ | < | ||
+ | |||
+ | то значит так оно и есть. Выключаем '' | ||
+ | |||
+ | ==== error: ' | ||
+ | |||
+ | Ошибка | ||
+ | |||
+ | < | ||
+ | # / | ||
+ | * Stopping MySQL database server mysqld [fail] | ||
+ | * Starting MySQL database server mysqld [ OK ] | ||
+ | / | ||
+ | error: ' | ||
+ | </ | ||
+ | |||
+ | Смотрим пароль пользователя '' | ||
+ | |||
+ | < | ||
+ | [client] | ||
+ | host = localhost | ||
+ | user = debian-sys-maint | ||
+ | password = A1b2C3d4E5f6 | ||
+ | socket | ||
+ | [mysql_upgrade] | ||
+ | user = debian-sys-maint | ||
+ | password = A1b2C3d4E5f6 | ||
+ | socket | ||
+ | basedir | ||
+ | </ | ||
+ | |||
+ | Выполняем 2 SQL запроса, | ||
+ | |||
+ | < | ||
+ | # mysql -u root -p | ||
+ | mysql> use mysql; | ||
+ | mysql> GRANT RELOAD, SHUTDOWN, PROCESS, SHOW DATABASES, SUPER, LOCK TABLES ON *.* TO ' | ||
+ | mysql> GRANT ALL PRIVILEGES ON *.* TO ' | ||
+ | </ | ||
+ | |||
+ | Перезапускаем MySQL сервер | ||
+ | |||
+ | < | ||
+ | # / | ||
+ | * Stopping MySQL database server mysqld [ OK ] | ||
+ | * Starting MySQL database server mysqld [ OK ] | ||
+ | * Checking for corrupt, not cleanly closed and upgrade needing tables. | ||
+ | </ | ||
+ | |||
+ | ==== open-files-limit в MariaDB ==== | ||
+ | |||
+ | С приходом systemd [[https:// | ||
+ | |||
+ | Systemd самостоятельно контролирует, | ||
+ | |||
+ | Создаём каталог | ||
+ | |||
+ | < | ||
+ | |||
+ | И вносим следующие правки | ||
+ | |||
+ | < | ||
+ | # cat / | ||
+ | [Service] | ||
+ | LimitNOFILE=10240 | ||
+ | </ | ||
+ | |||
+ | Данные новшества однако документированы. Так что надо просто внимательнее читать release notes и changelog. | ||
+ | |||
+ | < | ||
+ | # cat / | ||
+ | |||
+ | # It's not recommended to modify this file in-place, because it will be | ||
+ | # overwritten during package upgrades. | ||
+ | # best way is to create a file "/ | ||
+ | # containing | ||
+ | # .include / | ||
+ | # ...make your changes here... | ||
+ | # or create a file "/ | ||
+ | # which doesn' | ||
+ | # after the file mariadb.service itself is parsed. | ||
+ | # | ||
+ | # For more info about custom unit files, see systemd.unit(5) or | ||
+ | # http:// | ||
+ | |||
+ | # For example, if you want to increase mariadb' | ||
+ | # you need to increase systemd' | ||
+ | # "/ | ||
+ | # [Service] | ||
+ | # | ||
+ | |||
+ | # Note: / | ||
+ | # still works. | ||
+ | # Don't forget to reload systemd daemon after you change unit configuration: | ||
+ | # root> systemctl --system daemon-reload | ||
+ | </ | ||
+ | |||
+ | < | ||
+ | # systemctl --system daemon-reload | ||
+ | # systemctl restart mariadb.service | ||
+ | </ | ||
+ | |||
+ | ==== Unable to lock ./ibdata1, error: 11 ==== | ||
+ | |||
+ | В логах | ||
+ | |||
+ | < | ||
+ | InnoDB: Unable to lock ./ibdata1, error: 11 | ||
+ | InnoDB: Check that you do not already have another mysqld process | ||
+ | InnoDB: using the same InnoDB data or log files. | ||
+ | </ | ||
+ | |||
+ | Решение в сети, которое якобы некоторым помогает | ||
+ | |||
+ | < | ||
+ | mv ibdata1 ibdata1.bak | ||
+ | cp -a ibdata1.bak ibdata1 | ||
+ | </ | ||
+ | |||
+ | увы не помогает. | ||
+ | |||
+ | Бытует мнение, | ||
+ | |||
+ | Можно попробовать добавить в ''/ | ||
+ | |||
+ | < | ||
+ | / | ||
+ | / | ||
+ | </ | ||
+ | |||
+ | FIXME надо проверить | ||
+ | |||
+ | ==== unknown option ' | ||
+ | |||
+ | Опцию '' | ||
+ | |||
+ | Решение: | ||
+ | |||
+ | ==== Thread stack overrun ==== | ||
+ | |||
+ | Ошибка | ||
+ | |||
+ | < | ||
+ | #1436 - Thread stack overrun: 8240 bytes used of a 131072 byte stack, and 128000 bytes needed. Use ' | ||
+ | </ | ||
+ | |||
+ | Добавляем в секцию [mysqld] | ||
+ | |||
+ | < | ||
+ | |||
+ | ==== Не работает mysql_upgrade ==== | ||
+ | |||
+ | === 5.1 > 5.5 === | ||
+ | |||
+ | http:// | ||
+ | |||
+ | < | ||
+ | # mysql_upgrade | ||
+ | Looking for ' | ||
+ | Looking for ' | ||
+ | FATAL ERROR: Upgrade failed | ||
+ | </ | ||
+ | |||
+ | Что делать? | ||
+ | |||
+ | < | ||
+ | |||
+ | === 5.5 > 5.6 === | ||
+ | |||
+ | Ошибка | ||
+ | |||
+ | < | ||
+ | root@mx:/ | ||
+ | Enter password: | ||
+ | Looking for ' | ||
+ | Looking for ' | ||
+ | Error: Failed while fetching Server version! Could be due to unauthorized access. | ||
+ | FATAL ERROR: Upgrade failed | ||
+ | </ | ||
+ | |||
+ | Решение | ||
+ | |||
+ | < | ||
+ | |||
+ | ==== #23 - Out of resources when opening file ==== | ||
+ | |||
+ | {{: | ||
+ | |||
+ | #23 - Out of resources when opening file Errcode: 24 - Too many open files | ||
+ | |||
+ | ==== #1273 - unknown collation ==== | ||
+ | |||
+ | Ошибка **error #1273 - Unknown collation: ' | ||
+ | |||
+ | {{: | ||
+ | |||
+ | Почему такое произошло? | ||
+ | |||
+ | Вероятно вы уже видели в сети совет - открыть дамп через каким-нибудь Notepad++ и заменить все '' | ||
+ | |||
+ | Так делать НЕ НАДО! | ||
+ | |||
+ | Вариантов много - обновить MySQL (в версиях выше 5.5.3 такой проблемы нет) или использовать совместимость со старыми версиями MySQL при дампе (**mysqldump --compatible=mysql4**). | ||
+ | |||
+ | [[http:// | ||
+ | |||
+ | ==== Got error 28 from storage engine ==== | ||
+ | |||
+ | Скорее всего у вас просто закончилось свободное место на диске - **strerror(28) = No space left on device** | ||
+ | |||
+ | Коды ошибок [[https:// | ||
+ | |||
+ | < | ||
+ | strerror(0) = Success | ||
+ | strerror(1) = Operation not permitted | ||
+ | strerror(2) = No such file or directory | ||
+ | strerror(3) = No such process | ||
+ | strerror(4) = Interrupted system call | ||
+ | strerror(5) = Input/ | ||
+ | strerror(6) = No such device or address | ||
+ | strerror(7) = Argument list too long | ||
+ | strerror(8) = Exec format error | ||
+ | strerror(9) = Bad file descriptor | ||
+ | strerror(10) = No child processes | ||
+ | strerror(11) = Resource temporarily unavailable | ||
+ | strerror(12) = Cannot allocate memory | ||
+ | strerror(13) = Permission denied | ||
+ | strerror(14) = Bad address | ||
+ | strerror(15) = Block device required | ||
+ | strerror(16) = Device or resource busy | ||
+ | strerror(17) = File exists | ||
+ | strerror(18) = Invalid cross-device link | ||
+ | strerror(19) = No such device | ||
+ | strerror(20) = Not a directory | ||
+ | strerror(21) = Is a directory | ||
+ | strerror(22) = Invalid argument | ||
+ | strerror(23) = Too many open files in system | ||
+ | strerror(24) = Too many open files | ||
+ | strerror(25) = Inappropriate ioctl for device | ||
+ | strerror(26) = Text file busy | ||
+ | strerror(27) = File too large | ||
+ | strerror(28) = No space left on device | ||
+ | strerror(29) = Illegal seek | ||
+ | strerror(30) = Read-only file system | ||
+ | strerror(31) = Too many links | ||
+ | strerror(32) = Broken pipe | ||
+ | strerror(33) = Numerical argument out of domain | ||
+ | strerror(34) = Numerical result out of range | ||
+ | strerror(35) = Resource deadlock avoided | ||
+ | strerror(36) = File name too long | ||
+ | strerror(37) = No locks available | ||
+ | strerror(38) = Function not implemented | ||
+ | </ | ||
+ | |||
+ | ==== ERROR 2006 (HY000) - MySQL server has gone away ==== | ||
+ | |||
+ | * http:// | ||
+ | * [[http:// | ||
+ | |||
+ | Добавить в секцию '' | ||
+ | |||
+ | < | ||
+ | |||
+ | Значение по-умолчанию = 1М | ||
+ | |||
+ | Скорее всего поможет. Если нет, то также в секцию '' | ||
+ | |||
+ | < | ||
+ | |||
+ | Значение по-умолчанию - 300 FIXME проверить |
linux/mysql/mysql_errors.txt · Последнее изменение: 2025/03/05 17:49 — dx