文章目录

  • 一、数据库备份的分类
    • 1.数据备份的重要性
    • 2.数据库备份的分类-1
    • 3.数据库备份的分类-2
    • 4.常见的备份方法
  • 二、MySQL完全备份与恢复
    • 1.MySQL完全备份-1
    • 2.MySQL完全备份-2
    • 3.数据库完全备份分类
    • 4.MySQL物理冷备份及恢复
    • 5.mysqldump备份数据库
      • 5.1 单库进行完全备份及恢复
      • 5.2 多库进行完全备份
      • 5.3 对所有库进行完全备份
  • 三、MySQL增量备份与恢复
    • 1. MySQL增量备份-1
    • 2.Mysql增量备份-2
    • 3.MySQL数据库增量恢复-1
    • 4.MySQL数据库增量恢复-2
    • 5.MySQL数据库增量恢复-3
    • 6.增量备份案例
      • 1.基于时间点恢复
        • 配置流程
      • 2.基于位置点恢复
        • 2.1步骤
        • 2.2 配置流程

一、数据库备份的分类

1.数据备份的重要性

在生产环境中,数据的安全性至关重要
任何数据的丢失都可能产生严重的后果

造成数据丢失的原因:

  • 程序错误
  • 人为操作错误
  • 运算错误
  • 磁盘故障
  • 灾难(如火灾、地震)和盗窃

2.数据库备份的分类-1

从物理与逻辑的角度,备份可分为

  • 物理备份:对数据库操作系统的物理文件(如数据文件、日志文件等)的备份

    • 物理备份方法

      • 冷备份(脱机备份):是在关闭数据库的时候进行的
      • 热备份(联机备份):数据库处于运行状态,依赖于数据库的日志文件
      • 温备份:数据库锁定表格(不可写入但可读)的状态下进行备份操作
  • 逻辑备份:对数据库逻辑组件(如:表等数据库对象)的备份

3.数据库备份的分类-2

从数据库的备份策略角度,备份可分为

  • 完全备份:每次对数据库进行完整的备份
  • 差异备份:备份自从上次完全备份之后被修改过的文件
  • 增量备份:只有在上次完全备份或者增量备份后被修改的文件才会被备份

4.常见的备份方法

物理冷备

  • 备份时数据库处于关闭状态,直接打包数据库文件
  • 备份速度快,恢复时也是最简单的

专用备份工具mydump或mysqlhotcopy

  • mysqldump常用的逻辑备份工具
  • mysqlhotcopy仅拥有备份MylSAM和ARCHIVE表

启用二进制日志进行增量备份

  • 进行增量备份,需要刷新二进制日志

第三方工具备份

  • 免费的MySQL热备份软件Percona XtraBackup

二、MySQL完全备份与恢复

1.MySQL完全备份-1

  • 是对整个数据库、数据库结构和文件结构的备份
  • 保存的是备份完成时刻的数据库
  • 是差异备份与增量备份的基础

2.MySQL完全备份-2

优点:

  • 备份与恢复操作简单方便

缺点:

  • 数据存在大量的重复
  • 占用大量的备份空间
  • 备份与恢复时间长

3.数据库完全备份分类

物理冷备份与恢复

  • 关闭MySQL数据库
  • 使用tar命令直接打包数据库文件夹
  • 直接替换先有MySQL目录即可

mysqldump备份与恢复

  • MySQL自带的备份工具,可方便实现对MySQL的备份
  • 可以将指定的库、表导出为SQL脚本
  • 使用命令mysql导入备份的数据

4.MySQL物理冷备份及恢复

数据库中的所有数据文件都在这个目录中,直接整个目录打包(需关闭数据库)

[root@server1 data]# systemctl stop mysqld //先关闭数据库
Redirecting to /bin/systemctl stop mysqld.service
[root@server1 data]# mkdir /opt/backup //创建备份目录,
[root@server1 data]# tar zcvf /opt/backup/mysql_all_$(date +%F).tar.gz /usr/local/mysql/data/
//把整个数据目录打包
[root@server1 data]# cd /opt/backup
[root@server1 backup]# ll
总用量 1372
-rw-r--r--. 1 root root 1401279 12月 27 08:18 mysql_all_2020-12-27.tar.gz

当数据库故障(数据丢失)时,直接把压缩包解压,数据挪回data目录下

5.mysqldump备份数据库

5.1 单库进行完全备份及恢复

