备份分为逻辑备份和物理备份
逻辑备份:是备份sql,耗时较长

为什么要进行备份?

简单点说,硬盘损坏,人为误操作都会造成数据的丢失,这种后果往往是极为严重的,所以要通过备份减少风险。

备份分为什么方式?

  • 备份分为全量备份和增量备份
    全量备份:对整个数据库进行备份,数据是完整的。
    增量备份:对某一个节点之后的数据进行备份,只备份该节点后的少量数据。

如何进行全量备份?

全量备份可使用mysqldump进行备份,mysqldump不仅可以备份整个库,也可以对某个表进行备份。在备份之前,我们先了解下mysqldump参数和用法。

mysqldump的常用参数(OPTOINS):

-u:为指定用户名-p:为指定密码--single-transaction:Innodb下使用,为在备份之前启动一个事务,来保证数据的一致性,
不过要确保没有其他DDL操作在执行,因为Innodb隔离级别无法对ddl进行隔离-l:即--lock-tables,非事务引擎下使用,把一个database下的所有表锁起来保证事务一致性-x:即--lock-all-tables,对一个实例下的所有的database进行加锁,来保证数据一致性,这时数据库只能读不能写--master-data=[1/2]:为1时只记录了change master语句,为2时change master语句以备份方式存储在文件中,
使用该参数时,不指定--single-transaction的情况下,会默认使用--lock-all-tables-R,-routines:备份数据库中存在的存储过程--triggers:备份数据库中所存在的触发器-E,–events:备份数据库中的调度事件--hex-blob:以16进制的形式来保存-tab=path:path为指定路径,使用该参数后会在该路径下生成两个文件,一个存储表结构,一个存储表数据-w,–where=:即where条件,用于导出指定条件的数据,不过只支持单表导出

mysqldump备份语法:

  • 对所有的库进行备份
mysqldump [OPTOINS] --all-databases [OPTOINS]
  • 对一个或多个库进行备份
mysqldump [OPTIONS] --databases [OPTIONS] db1 db2...
  • 对一个或多个表进行备份
mysqldump [OPTIONS] database_name table_name1 table_name2...

备份前准备

  • 创建备份用户
create user 'backupUser'@'localhost' identified by '密码';
  • 赋权
grant select,reload,lock tables,replication client,show view,event,process,file on *.* to 'backupUser'@'localhost';
  • 刷新权限
flush privileges;
  • 创建用于存放备份文件的文件夹
    注意:备份时需要在linux命令行下执行(即写shell脚本),而不是在mysql命令行下执行
cd /usr/local/
mkdir backupData

开始备份

首先进入备份文件夹

cd /usr/local/backupData
1.对全部数据库进行备份

对一台主机下的全部数据库进行备份,并将内容备份到allBase_backupData.sql中

mysqldump -ubackupUser -p --master-data=1 --single-transaction --routines --triggers --events --all-databases > allBase_backupData.sql

因为指定了–master-data=1,所以备份生成的文件中change master没有被注释

  • 查看备份内容:
    最好使用more命令进行查看,按enter键即可逐行查看内容,使用/+关键字可直接定位到关键字位置(如/CREATE)
more allBase_backupData.sql
  • 查看备份是否完整
    举个查看数据库的例子,存储过程等自己根据关键字自己查看
grep 'Current Database' allBase_backupData.sql

2.对指定数据库进行备份
  • 对秒杀库miaosha进行备份,并将数据备份到本目录下的miaosha_backupData.sql文件中
    除了备份表结构和数据外,还备份: --routines为备份事务 --triggers为备份触发器 --events为备份调度事件
mysqldump -ubackupUser -p --master-data=2 --single-transaction --routines --triggers --events miaosha > miaosha_backupData.sql

因为指定了–master-data=2,所以备份生成的文件中change master会被注释

  • 查看备份内容:
    最好使用more命令进行查看,按enter键即可逐行查看内容,使用/+关键字可直接定位到关键字位置(如/CREATE)
more miaosha_backupData.sql
  • 查看备份是否完整
    举个查看表结构的例子,存储过程等自己根据关键字自己查看
grep 'CREATE TABLE' miaosha_backupData.sql

3.对指定表进行备份

对miaosha库下的goods表和user表进行备份(备份多个表需用空格分开)

