Как получить все ошибки mysql

Summary: in this tutorial, you will learn how to use the MySQL SHOW ERRORS statement to display error information generated by a query.

Introduction to MySQL SHOW ERRORS statement

The SHOW ERRORS is a diagnostic statement that displays information for errors.

The SHOW ERRORS is similar to the SHOW WARNINGS except that it shows only errors, not warnings and notes.

The following SHOW ERRORS displays all errors:

SHOW ERRORS;
Code language: SQL (Structured Query Language) (sql)

To limit the number of errors to return, you use the SHOW ERRORS LIMIT statement:

SHOW ERRORS [LIMIT [offset,] row_count];
Code language: SQL (Structured Query Language) (sql)

The LIMIT clause has the same meaning as for the SELECT statement.

To get the total number of errors, you use the following form of the SHOW ERRORS statement:

SHOW COUNT(*) ERRORS;
Code language: SQL (Structured Query Language) (sql)

Or you can select it from the system variable @@error_count:

SELECT @@error_count;
Code language: SQL (Structured Query Language) (sql)

MySQL SHOW ERRORS statement example

This statement returns id from the products table in the sample database:

SELECT id FROM products;
Code language: SQL (Structured Query Language) (sql)

However, the products table does not have the id column.

To show the error, you use the SHOW ERRORS statement:

SHOW ERRORS;
Code language: SQL (Structured Query Language) (sql)

To get the total number of errors, you use the error_count variable:

SELECT @@error_count;
Code language: SQL (Structured Query Language) (sql)

In this tutorial, you will have learned how to use the MySQL SHOW ERRORS statement to display error information.

Was this tutorial helpful?

26 марта, 2019 12:22 пп
935 views
| Комментариев нет

MariaDB, mySQL

Эта серия статей научит вас устранять неполадки и диагностировать ваш экземпляр MySQL. Мы рассмотрим базовые проблемы, с которыми сталкиваются многие пользователи MySQL, а также предоставим вам инструкции по их устранению. Также вы найдете здесь ссылки на другие полезные статьи и мануалы.

Очень часто главную причину замедления, сбоев или другого непредсказуемого поведения MySQL можно найти, проанализировав лог ошибок. В системах Ubuntu этот файл MySQL по умолчанию расположен в /var/log/mysql/error.log. В большинстве случаев для чтения логов рекомендуется использовать команду less (это утилита командной строки, которая позволяет просматривать файлы, но не редактировать их). Чтобы просмотреть лог ошибок, введите:

sudo less /var/log/mysql/error.log

Если MySQL ведет себя странно, вы можете получить больше информации об источнике проблемы, запустив эту команду. В логе вы найдете информацию, необходимую для диагностики проблем и их устранения.

Читайте также: Устранение неполадок в запросах MySQL

Tags: MySQL

Если выбирать из этих двух, то второй, разумеется. Он на порядок лучше первого:
— в отличие от первого, он будет выдавать ошибки туда же, куда и весь остальной РНР. На машине разработчика это может быть экран, на боевом сайте — лог. Первый плюёт ошибки в браузер ВСЕГДА, чего на боевом сайте не должно быть никогда
— в отличие от первого, он сообщит номер строки и имя файла, где произошла ошибка, что является критически важным для того самого отлова ошибки. Рекомендую попробовать поискать ошибочный запрос в коде на пару тысяч строк по сообщению от первого варианта. Подробнее про то, как правильно обрабатывать ошибки, можно почитать здесь: Обработка ошибок, часть 1

Примечание: на самом деле ни тот, ни другой коды работать не будут, поскольку mysqli_error() тоже требует $link в обязательном порядке.

Дальше уже идут более продвинутые варианты.
Для начала, mysqli умеет кидать исключения из коробки:

mysqli_report(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT);

и после этого любая ошибка mysqli будет порождать исключение.
Но у этого подхода есть два минуса:
1. Такой вариант может понадобиться только в случае, если обращения к mysqli_query разбросаны по всему коду, чего делать нельзя ни в коем случае.
2. В брошенном исключении будет отсутствовать сам запрос, который может быть очень полезен при отладке.

Поэтому идеальным вариантом будет такой:
Во-первых, все обращения к mysqli API в обязательном порядке надо завернуть в какую-либо библиотеку, которая возьмёт на себя выполнение всей грязной и повторяющейся работы. Пример такой библиотеки — SafeMysql
Во-вторых, в этой библиотеке оформить код обращения к mysqli_query такм образом:

$res = $link->query($query);
if (!$res) throw new Exception($link->error() ." [$query]");

