Flashback
Flashback — это функция, которая позволяет откатить экземпляры, базы данных или таблицы к старой копии.
В настоящее время Flashback поддерживается только для операторов DML (INSERT, DELETE, UPDATE). В будущей версии MariaDB будет добавлена поддержка Flashback для операторов DDL (DROP, TRUNCATE, ALTER и т. д.) путём копирования или перемещения текущей таблицы в резервированную и скрытую базу данных, а затем копирования или перемещения обратно при использовании Flashback. См. MDEV-10571.
Flashback в MariaDB Server реализуется с использованием существующей поддержки полных двоичных журналов изображений (binlog_row_image=FULL), поэтому он поддерживает все движки.
Фактическая работа Flashback выполняется компонентом mariadb-binlog с --flashback. Это приводит к преобразованию событий: INSERT в DELETE, DELETE в INSERT, а для UPDATE — к перестановке изображений до и после.
При выполнении mariadb-binlog с --flashback, события Flashback будут храниться в памяти. Необходимо убедиться, что на вашем сервере достаточно памяти для этой функции.
Аргументы
-
mariadb-binlog имеет параметр
--flashbackили-B, который позволит ему работать в режиме Flashback. -
mariadbd / mysqld имеет параметр --flashback, который включает двоичный журнал и устанавливает
binlog_format=ROW. Использование этого параметра необязательно, если вы уже включили эти параметры напрямую.
Не используйте параметры -v -vv, так как это добавляет избыточную информацию в двоичный журнал, что может привести к проблемам при импорте. См. MDEV-12066 и MDEV-12067.
Пример
С таблицей "mytable" в базе данных "test" можно сравнить вывод с --flashback и без него.
mariadb-binlog /var/lib/mysql/mysql-bin.000001 -vv -d test -T mytable \
--start-datetime="2013-03-27 14:54:00" > review.sql
mariadb-binlog /var/lib/mysql/mysql-bin.000001 -vv -d test -T mytable \
--start-datetime="2013-03-27 14:54:00" --flashback > flashback.sql
Если известна точная позиция, --start-position можно использовать вместо --start-datetime.
Затем, импортировав выходной файл (mysql < flashback.sql), можно откатить базу данных/таблицу до указанного времени или позиции.
Общий случай использования
Общий случай использования Flashback — следующая ситуация:
- У вас есть один основной и два реплики, один из которых запущен с
--flashback(т. е. с включённым двоичным протоколированием, с использованием binlog_format=ROW и binlog_row_image=FULL). - На главном узле произошла ошибка (например, неправильное обновление или удаление), и вы хотите вернуться к состоянию базы данных (или только таблицы) на определённый момент времени.
- Удалите реплику с включённым Flashback из репликации.
- Запустите mariadb-binlog, чтобы найти точную позицию журнала первой ошибочной операции после состояния, к которому вы хотите вернуться.
- Запустите
mariadb-binlog --flashback --start-position=xyz | mysqlдля передачи выводаmariadb-binlogнапрямую клиентуmariadb, или сохраните вывод в файл, а затем направьте файл в командную строку клиента.
© 2023 MariaDB
Licensed under the Creative Commons Attribution 3.0 Unported License and the GNU Free Documentation License.
https://mariadb.com/kb/en/flashback/