数据安全 - 数据备份

  • 一、数据库备份的概念
    • 1、数据库备份类型
    • 2、数据库备份方式
    • 3、数据库备份场景
  • 二、mysqldump命令备份单库或者多库
    • mysqldump使用语法:
  • 三、MySQL的数据恢复
    • 1、远程恢复数据(备份的数据文件里有创建库的语句):
    • 2、远程恢复数据(备份的数据文件里没有创建库的语句):
  • 四、物理备份
    • 1、看数据源文件路径(一)
    • 2、看数据源文件路径(二)
  • 五、利用二进制日志mysqlbinlog备份数据
    • 1、什么是二进制日志
    • 2、二进制日志可以做什么
    • 3、开启二进制日志会有什么损失?
    • 4、查看二进制日志是否开启
    • 5、开启二进制日志
    • 6、查看所有的binlog日志列表
    • 7、刷新二进制日志
    • 8、重置(清空)二进制日志文件
    • 9、使用mysqldump备份数据时,加上-F选项可以重新生成一个新的二进制日志文件
  • 六、利用二进制日志mysqlbinlog恢复数据
    • 1、查看二进制日志文件来恢复数据
    • 2、把二进制文件导出普通文件
    • 3、找出要恢复的位置
    • 4、恢复数据

一、数据库备份的概念

(1)保护数据的安全;
(2)在出现意外的时候(硬盘的损坏,断电,黑客的攻击),以便数据的恢复;
(3)导出生产的数据以便研发人员或者测试人员测试学习;
(4)高权限的人员操作失误导致数据丢失,以便恢复;

1、数据库备份类型

  • 完全备份(对整个数据库数据进行备份)
  • 部分备份(一张表或者多张表)
  • 增量备份:以上一次备份为基础,节约空间
  • 差异备份:以第一次完全备份的基础来变更备份,浪费空间

2、数据库备份方式

  • 逻辑备份:生成sql语句,还原时再进行执行sql。效率低,数据量大时尤其明显,但是逻辑备份占用空间小。
  • 物理备份:直接复制相关库文件 …/mysql/mydata。浪费空间,恢复相对较快

3、数据库备份场景

  • 热备份:在备份时,依然可以进行读写操作,业务不影响
  • 温备份:在备份时,可以执行读操作,不能写操作
  • 冷备份:在备份时,不能执行任何读写操作

二、mysqldump命令备份单库或者多库

mysqldump使用语法:

mysqldump -u 用户 -h host -p 密码 dbname table > 路径
-- 远程备份单库例子:
-- > 号相当于输出到哪个文件路径下
mysqldump -uroot -pabc123456 -h120.25.93.69 zabbix | gzip  > /mysql_data_back/zabbix_users.sql.gz-- 远程备份单库例子并保留创建库语句:
mysqldump -uroot -pabc123456 -h120.25.93.69 --databases zabbix | gzip
> /mysql_data_back/zabbix_bak.sql.gz-- 远程备份单库单表的例子:
-- 在库的后边加上表的名字
mysqldump -uroot -pabc123456 -h120.25.93.69 zabbix users | gzip
> /mysql_data_back/zabbix_users.sql.gz
--远程备份多库的例子:
-- databases选项,备份中是否包含了创建库表信息
mysqldump -uroot -pabc123456 -h120.25.93.69 --databases zabbix XD | gzip
> /mysql_data_back/zabbix_XD.sql.gz-- 远程备份全库的例子:需要加上--all-databases选项
mysqldump -uroot -pabc123456 -h120.25.93.69 --all-databases  | gzip  > /mysql_data_back/all.sql.gz

数据量不算大的时候,就用这个命令挺合适

不建议将执行复制任务的mysqldump命令 执行在 数据 所在的服务器

三、MySQL的数据恢复

1、远程恢复数据(备份的数据文件里有创建库的语句):

mysql -uroot -pabc123456 -h120.25.93.69  < zabbix_bak.sql

2、远程恢复数据(备份的数据文件里没有创建库的语句):

mysql -uroot -pabc123456 -h120.25.93.69  zabbix < zabbix_bak.sql

四、物理备份

1、看数据源文件路径(一)

mysql> show variables like 'datadir%';
+---------------+---------------+
| Variable_name | Value         |
+---------------+---------------+
| datadir       | /data/mydata/ |
+---------------+---------------+

2、看数据源文件路径(二)

cat /etc/my.cnf

MyISAM表源文件:

db.opt:创建库的时候生成,主要存储着当前库的默认字符集和字符校验规则
.frm :记录着表结构信息的文件
.MYI:记录着索引的文件
.MYD :记录着表的数据

