Предварительное понимание бинарных логов в Mysql

двоичный журнал

Изменение данных в базе фиксируется в виде «событий» в бинарном журнале, что играет важную роль при аварийном восстановлении базы данных MySQL.


Включить двоичное ведение журнала

my.cnfДвоичный журнал можно my.iniвключить, выполнив следующую настройку в файле или файле.


[mysqld]
log_bin = /data/mysql/log/bin_log/mysql-bin
binlog_format= mixed
binlog_cache_size=32m
max_binlog_cache_size=64m
max_binlog_size=512m
expire_logs_days = 10

Описание конфигурации выглядит следующим образом:

  • log_bin: указывает, что двоичный журнал включен. Если этому элементу не присвоено значение, MySQL создаст двоичные файлы в каталоге, указанном параметром DATADIR (каталог хранения данных MySQL).

  • binlog_format: Формат двоичного файла. Значения могут быть STATEMENT, , ROWи MIXED.

    • ЗАЯВЛЕНИЕ

      Запишите операторы SQL. Файл журнала небольшой и экономит операции ввода-вывода, но некоторые системные функции не могут быть скопированы точно или не могут быть скопированы, например, now(), uuid() и т. д.

    • РЯД

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

    • СМЕШАННЫЙ

      Сочетание режимов STATEMENT и ROW. По умолчанию для записи двоичных файлов журнала используется формат STATEMENT, но в некоторых случаях будет использоваться формат ROW.

В настоящее время в отрасли рекомендуется режим ROW, который имеет высокую точность.Хотя файлы большие, но теперь есть твердотельные накопители и оптоволоконные сети 10G, эти дисковые операции ввода-вывода и сетевые операции ввода-вывода приемлемы.

  • binlog_cache_size: размер буфера двоичного журнала.

  • max_binlog_cache_size: Максимальный размер кэша для двоичных журналов.

  • max_binlog_size: максимальный размер одного двоичного файла журнала.Когда размер файла превышает значение, настроенное с помощью этого параметра, произойдет смена журнала и будет создан новый двоичный файл.

  • expire_logs_days: время истечения срока действия двоичного журнала. Если эта опция настроена, MySQL автоматически очищает просроченные двоичные журналы. Значение по умолчанию для этой опции равно 0, что означает, что MySQL не будет очищать журналы с истекшим сроком действия.

После завершения настройки перезапустите MySQL, чтобы конфигурация вступила в силу. На этом этапе бинарные файлы MySQL будут созданы в /data/mysql/log/bin_logкаталоге .

После перезапуска вы можете увидеть соответствующую информацию настроенного нами двоичного журнала.

show variables like '%log_bin%';

±--------------------------------±---------------- -------------------------+
| Имя_переменной | Значение |
±--------------------------------±---------------- -------------------------+
| лог_бин | НА |
| log_bin_basename | D:\mysql-8.0.28-winx64\data\binlog |
| log_bin_index | D:\mysql-8.0.28-winx64\data\binlog.index |
| log_bin_trust_function_creators | НА |
| log_bin_use_v1_row_events | ВЫКЛ |
| sql_log_bin | НА |
±--------------------------------±---------------- -------------------------+
6 рядов в наборе


Проверьте двоичный журнал

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

Примечание: тестовая таблица, которую я создал заранее

