《MySQL数据库》MySQL备份恢复
前言
MySQL数据库最重要的部分就是数据,所以保证数据不被损坏尤为重要,大家都知道911事件,当时非常多的数据丢失,导致经济混乱。接下来我们就来讲讲MySQL是如何保障数据完整,应对特殊情况,如何恢复等。
备份
备份检查:保证备份没有问题,并且定期演练恢复数据。
备份方式:逻辑备份,物理备份。
逻辑备份方式:mysqldump(MDP),replication,mydumper,load data in file。
物理备份方式:MySQL Enterprise Backup(企业版) , percona Xtrabackup (PBK,XBP)
1. mysqldump(MDP)
InnoDB 可以使用快照备份,通过建库,建表,插入语句备份数据。
非Innodb 表备份需要锁表, 非Innodb 表主要是MySQL系统表。
参数说明:
mysqldump 需要连接到数据库,连接方式和mysql 一致。
创建备份目录
mkdir -p backup -- linux 下执行创建文件夹
chown -R mysql.mysql /usr/local/mysql/backup -- linux 下执行赋权
备份命令:
mysqldump -uroot -proot -A > /usr/local/mysql/backup/mysqlbackup.sql -- -A 备份全库的意思

备份多库
mysqldump -u cop -p -B cop copdb > copdb1.sql -- -B参数导出多个库。
备份某些表
mysqldump -uroot -proot castledata test test1 > /usr/local/mysql/backup/mysqlbackup1.sql -- 导出一张表的结构和数据:castledata 库名;cop_toperator,cop_tsys是表名。
其实这个时候你会发现一个问题,库备份了,但是数据还是会继续操作的,真的出现误删除数据库,如何才能完整的恢复呢。
第一反应就是 备份加binlog ,但是binlog的开始位置点却不好找, 如何才能准确无误的找到这个开始位置点呢?
重点:
--master-data=2 -- 2:表示会再备份文件中加入一句注释,写下binlog文件和开始位置点。 默认是0。
mysqldump -uroot -proot --master-data=2 castledata test test1 > /usr/local/mysql/backup/mysqlbackup2.sql -- 使用上面的参数备份

mysqldump -uroot -proot -F -B castledata > /usr/local/mysql/backup/mysqlbackup3.sql
-F 参数是备份的时候切一个新的binlog日志。
--single-transaction 开启事务,获取快照,对innodb存储引擎有效。
-R 备份存储过程及函数
--triggers 备份触发器
-E 备份事件
--max_allowed_packet 客户发数据包到服务端的大小,备份的是表示服务端发到客户端的大小
完整生产备份语句:
mysqldump -uroot -proot -R --triggers -E --single-transaction --master-data=2 --max_allowed_packet=64 -B castledata > /usr/local/mysql/backup/mysqlbackup5.sql
恢复
模拟备份到恢复的过程:
第一步准备原始数据:
create database backup;
use backup
create table t1 (id int);
insert into t1 values(1),(2),(3);
insert into t1 values(11),(22),(33);
insert into t1 values(111),(222),(333);
insert into t1 values(1111),(2222),(3333);
insert into t1 values(11111),(22222),(33333);
commit;
第二步备份数据:
mysqldump -uroot -proot -R --triggers -E --single-transaction --master-data=2 --max_allowed_packet=64 -B backup > /usr/local/mysql/backup/mysqlbackup_`date +%F `.sql
第三步模拟后续数据操作:
create table t2 (id int);
insert into t2 values(1),(2),(3);
insert into t2 values(11),(22),(33);
insert into t2 values(111),(222),(333);
insert into t2 values(1111),(2222),(3333);
insert into t2 values(11111),(22222),(33333);
commit;
第四步逻辑操作出错:
drop database backup;
第五步恢复数据:
1. 获取最近一次备份文件中的binlog 起点信息:

binlog 日志原理:https://www.cnblogs.com/jssj/p/13472394.html
2.恢复备份数据
set sql_log_bin = 0;
source /usr/local/mysql/backup/mysqlbackup_2020-08-18.sql;
set sql_log_bin = 1;
3. 截取binlog
起点:在第一步中已经获取, 终点:使用命令 " show binlog events in 'mysql-bin.000005' ; " 查询

取 3362 即可。 执行一下命令截取
mysqlbinlog --start-position=1861 --stop-position=3362 /usr/local/mysql/binlog/mysql-bin.000005 > /usr/local/mysql/backup_binlog.sql
4. 恢复binlog 日志
set sql_log_bin = 0;
source /usr/local/mysql/backup_binlog.sql;
set sql_log_bin = 1;
ok 恢复失败。binlog的恢复。原因为我们开启了GTID 所以截取命令需要加入 参数 --skip-gtids 。 不校验GTID号。
重新截取binlog:
mysqlbinlog --skip-gtids --start-position=1861 --stop-position=3362 /usr/local/mysql/binlog/mysql-bin.000005 > /usr/local/mysql/backup_binlog.sql
set sql_log_bin = 0;
source /usr/local/mysql/backup_binlog.sql;
set sql_log_bin = 1;
ok 恢复成功。验证数据。

