Устраняем типичные ошибки в MySQL
MySQL — система управления базами данных (СУБД) с открытым исходным кодом от компании Oracle. Она была разработана и оптимизирована специально для работы веб-приложений. MySQL является неотъемлемой частью таких веб-сервисов, как Facebook, Twitter, Wikipedia, YouTube и многих других.
Эта статья расскажет, как определять, с чем связаны частые ошибки на сервере MySQL, и устранять их.
Не удаётся подключиться к локальному серверу
Одной из распространённых ошибок подключения клиента к серверу является «ERROR 2002 (HY000): Can’t connect to local MySQL server through socket ‘/var/run/mysqld/mysqld.sock’ (2)».
Эта ошибка означает, что на хосте не запущен сервер MySQL ( mysqld ) или вы указали неправильное имя файла сокета Unix или порт TCP/IP при попытке подключения.
Убедитесь, что сервер работает. Проверьте процесс с именем mysqld на хосте сервера, используя команды ps или grep, как показано ниже.
Если эти команды не показывают выходных данных, то сервер БД не работает. Поэтому клиент не может подключиться к нему. Чтобы запустить сервер, выполните команду systemctl.
Чтобы проверить состояние службы MySQL, используйте следующую команду:
Если в результате выполнения команды произошла ошибка службы MySQL, вы можете попробовать перезапустить службу и ещё раз проверить её состояние.
Если сервер работает (как показано) и вы по-прежнему видите эту ошибку, вам следует проверить, не заблокирован ли порт TCP/IP брандмауэром или любой другой службой блокировки портов.
WHITE RUSSIAN, Москва, от 180 000 до 250 000 ₽
Для поиска порта, который прослушивается сервером, используйте команду netstat .
Не удаётся подключиться к серверу MySQL
Ещё одна похожая и часто встречающаяся ошибка подключения — «(2003) Can’t connect to MySQL server on ‘server’ (10061)». Это означает, что в сетевом соединении было отказано.
Следует проверить, работает ли в системе сервер MySQL (смотрите выше) и на тот ли порт вы подключаетесь (как найти порт, можно посмотреть выше).
Похожие частые ошибки, с которыми вы можете столкнуться при попытке подключиться к серверу MySQL:
Ошибки запрета доступа в MySQL
В MySQL учётная запись (УЗ) определяется именем пользователя и клиентским хостом, с которого пользователь может подключиться. УЗ может также иметь данные для аутентификации (например, пароль).
Причин для запрета доступа может быть много. Одна из них связана с учётными записями MySQL, которые сервер разрешает использовать клиентским программам при подключении. Это означает, что имя пользователя, указанное в соединении, может не иметь прав доступа к базе данных.
В MySQL есть возможность создавать учётные записи, позволяющие пользователям клиентских программ подключаться к серверу и получать доступ к данным. Поэтому при ошибке доступа проверьте разрешение УЗ на подключение к серверу через клиентскую программу.
Увидеть разрешённые привилегии учётной записи можно, выполнив в консоли команду SHOW GRANTS
Входим в консоль (пример для Unix, для Windows консоль можно найти в стартовом меню):
mysql -u root -p
В консоли вводим команду:
Дать привилегии конкретному пользователю в БД по IP-адресу можно, используя следующие команды:
Ошибки запрещённого доступа могут также возникнуть из-за проблем с подключением к MySQL (см. выше).
Потеря соединения с сервером MySQL
С этой ошибкой можно столкнуться по одной из следующих причин:
- плохое сетевое соединение;
- истекло время ожидания соединения;
- размер BLOB больше, чем max_allowed_packet .
В первом случае убедитесь, что у вас стабильное сетевое подключение (особенно, если подключаетесь удалённо).
Если проблема с тайм-аутом соединения (особенно при первоначальном соединении MySQL с сервером), увеличьте значение параметра connect_timeout .
В случае с размером BLOB нужно установить более высокое значение для max_allowed_packet в файле конфигурации /etc/my.cnf в разделах [mysqld] или [client] как показано ниже.
Если файл конфигурации недоступен, это значение можно установить с помощью следующей команды.
Слишком много подключений
Эта ошибка означает, что все доступные соединения используются клиентскими программами. Количество соединений (по умолчанию 151) контролируется системной переменной max_connections . Устранить проблему можно, увеличив значение переменной в файле конфигурации /etc/my.cnf .
Недостаточно памяти
Если такая ошибка возникла, это может означать, что в MySQL недостаточно памяти для хранения всего результата запроса.
Сначала нужно убедиться, что запрос правильный. Если это так, то нужно выполнить одно из следующих действий:
- если клиент MySQL используется напрямую, запустите его с ключом —quick switch , чтобы отключить кешированные результаты;
- если вы используете драйвер MyODBC, пользовательский интерфейс (UI) имеет расширенную вкладку с опциями. Отметьте галочкой «Do not cache result» (не кешировать результат).
Также может помочь MySQL Tuner. Это полезный скрипт, который подключается к работающему серверу MySQL и даёт рекомендации по настройке для более высокой производительности.
MySQL продолжает «падать»
Если такая проблема возникает, необходимо выяснить, заключается она в сервере или в клиенте. Обратите внимание, что многие сбои сервера вызваны повреждёнными файлами данных или индексными файлами.
Вы можете проверить состояние сервера, чтобы определить, как долго он работал.
Чтобы узнать время безотказной работы сервера, запустите команду mysqladmin .
Кроме того, можно остановить сервер, сделать отладку MySQL и снова запустить службу. Для отображения статистики процессов MySQL во время выполнения других процессов откройте окно командной строки и введите следующее:
Заключение
Самое важное при диагностике — понять, что именно вызвало ошибку. Следующие шаги помогут вам в этом:
- Первый и самый важный шаг — просмотреть журналы MySQL, которые хранятся в каталоге /var/log/mysql/ . Вы можете использовать утилиты командной строки вроде tail для чтения файлов журнала.
- Если служба MySQL не запускается, проверьте её состояние с помощью systemctl . Или используйте команду journalctl (с флагом -xe ) в systemd.
- Вы также можете проверить файл системного журнала (например, /var/log/messages ) на предмет обнаружения ошибок.
- Попробуйте использовать такие инструменты, как Mytop, glances, top, ps или htop, чтобы проверить, какая программа использует весь ресурс процессора или блокирует машину. Они также помогут определить нехватку памяти, дискового пространства, файловых дескрипторов или какого-либо другого важного ресурса.
- Если проблема в каком-либо процессе, можно попытаться его принудительно остановить, а затем запустить (при необходимости).
- Если вы уверены, что проблемы именно на стороне сервера, можете выполнить команды: mysqladmin -u root ping или mysqladmin -u root processlist , чтобы получить от него ответ.
- Если при подключении проблема не связана с сервером, проверьте, нормально ли работает клиент. Попробуйте получить какие-либо его выходные данные для устранения неполадок.
Cannot create windows service for mysql error 0 что делать
Long post I know. I spent literally _hours_ on this so just wanted to share some of my observations to save you some time. Incidentally Win XP Service Pack 2 installing MySQL 5.1.31 MSI. Seems like the non msi MySQL 4.1 installer doesn’t have this problem.
(Take UNLOADS and BACKUPS of data files/dirs if you need to. This is a full re-install)
My solution was to get rid of all the profile application data. So ensure that you
— uninstall the instance (including server) using instance configuration wizard, (in C:\Program Files\MySQL\My SQL Server 5.1\bin\MySQLInstanceConfig.exe), choosing remove.
— now remove MySQL via Control Panel->add/remove programs, may need to F5 refresh list if not there.
— make sure MySQL dir in C:\Program Files is now deleted in its entirety. There may be old Data files lying around.
— *most importantly*, make sure that any MySQL dir in the following dirs are deleted. Mine weren’t hidden but worth checking that too:
= C:\Documents and Settings\All Users\Application Data
= C:\Documents and Settings\ \Application Data
— re-install from MSI
— Do not use installation path for data It’ll still work but I couldn’t find my data file. Use something else like C:\Program Files\MySQL\Data.
1. This message seems to only appear after you have installed a previous version of mySQL
2. Removing the service on it’s own using ‘sc delete MySQL’ or the service remover didn’t do it for me. Better off IMHO re-running the instance configuration wizard and choosing the ‘remove’ option. It’s way cleaner.
3. If you get three boxes instead of 2 on the instance configuration for server passwords then you haven’t removed the service properly. use the config wizard and double check application profiles.
4. Some people recommend the following. These had no effect for me (Really was the Application Data and nothing else) but maybe they woud have an effect for others on other configurations and systems.
— Shut down your firewall or open the default MySQL port
— Manually remove MySQL registry entries (this can be risky if you don’t know what you’re doing and in any case slows it down with reboots)
— Delete old data files.
— Delete old my.ini files (e.g. check C:\WINDOWS as well as MySQL dirs)
(For me all data and my.ini files went with the uninstall/manual delete of C:\Program Files\MySQL)
Edited 10 time(s). Last edit at 02/08/2009 11:31AM by Jean-Paul Bourdais.
Не запускается служба MySQL
Служба MySQL80 сама остановилась и отказывается запускаться. В файле WIN-MUGGRCO16SH.err такая картина:
2019-04-05T18:19:38.194213Z 0 [Warning] [MY-010915] [Server] ‘NO_ZERO_DATE’, ‘NO_ZERO_IN_DATE’ and ‘ERROR_FOR_DIVISION_BY_ZERO’ sql modes should be used with strict mode. They will be merged with strict mode in a future release.
2019-04-05T18:19:38.196744Z 0 [System] [MY-010116] [Server] C:\Program Files\MySQL\MySQL Server 8.0\bin\mysqld.exe (mysqld 8.0.11) starting as process 228
2019-04-05T18:19:38.312441Z 1 [ERROR] [MY-011971] [InnoDB] InnoDB: Tablespace ‘innodb_system’ Page [page id: space=0, page number=5] log sequence number 236694195998 is in the future! Current system log sequence number 206772663820.
2019-04-05T18:19:38.313517Z 1 [ERROR] [MY-011972] [InnoDB] InnoDB: Your database may be corrupt or you may have copied the InnoDB tablespace but not the InnoDB log files. Please refer to http://dev.mysql.com/doc/refman/8.0/en/forcing-innodb-recovery.html for information about forcing recovery.
2019-04-05T18:19:51.329476Z 1 [ERROR] [MY-012611] [InnoDB] InnoDB: Operating system error number 1117 in a file operation.
2019-04-05T18:19:51.329864Z 1 [ERROR] [MY-012646] [InnoDB] InnoDB: File .\ibdata1: ‘Windows aio’ returned OS error 1217. Cannot continue operation
2019-04-05T18:19:51.330236Z 1 [ERROR] [MY-012981] [InnoDB] InnoDB: Cannot continue operation.
2019-04-05T18:21:41.596335Z 1 [Warning] [MY-012928] [InnoDB] InnoDB: 10 threads created by InnoDB had not exited at shutdown!
Как это возможно — «Your database may be corrupt or you may have copied the InnoDB tablespace but not the InnoDB log files«? Работала база и вдруг «corrupt«.
Я с базой работаю как пользователь — запросы и не более. Но так сложилось, что администрировать её сейчас больше некому, поэтому прошу помощи. Как исправить эти ошибки и запустить службу (желательно с сохранением 50 ГБ данных)?