MySQL 小技巧:删库跑路如何恢复

实战案例:利用二进制日志,将数据库还原至最新状态

0) "前置条件" ( 开启二进制日志功能 )
## 并将二进制日志文件与数据库文件分开存放
1. 创建二进制日志文件的存放目录
mkdir /mysql/data/logbin -pv
chown -R mysql:mysql /mysql/data/logbin/

2. 定义二进制日志文件路径 ( 服务器选项: log-bin )
vim /etc/my.cnf
vim /etc/my.cnf.d/mysql-server.cnf      # MySQL 8.0
[mysqld]
log_bin                                 # 开启二进制日志功能 ( 必须 )
log-bin=/mysql/data/logbin/mysql-bin    # 定义二进制日志文件路径

3. 重启 mariadb 服务
setenforce 0         # 关闭 SELinux ( 重要 )
systemctl restart mariadb.service
# 如重启报错 ( 可以尝试查看日志 tail -f /var/log/mysql/mysqld.log )
# 将报错信息发送至 ChatGPT 为你提供解决思路

4. 验证
ll /mysql/data/logbin
cat /mysql/data/logbin/mysql-bin.index ( 该文件记录当前已有的二进制日志文件列表 )

5. 验证
select @@sql_log_bin;
select @@log_bin;
1) 基于 mysqldump 完全备份数据库
mysqldump -A --master-data=2 > /data/all.sql
mysqldump -A --master-data=2 | gzip > /data/all.sql.gz # 建议: 备份并压缩

2) 备份完成后, "继续操作数据库"
mysql hellodb;
insert teachers values(5,'xiaoming',20,'M');
insert teachers values(6,'xiaohong',18,'F');
select * from teachers;

// 瞅瞅二进制日志
ll /mysql/data/logbin

// 查看完全备份文件
vim /data/all.sql        // 该备份文件 ( 记录着当时二进制文件的备份位置 )

如图:该行记录着 mysqldump 命令运行时

二进制日志文件 binlog 的起始位置这有助于我们恢复近期的二进制日志数据

MySQL 小技巧:删库跑路如何恢复_第1张图片

3) 直接"删库跑路"
systemctl stop mysqld
rm -rf /var/lib/mysql/*
4) 先导出有用处的二进制日志文件
# 查看二进制日志文件中记录的备份位置信息
cat /data/all.sql | grep '^-- CHANGE MASTER TO'

# 然后进入二进制日志文件存放目录
cd /mysql/data/logbin

# 从特定的二进制日志位置开始提取数据,并将结果保存到一个新的SQL文件中
# 将有用处的二进制日志信息都导入一个新的 sql 文件
# 也就是执行完完全备份命令后 ( 记录的二进制日志内容 )
mysqlbinlog --start-position=7667 mysql-bin.000002 > /data/binlog.sql

# 验证文件
vim /data/binlog.sql

5) 恢复数据库
systemctl start mysqld  # 启用数据库服务 ( 现在的数据库相当于是新安装的 )

set sql_log_bin=0;      # 先临时禁用二进制日志记录功能 ( 避免在恢复过程中产生更多的日志数据 )
source /data/all.sql    # 还原 mysqldump 数据库文件 ( 完全备份数据 )
source /data/binlog.sql # 还原 binlog 二进制日志数据
set sql_log_bin=1;      # 继续开启二进制日志功能

6) 验证数据库
use hellodb;
select * from teachers;

MySQL 小技巧:删库跑路如何恢复_第2张图片

你可能感兴趣的:(Linux,小技巧,mysql,数据库)