MySQL数据恢复-亲测有效版
- 1.日志恢复的前提:
- 1.1.登录远程MySQL服务器:
- 1.2.查看binlog是否开启:
- 2.查看binlog存放日志文件目录:
- 3.找到mysqlbinlog命令
- 4.设置mysqlbinlog命令为全局可见
- 5.使用mysqlbinlog解析binlog日志
- 6.数据恢复
- 7.mysqlbinlog其他组合命令
1.日志恢复的前提:
本次实验是基于MySQL的binlog,因此我们需要检查MySQL是否开启了binlog选项,步骤如下:
1.1.登录远程MySQL服务器:
mysql -u 用户名 -h 主机地址 -P 端口 -p密码
1.2.查看binlog是否开启:
show variables like '%log_bin%';
如果没有开启,那么也许真的无能为力了,只能现在开启,保证以后了。
2.查看binlog存放日志文件目录:
show variables like '%datadir%';
进入存放binlog的目录(先退出MySQL服务器):
3.找到mysqlbinlog命令
whereis mysqlbinlog
博主用这个找不到
但是博主经过搜集资料后在/www/server/mysql/bin
这个目录找到了
4.设置mysqlbinlog命令为全局可见
如果你的mysqlbinlog在任何目录下都能用或者你不嫌使用mysqlbinlog存放目录/mysqlbinlog
这条命令去解析binlog日志,此步可以忽略。
cd /usr/local/bin
ln -s /www/server/mysql/bin/mysqlbinlog mysqlbinlog
我是通过映射设置的,不确定复制这个命令到Linux默认搜寻路径是不是也有用,不过值得尝试。
5.使用mysqlbinlog解析binlog日志
#单库整库输出
mysqlbinlog --no-defaults --database=数据库名 --start-datetime="2023-04-01 00:00:00" --stop-datetime="2023-04-13 00:00:00" /www/server/data/mysql-bin.000005 > 自定义输出文件名.txt
#单库控制台输出
mysqlbinlog --no-defaults --database=数据库名 --start-datetime="2023-04-01 00:00:00" --stop-datetime="2023-04-13 00:00:00" /www/server/data/mysql-bin.000005 |more
#单库某表输出
mysqlbinlog --no-defaults --database=数据库名 --start-datetime="2023-04-01 00:00:00" --stop-datetime="2023-04-13 00:00:00" /data/mysql/mysql-bin.000005 | grep 表名 > 自定义输出文件名.txt
输出文件的部分内容:
6.数据恢复
利用第四步输出的sql语句或者txt文本进行语句过滤,重新插入数据或更新数据。
7.mysqlbinlog其他组合命令
mysqlbinlog 命令的语法格式:
mysqlbinlog mysql-bin.0000xx | mysql -u用户名 -p密码 数据库名
常用参数选项解释:
--start-position=875 起始pos点
--stop-position=954 结束pos点
--start-datetime="2023-04-01 00:00:00" 起始时间点
--stop-datetime="2023-04-13 00:00:00" 结束时间点
--database=xxx指定只恢复xxx数据库(一台主机上往往有多个数据库,只限本地log日志)
不常用选项:
-u --user=name 连接到远程主机的用户名
-p --password[=name] 连接到远程主机的密码
-h --host=name 从远程主机上获取binlog日志
--read-from-remote-server 从某个MySQL服务器上读取binlog日志