MySQL case combat - управление журналом базы данных MySQL

Предисловие

Служба MySQL также имеет множество типов журналов.Журналы используются для резервного копирования данных базы данных, восстановления данных, устранения неполадок и настройки сервера. Далее мы подробно поговорим об управлении журналами MySQL.

Эта среда основана на системе Centos 7.8 для сборки MySQL-5.7.14 для
конкретной конструкции, обратитесь к построению среды MySQL-5.7.14


Журнал MySQL

Журнальный файл Тип информации в файле журнала
Журнал ошибок Записывайте проблемы, возникающие при запуске, работе или остановке
Журнал запросов Записывать установленные клиентские соединения и выполненные инструкции
Двоичный журнал Запишите все отчеты об изменениях. В основном используется для репликации и восстановления на определенный момент времени
Медленный журнал Регистрировать все запросы, время выполнения которых превышает log_query_time секунд, или запросы, которые не должны использовать индексы
Журнал транзакций Журналы записей, созданные во время выполнения поддерживаемых механизмов хранения, таких как InnoDB

1. Журнал ошибок

Журнал ошибок в основном записывает следующие типы журналов

  • Информация во время запуска и выключения сервера
  • Сообщение об ошибке во время работы сервера
  • Информация, генерируемая планировщиком событий за время
  • Информация, генерируемая при запуске процесса подчиненного сервера на подчиненном сервере

Управление журналами ошибок

Журнал ошибок MySQL по умолчанию хранится в каталоге datadir (каталог данных),
но мы также можем вручную установить путь хранения файла журнала.

1. Путь к хранилищу журнала по умолчанию

[root@mysql-yum ~]# vim /etc/my.cnf
log-error=/var/log/mysqld.log
[root@mysql-yum ~]# systemctl restart mysqld
mysql> show global variables like '%log_error%';
+---------------------+---------------------+
| Variable_name       | Value               |
+---------------------+---------------------+
| binlog_error_action | ABORT_SERVER        |
| log_error           | /var/log/mysqld.log |
| log_error_verbosity | 3                   |
+---------------------+---------------------+
3 rows in set (0.00 sec)

2. Не указан путь хранения журнала.

[root@mysql-yum ~]# vim /etc/my.cnf
log-error
[root@mysql-yum ~]# systemctl restart mysqld
mysql> show global variables like '%log_error%';
+---------------------+----------------------------+
| Variable_name       | Value                      |
+---------------------+----------------------------+
| binlog_error_action | ABORT_SERVER               |
| log_error           | /var/run/mysqld/mysqld.err |
| log_error_verbosity | 3                          |
+---------------------+----------------------------+
3 rows in set (0.00 sec)

3. Задайте путь к хранилищу.

[root@mysql-yum ~]# vim /etc/my.cn
log-error=mysql-yum
[root@mysql-yum ~]# systemctl restart mysqld
mysql> show global variables like '%log_error%';
+---------------------+-----------------+
| Variable_name       | Value           |
+---------------------+-----------------+
| binlog_error_action | ABORT_SERVER    |
| log_error           | ./mysql-yum.err |
| log_error_verbosity | 3               |
+---------------------+-----------------+
3 rows in set (0.00 sec)

Примечание: журнал ошибок MySQL хранится в каталоге данных.

2. Журнал запросов

Журнал запросов: запись установленных клиентских подключений и выполненных операторов

Открыть журнал запросов

[root@mysql-yum ~]# vim /etc/my.cnf
general_log=on
[root@mysql-yum ~]# systemctl restart mysqld

Просмотр статуса журнала

mysql> show global variables like '%general_log%';
+------------------+------------------------------+
| Variable_name    | Value                        |
+------------------+------------------------------+
| general_log      | ON                           |
| general_log_file | /var/lib/mysql/mysql-yum.log |
+------------------+------------------------------+
2 rows in set (0.00 sec)