格式:

  • musqldump -u 用户名 -p【密码】【选项】【数据库名】 > 备份路径/备份文件名

单库备份示例:

mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| kk                 |
| mysql              |
| performance_schema |
| sys                |
+--------------------+
5 rows in set (0.00 sec)
[root@server1 ~]# mysqldump -u root -p kk > /opt/kk.sql     #导出备份文件kk.sql
Enter password:          #输入密码
[root@server1 ~]# cd /opt/
[root@server1 opt]# ll
总用量 4
-rw-r--r--. 1 root root 1789 12月 27 05:30 kk.sql
drwxr-xr-x. 2 root root    6 3月  26 2015 rh

备份完毕后可以查看kk.sql文件,可以看到没有备份创建数据库的语句,所以我们恢复的时候需要先创建原来的数据表,才可恢复

制造故障:

 mysql> drop database kk;
Query OK, 1 row affected (0.01 sec)
直接恢复
mysql> source /opt/kk.sql
ERROR 1046 (3D000): No database selected   #报错,没有数据库可选

如上所述,恢复时需要创建原先的数据库,才可以恢复

单库恢复:

mysql> create database kk;
Query OK, 1 row affected (0.00 sec)mysql> use kk;
Database changed方法一、在数据库内用source语句进行数据恢复
mysql> source /opt/kk.sql
Query OK, 0 rows affected (0.00 sec)Query OK, 0 rows affected (0.00 sec)
........省略mysql> show databases;         #查看kk库是否恢复
+--------------------+
| Database           |
+--------------------+
| information_schema |
| jj                 |
| kk                 |
| mysql              |
| performance_schema |
| sys                |
+--------------------+
6 rows in set (0.00 sec)mysql> show tables;            #查看kk库中的表是否恢复
+--------------+
| Tables_in_kk |
+--------------+
| a            |
+--------------+
1 row in set (0.00 sec)方法二、用Linux命令mysql进行数据恢复mysql> drop table a;  //把表删了
Query OK, 0 rows affected (0.02 sec)mysql> show tables;
Empty set (0.00 sec)mysql> exit;
Bye
[root@server1 opt]# mysql -uroot -p kk < /opt/kk.sql  //反向导入恢复
Enter password: [root@server1 opt]# mysql -uroot -p -e 'show tables from kk'  //查看
Enter password:
+------------------+
| Tables_in_school |
+------------------+
| a             |
+------------------+

5.2 多库进行完全备份

格式:

  • mysqldump -u 用户名 -p 【密码】【选项】 --databases 库名1 【库名2】… > /备份路径/备份文件名

多库备份示例:

mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| jj                 |
| kk                 |
| mysql              |
| performance_schema |
| sys                |
+--------------------+
6 rows in set (0.00 sec)[root@server1 ~]# mysqldump -u root -pfa123 --databases kk jj > /opt/kk.jj
[root@server1 ~]# cd /opt/
[root@server1 opt]# ll
总用量 8
-rw-r--r--. 1 root root 2051 12月 27 05:57 kk.jj
-rw-r--r--. 1 root root 1789 12月 27 05:30 kk.sql
drwxr-xr-x. 2 root root    6 3月  26 2015 rh

多库备份好后,进入文件内查看,可以看到,在多库备份的时候,备份了创建数据库的语句,所以恢复的时候可以直接恢复

5.3 对所有库进行完全备份

格式:

  • musqldump -u 用户名 -p 【密码】【选项】 -add-databases > /备份路径/备份文件名

备份所有库示例:

[root@localhost ]# mysqldump -uroot -pfa123 --all-databases > /opt/all.sql
mysqldump: [Warning] Using a password on the command line interface can be insecure.

三、MySQL增量备份与恢复

1. MySQL增量备份-1

使用mysqldump命令进行完全备份存在的问题

  • 备份数据中有重复数据
  • 备份时间与恢复时间过长

是自上一次备份后增加/变化的文件或者内容
特点:

  • 没有重复数据,备份量不大,时间短
  • 恢复需要上次完全备份及完全备份之后所有的- 增量备份才能恢复,而且要对所有增量备份进行逐个反推恢复

2.Mysql增量备份-2