mysqldump -ubackupUser -p --master-data=2 --single-transaction --routines --triggers --events miaosha goods user > table_backupData.sql
4.使用-tab备份到指定目录

备份到指定目录需要用到 -tab 参数

  • 1.指定目录备份之前先查看secure_file_priv配置的路径,这个参数是来限制导入导出能在哪个文件夹下执行
    当secure_file_priv的值为null ,表示不允许导入导出
    当secure_file_priv的值为/var/lib/mysql-files/ ,表示导入导出只能发生在/var/lib/mysql-files/ 目录下
    当secure_file_priv的值为空时,表示不对导入导出做限制
show global variables like '%secure%';

我这里修改了默认值/var/lib/mysql-files/ ,重新指定了路径

  • 2.如何修改secure_file_priv?
    编辑mysql的my.cnf文件,添加secure_file_priv=路径
vim /etc/my.cnf
#最后面添加,路径自行修改
secure_file_priv=/usr/local/backupData/miaosha_db/
  • 3.需要注意的是,backupUser需要有写文件的权限(即file权限),上面赋权已经给了,没有请赋权.
grant file on *.* to 'backupUser'@'localhost';
  • 4.还需要注意的是linux的登录者需要对指定的目录有操作权限
cd /usr/local/backupData/
chown mysql:mysql miaosha_db
  • 5.开始备份
mysqldump -ubackupUser -p --master-data=2 --single-transaction --routines --triggers --events --tab='/usr/local/backupData/miaosha_db' miaosha

因为使用了-tab,查看miaosha_db下的文件,可以看到每个表都有两个文件,一个sql文件存表结构,一个txt文件存数据

5.根据where条件备份表中的指定内容

–where 后面指定条件即可,需指定哪个库的哪个表

mysqldump -ubackupUser -p --master-data=2 --single-transaction --where 'id > 100 and id < 400' miaosha goods > goods_backupData.sql

如何进行增量备份?

增量备份可以使用binlog来实现,binlog是Mysql产生的二进制文件,记录了数据库变更的SQL信息,并保存了具体的时间节点,所以我们可以使用binlog对某一时间节点到另一时间节点之间的数据进行备份。
binlog增量备份实际上是模拟了mysql复制的一个进程,是通过slave的io进程来进行binlog日志实时获取的。

  • 创建拥有replication slave权限的账号
create user 'slaveUser'@'localhost' identified by '密码';
  • 赋权replication slave权限
grant replication slave on *.* to 'slaveUser'@'localhost';
  • 创建存放binlog的文件夹
mkdir backup_binlog
cd backup_binlog
  • 进行增量备份
    binlog.000006表示从binlog.000006开始备份,前面的不进行备份
#--raw 输出的是一个 raw 格式的二进制日志
#--read-from-remote-server 从 MySQL 服务器读取日志
#--stop-never 表示不会停止,一直在后台进行实时备份
mysqlbinlog --raw --read-from-remote-server --stop-never --host localhost --port 3306 -uslaveUser -p密码 binlog.000006

此时该备份会作为一个子线程运行,不会中断

  • 查看是否成功进行增量备份
#刷新日志
flush logs;
#查看二进制日志
show binary logs;
#进入我们创建的binlog文件夹
cd /var/lib/mysql/backup_binlog
#查看文件夹内是否有备份文件
ll

