предисловие
В связи с недавним учебным сезоном наша компания также занимается бизнесом, связанным с колледжами и университетами, поэтому я занят и у меня нет времени писать статьи.Когда люди слишком заняты, им легко ошибиться. Что касается меня, всего несколько дней назад, нет, это был мой друг, который чуть не провел волну удаления базы данных и убежал, когда несколько дней назад работал с онлайн-базой данных.
Заранее заметьте: это действительно мой друг, а не я. На самом деле мой друг, не я. На самом деле мой друг, не я. Однако для удобства повествования в дальнейшем «мой друг» для краткости будет называться «я».
Дело в том, что когда я сравнивал некоторые структуры таблиц, я обнаружил, что структура таблиц этой библиотеки и других библиотек намного хуже, поэтому я подумал, что это окружение не используется, поэтому я непосредственно выполнил операцию перезаписи этих таблиц. ,так уж получилось,что эти таблицы были еще связаны со студенческими кошельками,а потом в 10 часов вечера сотрудники перед компанией сообщили в группе почему деньги в кошельке стали 0.0.Я ужаснулся когда Я видел это, думал о побеге.
Но, к счастью, я видел некоторые решения для восстановления баз данных и до сих пор знаю кое-что.
Восстановление данных
1. Включить журнал binlog
Я использую журнал binlog для восстановления данных.Чтобы использовать binlog, вы должны сначала убедиться, что журнал binlog включен.Вы можете использовать команду для его просмотра.
show variables like 'log_%';
Вы можете видеть, что он находится в состоянии ON, что означает, что он включен.Если он находится в состоянии OFF, в my.cnf[mysqld]После добавления конфигурации перезапустите службу mysql, чтобы запустить ее.
# my.cnf文件
[mysqld]
log-bin=mysql-bin
server-id=1
2. Просмотр журнала binlog
Убедившись, что день binlog включен, вы можете запустить команду для просмотра состояния журнала binlog.
# 查看binlog日志的目录
show master status;
# 查看binlog日志内容
show binlog events IN 'mysql-bin.000002';
- Log_name указывает имя журнала binlog
- Pos представляет начальную точку pos
- Event_type указывает тип этой операции
- Server_id представляет собой идентификатор машины, указанный в конфигурации в my.cnf.
- END_LOG_POS представляет собой конец POS
- Информация представляет собой конкретное утверждение
# 进入存储binlog日志的文件木了,可以通过这条命令查看详情
mysqlbinlog --base64-output=decode-rows -v mysql-bin.000002;
# 将binlog日志转为txt导出
mysqlbinlog --base64-output=decode-rows -v mysql-bin.000002 > sql.txt
3. Восстановить данные
Чтобы восстановить данные из журнала binlog, обычно используемое восстановление из командной строки или копирование журнала binlog, используйте инструмент, который читает binlog, чтобы преобразовать его в файл .sql, затем скопируйте все SQL, которые необходимо использовать в нем, и запустите его. опять же, здесь в основном речь идет о методе восстановления из командной строки.
Восстановление с помощью командной строки в основном включает проверку журнала binlog, подтверждение начальной и конечной точек восстановления, а затем ввод команды для восстановления. Или оцените время вашей неправильной работы и ошибок, и восстановите данные через определенный период времени.
# 通过起始点和结束点恢复
mysqlbinlog --start-position="582" --stop-position="9414" mysql-bin.000002 | mysql -uroot -proot;
# 通过起始时间和结束时间来恢复,传入的时间可以是一个yyyy-MM-dd HH:mm:ss 的时间格式,也可以是一个时间戳
mysqlbinlog --start-datetime="2020-9-1 8:25:04" --stop-datetime="2020-9-1 20:00:00" mysql-bin.000002 | mysql -uroot -proot
Как видите, после ввода команды восстановления данные базы данных, которые я очистил, вернулись.
4. Вопросы
Хотя журнал binlog может восстанавливать данные, есть и проблемы.Когда журнал binlog продолжает расти, он будет автоматически удален, так что удаленная часть данных журнала не может быть восстановлена.
Однако размер и время хранения журнала binlog можно установить в mysql. Тем не менее, рекомендуется делать ежедневные резервные копии, чтобы быть в безопасности.
# 设置文件大小,单位是字节,下面换算是100M
set global max_binlog_size=104857600;
# 设置文件保存天数,下面是保存7天,默认值为0,表示"没有自动删除"
set global expire_logs_days = 7;
ежедневное резервное копирование
Для онлайн-среды важно выполнять ежедневное резервное копирование и совместное использование binlog. Онлайн обычно развертывается в Linux, поэтому вот краткий список обычных методов резервного копирования в Linux.
1. Проверьте, нужно ли устанавливать временные задачи и устанавливать crontab
yum install crontabs
2. Настройте запланированные задачи
/ var / spool / cron / root Этот файл crontab timer задач,crontab -eИли напрямую измените этот файл, чтобы изменить.
crontab -lПроверьте запланированные задачи.
3. Создайте сценарий оболочки
touch xxx.sh
mysqldump -uroot -p"密码" 数据库名 > /mysql/person_`date +%Y%m%d`.sql
4. Изменить права доступа к файлам
chmod 777 xxx.sh
5. Откройте файл задачи на время
crontab -e
每天凌晨2点执行
00 2 * * * /xxx.sh
резюме
На этот раз операция по удалению базы данных была вызвана тем, что школа еще не начала работу, система в основном используется персоналом в кампусе, и в школе не так много учеников, поэтому объем данных невелик, и это легко ответить, к счастью, нет потерь. , в противном случае, если многие студенты уже начали использовать его, то это настоящий GG.
Благодаря опыту моего друга по удалению базы данных, я только что научился восстанавливать базу данных, поэтому разобрался и выложил. Наконец, хотя базу данных можно восстановить после случайного удаления, не пытайтесь делать это случайным образом. (ручная голова собаки)
над!
Я все это видел, ставь лайк, подписывайся и уходи~