От автора: не запускается MySQL? Наверно «стартер» барахлит. Нужно показать опытному «механику». Хотя в некоторых случаях можно обойтись и собственными силами. Вот сегодня и разберемся, как произвести починку «заглохнувшей» СУБД самостоятельно.
Использование теории «чужих ошибок»
Если думаете, что при написании материалов из этой серии я «не потею», то ошибаетесь. Даже самый «заядлый» разработчик-профессионал не может все знать. Причем часто натыкаешься в своей практике на те «грабли», на которые уже наступал (и не раз). А это во сто крат обиднее и больнее. Получается, что данная статья предназначена не только для вас, но и мне :).
Но в MySQL столько «граблей», что их умудряются не перешагнуть и «чайники», и профессионалы по всему миру. Попробуем в этом материале собрать наиболее частые причины того, почему не подключается база данных MySQL и другие распространенные проблемы.
Начнем с описания особенностей синтаксиса запросов SQL. Данная система управления БД хоть и основана на языке структурированных запросов, но все же сохранила некоторую самобытность с «заковыркой». Причем в прямом смысле этого слова :).
Особенности синтаксиса
Для примера возьмем один, и выполним его в программной оболочке, которую часто используем. А также запустим его в командной строке. Таким образом мы выясним особенности синтаксиса MySQL, «царящих» в каждом из вариантов. Начнем, как предписывает традиция, с phpMySQL. Но сначала запрос, написанный по всем «канонам» SQL:
1 |
SELECT * FROM country WHERE name=Aruba; |
Теперь введем его и выполним в программе:
Как видим, приложение «ругается» на несоответствующий синтаксис. Правильно:
1 |
SELECT * FROM `country` WHERE name='Aruba'; |
В phpMyAdmin (чтобы не говорили потом «не удалось запустить MySQL») название столбцов экранируются грависом, а все указываемые значения – одинарными кавычками. Кстати, гравис находится над клавишей буквы «Ё».
На самом деле использование грависов не является обязательным. Они прописываются программой в автоматически сгенерированных запросах. Ошибки синтаксиса в командной строке
Теперь переходим в командную строку, и попытаемся запустить вариант запроса, корректный для phpMyAdmin. Здесь нас сразу подстерегает ошибка, поскольку мы не выделили ни одной БД.
Исправим это:
1 |
USE world; |
И еще раз выполним предыдущий код SQL. Теперь все прошло успешно. Для чистоты эксперимента введем первый вариант запроса. Сервер СУБД говорит нам, что такого столбца в этой таблице нет. Исправим запрос, и экранируем значение одинарными кавычками.
Но что-то опять пошло не так, и MySQL ждет от нас ввода дополнительных параметров. Это потому, что мы забыли поставить точку с запятой. Хотя она не является обязательной в phpMyAdmin.
Кстати (пока мы находимся в CMD) одной из причин, почему не удается запустить службу MySQL из командной строки, может быть нарушение синтаксиса команды входа. «Неправильный» пример:
Из-за пробела между параметром –p и значением пароля система СУБД просит пользователя ввести пароль еще раз. Но затем его значение не принимает. Напомню, что все из-за одного единственного пробела. Правильная написанная команда выглядит следующим образом: Z:\usr\local\mysql-5.5\bin\mysql.exe -u roman –pзначение пароля
На этих граблях я тоже «побывал» неоднократно. Вот такой «крючковатый» синтаксис получается :). Также важно, если не удалось запустить MySQL через командную строку, проверить правильность указанного пути к исполняемому файлу СУБД.
Другие распространенные ошибки
Вот еще несколько самых частых ошибок, которые допускают пользователи СУБД:
«Acces danied» — сервер говорит, что доступ запрещен. Чаще всего эта ошибка выскакивает, когда пользователь или приложение пытается совершить операцию, которая не разрешена для используемой учетной записи.
Поясню следующий скриншот, и почему и не удается подключиться к MySQL базе. Я зашел на сервер БД под учеткой пользователя (user), привилегии которого распространяются только на одну базу. При попытке вывести список всех баз, имеющихся на сервере, MySQL вернул пустой результат. А когда я попытался «пробраться» на другую БД, система выдала мне «Access denied».
«Не удается найти указанный диск» — эта ошибка возникает, если вы работаете с Денвером, который при запуске эмулирует (создает) виртуальный диск. Причина – локальный сервер не запущен.
«Can’t connect to MySQL server on…» — такая ошибка возникает, если неправильно указан в параметрах хост или локальный сервер не запущен.
Не устанавливается MySQL – причин этого может быть много. Например, если вы пытаетесь инсталлировать СУБД через командную строку, то она должна быть запущена от имени администратора устройства.
Понятно, что это далеко не все «популярные» неполадки MySQL. Если «копнуть» глубже, то на их изучение уйдут годы. Помните, что причиной всех бед может стать обычный пробел или неправильная кавычка. И из-за этого ваш MySQL будет «глохнуть» уже на старте. Вот такая «заковырка» получается :).