CREATE TABLE `test1` (
  `id` int NOT NULL,
  `name` varchar(20) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3;

(1) Вставьте две части тестовых данных в таблицу test1.

INSERT INTO test1 (id,name) VALUES(5,"赵山河");
INSERT INTO test1 (id,name) VALUES(6,"跟着飞哥学编程");

(2) Используйте mysqlbinlogкоманду для просмотра двоичного журнала


mysqlbinlog --no-defaults /data/mysql/log/bin_log/mysql-bin.000001

Оператор SQL для вставки данных в таблицу test1данных .

Примечание. При просмотре сгенерированных бинарных файлов MySQL в /data/mysql/log/bin_logкаталоге я обнаружил файл mysql-bin.index, который не записывает бинарное содержимое, а записывает полные пути всех бинарных файлов, существующих в текущем каталоге. Файл mysql-bin.index можно рассматривать как обычный текстовый файл.


cat /data/mysql/log/bin_log/mysql-bin.index

удалить двоичный журнал

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

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

После перезапуска MySQL несколько раз снова проверьте файлы в /data/mysql/log/bin_logкаталоге .


1. Удалить бинарные журналы по номеру

Удалить бинарный журнал по номеру, формат синтаксиса следующий:


PURGE {
    
     BINARY | MASTER } LOGS TO 'log_name'

Выполнение оператора SQL в этом формате синтаксиса в командной строке MySQL удалит все двоичные файлы журнала, число которых меньше указанного имени файла. Например, удалите все двоичные файлы журналов с номерами меньше, чем mysql-bin.000003.


mysql> PURGE MASTER LOGS TO 'mysql-bin.000003';
Query OK, 0 rows affected (0.01 sec)

Оператор SQL выполнен успешно, проверьте файлы в каталоге /data/mysql/log/bin_log.

[root@binghe150 ~]# ll /data/mysql/log/bin_log
total 36
-rw-r----- 1 mysql mysql 178 Jan 17 16:20 mysql-bin.000003
-rw-r----- 1 mysql mysql 178 Jan 17 16:20 mysql-bin.000004
-rw-r----- 1 mysql mysql 178 Jan 17 16:20 mysql-bin.000005
-rw-r----- 1 mysql mysql 178 Jan 17 16:20 mysql-bin.000006
-rw-r----- 1 mysql mysql 178 Jan 17 16:21 mysql-bin.000007
-rw-r----- 1 mysql mysql 178 Jan 17 16:21 mysql-bin.000008
-rw-r----- 1 mysql mysql 178 Jan 17 16:21 mysql-bin.000009
-rw-r----- 1 mysql mysql 155 Jan 17 16:21 mysql-bin.000010
-rw-r----- 1 mysql mysql 328 Jan 17 16:29 mysql-bin.index

Было обнаружено, что файлы mysql-bin.000001 и mysql-bin.000002 были удалены. Примечание. При удалении двоичного журнала в соответствии с номером будет удален только тот двоичный файл журнала, номер которого меньше текущего указанного номера файла, а текущий указанный двоичный файл журнала не будет удален.

2. Удалить бинарные журналы по времени

Удалите двоичный журнал в соответствии со временем, формат синтаксиса выглядит следующим образом:

PURGE { BINARY | MASTER } LOGS BEFORE datetime_expr

При выполнении оператора SQL в этом формате синтаксиса MySQL удалит двоичный журнал до указанного времени.

Например, удалите двоичные файлы журнала до «2020-01-17 16:21:00».

mysql> PURGE MASTER LOGS BEFORE '2020-01-17 16:21:00';
Query OK, 0 rows affected (0.00 sec)

Оператор SQL выполнен успешно, проверьте файлы в каталоге /data/mysql/log/bin_log.

[root@binghe150 ~]# ll /data/mysql/log/bin_log
total 20
-rw-r----- 1 mysql mysql 178 Jan 17 16:21 mysql-bin.000007
-rw-r----- 1 mysql mysql 178 Jan 17 16:21 mysql-bin.000008
-rw-r----- 1 mysql mysql 178 Jan 17 16:21 mysql-bin.000009
-rw-r----- 1 mysql mysql 155 Jan 17 16:21 mysql-bin.000010
-rw-r----- 1 mysql mysql 164 Jan 17 16:37 mysql-bin.index

Двоичные файлы журнала до «2020-01-17 16:21:00» были удалены, но двоичные файлы журнала на момент времени «2020-01-17 16:21:00» не будут удалены.

3. удалить все бинарные журналы

Выполните следующую команду в командной строке MySQL, чтобы удалить все двоичные файлы журнала.

mysql> RESET MASTER;
Query OK, 0 rows affected (0.01 sec)

Оператор SQL успешно выполнен. Проверьте файлы в каталоге /data/mysql/log/bin_log еще раз.

[root@binghe150 ~]# ll /data/mysql/log/bin_log
total 8
-rw-r----- 1 mysql mysql 155 Jan 17 16:41 mysql-bin.000001
-rw-r----- 1 mysql mysql  41 Jan 17 16:41 mysql-bin.index

В настоящее время все двоичные файлы в каталоге /data/mysql/log/bin_log удалены, а двоичные файлы снова нумеруются с 000001.

Временное включение и выключение двоичного кода

Выполните следующую команду в командной строке Mysql, чтобы временно отключить двоичный журнал:


mysql> SET sql_log_bin = 0;
Query OK, 0 rows affected (0.00 sec)

Чтобы временно включить двоичный журнал, вам необходимо выполнить следующую команду в командной строке MySQL:


mysql> УСТАНОВИТЬ sql_log_bin = 1;
Запрос выполнен успешно, затронуто 0 строк (0,00 сек.)


Guess you like

Origin blog.csdn.net/weixin_36754290/article/details/129265101