删库不跑路之MySQL数据库备份相关推荐

  1. 删库不跑路,MySQL 数据库恢复教程

    在工作中,我们误删数据或者数据库,我们一定需要跑路吗?我看未必,程序员一定要学会自救,神不知鬼不觉的将数据找回. 在 MySQL 数据库中,我们知道 binlog 日志记录了我们对数据库的所有操作,所 ...

  2. 【从删库到跑路】MySQL数据库的索引(一)——索引的结构(BTree B+Tree Hash),语法等

  3. mysql数据库从删库到跑路之mysql完整性约束

    一 介绍 约束条件与数据类型的宽度一样,都是可选参数 作用:用于保证数据的完整性和一致性 主要分为: PRIMARY KEY (PK) 标识该字段为该表的主键,可以唯一的标识记录 FOREIGN KE ...

  4. mysql数据库从删库到跑路之mysql多表查询

    一 介绍 本节主题 多表连接查询 复合条件连接查询 子查询 准备表 company.employee company.department #建表 create table department( i ...

  5. 删库不必跑路,谈数据库删除设计

    作者:杜哥 原文链接:https://my.oschina.net/yangyishe/blog/3138204 1 常见删除策略 凡是做业务逻辑系统, 总是离不开对删除逻辑的处理. 本文论述重点是伪 ...

  6. mysqldump全量恢复_删库不跑路-详解MySQL数据恢复

    日常工作中,总会有因手抖.写错条件.写错表名.错连生产库造成的误删库表和数据的事情发生,那么,如果连数据都恢复不了,还要什么 DBA. 相关文章 MySQL备份策略:https://segmentfa ...

  7. mysql高级-15-数据库备份与恢复(删库不跑路)

    mysql高级 前言 1.物理备份与逻辑备份 2.mysqldump实现逻辑备份 2.1 备份一个数据库 2.2 备份全部数据库 2.3 备份部分数据库 2.4 备份部分表 2.5 备份单表的部分数据 ...

  8. MySQL从删库到跑路(2):大爷的SQL私房菜

    大爷的SQL私房菜 夜色如墨,月凉如水,一轮皎洁的圆月高高地挂在夜空之上,平日里鼾声如雷的室友今夜也停止了打鼾,如此静谧的夜晚,李有为却辗转难眠. 时间悄然来到凌晨一点半,他已经在窗边站了53分钟23 ...

  9. 从删库到跑路,就是这么迅速!程序员为了报复同事删了公司数据库

    从删库到跑路,就是这么迅速!程序员为了报复同事删了公司数据库 一只有头发的程序猿 2019-08-23 09:38 做过互联网行业的都知道,数据库对公司是至关重要的,存储了大量的数据在里面,要是没有这 ...

最新文章

  1. java基础国庆作业_java程序设计国庆作业
  2. 【错误记录】编译 ijkplayer 报错 (fatal error: ijksoundtouch/ijksoundtouch_wrap.h: No such file or directory )
  3. 教你如何搭建虚拟专用网连接 OPEN***
  4. iap如何初始化_IAP超级详解
  5. SAP Spartacus 的页面设计思路
  6. udp接受_UDP协议-看这篇就够了
  7. Swiper.js wap app 图片滑动效果
  8. 用户数据销售额分析动态大屏看板+大屏数据可视化图表组件(折线图+圆柱图+散点图+饼图+漏斗图+雷达图+水位图)+智能web端高保真大数据动态可视化大屏看板+中国动态地图+智慧电商实时动态数据大屏看板
  9. flex 布局,flex-grow 宽度未等比放大问题解决办法
  10. 【STL】List基础
  11. HTML元素分类【三种类型】
  12. python计算地球重量_python – 在Tensorflow中使用Earth Mover的Distance作为损失函数
  13. win10定时关机c语言,win10 定时关机命令怎么设置_win10怎么设置定时关机指令-win7之家...
  14. 雷电2接口_Steinberg 发布旗舰级 32 bit / 384 kHz 雷电 2 音频接口 AXR4
  15. rs232与db9接线方式
  16. SpringCloud分布式开发理解
  17. 微信小程序实现音乐搜索页面
  18. 51单片机DS18B20测温LCD12864显示
  19. Day08——字符串匹配、小结
  20. 怎么将hashmap的数据传递给js_将Excel数据信息传递给Powerpoint应用

热门文章

  1. HDUOJ 2191 悼念512汶川大地震遇难同胞——珍惜现在,感恩生活
  2. 学好英语的20个经典要诀(转)
  3. java类名混淆_如何告诉Proguard混淆类名
  4. 电子商务若干关键问题的分析
  5. Xgboost回归四种调参方法及Python简单实现
  6. 基于JAVA校园摄影爱好者交流网站计算机毕业设计源码+系统+数据库+lw文档+部署
  7. emergency和urgency的区别_请教与切磋:Hypertensive urgency和hypertensive emergency翻译
  8. RenderScript:简单实现动态模糊效果
  9. 360公司董事长周鸿祎做客腾讯科技《新产品经理》系列访谈
  10. ScheduledExecutorService定时任务停止问题