方法一:
使用 mysqlbinlog 到处指定时间段(单个 binlog),指定库的脚本
【人工检测】使用以下脚本可以确定查看对应转出内容是否正确
mysqlbinlog --start-datetime="2020-05-06 14:48:16" --stop-datetime="2020-05-06
15:24:18" --base64-output=DECODE-ROWS -vv --skip-gtids mysql-bin.000006
--database=test > test_single.sql
【线上恢复】使用以下脚本用于恢复
--database=demo1 仅导出指定需要恢复的数据库
--start-datetime --stop-datetime 开始时间,结束时间
--start-position --stop-position 开始 position,结束 position
mysqlbinlog --start-datetime="2020-05-06 14:48:16" --stop-datetime="2020-05-06
15:14:18" --skip-gtids mysql-bin.000006 --database=test > test_single.sql
使用 mysqlbinlog 到处指定时间段(多个 binlog),指定库的脚本
【线上恢复】使用以下脚本用于恢复
mysqlbinlog --start-datetime="2020-05-06 14:48:16" --stop-datetime="2020-05-06
15:14:18" --skip-gtids mysql-bin.000005 mysql-bin.000006 --database=test >
test_single.sql
①全量恢复
mysql -uroot -p < /opt/software/all.sql
②通过 binlog 增量追加
mysql -uroot -p < /opt/software/test_single.sql;
③导出误删除的表
mysqldump -uroot -p --set-gtid-purged=OFF --single-transaction test t>
/tmp/t.sql
④导入到生产环境
mysql -uroot -p test < /tmp/t.sql
方法二:
使用 mysql --one_database 参数与--database 指定仅恢复的数据库(其他数据库忽略),进行恢复
注:5.7.22 及以上版本支持,针对于多个很大的数据库
mysql -uroot -p --one-database --database=test
mysql> use test;
Database changed
mysql> source /opt/software/all.sql;
方法三:
使用 sed 对逻辑备份(mysqldump)的脚本进行恢复操作
恢复单库脚本
sed -n '/^-- Current Database: `dbname`/,/^-- Current Database: `/p' 备份文件
_2019_06_12.sql > 过滤出的文件.sql
sed -n '/^-- Current Database: `test`/,/^-- Current Database: `/p' all.sql >
test.sql
恢复单表脚本
sed -n '/^-- Current Database: `dbname`/,/^-- Current Database: `/p' 备份文件
_2019_06_12.sql | sed -n '/^-- Table structure for table `tablename`/,/^--
Table structure for table `/p' > 过滤出的文件.sql
sed -n '/^-- Current Database: `test`/,/^-- Current Database: `/p' all.sql |
sed -n '/^-- Table structure for table `t`/,/^-- Table structure for table `/p'
> test_t.sql
评论