InnoDB表源文件:InnoDB有着共享表空间跟独立表空间的概念。

db.opt:创建库的时候生成,主要存储着当前库的默认字符集和字符校验规则
.frm:记录着表结构信息的文件
.ibd:独立表空间,里边记录这个表的数据和索引
ibdata1:共享表空间,里边记录表的数据和索引

请求全局读锁:

flush tables with read lock;

解锁:

unlock tables;

五、利用二进制日志mysqlbinlog备份数据

1、什么是二进制日志

二进制日志就是记录着mysql数据库中的一些写入性操作,比如一些增删改,但是,不包括查询!

2、二进制日志可以做什么

一般情况下,二进制日志有着数据复制和数据恢复的功能

3、开启二进制日志会有什么损失?

开启二进制日志会有1%的性能消耗!

4、查看二进制日志是否开启

mysql> show variables like 'log_bin%';
+---------------------------------+-------+
| Variable_name                   | Value |
+---------------------------------+-------+
| log_bin                         | OFF   |

5、开启二进制日志

vi /etc/my.cnf[mysqld]
log-bin=/data/mydata/log_bin/mysql-bin
server-id=1

6、查看所有的binlog日志列表

mysql> show master logs;
+------------------+-----------+
| Log_name         | File_size |
+------------------+-----------+
| mysql-bin.000001 |     23638 |
+------------------+-----------+

7、刷新二进制日志

flush logs;

8、重置(清空)二进制日志文件

mysql> show master logs;
+------------------+-----------+
| Log_name         | File_size |
+------------------+-----------+
| mysql-bin.000001 |      1091 |
+------------------+-----------+

9、使用mysqldump备份数据时,加上-F选项可以重新生成一个新的二进制日志文件

mysqldump -uroot -p XD user -F  > user_bak.sql

六、利用二进制日志mysqlbinlog恢复数据

1、查看二进制日志文件来恢复数据

[root@qsr log_bin]# mysqlbinlog mysql-bin.000002
mysqlbinlog: [ERROR] unknown variable 'default-character-set=utf8'

解决:
1、在mysqlbinlog 后边加上 --no-defaults
2、注释掉配置文件里边的default-character-set=utf8

2、把二进制文件导出普通文件

 mysqlbinlog --base64-output=DECODE-ROWS -v mysql-bin.000002 > mysqlbin.sql

3、找出要恢复的位置

(1)找出关键字的行数:mysqlbinlog --no-defaults mysql-bin.000002 | cat -n  | grep -iw 'drop'[root@qsr log_bin]# mysqlbinlog --no-defaults mysql-bin.000002 | cat -n  | grep -iw 'drop'4180  DROP TABLE `user` /* generated by server */(2)打印出相关内容:mysqlbinlog --no-defaults mysql-bin.000002 | cat -n | sed -n '4170,4180p'[root@qsr log_bin]# mysqlbinlog --no-defaults mysql-bin.000002 | cat -n | sed -n '4170,4180p'4170  # at 595784171  #190419  0:41:48 server id 1  end_log_pos 59609 CRC32 0x36cda2b7        Xid = 63804172  COMMIT/*!*/;4173  # at 596094174  #190419  0:41:48 server id 1  end_log_pos 59674 CRC32 0x8de2f06a        Anonymous_GTID  last_committed=145      sequence_number=1464175  SET @@SESSION.GTID_NEXT= 'ANONYMOUS'/*!*/;4176  # at 596744177  #190419  0:41:48 server id 1  end_log_pos 59787 CRC32 0x6b2edd2b        Query   thread_id=14    exec_time=0     error_code=04178  use `XD`/*!*/;4179  SET TIMESTAMP=1555605708/*!*/;4180  DROP TABLE `user` /* generated by server */
[root@qsr log_bin]#

4、恢复数据

  • 第一步:把备份的数据表user恢复到数据库中:
mysql -uroot -p XD < /mysql_data_back/user_bak.sql
  • 第二步:利用上面找到的删除的位置进行恢复数据