MySQL没有提供直接的增量备份方法
可以通过 MySQL提供的二进制日志间接实现增量备份
MySQL二进制日志对备份的意义

  • 二进制日志保存了所有更新或者可能更新数据库的操作
  • 二进制日志在启动MySQL服务器后开始记录,并在文件达到
    max_binlog_size所设置的大小或者接收到flush logs命令后重新
    创建新的日志文件
  • 只需定时执行flush logs方法重新创建新的日志,生成二进制文
    件序列,并及时把这些日志保存到安全的地方就完成了一个时间
    段的增量备份

3.MySQL数据库增量恢复-1

一般恢复

  • 将所有备份的二进制日志内容全部恢复

基于位置恢复

  • 数据库在某一时间点可能既有错误的操作也有正确的操作
  • 可以基于精准的位置跳过错误的操作

基于时间点恢复

  • 跳过某个发生错误的时间点实现数据恢复

4.MySQL数据库增量恢复-2

增量恢复的方法:

一般恢复

  • 格式:mysqlbinlog [–no-defaults] 增量备份文件 | mysql -u 用户名 -p

基于位置的恢复

  • 恢复数据到指定位置
  • 格式:mysqlbinlog --stop-position=’操作 id’ 二进制日志 |mysql -u 用户名 -p 密码

从指定的位置开始恢复数据

  • 格式: mysqlbinlog --start-position=’操作 id’ 二进制日志 |mysql -u 用户名 -p 密码

5.MySQL数据库增量恢复-3

增量恢复的方法:

基于时间点的恢复

  • 从日志开头截止到某个时间点的恢复

  • 格式:
    mysqlbinlog [–no-defaults] --stop-datetime=’年-月-日 小时:分钟:秒’ 二进制日志 | mysql -u 用户名 -p 密码

从某个时间点到日志结尾的恢复

  • 格式:mysqlbinlog [–no-defaults] --start-datetime=’年-月-日 小时:分钟:秒’ 二进制日志 | mysql -u 用户名 -p 密码

从某个时间点到某个时间点的恢复

  • 格式:mysqlbinlog [–no-defaults] --start-datetime=’年-月-日 小时:分钟:秒’ --stop-datetime=’年-月-日小时:分钟:秒’ 二进制日志 | mysql -u 用户名 -p 密码

6.增量备份案例

1.基于时间点恢复

还原时间点的步骤:

  • 删除原先坏掉的那张表
  • 还原完全备份的那个数据库
  • 停止在错误的时间点
  • 开始在正确的时间点

配置流程

1.开启二进制日志文件

[root@server1 ~]# vi /etc/my.cnf


2.重启数据库刷新,查看生成的日志文件

[root@server1 ~]# systemctl restart mysqld
[root@server1 ~]# cd /usr/local/mysql/data/
[root@server1 data]# ll


接下来关于所有的数据库操作,都被记录在000001文件里。

3.查看日志内容

[root@server1 ~]# mysqlbinlog --no-defaults --base64-output=decode-rows -v /usr/local/mysql/data/mysql_bin.000001
--no-defaults:解决utf-8报错
--base64-output=decode-rows:解决乱码问题
-v:输出文件指向
无新操作,无新增的信息

4.创建数据库数据

[root@server1 ~]# mysql -uroot -pabc123  登录数据库
mysql> show databases;    查看数据库信息
mysql> use client;
mysql> create table k(id int(10),name varchar(128),hobby int(10),score int(20));
mysql> insert into k values('1','zhangsan','1','80');
mysql> insert into k values('2','lisi','6','60');
mysql> insert into k values('3','wangwu','4','50');
mysql> insert into k values('4','xiaohu','2','70');
mysql> insert into k values('5','xiao','2','90');mysql> select * from k;
+----+----------+-------+-------+
| id | name     | hobby | score |
+----+----------+-------+-------+
|  1 | zhangsan |     1 |    80 |
|  2 | lisi     |     6 |    60 |
|  3 | wangwu   |     4 |    50 |
|  4 | xiaohu   |     2 |    70 |
|  5 | xiao     |     2 |    90 |
+----+----------+-------+-------+
5 rows in set (0.00 sec)mysql> exit 退出

5.完全备份

[root@server1 ~]# mysqldump -uroot -pfa123 k > /opt/client-k.sql
[root@server1 ~]# cd /opt/
[root@server1 opt]# ll
总用量 4
-rw-r--r--. 1 root root 775 12月 27 10:57 client-k.sql
drwxr-xr-x. 2 root root   6 3月  26 2015 rh
[root@server1 opt]# mysqladmin -uroot -p flush-logs
[root@server1 opt]# cd /usr/local/mysql/data/
[root@server1 data]# ll


