示例1:
只想恢复"小号"和"长号"(即恢复最后两行,第7~8行)
use yuji; delete from class where cid between 5 and 8; #删除cid为5到8的数据记录 cat /bak/binlog.txt #查看二进制文件内容,找到小号的位置点 #从小号的位置点3876一直恢复到结尾 mysqlbinlog --no-defaults --start-position='3876' /bak/mysql-bin.000003 | mysql -u root -p mysql -u root -p -e 'select * from yuji.class;' #查看表数据 复制代码
网络异常,图片无法展示
|
网络异常,图片无法展示
|
网络异常,图片无法展示
|
示例2:
只想恢复"竹笛"(即只恢复第5行)
use yuji; delete from class where cid between 5 and 8; #删除cid为5到8的数据记录 cat /bak/binlog.txt #查看二进制文件内容,找到竹笛后面的位置点 #从头开始恢复,在"竹笛"的SQL语句后面截止 mysqlbinlog --no-defaults --stop-position='3512' /bak/mysql-bin.000003 | mysql -u root -p mysql -u root -p -e 'select * from yuji.class;' #查看表数据 复制代码
网络异常,图片无法展示
|
网络异常,图片无法展示
|
示例3:
只想恢复"古琴"和"小号"(即只恢复第6~7行)
use yuji; delete from class where cid between 5 and 8; #删除cid为5到8的数据记录 cat /bak/binlog.txt #查看二进制文件内容,找到"古琴"和"小号"的位置点 #从“古琴”前面的位置点开始恢复,一直到"小号"后面的位置点 mysqlbinlog --no-defaults --start-position='3591' --stop-position='4082' /bak/mysql-bin.000003 | mysql -u root -p mysql -u root -p -e 'select * from yuji.class;' #查看表数据 复制代码
网络异常,图片无法展示
|
网络异常,图片无法展示
|
网络异常,图片无法展示
|
2)基于时间点的断点恢复
注意:日期必须是"yyyy-mm-dd"的格式。
mysqlbinlog --no-defaults --start-datetime='时间点' 文件名 | mysql -u root -p #从某一个时间点开始恢复,一直到日志结尾 mysqlbinlog --no-defaults --stop-datetime='时间点' 文件名 | mysql -u root -p #从日志开头,一直恢复到某一个时间点前结束 mysqlbinlog --no-defaults --start-datetime='起始时间点' --stop-datetime'结束时间点' 文件名 | mysql -u root -p #从某一个时间点开始恢复,一直到某一个位置点前结束 复制代码
示例:
只想恢复"古琴"和"小号"(即只恢复第6~7行)
use yuji; delete from class where cid between 5 and 8; #删除cid为5到8的数据记录 cat /bak/binlog.txt #查看二进制文件内容,找到"古琴"和"小号"的时间点 #从“古琴”前面的时间点开始恢复,一直到"小号"后面的时间点 mysqlbinlog --no-defaults --start-datetime='2022-06-06 0:18:26' --stop-datetime='2022-06-06 0:18:37' /bak/mysql-bin.000003 | mysql -u root -p mysql -u root -p -e 'select * from yuji.class;' #查看表数据 复制代码
网络异常,图片无法展示
|
网络异常,图片无法展示
|
网络异常,图片无法展示
|
八、使用脚本备份
- 使用脚本每周三进行一次完全备份,之后每天进行增量备份。
- 如果数据量很大,可以一周做2次完全备份,比如星期一和星期四各一次。
- 增量备份减少磁盘空间的占用,但恢复起来比较麻烦。需要一个一个恢复。
- 一般使用crontab在凌晨进行备份。
获取最新的二进制文件名称
查看索引文件,可获取最新的二进制文件。
tail -1 /usr/local/mysql/data/mysql-bin.index 或者 sed -n '$p' /usr/local/mysql/data/mysql-bin.index 复制代码
网络异常,图片无法展示
|
完全备份脚本(每周三完全备份一次):
vim /opt/mysqlquan.sh #编写脚本 #!/bin/bash mysqldump -u root -p123456 --all-databases > /bak/all_$(date +%F).sql chmod 700 /opt/mysqlquan.sh crontab -e #定时任务执行脚本 00 1 * * 3 /opt/mysqlquan.sh #每周三凌晨1点备份一次 复制代码
增量备份脚本(每天凌晨3点备份一次):
vim /opt/binlog.sh #!/bin/bash #使用sed命令打印二进制日志文件最后一行内容作为filename变量的值 filename=$(sed -n '$p' /usr/local/mysql/data/mysql-bin.index | awk -F '/' '{print $2}') #将二进制日志移动到备份目录下,并将移动后的文件名称加上日期 mv /usr/local/mysql/data/$filename /bak/binlog_$(date +%F) #生成新的二进制日志文件 mysqladmin -uroot -pabc123 flush-logs chmod 700 /opt/binlog.sh crontab -e 00 1 * * 3 /opt/mysqlquan.sh #完全备份,每周三凌晨1点备份一次 00 3 * * * /opt/binlog.sh #增量备份,每天凌晨3点备份一次