mysql> show global variables like '%log_output%';
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| log_output    | FILE  |
+---------------+-------+
1 row in set (0.00 sec)

# 执行查询语句
mysql> show databases;
mysql> select database();

Просмотр записей журнала
Вставьте описание изображения сюда

Три, журнал медленных запросов

Медленный журнал: записывать все запросы, время выполнения которых превышает log_query_time секунд, или запросы, которые не должны использовать индекс
Функция: в основном используется для настройки сервера

Установите медленный запуск журнала и время запроса

mysql> set global slow_query_log=on;
Query OK, 0 rows affected (0.22 sec)

mysql> set global long_query_time=3;
Query OK, 0 rows affected (0.00 sec)


# 查看日志设定
mysql> show global variables like '%slow_query_log%';
+---------------------+-----------------------------------+
| Variable_name       | Value                             |
+---------------------+-----------------------------------+
| slow_query_log      | ON                                |
| slow_query_log_file | /var/lib/mysql/mysql-yum-slow.log |
+---------------------+-----------------------------------+
2 rows in set (0.00 sec)

mysql> show global variables like '%long_query_time%';
+-----------------+----------+
| Variable_name   | Value    |
+-----------------+----------+
| long_query_time | 3.000000 |
+-----------------+----------+
1 row in set (0.00 sec)

В-четвертых, двоичный журнал

Что такое двоичный журнал?

  • Двоичный журнал содержит все операторы, у которых есть обновленные данные или потенциально обновленные данные (например, DELETE, которая не соответствует ни одной строке)
  • Заявления хранятся в форме «событий», которые описывают изменения данных. Двоичный журнал также содержит информацию о времени выполнения каждого оператора, обновляющего базу данных. Он не содержит операторов, которые не изменяют никаких данных.

Роль двоичного журнала?

  • Основная цель двоичного журнала - максимально возможное обновление базы данных во время восстановления (восстановление на определенный момент времени), когда база данных неисправна, поскольку двоичный журнал содержит все обновления, выполненные после резервного копирования.
  • Двоичный журнал также используется для записи всех операторов, которые будут отправлены на подчиненный сервер на главном сервере репликации.

В производственной среде мы часто применяем: выполнение операторов и запись результатов выполнения, запись двоичных журналов

Откройте log_bin

[root@mysql-yum ~]# systemctl restart mysqld
log_bin=mysql-bin
server_id=10
[root@mysql-yum ~]# systemctl restart mysqld

Просмотр статуса открытия log_bin

mysql> show global variables like '%log_bin%';
+---------------------------------+--------------------------------+
| Variable_name                   | Value                          |
+---------------------------------+--------------------------------+
| log_bin                         | ON                             |
| log_bin_basename                | /var/lib/mysql/mysql-bin       |
| log_bin_index                   | /var/lib/mysql/mysql-bin.index |
| log_bin_trust_function_creators | OFF                            |
| log_bin_use_v1_row_events       | OFF                            |
+---------------------------------+--------------------------------+
5 rows in set (0.00 sec)

# 查看二进制日志文件
mysql> show binary logs;
+------------------+-----------+
| Log_name         | File_size |
+------------------+-----------+
| mysql-bin.000001 |       154 |
+------------------+-----------+
1 row in set (0.00 sec)

# 查看二进制日志文件内容
mysql> mysql> show binlog events in 'mysql-bin.000001';
+------------------+-----+----------------+-----------+-------------+---------------------------------------+
| Log_name         | Pos | Event_type     | Server_id | End_log_pos | Info                                  |
+------------------+-----+----------------+-----------+-------------+---------------------------------------+
| mysql-bin.000001 |   4 | Format_desc    |        10 |         123 | Server ver: 5.7.14-log, Binlog ver: 4 |
| mysql-bin.000001 | 123 | Previous_gtids |        10 |         154 |                                       |
+------------------+-----+----------------+-----------+-------------+---------------------------------------+
2 rows in set (0.00 sec)