В результате мы получим идеальную обработку ошибок:
— этот код уже из коробки будет так же следовать настройкам РНР, и не будет выдавать ошибки на экран на боевом сервере, но при этом программист всегда будет о ней проинформирован.
— этот код будет выдавать трассировку вызовов — бесценную информацию, без которой найти место, где произошла ошибка, будет очень сложно.
— брошенное исключение можно будет поймать в хендлере или блоке try..catch (однако если нет опыта работы с этими двумя вещами, то на первое время лучше оставить исключение как есть. В обработке ошибок есть много нюансов, неизвестных среднему кодеру, и поэтому лучше оставить эту задачу для РНР).

Thank you for reading this post, don’t forget to subscribe!

Жур­на­лы собы­тий — пер­вый и самый про­стой инстру­мент для опре­де­ле­ния ста­ту­са систе­мы и выяв­ле­ния оши­бок. Основ­ных логов в MySQL четыре:

  • Error Log — стан­дарт­ный лог оши­бок, кото­рые соби­ра­ют­ся во вре­мя рабо­ты сер­ве­ра (в том чис­ле start и stop);
  • Binary Log — лог всех команд изме­не­ния БД, нужен для репли­ка­ции и бэкапов;
  • General Query Log — основ­ной лог запросов;
  • Slow Query Log — лог мед­лен­ных запросов.

Лог ошибок

Этот жур­нал содер­жит все ошиб­ки, кото­рые про­изо­шли во вре­мя рабо­ты сер­ве­ра, вклю­чая кри­ти­че­ские ошиб­ки, а так­же оста­нов­ки, вклю­че­ния сер­ве­ра и пре­ду­пре­жде­ния (warnings). С него нуж­но начать в слу­чае сбоя систе­мы. По умол­ча­нию все ошиб­ки выво­дят­ся в кон­соль (stderr), так­же мож­но запи­сы­вать ошиб­ки в syslog (по умол­ча­нию в Debian) или отдель­ный лог-файл:

log_error=/var/log/mysql/mysql_error.log

Реко­мен­ду­ем дер­жать этот жур­нал вклю­чен­ным для быст­ро­го опре­де­ле­ния оши­бок. А для пони­ма­ния, что зна­чит та или иная ошиб­ка, в MySQL при­сут­ству­ет ути­ли­та perror:

shell> perror 13 64

OS error code  13:  Permission denied

OS error code  64:  Machine is not on the network

Бинарный (он же двоичный) лог

В бинар­ный лог запи­сы­ва­ют­ся все коман­ды изме­не­ния базы дан­ных, при­го­дит­ся для репли­ка­ции и восстановления.

Вклю­ча­ет­ся так:

log_bin                 = /var/log/mysql/mysql-bin.log

expire_logs_days     = 5

max_binlog_size     = 500M

Учти­те, что если вы не соби­ра­е­тесь мас­шта­би­ро­вать систе­му и реа­ли­зо­вы­вать отка­зо­устой­чи­вость, то бинар­ный лог луч­ше не вклю­чать. Он тре­бо­ва­те­лен к ресур­сам и сни­жа­ет про­из­во­ди­тель­ность системы.

Лог запросов

В этом жур­на­ле содер­жат­ся все полу­чен­ные SQL-запро­сы, инфор­ма­ция о под­клю­че­ни­ях кли­ен­тов. Может при­го­дить­ся для ана­ли­за индек­сов и опти­ми­за­ции, а так­же выяв­ле­ния оши­боч­ных запросов:

general_log_file     = /var/log/mysql/mysql.log

<b>general_log         = 1</b>

Так­же его мож­но включить/отключить во вре­мя рабо­ты сер­ве­ра MySQL:

SET GLOBAL general_log = ON;

SET GLOBAL general_log = OFF;

Лог медленных запросов

Жур­нал при­го­дит­ся для опре­де­ле­ния мед­лен­ных, то есть неэф­фек­тив­ных запро­сов. Подроб­нее читай­те в этой статье.

Просмотр логов

Для про­смот­ра логов на Debian (Ubuntu) нуж­но выполнить:

# Лог ошибок

tail -f /var/log/syslog

<span class=«comment»> #Лог запро­сов

</span>tail -f /var/log/mysql/mysql.log

<span class=«comment»> # Лог мед­лен­ных запросов

</span>tail -f /var/log/mysql/mysql-slow.log

Ротация логов

Не забы­вай­те сжи­мать (архи­ви­ро­вать, роти­ро­вать) фай­лы логов, что­бы они зани­ма­ли мень­ше места на сер­ве­ре. Для это­го исполь­зуй­те ути­ли­ту logrotate, отре­дак­ти­ро­вав файл кон­фи­гу­ра­ции /etc/logrotate.d/mysql-server:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

# — I put everything in one block and added sharedscripts, so that mysql gets

<span class=«comment»>

