На работе мы удаляем данные или базы данных по ошибке, нам нужно бежать? Я так не думаю.Программисты должны научиться сохранять себя и извлекать данные, не подозревая об этом.
В базе данных MySQL мы знаем журнал Binlog записывает все наши операции в базе данных, поэтому Binlog Log - это наш инструмент самопомощи.
Далее приступим к способу самопомощи программиста.
Если мы хотим успешно спасти себя, binlog должен быть хорошим инструментом.Перед собой мы должны убедиться, что у нас есть инструмент binlog.Ниже приведена операция, чтобы убедиться, что у нас есть инструмент binlog.
1. Убедитесь, что в базе данных включено ведение журнала binlog.
show variables like 'log_%';
Проверьте место, обведенное красным, если горит, значит включено, иначе не включается. Если он не включается, нужно сделать следующее.
2. Откройте журнал binlog
Если журнал бинлога не включен, вам нужно включить лог бинлога и установить его в файле конфигурации MySQL.Если у вас компьютер с Windows, найдите его.my.ini
файл, найденный в системах unixmy.cnf
документ. Измените или настройте следующие параметры в файле:
# Binary Logging.
#日志文件的名字及存储路径
log-bin=D:\Mysql-binlog\mysql-bin
#设置日志格式
binlog-format=mixed
вbinlog-formatЕсть три варианта:
- STATMENT: каждое выражение SQL, изменяющее данные, будет записано в binlog.
- ROW: Не записывает контекстную информацию каждого оператора SQL, а только записывает, какая запись была изменена.
- MIXED: Смешанное использование приведенных выше двух режимов. Общая репликация использует режим оператора для сохранения BinLog, и режим строки используется для сохранения Binlog для операций, которые нельзя реплицировать в режиме оператора. MySQL выберет метод хранения журнала в соответствии с выполненным оператором SQL.
3. Перезапустите сервер MySQL.
4. Еще раз подтвердите, что журнал binlog успешно включен.
Что ж, после выполнения вышеуказанных шагов мы можем научиться сохранять себя.Мы используем три сценария, чтобы продемонстрировать, как сохранить себя, когда данные удаляются по ошибке, таблица по ошибке и база данных по ошибке.
Прежде чем войти в конкретную сцену, давайте подготовим базу данных, таблицу и данные, необходимые для демонстрации.
1. Создайте базу данныхpingtouge
create database pingtouge;
2. Создайте таблицу учеников
create table student(
id INT NOT NULL AUTO_INCREMENT,
name VARCHAR(100) NOT NULL,
num VARCHAR(40) NOT NULL,
PRIMARY KEY (id )
)ENGINE=InnoDB DEFAULT CHARSET=utf8;
3. Вставьте данные
insert into student(name,num)values('张三','1234');
insert into student(name,num)values('李四','1235');
После того, как данные будут доступны, вы можете официально выйти на сцену, вы готовы?
Сценарий 1: часть данных была удалена по ошибке
Случайно удалил данные с id=1 в таблице учеников. что делать?
Вставить эти данные вручную из памяти? Кажется, что это не невозможно, все люди, которые могут вспомнить, — гении, и использование бинлог-логов — это королевский путь.
использоватьshow master status
Команда для просмотра последнего файла журнала binlog.
После получения последнего файла журнала BINLOG, используйтеshow binlog events in 'mysql-bin.000043';
Команда для просмотра файла журнала binlog, как показано на следующем рисунке:
Журнал binlog записывает все наши операции с базой данных, включая смещения до и после фиксации оператора, которые будут использоваться при восстановлении данных.
Прежде чем официально заняться восстановлением данных, давайте сначала познакомимся с инструментом, предоставляемым MySQL: mysqlbinlog. mysqlbinlog используется для работы с файлом журнала binlog, нам нужно использовать его для восстановления данных.
Используйте mysqlbinlog для восстановления двоичных файлов журнала,формат командыдля:
mysqlbinlog binlog日志文件 --start-position 初始偏移量的位置 --stop-position 结束偏移量的位置 | mysql -u root -p 数据库名称;
В файле журнала binlog мы находим начальное смещение и конечное смещение последней операции данных в таблице учеников с id = 1 перед удалением.На приведенном выше рисунке я отметил начальное смещение: 710, а конечное смещение: 996. С этими двумя параметрами мы можем использовать команду mysqlbinlog для восстановления данных.
воплощать в жизнь:
mysqlbinlog d:\Mysql-binlog\mysql-bin.000043 --start-position 710 --stop-position 996 | mysql -u root -p pingtouge;
Если команда выполнена успешно, выполните ее сноваselect * from student
Команда, чтобы увидеть, восстановлены ли данные.
Сценарий 2: таблица данных была удалена по ошибке
Я снова случайно удалил таблицу student.
Для ошибочно удаленных таблиц вы также можете использовать журнал binlog для восстановления.В конце концов, журнал binlog записывает все наши операции над MySQL.Так же, как и при восстановлении отдельного фрагмента данных, нам также нужно найти начальное смещение и конечное смещение в Файл журнала binlog.Величина сдвига, используемая для восстановления данных.
В отличие от одного фрагмента данных,Для смещений таблицы начальное смещение — это начальное смещение перед созданием таблицы, а конечное смещение — это последнее конечное смещение перед удалением базы данных.Как показано ниже:
Одна картинка не полная, поэтому я разделил ее на две картинки. Также используем mysqlbinlog для восстановления таблицы student, выполняем: mysqlbinlog d:\Mysql-binlog\mysql-bin.000043 --start-position 393 --stop-position 1997 | mysql -u root -p pingtouge
После выполнения команды выполните ее сноваselect * from student;
, вы найдете все наши данные обратно.
Сценарий 3: удалить базу данных по ошибке
Вы злитесь на работе и собираетесь удалить библиотеку и убежать, поэтому вы ставитеpingtouge
База данных была удалена, и вы сожалеете об этом после ее удаления, что мне делать? онлайн и т. д.
Не паникуйте, универсальный журнал binlog может вас спасти.Как и в предыдущих двух сценариях, вы все еще можете запросить журнал binlog, чтобы найти начальное и конечное смещения базы данных, которую нужно восстановить. Я не буду делать скриншоты здесь.
Создайте базу данных, просмотрев журнал binlogpingtouge
Начальное смещение — 219, а последнее смещение перед удалением библиотеки — 3861. Получив эти два смещения, выполните:
mysqlbinlog d:\Mysql-binlog\mysql-bin.000043 --start-position 219 --stop-position 3861 | mysql -u root -p
Следует отметить, что нет необходимости приводить базу данных в конце.После выполнения обнаружение и база данныхpingtouge
Все соответствующие данные возвращены.
После удаления библиотеки мы не обязательно не должны убегать, мы должны научиться спасать себя, молодой человек.
Вышеупомянутое содержание является сегодня опубликованным. Я надеюсь, что это будет полезно для вашей учебы или работы. Если вы считаете, что статья хороша, пожалуйста, отметьте и перешлите ее, спасибо.
наконец
В настоящее время многие большие ребята в Интернете имеют статьи, связанные с восстановлением данных MySQL, Если есть какие-то сходства, пожалуйста, потерпите меня. Нелегко быть оригинальным, и нелегко кодировать слова, я также надеюсь, что вы поддержите это. Если в тексте будут ошибки, надеюсь сообщить о них, спасибо.
Добро пожаловать, чтобы отсканировать код и подписаться на общедоступную учетную запись WeChat: «Интернет Pingtou Ge», Pingtou Ge будет учиться и добиваться успехов вместе.