Решение ошибки кода MySQL ERROR 1045 под CentOS6.5 (проверено)
2.1 Проблемы с паролем пользователя
2.1.1 Изменение настроек входа в mysql (пропустите проверку прав доступа при входе в систему)
vi /etc/my.cnf Добавить предложение в : skip-grant-tables Сохранить и выйти после успешного добавления Примечание. skip-grant-tables пропускает проверки прав доступа при входе в систему
2.1.3 Изменить пароль пользователя
База данных логина: mysql Измените пароль соответствующего пользователя: UPDATE mysql.user SET password = ПАРОЛЬ («новый пароль»), ГДЕ пользователь = «root»; Обновить разрешения: FLUSH PRIVILEGES; Выход из базы данных: выход Соответствующие снимки экрана:
2.1.4 Восстановление настроек входа в MySQL (проверка прав доступа при входе в систему)
vi /etc/my.cnf Закомментируйте только что добавленную строку, просто добавьте # в начале строки, как показано ниже: # skip-grant-tables Сохранить и выйти после успешного добавления Соответствующие снимки экрана:
2.2.1 Изменить настройки входа в MySQL (пропустить проверку прав доступа при входе в систему)
vi /etc/my.cnf Добавить предложение в : skip-grant-tables Сохранить и выйти после успешного добавления Примечание. skip-grant-tables пропускает проверки прав доступа при входе в систему
2.2.3 Запрос прав, связанных с пользователем
База данных логина: mysql Просмотр прав пользователя: ВЫБЕРИТЕ хост, пользователя, пароль, Grant_priv, Super_priv FROM mysql.user; Выход из базы данных: выход Анализ результатов запроса. Из результатов запроса видно, что пользователь root не имеет разрешений localhost, хотя имя хоста — localhost.localdomain (наконец-то обнаружена проблема, поскольку по умолчанию не указывается, если имя хоста отсутствует Имя пользователя — localhost, а root не имеет разрешения на вход, поэтому необходимо добавить соответствующие разрешения), проблема была найдена, но как добавить разрешения? Поскольку проверка разрешений была настроена на пропуск входа в систему, мы все еще не можем установить разрешения в данный момент. Что мне делать? Не волнуйтесь, мы можем указать существующее имя хоста и настроить его после входа в систему, продолжайте:
Соответствующие скриншоты во время этого процесса:
2.2.4 Восстановление настроек входа в MySQL (проверка прав доступа при входе в систему)
vi /etc/my.cnf Закомментируйте только что добавленную строку, просто добавьте # в начале строки, как показано ниже: # skip-grant-tables Сохранить и выйти после успешного добавления Соответствующие снимки экрана:
2.2.6 Укажите имя хоста для входа и установите соответствующие разрешения
Укажите имя хоста для входа в систему: mysql -hlocalhost.localdomain -uroot -p пароль Установите соответствующие разрешения: GRANT ALL ON . TO ‘root’@‘localhost’; ОБНОВЛЕНИЕ mysql.user УСТАНОВИТЬ пароль = ПАРОЛЬ («пароль») ГДЕ пользователь = «root»; Обновить разрешения: FLUSH PRIVILEGES; Просмотр измененных разрешений: ВЫБЕРИТЕ хост, пользователя, пароль, Grant_priv, Super_priv FROM mysql.user; Выход из базы данных: выход; Примечание
Необходимо обратить внимание на пароль для входа. Если вы изменили пароль в соответствии с разделом 2.1.3, используйте новый пароль для входа в систему
Соответствующие снимки экрана:
Объявление обработчика
Чтобы объявить обработчик мы используем оператор DECLARE HANDLER:
DECLARE action HANDLER FOR condition_value statement;
Если значение условия совпадает со значением condition_value, MySQL выполнит оператор statement и продолжит или завершит текущий блок кода, исходя из значения action.
action может принимать следующие значения:
- CONTINUE: исполнение блокированного кода (BEGIN … END) продолжается;
- EXIT: выполнение блокированного кода, в котором был объявлен обработчик, завершается.
condition_value задает конкретное условие или класс условия, которые активируют обработчик.
condition_value может принимать одно из следующих значений:
- код ошибки MySQL;
- стандартное значение SQLSTATE. Или это может быть условие SQLWARNING, NOTFOUND или SQLEXCEPTION, которое является сокращением для класса значений SQLSTATE. Условие NOTFOUND используется для курсора или оператора SELECT INTO variable_list;
- название условия, связанного либо с кодом ошибки MySQL, либо со значением SQLSTATE.
В качестве statement может использоваться простой оператор или составной оператор, вшитый с помощью ключевых слов BEGIN и END.
Виды почтовых сервисов
На программном уровне существует несколько видов обработки электронной почтовой корреспонденции. К первой группе относятся виртуальные сервисы, доступные чаще всего в бесплатном исполнении через интернет-соединение на сайте почтового сервера. Это всем известные ресурсы:
- Gmail/Google Suite (почта от Google.com);
- Yandex.ru;
- Mail.ru;
- Rambler.ru и другие.
Более подробную информацию о значениях ответов SMTP можно получить на сайтах популярных почтовых сервисов:
- Коды ошибок SMTP почтового сервиса Gmail (Google Suite) (support.google.com)
- Создание и отправка писем на сервисе Яндекс
- Ошибки отправки писем при использовании сервера и сервиса Mail.ru
Ко второй группе относятся почтовые клиенты – программы, обладающие более расширенным функционалом, чем виртуальные сервисы. Наиболее популярными и универсальными почтовыми клиентами для Windows являются:
- Opera Mail;
- Mozilla Thunderbird;
- Koma-Mail;
- SeaMonkey;
- The Bat!;
- Microsoft Outlook.
Принципы работы почтовых клиентов несколько отличаются от процесса обработки корреспонденции виртуальными серверами. При отправке сообщения программа отсылает его не напрямую конечному получателю, а ретранслирует через сервер-релей. Этот процесс осуществляется чаще всего с использованием протокола SMTP, а получение корреспонденции обычно происходит с помощью IMAP или POP.
Коды SMTP-ответов определяются стандартом. Администратор почтового сервера может создать собственные настройки, в том числе и в части кодировки ответов сервера. Особенно это касается локальных почтовых программ, установленных непосредственно на сервере какой-нибудь компании.
О вариантах выбора и способах создания корпоративных почтовых сервисов более подробно можно прочитать здесь: Что такое почтовый сервер и зачем он нужен.
Проверка доступности почтового сервера программным методом
В данной статье описаны лишь некоторые варианты ошибок, которые могут возникнуть при отправке электронных сообщений. Полный перечень достаточно объемен и во многом зависит от настроек конкретного сервера как на стороне отправителя, так и получателя. Некоторые из ошибок могут быть легко устранены обычным пользователем, другие под силу лишь опытным администраторам.
Одним из способов предупреждения появления ошибок является онлайн-проверка доступности почтового сервера с помощью бесплатных инструментов:
- https://mxtoolbox.com
- https://www.ultratools.com
- http://mail2web.com
Эти сервисы пробуют подключиться к почтовому серверу по SMTP, подтверждают, что у него есть запись обратной зоны DNS, и замеряют время отклика. С их помощью можно диагностировать некоторые ошибки службы почтовых серверов или проверить, не занесен ли данный ресурс в черные списки из-за спама.
Прочитав эту статью, обратите внимание на то, как настроен ваш почтовый сервер на получение сторонних писем по SMTP-протоколу
Быть может, в данный момент ваш антиспам или локальная политика фильтрации входящих сообщений блокирует получение очень важного и нужного для вас месседжа? Проверьте сами или обратитесь к системному администратору. Если ошибку с SMTP никак не удается решить, то попробуйте обратиться в службу поддержки почтового сервера
Если ошибку с SMTP никак не удается решить, то попробуйте обратиться в службу поддержки почтового сервера.
Как мне это исправить?
Очевидно, что нужно определить, почему команда нарушает грамматику MySQL. Это может показаться довольно непонятным, но MySQL очень старается помочь нам здесь. Все, что нам нужно сделать, это …
-
Прочитайте сообщение!
MySQL не только сообщает нам точно , где синтаксический анализатор обнаружил синтаксическую ошибку, но также предлагает исправить ее. Например, рассмотрим следующую команду SQL:
Эта команда выдает следующее сообщение об ошибке:
MySQL говорит нам, что до Word все выглядело нормально, но затем возникла проблема. Другими словами, в этот момент он не ожидал встретить .
Сообщения, которые говорят , просто означают, что конец команды был обнаружен неожиданно: то есть, что-то еще должно появиться до окончания команды.
-
Изучите фактический текст вашей команды!
Программисты часто создают команды SQL, используя язык программирования. Например, программа php может иметь (неправильную) строку, подобную этой:
Если вы напишите это в две строки
затем вы можете добавить или , чтобы увидеть, что запрос на самом деле говорит
Часто вы сразу увидите свою ошибку и сможете ее исправить.
-
Выполняй приказы!
MySQL также рекомендует, чтобы мы » проверили руководство, соответствующее нашей версии MySQL, на правильный синтаксис для использования «. Давайте сделаем это.
Я использую MySQL v5.6, поэтому я перейду к ручной ввод этой версии для команды . Самое первое на странице — это грамматика команды (это верно для каждой команды):
В руководстве объясняется, как интерпретировать этот синтаксис в Типографские и синтаксические соглашения , но для наших целей достаточно признать, что: предложения, содержащиеся в квадратных скобках и , являются необязательными; вертикальные полосы указывают альтернативы; а эллипсы обозначают либо упущение для краткости, либо повторение предыдущего пункта.
Мы уже знаем, что синтаксический анализатор полагал, что все в нашей команде было в порядке до ключевого слова или, другими словами, вплоть до ссылки на таблицу. Глядя на грамматику, мы видим, что должно сопровождаться ключевым словом : тогда как в нашем за командой следовало ключевое слово . Это объясняет, почему анализатор сообщает, что в этот момент возникла проблема.
Примечание бронирования
Конечно, это был простой пример. Однако, выполнив два шага, описанных выше (то есть наблюдая точно, где в команде синтаксический анализатор обнаружил нарушение грамматики, и сравнив его с описанием руководства ) что ожидалось в этот момент ), практически каждая синтаксическая ошибка может быть легко идентифицирована.
Я говорю «практически все», потому что есть небольшой класс проблем, которые не так легко обнаружить — и именно здесь анализатор считает, что встреченный элемент языка означает одно, а вы намерены — другое. Возьмите следующий пример:
Опять же, синтаксический анализатор не ожидает появления на этом этапе и поэтому вызовет аналогичную синтаксическую ошибку, но вы не предполагали, что это будет ключевым словом SQL: вы намеревались определить столбец для обновления! Однако, как описано в разделе Имена объектов схемы :
Положительные и отрицательные сообщения SMTP-сервера
Данные коды являются трехзначными, каждая его часть несет в себе определенную информацию, расшифровывающую причину сбоя.
Первая цифра комбинации содержит информацию о качестве доставки:
- сообщение доставлено («SMTP OK»);
- возникла неизвестная или временная проблема («SMTP unknown»);
- критическая ошибка («SMTP error»).
Существует четыре варианта значений для первой цифры кода:
- 2xx – положительный результат, есть возможность передачи следующей команды;
- 3xx – отложенный результат, необходимо осуществление дополнительных действий;
- 4xx – сообщение не принято, но проблема носит временный характер, и запрос может быть повторен через какое-то время;
- 5xx – категорический отказ выполнения команды, отправка запроса со стороны передающего сервера в том же виде невозможна.
Вторая цифра в коде сообщает о категории ответа:
- 0 – синтаксические ошибки;
- 1 – ответы на запросы информации;
- 2 – ошибки канала передачи;
- 3 и 4 – неизвестный тип ошибки;
- 5 – статус почтовой системы.
Третья цифра дает более расширенную информацию о значении, указанном во второй цифре SMTP-ответа.
Помимо цифровой комбинации, SMTP-сообщение может содержать дополнительную текстовую информацию.
Полную информацию о кодах, их компоновке и значениях можно найти в спецификациях RFC 5321 и RFC 1893.
Следует учитывать, что SMTP-message говорит об успешном или неудачном варианте доставки именно на уровне взаимодействия почтовых серверов. Положительный ответ вовсе не означает, что ваше письмо не попало в папку «Спам».
Что делать посетителю сайта при возникновении ошибки 504
Итак, вы столкнулись с появлением на экране сообщения «error 504». Не спешите уходить с сайта, ведь возникновение сбоя может говорить о неправильной работе вашего браузера или даже наличии более серьезных проблем на уровне пользовательского софта. Попробуйте произвести довольно простые действия, чтобы убедиться, что с вашим программным обеспечением и настройками все в порядке.
- Перезагрузите проблемную страницу или текущий браузер. Если проблема устранилась и не повторяется вновь, особенно при посещении других сайтов, о ней можно просто забыть. При регулярном возникновении однотипных ошибок во время посещения разных ресурсов стоит покопаться в настройках собственного ПО поглубже.
- Зайдите на тот же самый сайт, где возникла ошибка сервера 504, используя альтернативный браузер. В случае, когда страница во время тестирования открылась корректно, обновите браузер, в котором случился сбой, до последней версии.
- Проверьте, как открываются страницы этого же сайта с другого компьютера или смартфона. Это позволит вам понять, не связано ли появление ошибки 504 с ПО конкретного устройства.
- При регулярном появлении HTTP ошибок, в т.ч. с кодом 504, очистите кэш браузера, удалите файлы cookies. Со временем в любом браузере накапливается много «мусора». Произведя очистку, вы поможете программе работать более корректно и даже быстрее.
- Произведите сброс настроек роутера или модема, отключив оборудование на некоторое время от сети. Данная операция вряд ли приведет к устранению ошибки 504, но может улучшить качество интернет-соединения. Провайдеры регулярно вносят изменения в настройки собственного софта, обновляют его. Иногда это приводит к конфликту в корректном взаимодействии пользовательского оборудования и серверов оператора. Перезагрузка устройства по питанию в большинстве случаев решает такие проблемы.
- Очистите кэш DNS. Данная операция кажется сложной для обычного пользователя, но на деле выполнить ее достаточно легко. Способ очистки зависит от вашей операционной системы, найдите соответствующий мануал в интернете.
- Для опытных пользователей подойдет рекомендация временно переключить DNS-сервер на Google Public DNS, что как минимум поможет определить, возник ли ошибочный код состояния HTTP по причине DNS проблемы.
Если после проведения всех вышеозначенных рекомендаций любая ошибка, в т.ч. 504 Gateway Time Out, продолжает возникать регулярно, обратитесь в техподдержку проблемного интернет-ресурса.
Как избежать ошибок при составлении и отправке писем
Причинами возникновения ошибок и, как следствие, неполучения сообщений могут служить разные факторы. Одни из них связаны с неправильным составлением исходящих писем самим пользователем, другие относятся к более глобальным программным настройкам со стороны получателя.
Самый простой способ это понять – отправить тестовое сообщение на свой ящик. Затем следует протестировать его отправку и получение, используя разные внешние почтовые сервисы: gmail, yandex, mail, rambler и другие. Если сообщение получено, следует ответить на него, проверив корректность исполнения команды «RE» вашим почтовым сервером и принятие ответа условным отправителем.
Довольно часто проблемы с попаданием писем в папку «Спам» или программной блокировкой на стороне получателя лежат в неверном оформлении ключевых полей. Особенно это касается массовых рассылок коммерческого характера. Для отправки большого количества однотипных сообщений как минимум потребуется выполнение следующих параметров настройки:
- выделенный IP-адрес с целью исключить блокировку на стороне сервера-ретранслятора или почтовой программы конечного получателя;
- криптографические подписи DKIM и SPF, помогающие подтвердить подлинность домена и минимизировать количество писем, воспринимаемых как спам.
Некорректное использование бота для отправки писем может привести к блокировке отправителя и другим нежелательным последствиям. Даже если информация, которую вы отправляете потенциальным клиентам, реально интересна им, система спам-фильтрации может воспринять данную рассылку как вредоносную. Чтобы избежать этого, лучше всего воспользоваться услугами специализированных компаний.
В моей практике был случай, когда никак не удавалось добиться получения моей электронной корреспонденции одним из сотрудников компании «Лукойл». Письма я отправлял самые простые, используя корпоративный ящик. Только после того, как мой респондент обратился в IT-службу своего предприятия, выяснилось, что данный адрес находится в блэк-листе. Попал он туда из-за каких-то ошибок, допущенных моим предшественником. Понадобилось больше недели, чтобы адрес включили в «белый список». Все это время письма, высылаемые с личного mail@yandex.ru, доходили без проблем.
Полезно: Почему не приходят письма с сайта. Пример частного случая.
Примеры обработки ошибок MySQL
Давайте рассмотрим несколько примеров объявления обработчиков.
Обработчик, приведенный ниже, означает: когда происходит ошибка, устанавливается значение переменной has_error 1 и выполнение продолжается:
DECLARE CONTINUE HANDLER FOR SQLEXCEPTION SET has_error = 1;
Ниже приводится другой обработчик, который означает, что в случае возникновении любой ошибки, производится откат предыдущей операции, выдается сообщение об ошибке и осуществляется выход из текущего блока кода.
Если вы объявляете его внутри блока BEGIN END хранимой процедуры, он немедленно завершает хранимую процедуру:
DECLARE EXIT HANDLER FOR SQLEXCEPTION BEGIN ROLLBACK; SELECT 'An error has occurred, operation rollbacked and the stored procedure was terminated'; END;
Если строк для вывода больше нет, для вариантов cursor или оператора SELECT INTO, значение переменной no_row_found устанавливается равным 1 и продолжается исполнение:
DECLARE CONTINUE HANDLER FOR NOT FOUND SET no_row_found = 1;
При возникновении ошибки дублирования ключа, выдается ошибка MySQL 1062. Следующий обработчик выдает сообщение об ошибке и продолжает выполнение:
DECLARE CONTINUE HANDLER FOR 1062 SELECT 'Error, duplicate key occurred';