6.数据配置

[root@server1 ~]# mysql -u root -pfa123
mysql> use client;
mysql> insert into k values(1,'fa',2,88);
Query OK, 1 row affected (0.00 sec)mysql> insert into k values(2,'nb',3,68);
Query OK, 1 row affected (0.00 sec)mysql> delete from k where name='zhangsan';   #误删数据
Query OK, 1 row affected (0.01 sec)
mysql> select * from k;
+----+--------+-------+-------+
| id | name   | hobby | score |
+----+--------+-------+-------+
|  3 | wangwu |     4 |    50 |
|  4 | xiaohu |     2 |    70 |
|  5 | xiao   |     2 |    90 |
|  1 | fa     |     2 |    88 |
|  2 | nb     |     3 |    68 |
+----+--------+-------+-------+
5 rows in set (0.00 sec)

7.查看生成的日志文件

[root@server1 ~]# mysqladmin -uroot -p flush-logs
[root@server1 ~]# cd /usr/local/mysql/data/
[root@server1 data]# ll


[root@server1 ~]# mysqlbinlog --no-defaults --base64-output=decode-rows -v /usr/local/mysql/data/mysql-bin.000002

查找到错误时间点停止

在下一个正确时间点开始

9.模拟数据损坏恢复

[root@server1 ~]# mysql -uroot -pfa123   #登录数据库
mysql> show databases;
mysql> drop database client;
mysql> show databases;
mysql> create database client;
mysql> show databases;
mysql> use client;
mysql> source /opt/client-k.sql    #还原完全备份的那个数据库
mysql> select * from k;
mysql> exit mysql> select * from k;
+----+--------+-------+-------+
| id | name   | hobby | score |
+----+--------+-------+-------+
|  3 | wangwu |     4 |    50 |
|  4 | xiaohu |     2 |    70 |
|  5 | xiao   |     2 |    90 |
|  1 | fa     |     2 |    88 |
|  2 | nb     |     3 |    68 |
+----+--------+-------+-------+
5 rows in set (0.00 sec)

2.基于位置点恢复

2.1步骤

  • 位置点恢复
  • 删除原先坏掉的那张表
  • 任意删除两个数据字段
  • 利用日志,备份恢复
  • 查询该二进制日志内容
  • 上一次正确操作的位置点停止
  • 下一次正确操作的位置点开始

2.2 配置流程

1.设置数据库数据

[root@server1 ~]# mysql -uroot -pfa123    #登录数据库
mysql> use client;
mysql>  select * from k;
mysql>  delete from k where name='lisi';
mysql>  delete from k where name='nb';
[root@server1 ~]# mysqlbinlog --no-defaults --base64-output=decode-rows -v /usr/local/mysql/data/mysql_bin.000003   #查看日志中操作的停止与操作的开始

2.恢复数据

[root@server1 ~]# mysqlbinlog --no-defaults --stop-position='3475' /usr/local/mysql/data/mysql-bin.000003 | mysql -uroot -p
[root@server1 ~]#  mysqlbinlog --no-defaults --start-position='3829' /usr/local/mysql/data/mysql-bin.000003 | mysql -uroot -p
[root@server1 ~]# mysql -uroot -pfa123
mysql> use client;
mysql>  select * from k; 查询所有字段

