mysql数据备份与恢复实践(逻辑备份mysqldump)

备份

备份有两种类型,全量备份、增量备份

全量备份

mysqldump -uxxx -pxxx --single-transaction --flush-logs --master-data=2 --all-databases > /var/lib/mysql/backup_20220407_1002.sql

参数解释:
--single-transaction: 使用一致读取并保证 mysqldump 看到的数据不会改变(其它客户端可能在mysqldump执行期间执行变更)
--flush-logs:刷新binlog日志,重新生成新的binlog文件
--master-data=2:记录binlog日志到dump的sql文件中,以注释的形式存在
--all-databases:备份所有数据库

增量备份

开启binlog,mysql.cnf配置:

[mysqld]
...
log-bin=filename
server-id=1

会在/var/lib/mysql目录下生成类似filename-bin.00001的二进制文件

恢复

全量恢复

mysql -uxxx -pxxx < /var/lib/mysql/backup_20220407_1002.sql

增量恢复

mysqlbinlog -uxxx -pxxx xxx-bin.xxx xxx-bin.xxx | mysql -uxxx -pxxx

可以指定多个binlog文件

时间点恢复

binlog日志事件格式:

// at后面的数字表示事件在二进制日志文件中的文件偏移量或起始位置
# at 141

//日期时间开头
// server id 是事件发起的源服务器的值
// end_log_pos 表示下一个事件的开始位置(当前事件结束位置+1)
// thread_id 表示哪个线程执行了事件
// exec_time 在复制源服务器上执行事件所花费的时间,在副本上,它是副本上的结束执行时间减去源上的开始执行时间的差
// error_code 表示执行事件的结果,0表示没有发生错误
#220407 10:08:08 server id end_log_pos 328 CRC32 0x765b4e59  Query   thread_id=3     exec_time=0     error_code=0

通过mysqlbinlog查找日志的关键位置,可以找出事件发生的时间,根据具体时间去恢复即可。
时间点恢复命令:

mysqlbinlog -uxxx -pxxx --start-datetime="2022-04-07 00:00:00" --stop-datetime="2022-04-07 12:00:00" /var/lib/mysql/xxx-bin.xxx --verbose | mysql -uxxx -pxxx

事件偏移位置恢复命令:

mysqlbinlog -uxxx -pxxx --start-position=155 --stop-position=233 /var/lib/mysq/xxx-bin.xxx | mysql -uxxx -pxxx

这里的position就是日志文件中的# at后的数值

扩展

docker执行容器内命令
docker exec -it 容器ID /bin/bash -c “容器内命令”

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

来了就走下去

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值