#   flush-logs’d only once.

</span>#   Else the binary logs would automatically increase by n times every day.

<span class=«comment»>

# — The error log is obsolete, messages go to syslog now.

</span><b>/var/log/mysql.log /var/log/mysql/mysql.log /var/log/mysql/mysql-slow.log</b> {

        daily

        rotate 7

        missingok

        create 640 mysql adm

        compress

        sharedscripts

        postrotate

                test -x /usr/bin/mysqladmin || exit 0

               <span class=«comment»> # If this fails, check debian.conf!

</span>                MYADMIN=«/usr/bin/mysqladmin —defaults-file=/etc/mysql/debian.cnf»

                if [ -z «`$MYADMIN ping 2&gt;/dev/null`» ]; then

                 <span class=«comment»> # Really no mysqld or rather a missing debian-sys-maint user?

</span>                 <span class=«comment»> # If this occurs and is not an error please report a bug.

</span>                 <span class=«comment»> #if ps cax | grep -q mysqld; then

</span>                  if killall -q -s0 -umysql mysqld; then

                    exit 1

                  fi

                else

                  $MYADMIN flush-logs

                fi

        endscript

}

DDL Log

MySQL так­же ведет лог язы­ка опи­са­ния дан­ных. В него соби­ра­ют­ся дан­ные опе­ра­ций типа DROP_TABLE and ALTER_TABLE. Лог исполь­зу­ет­ся для вос­ста­нов­ле­ния после сбо­ев, кото­рые про­изо­шли во вре­мя выпол­не­ния таких опе­ра­ций. DDL Log — бинар­ный файл, не пред­на­зна­чен­ный для чте­ния поль­зо­ва­те­лем, поэто­му не моди­фи­ци­руй­те и не уда­ляй­те его.

Самое главное

Все­гда вклю­чай­те лог оши­бок, исполь­зуй­те лог запро­сов для про­вер­ки соеди­не­ния при­ло­же­ния с базой дан­ных, про­вер­ки запро­сов и рабо­ты memcached. Лог мед­лен­ных запро­сов при­го­дит­ся для опти­ми­за­ции рабо­ты MySQL.

https://github.com/midnight47/

mysqli_error_list

(PHP 5 >= 5.4.0, PHP 7, PHP 8)

mysqli::$error_listmysqli_error_list
Возвращает список ошибок выполнения последней запущенной команды

Описание

Объектно-ориентированный стиль

Процедурный стиль

mysqli_error_list(mysqli $mysql): array

Возвращаемые значения

Список ошибок, каждая из которых представлена ассоциативным массивом
(array) и содержит номер ошибки, её описание, а также код состояния
sqlstate.

Примеры

Пример #1 Пример использования $mysqli->error_list

Объектно-ориентированный стиль


<?php
$mysqli
= new mysqli("localhost", "nobody", "");/* проверяем соединение */
if (mysqli_connect_errno()) {
printf("Не удалось подключиться: %sn", mysqli_connect_error());
exit();
}

if (!

$mysqli->query("SET a=1")) {
print_r($mysqli->error_list);
}
/* закрываем соединение */
$mysqli->close();
?>

Процедурный стиль


<?php
$link
= mysqli_connect("localhost", "my_user", "my_password", "world");/* проверяем соединение */
if (mysqli_connect_errno()) {
printf("Не удалось подключиться: %sn", mysqli_connect_error());
exit();
}

if (!

mysqli_query($link, "SET a=1")) {
print_r(mysqli_error_list($link));
}
/* закрываем соединение */
mysqli_close($link);
?>

Результат выполнения данных примеров:

Array
(
    [0] => Array
        (
            [errno] => 1193
            [sqlstate] => HY000
            [error] => Unknown system variable 'a'
        )

)

Смотрите также

  • mysqli_connect_errno() — Возвращает код ошибки последней попытки соединения
  • mysqli_connect_error() — Возвращает описание последней ошибки подключения
  • mysqli_error() — Возвращает строку с описанием последней ошибки
  • mysqli_sqlstate() — Возвращает код состояния SQLSTATE последней MySQL операции

Anonymous

3 years ago


Beware, that this may also return false instead of [].

Возможно, вам также будет интересно:

  • Как показать прошлого года ошибки
  • Как полностью проверить компьютер на ошибки windows 10
  • Как полностью проверить компьютер на наличие ошибок
  • Как показать ошибку на форме
  • Как показывать ошибки php ubuntu

  • Понравилась статья? Поделить с друзьями:
    0 0 голоса
    Рейтинг статьи
    Подписаться
    Уведомить о
    guest

    0 комментариев
    Старые
    Новые Популярные
    Межтекстовые Отзывы
    Посмотреть все комментарии