Просмотреть содержимое log_bin

[root@mysql-yum ~]# mysqlbinlog /var/lib/mysql/mysql-bin.000001
/*!50530 SET @@SESSION.PSEUDO_SLAVE_MODE=1*/;
/*!50003 SET @OLD_COMPLETION_TYPE=@@COMPLETION_TYPE,COMPLETION_TYPE=0*/;
DELIMITER /*!*/;
# at 4
#210129 11:06:37 server id 10  end_log_pos 123 CRC32 0x323c980c 	Start: binlog v 4, server v 5.7.14-log created 210129 11:06:37 at startup
# Warning: this binlog is either in use or was not closed properly.
ROLLBACK/*!*/;
BINLOG '
vXsTYA8KAAAAdwAAAHsAAAABAAQANS43LjE0LWxvZwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAC9exNgEzgNAAgAEgAEBAQEEgAAXwAEGggAAAAICAgCAAAACgoKKioAEjQA
AQyYPDI=
'/*!*/;
# at 123
#210129 11:06:37 server id 10  end_log_pos 154 CRC32 0xb271a2b4 	Previous-GTIDs
# [empty]
SET @@SESSION.GTID_NEXT= 'AUTOMATIC' /* added by mysqlbinlog */ /*!*/;
DELIMITER ;
# End of log file
/*!50003 SET COMPLETION_TYPE=@OLD_COMPLETION_TYPE*/;
/*!50530 SET @@SESSION.PSEUDO_SLAVE_MODE=0*/;

Основная: более поздняя версия MySQL, оператор в log_bin был зашифрован, и его необходимо декодировать для просмотра
Когда log_bin включен, необходимо указать номер server_id, и это значение является уникальным в кластере серверов MySQL.

Удалить log_bin

# 多西刷新log_bin
mysql> flush logs;
Query OK, 0 rows affected (0.00 sec)

# 查看所有的log_bin
mysql> show binary logs;
+------------------+-----------+
| Log_name         | File_size |
+------------------+-----------+
| mysql-bin.000001 |       201 |
| mysql-bin.000002 |       201 |
| mysql-bin.000003 |       201 |
| mysql-bin.000004 |       201 |
| mysql-bin.000005 |       154 |
+------------------+-----------+
5 rows in set (0.00 sec)


# 删除日志
---方法一:按照日志名字删除
mysql> purge binary logs to 'mysql-bin.000003';
Query OK, 0 rows affected (0.00 sec)

mysql> show binary logs;
+------------------+-----------+
| Log_name         | File_size |
+------------------+-----------+
| mysql-bin.000003 |       201 |
| mysql-bin.000004 |       201 |
| mysql-bin.000005 |       154 |
+------------------+-----------+
3 rows in set (0.00 sec)

---方法二:按照日志删除
mysql> purge binary logs before '2021-01-29 11:24:37';
Query OK, 0 rows affected (0.00 sec)

mysql> show binary logs;
+------------------+-----------+
| Log_name         | File_size |
+------------------+-----------+
| mysql-bin.000004 |       201 |
| mysql-bin.000005 |       154 |
+------------------+-----------+
2 rows in set (0.00 sec)

---方法三:删除所有日志,重新从第一编号开始,重新记录日志
mysql> reset master;
Query OK, 0 rows affected (0.00 sec)

mysql> show binary logs;
+------------------+-----------+
| Log_name         | File_size |
+------------------+-----------+
| mysql-bin.000001 |       154 |
+------------------+-----------+
1 row in set (0.01 sec)

Примечание: двоичные файлы журналов нельзя удалить напрямую.Если вы используете такие команды, как rm, для непосредственного удаления файлов журналов, база данных может аварийно завершить работу.
1. Удалить с помощью команды очистки 2. Удалить
с помощью команды сброса

рекомендация

отblog.csdn.net/XY0918ZWQ/article/details/113364127