额外扩展:从全备中获取单库,创建表,插入数据
1、获得表结构
# sed -e'/./{H;$!d;}' -e 'x;/CREATE TABLE `city`/!d;q' full.sql>createtable.sql
2、获得INSERT INTO 语句,用于数据的恢复
# grep -i 'INSERT INTO `city`' full.sqll >data.sql &
3.获取单库的备份
# sed -n '/^-- Current Database: `world`/,/^-- Current Database: `/p' all.sql >world.sql
总结
上面讲的都是逻辑备份,MySQL还可以支持物理备份,可以使用工具Percona-XtraBackup 来实现。
《MySQL数据库》MySQL备份恢复的更多相关文章
- MySQL 备份恢复(导入导出)单个 innodb表
MySQL 备份恢复单个innodb表呢,对于这种恢复我们我们很多朋友都不怎么了解了,下面一起来看一篇关于MySQL 备份恢复单个innodb表的教程 在实际环境中,时不时需要备份恢复单个或多个表(注 ...
- MySQL备份恢复-mysqldump原理
+++++++++++++++++++++++++++++++++++++++++++标题:mysqldump对MySQL数据库备份恢复原理时间:2019年2月23日内容:mysqldump工具重点: ...
- [svc]mysql备份恢复及常用命令
如何实现mysql读写分离 1.通过程序实现读写分类(性能 效率最佳) php和java都可以通过设置多个连接文件轻松实现对db的读写分离,即当select时,就去连读库的连接文件,当update,i ...
- mysql备份恢复详解
前言 为什么需要备份数据? 数据的备份类型 MySQL备份数据的方式 备份需要考虑的问题 设计合适的备份策略 实战演练 使用cp进行备份 使用mysqldump+复制BINARY LOG备份 使用lv ...
- (转)解锁MySQL备份恢复的4种正确姿势
本文根据DBAplus社群第104期线上分享整理而成. 原文:http://dbaplus.cn/news-11-1267-1.html 讲师介绍 冯帅 点融网高级DBA 获有Oracle OCM ...
- MySQL备份恢复全实战
一. 简介 1. 增量备份 增量备份是指在一次全备份或上一次增量备份后,以后每次的备份只需备份与前一次相比增加或者被修改的文件.这就意味着,第一次增量 备份的对象是进行全备后所产生的增加和修改的文件; ...
- Mysql备份恢复方案解析
1.全量备份和增量备份 1.1全量备份 就是对现有的数据进行全部备份,之前做的备份均可舍弃,以最新的全备为基点. a.全备所有数据库 Innodb引擎: [root@leader mysql]#mys ...
- mysql导出csv/sql/newTable/txt的方法,mysql的导入txt/sql方法...mysql备份恢复mysqlhotcopy、二进制日志binlog、直接备份文件、备份策略、灾难恢复.....................................................
mysql备份表结构和数据 方法一. Create table new_table_nam备份到新表:MYSQL不支持: Select * Into new_table_name from old_t ...
- mysql备份恢复
备份命令: mysqldump -u root -p --opt 数据库名 > /data/数据库文件名.sql 恢复命令: mysql -u root -p 数据库名</data/恢复的 ...
- Linux下mysql备份 恢复
转载自http://blog.chinaunix.net/uid-20577907-id-161611.html 比如我们要备份mysql中已经存在的名为linux的数据库,要用到命令mysqldum ...
随机推荐
- UOJ #310 黎明前的巧克力 FWT dp
LINK:黎明前的巧克力 我发现 很多难的FWT的题 都和方程有关. 上次那个西行寺无余涅槃 也是各种解方程...(不过这个题至今还未理解. 考虑dp 容易想到f[i][j][k]表示 第一个人得到巧 ...
- [POJ3783]Balls 题解
题目大意 鹰蛋问题.$ n\(个蛋,\)m\(层楼. 存在一层楼\)E\(,使得\)E\(以及\)E\(以下的楼层鹰蛋都不会摔碎,问最坏情况下最少多少次能够知道\)E$. 非常经典的模型,初看题目根本 ...
- C#LeetCode刷题之#15-三数之和(3Sum)
目录 问题 示例 分析 问题 该文章的最新版本已迁移至个人博客[比特飞],单击链接 https://www.byteflying.com/archives/3618 访问. 给定一个包含 n 个整数的 ...
- C#LeetCode刷题-二分查找
二分查找篇 # 题名 刷题 通过率 难度 4 两个排序数组的中位数 C#LeetCode刷题之#4-两个排序数组的中位数(Median of Two Sorted Arrays)-该题未达最优解 30 ...
- C#LeetCode刷题之#136-只出现一次的数字(Single Number)
问题 该文章的最新版本已迁移至个人博客[比特飞],单击链接 https://www.byteflying.com/archives/4046 访问. 给定一个非空整数数组,除了某个元素只出现一次以外, ...
- Centos+Nginx部署Vue项目
1.项目打包生成dist文件夹 在项目根目录下打开cmd窗口,输入命令 npm run build //生成dist文件夹 2.将dist文件夹上传到centos7 使用scp命令或者用远程连接工具将 ...
- HTML基础-03
盒子模型 盒子模型(框模型 box model) - 浏览器在渲染页面时,它会将页面中的每一个元素都想象成是一个矩形的盒子. - 想象成盒子以后,对于页面的布局就变成了如何摆放盒子 - 每一个盒子从内 ...
- C++ STL sort 函数的用法
sort 在 STL 库中是排序函数,有时冒泡.选择等 $\mathcal O(n^2)$ 算法会超时时,我们可以使用 STL 中的快速排序函数 $\mathcal O(n \ log \ n)$ 完 ...
- 还不会springboot,阿里p8大牛一份385页pdf直接甩在脸上,给我啃
第一章 Java EE简介 Java EE 有相应的规范实现,包括但不限于: Web 支持 事务支持 消息服务 数据库持久层 Container JWS JAX-RS JNDI JAXP/JAXB J ...
- 【算法•日更•第五十七期】快速傅里叶变换(FFT):从入门到放弃
▎一些用的上的东西 小编太菜了,很多东西都不会证明(主要是三角函数还没有学啊~~~). 附上链接https://blog.csdn.net/enjoy_pascal/article/details/8 ...