Управление журналами базы данных 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. Удалить
с помощью команды сброса