数据库损坏了怎么办?——完全备份及恢复、增量备份及恢复相关推荐

  1. oracle每天一次差异备份,Oracle的差异增量备份和累积增量备份(zt)

    在rman增量备份中,有差异增量和累积增量的概念 1.概念 差异增量:是备份上级及同级备份以来所有变化的数据块,差异增量是默认增量备份方式 累积增量:是备份上级备份以来所有变化的块 因为累积增量是备份 ...

  2. 达梦V8累积增量备份和差异增量备份

    累积增量备份和差异增量备份差异 BACKUP DATABASE INCREMENT CUMULATIVE(累积) 累积增量备份的基备份,只是一个完全的备份集, 简单理解:从数据库全备起,到当前时刻所有 ...

  3. oracle 每天 增量备份,Oracle的差异增量备份和累积增量备份

    在rman增量备份中,有差异增量和累积增量的概念 1.概念 差异增量:是备份上级及同级备份以来所有变化的数据块,差异增量是默认增量备份方式 累积增量:是备份上级备份以来所有变化的块 因为累积增量是备份 ...

  4. 累计增量备份策略_RMAN增量备份中的差异增量和累积增量

    RMAN 增量备份中的差异增量和累积增量 1 .概念 差异增量:是备份上级及同级备份以来所有变化的数据块,差异增量是默认增量备份方式 累积增量:是备份上级备份以来所有变化的块 因为累积增量是备份上级备 ...

  5. Oracle 中关于差异增量备份与累积增量备份原理与区别

     Rman 一个强大的功能是支持增量备份,增量备份中心思想就是减少备份的数据量,使用增量备份后就可以不用从头开始备份了,只需要备份自上次已备份之后的数据块开始进行数据备份. 关于Oracle 增量备份 ...

  6. db2设置数据库增量备份_DB2在线增量备份 还原增量备份及前滚恢复

    1.更改数据库参数 logretain, userexit, trackmod 为 on 2.更改参数之后完全离线备份数据库一次 3.之后就可以进行在线.在线增量备份了 测试结果通过,脚本如下. 重要 ...

  7. MySQL 备份与恢复(完全备份恢复--增量备份恢复+案例演示)

    文章目录 一.MySQL 完全备份 1.1.数据库备份方式精讲 1.1.1.数据库备份的重要性 1.1.2.数据库备份的分类 1.1.3.MySQL 完全备份概念解读 1.2.物理冷备份与恢复 1.3 ...

  8. mysql数据库常规备份还原 (常用增量备份)2018_lcf

    数据库的资料对于一个企业来说,是一个极其重要的资源, 所以做好数据备份是至关重要的. 下面是主要讲常规备份还原方式, 至于保用第三方专用备份工具会单独写个篇幅. 1-->常见数据备份方式 • 物 ...

  9. mysql备份工具Xtrabackup增量备份还原图解

    Xtrabackup增量备份还原图解 声明 本文的数据来自网络,部分代码也有所参照,这里做了注释和延伸,旨在技术交流,如有冒犯之处请联系博主及时处理. XtraBackup是Percona 提供的免费 ...

  10. mysql的增量备份方法_Mysql 增量备份,全部备份实现方法以及自动化脚本

    前情摘要 自己作死干了一件特别蠢的事情(具体略) 然后开始研究如何进行增量备份 增量备份 原理 mysql 有个 binlog 的功能,会记录所有的用户的操作,可以依靠这个,配合全备份,将数据库回滚到 ...

最新文章

  1. [原][osg]osgconv浅析
  2. NumPy - np.random.multivariate_normal()
  3. 四则运算2+psp0
  4. 一文读懂 Linux 内存分配全过程
  5. process调用protothread机制的相关宏定义——用HelloWorld进程诠释
  6. 向日葵linux 用电脑远程控制与管理,远程控制软件向日葵和teamviewer的区别和使用...
  7. java类初始化_Java的类/实例初始化过程
  8. Matlab2016b和Matlab2020b安装包
  9. 系统账号自动退出时长哪里设置
  10. HTML将广告关闭的JS代码,带关闭漂浮广告代码_漂浮广告js代码_漂浮窗口模式关闭...
  11. iPS细胞技术难点以及iPS相关实验材料
  12. led伏安特性实验误差分析_电阻元件的伏安特性 电阻元件的伏安特性实验结果误差分析...
  13. vue中使用DataV做大屏展示
  14. nm命令 查看符号文件
  15. Android客户端登录注册模块
  16. lga2066服务器准系统,4094个针脚,AMD 16核桌面处理器插槽比LGA2066还要大
  17. Keil软件使用及流水灯设计
  18. echarts将x轴展示在图标上方
  19. 学完教程,不知道接下去从哪里开始做自己的第一个APP,怎么办?酷课堂iOS交流群问答(201902期)
  20. 双十一在即,阿里的七种武器

热门文章

  1. c语言自定义函数返回值的作用,C语言中return用法?
  2. win7桌面空白处右键弹出菜单很慢解决办法
  3. linux自动巡检截图,Linux系统巡检shell脚本
  4. linux下3G拨号上网
  5. 一个函数是周期函数,那么一定有最小正周期吗?不一定
  6. 经典卷积网络学习----FCN(图像分割)
  7. (centos7-x86)花样玩转zabbix6.0LTS仪表盘构件
  8. oracle 建立外键 引用条件约束 不能添加,Oracle外键约束
  9. 【无标题】源码、反码、补码
  10. NR PDCCH时频域位置