mysql异地备份数据库
前一篇文章《windows服务器应用系统自动备份策略》讲到了mysql数据库本地备份策略,如果觉得备份到服务器上不够安全,防止服务器意外硬件损坏致使备份也丢失。那么可以采取异地备份,网上很多windo...
2024.11.15需求:模拟生产数据库故障,恢复到故障前一秒
场景:有一份初始备份和后面的binlog,早上9点故障,然后直接拿所有的备份和binlog到另外一台服务器做恢复,按备份文件和备份文件记录的位置+最后8.59分的时间之间的binlog恢复。
下面使用mysqldump+binlog来测试备份与恢复。
一、环境准备1、备份数据库(数据库实例为test)
mysqldump -u root -p test --single_transaction --flush-logs --master-data=2 > /backup/test-`date +"%Y%m%d-%H%M%S"`.sql;说明:
当master_data和 single_transaction 同时使用时,先加全局读锁,然后设置事务一致性和使用一致性快照开始事务,然后马上就取消锁,然后执行导出。过程如下
FLUSH TABLES WITH READ LOCKSET SESSION TRANSACTION ISOLATION LEVEL REPEATABLE READSTART TRANSACTION /*!40100 WITH CONSISTENT SNAPSHOT */SHOW MASTER STATUS -- 这一步就是取出 binlog index and positionUNLOCK TABLES...dump...如果需要binlog信息则使用 master_data;
如果不想阻塞同时表是innodb引擎可使用 single_transaction 取得一致性快照(取出的数据是导出开始时刻事务点的状态)
如果表不支持多版本特性,则只能使用 lock-all-tables 阻塞方式来保证一致性的导出数据。
2、向表中插入数据
show master status\G;use test;create table tb1(id int);insert into tb1 values (10),(20),(30);select * from tb1;二、模拟故障1、继续插入数据,在有备份的情况下删除数据库,模拟误操作
use test;insert into tb1 values (40),(50);drop database test;show databases;此时查看数据库发现test库就没有了。
三、恢复前准备1、查看binlog
获取备份文件和故障前最新的binlog
mysqlbinlog --base64-output=decode-rows -v --start-datetime="2019-09-11 15:00:00" --stop-datetime="2019-09-11 16:00:00" mysql-bin.000005说明:配置文件使用了binlog_format= row,查看数据库binlog内容时候就看不到增删改查的具体语句,都是经过64位编码转换后的内容,所以需要加参数--base64-output=decode-rows转换。
2、导出故障前的binlog日志并输出为sql文件
mysqlbinlog --start-position=154 --stop-position=10189 -d test mysql-bin.000005 > /backup/binlog-`date +"%Y%m%d-%H%M%S"`.sql也可以用初始位置+最后时间来恢复:
mysqlbinlog --start-position=154 --stop-datetime="xxx" -d test mysql-bin.000005 > /backup/binlog-`date +"%Y%m%d-%H%M%S"`.sql
四、开始恢复导入之前的所有备份文件及binlog文件
mysql -uroot -p test < /backup/test-20190911-153754.sql mysql -uroot -p test < /backup/binlog-20190911-171045.sql五、验证到此数据成功全部恢复!
觉得有用的朋友多帮忙转发哦!后面会分享更多devops和DBA方面的内容,感兴趣的朋友可以关注下~
前一篇文章《windows服务器应用系统自动备份策略》讲到了mysql数据库本地备份策略,如果觉得备份到服务器上不够安全,防止服务器意外硬件损坏致使备份也丢失。那么可以采取异地备份,网上很多windo...
2024.11.15现在是个科技高度发达的时代,我们早已习惯于用手机、电脑来解决生活中的各种问题。作为教师,我们的工作也变得越来越智能化,其中最为实用的一个工具就是查询系统。下面,就让我来详细解释一下,如何使用各种代码、...
2024.11.12建立存储过程,存储过程的名字 dele_src_data按照update_tiem字段删除过期数据use test_db;delimiter //create procedure dele_src_d...
2024.11.15前言数据迁移、恢复,就要用到备份了。使用mysqldump导出来的基本都是sql数据句,可以直接使用mysql命令还原数据。1、恢复到指定数据库mysql -hhostname -uusername ...
2024.11.13一:创建新的数据库、用户并授权以创建wordpress网站的数据库为例1、创建数据库创建可指定字符,或者不指定字符,如果不指定字符,默认为 utf8mb4 和 utf8mb4_0900_ai_ci ...
2024.11.15