mysqlbinlog --no-defaults --set-charset=utf8  --stop-position="59674" /data/mydata/log_bin/mysql-bin.000002 | mysql -uroot -p`

登录数据库查看数据是否恢复回来

MySQL学习笔记(七)—— 数据备份还原相关推荐

  1. mysql 权限 备份还原,MYSQL学习笔记09:备份还原,用户权限,外键

    在线QQ客服:1922638 专业的SQL Server.MySQL数据库同步软件 整个数据库数据备份也称为sql数据备份:备份的结果都是sql指令 在mysql中,提供了专门用于备份sql的客户端: ...

  2. MySQL学习笔记5||数据查询select

    备注:该博客内容根据技术教学视频整理与总结而成,原视频来自于尚硅谷MySQL教程. 一.基础查询 select from 语法:        SELECT 要查询的东西[FROM 表名]; 特点:  ...

  3. mysql没法修改数据_MySQL学习笔记之数据的增、删、改实现方法

    本文实例讲述了MySQL学习笔记之数据的增.删.改实现方法.分享给大家供大家参考,具体如下: 一.增加数据 插入代码格式: insert into 表明 [列名-] values (值-) creat ...

  4. mysql分页概念_MySQL学习笔记之数据定义表约束,分页方法总结

    本文实例讲述了MySQL学习笔记之数据定义表约束,分页方法.分享给大家供大家参考,具体如下: 1. primary key 主键 特点:主键是用于唯一标识一条记录的约束,一张表最多只能有一个主键,不能 ...

  5. MySQL学习笔记05【多表操作、三大范式、数据库的备份和还原】

    MySQL 文档-黑马程序员(腾讯微云):https://share.weiyun.com/RaCdIwas 1-MySQL基础.pdf.2-MySQL约束与设计.pdf.3-MySQL多表查询与事务 ...

  6. Mysql学习笔记(七)查(补充)

    Mysql学习笔记(七)查(补充) 原文:Mysql学习笔记(七)查(补充) PS:五一还是要学习...虽然有点苦逼..但是路是自己选的,那么自己就要坚持的走下去... 学习内容: 1.数据库查找的补 ...

  7. MySQL学习笔记8:权限管理、数据库备份与设计

    1.前言 学习视频源自:[狂神说Java]MySQL最新教程通俗易懂 B站视频链接:https://www.bilibili.com/video/BV1NJ411J79W [狂神说Java]MySQL ...

  8. Mysql学习笔记(二)——表格及数据的插入

    Mysql学习笔记(二)--表格及数据的插入 文章目录 Mysql学习笔记(二)--表格及数据的插入 1.Mysql常用指令 2.创建表格 A.数据类型 B.完整性约束条件 3.查看表格 4.修改表格 ...

  9. MYSQL学习笔记(自用)第七章

    MYSQL学习笔记(自用)第七章 第一节.创建视图| Creating Views USE sql_invoicing;CREATE VIEW sales_by_client AS SELECT c. ...

  10. MySQL学习笔记-约束以及修改数据表

    MySQL学习笔记-约束以及修改数据表 约束: 按功能划为: NOT NULL , PRIMARY KEY , UNIQUE KEY , DEFAULT , FOREIGN KEY 按数据列的数目划为 ...

最新文章

  1. 香港大学工程学院计算机教授,香港大学郑振刚教授访问软件园校区
  2. java web项目使用log4j的使用笔记
  3. 【Android View绘制之旅】Draw过程
  4. java 大臣的旅费_PREV-9-蓝桥杯-历届试题-大臣的旅费-java
  5. 成功解决AttributeError: module 'tensorflow.python.ops.nn' has no attribute '_seq2seq'
  6. 吴恩达 coursera ML 第三课总结
  7. Qt文档阅读笔记-QWebEngineView及QML WebEngineView
  8. 我修改的IP地址掩码 呵呵~~开心
  9. 腾讯发力研发文化升级,宣布加入Linux基金会TODO 工作组
  10. python数据环境的搭建_Python数据分析环境搭建
  11. Python:计算器(代码全+解析+实现结果)
  12. win10配置计算机环境变量,教你win10怎么设置环境变量
  13. 两种异步时钟同步化区别分析
  14. python绘制线段_绘制线条点图
  15. python修改图片,Python之修改图片像素值的方法
  16. K8s 集群节点在线率达到 99.9% 以上,扩容效率提升 50%,我们做了这 3 个深度改造...
  17. 在datadog中对某个主机上的进程进行监控
  18. 2019 华为手机录屏adb命令不识别
  19. 音乐平台程序源码分享
  20. 华为防火墙配置流量根据链路权重负载分担

热门文章

  1. 如何自制证件照?怎么在线生成证件照?
  2. python 匹配段落_python中用xpath匹配文本段落内容的技巧
  3. 设计模式 - 行为型 - 模板模式学习
  4. (二)认识商业化体系
  5. Hitomi-网站视频下载器,小巧,轻量又开源,支持N多网站的视频下载,可以收藏备用~
  6. PYNQ-Z2快速上手教程
  7. R—读取数据(导入csv,txt,excel文件)
  8. ArrayList底层源码分析
  9. 【Android】接入高德地图SDK
  10. Linux小技巧之密码更改