MYSQL的备份和恢复

  • 一、数据备份的重要性
  • 二、从物理与逻辑的角度,备份可分为
  • 三、从数据库的备份策略角度
    • 1、三种备份方式
    • 2、差异备份与增量备份的区别
    • 3、不同备份类型组合应用的示例
      • ①完全备份与差异备份
      • ②完全备份与增量备份
  • 四、常见的备份方法
    • 1、物理冷备
    • 2、专用备份工具
    • 3、启用二进制日志进行增量备份
    • 4、免费的MySQL热备份软件
  • 五、数据库完全备份分类
    • 1、物理冷备份与恢复
    • 2、mysqldump备份与恢复
  • 六、日志类型与作用:
    • 1.redo 重做日志:
    • 2.undo 回滚日志
    • 3.errorlog 错误日志
    • 4. slow query log 慢查询日志
    • 5. bin log 二进制日志
    • 6.relay log 中继日志
    • 7. general log 普通日志
  • 七、查看日志
    • 1、查看通用查询日志
    • 2、查看二进制日志
    • 3、查看慢查询功能
    • 4、查看慢查询时间
    • 5、配置文件
  • 八、备份操作
    • 1 冷备份:
    • 2. mysqldump 备份与恢复(温备份)
      • 2.1、完全备份一个或多个完整的库 (包括其中所有的表)
      • 2.2、备份两个库
    • 2.3、完全备份 MySQL 服务器中所有的库
      • 2.4、完全备份指定库中的部分表
      • 2.5、只备份表格结构
      • 2.6、 查看备份文件
  • 九、恢复数据库
    • 1、恢复数据库
    • 2、恢复表格结构
  • 十、MySQL数据库增量恢复
    • 1.一般恢复
    • 2.基于位置恢复
    • 3.基于时间点恢复
  • 十一、增备实验
    • 1、开启二进制日志功能
    • 2、可以每周对数据库或表进行完全备份
    • 3、可以每天进行增量备份操作,生成新的二进制文件(mysqlbk-bin.00000n)
    • 4、给表插入新数据
    • 5、再次生成新的二进制日志文件
    • 6、查看二进制日志文件
    • 7、增量恢复:
  • 十二、断点恢复

一、数据备份的重要性

在生产环境中,数据的安全性至关重要
任何数据的丢失都可能产生严重的后果
造成数据丢失的原因
程序错误
人为操作错误
运算错误磁盘故障
灾难(如火灾、地震)和盗窃

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

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

三、从数据库的备份策略角度

1、三种备份方式

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

2、差异备份与增量备份的区别

通过上面的概念分析可以知道,差异备份与增量备份的区别在于它们备份的参考点不同:前者的参考点是上一次完全备份、差异备份或增量备份,后者的参考点是上一次完全备份。
下图展示了差异备份与增量备份的区别,其中Cumulative为差异备份,Differetial增量备份:

3、不同备份类型组合应用的示例

①完全备份与差异备份

以每周数据备份计划为例,我们可以在星期一进行完全备份,在星期二至星期五进行差异备份。如果在星期五数据被破坏了,则只需要还原星期一完全的备份和星期四的差异备份。这种策略备份数据需要较多的时间,但还原数据使用较少的时间。

②完全备份与增量备份

以每周数据备份为例,在星期一进行完全备份,在星期二至星期五进行增量备份。如果在星期五数据被破坏了,则你需要还原星期一正常的备份和从星期二至星期五的所有增量备份。这种策略备份数据需要较少的时间,但还原数据使用较多的时间。

四、常见的备份方法

1、物理冷备

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

2、专用备份工具

mydump或mysqlhotcopymysqldump常用的逻辑备份工具
mysqlhotcopy仅拥有备份MyISAM和ARCHIVE表

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

·进行增量备份,需要刷新二进制日志第三方工具备份

4、免费的MySQL热备份软件

Percona XtraBackup

五、数据库完全备份分类

1、物理冷备份与恢复

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

2、mysqldump备份与恢复

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

六、日志类型与作用:

MySQL 的日志默认保存位置为 /usr/local/mysql/data

1.redo 重做日志:

达到事务一致性(每次重启会重做)
作用:确保日志的持久性,防止在发生故障,脏页未写入磁盘。重启数据库会进行redo log执行重做,达到事务一致性

2.undo 回滚日志

作用:保证数据的原子性,记录事务发生之前的一个版本,用于回滚,innodb事务可重复读和读取已提交 隔离级别就是通过mvcc+undo实现

3.errorlog 错误日志

作用:Mysql本身启动,停止,运行期间发生的错误信息

4. slow query log 慢查询日志

作用:记录执行时间过长的sql,时间阈值(10s)可以配置,只记录执行成功
另一个作用:在于提醒优化

5. bin log 二进制日志

作用:用于主从复制,实现主从同步
记录的内容是:数据库中执行的sql语句

6.relay log 中继日志

作用:用于数据库主从同步,将主库发来的bin log保存在本地,然后从库进行回放

7. general log 普通日志

作用:记录数据库的操作明细,默认关闭,开启后会降低数据库性能

七、查看日志

1、查看通用查询日志

show variables like 'general%';       #查看通用查询日志是否开启

MYSQL的备份和恢复_第1张图片

2、查看二进制日志

show variables like 'log_bin%';       #查看二进制日志是否开启

MYSQL的备份和恢复_第2张图片

3、查看慢查询功能

show variables like '%slow%';         #查看慢查询日功能是否开启

MYSQL的备份和恢复_第3张图片

4、查看慢查询时间

(root@localhost) [class]> show variables like 'long_query_time';    #查看慢查询时间设置

MYSQL的备份和恢复_第4张图片

5、配置文件

[root@localhost data]# vim /etc/my.cnf
log-error=/usr/local/mysql/data/mysql_error.log            #指定日志的保存位置和文件名
general_log=ON
general_log_file=/usr/local/mysql/data/mysql_general.log    #通用查询日志,用来记录MySQL的所有连接和语句,默认是关闭的
log-bin=mysql-bin        #二进制日志(binlog),用来记录所有更新了数据或者已经潜在更新了数据的语句,记录了数据的更改,可用于数据恢复,默认已开启
slow_query_log=ON                        #慢查询日志,用来记录所有执行时间超过long_query_time秒的语句,可以找到哪些查询语句执行时间长,以便提醒优化,默认是关闭的 
slow_query_log_file=/usr/local/mysql/data/mysql_slow_query.log
long_query_time=5                  #设置超过5秒执行的语句被记录,缺省时为10秒
binlog_format = MIXED

[root@localhost data]# systemctl restart mysqld

开启二进制日志时会产生一个索引文件及一个索引列表
在这里插入图片描述

八、备份操作

现有一张表
MYSQL的备份和恢复_第5张图片

1 冷备份:

[root@localhost ~]# systemctl stop mysqld                   #先停用数据库
[root@localhost ~]# systemctl stop mysqld
[root@localhost ~]# mkdir /back
[root@localhost ~]# tar zcf /back/mysql_all_$(date +F%).tar.gz /usr/local/mysql/data

在这里插入图片描述
在数据库中去掉’cy’表格
MYSQL的备份和恢复_第6张图片

[root@localhost ~]# mv /usr/local/mysql/data /usr/local/mysql/data.bak   把原data做备份
[root@localhost ~]# cd /back
[root@localhost back]# tar zxf mysql_all_2021-11-29.tar.gz       解压该文件

在这里插入图片描述
注意这里的权限问题
MYSQL的备份和恢复_第7张图片
所以要把权限也得复制过去

[root@localhost mysql]# cp -ra  data /usr/local/mysql/data       这里要用-p或者-a
或者
[root@localhost mysql]# mv  data /usr/local/mysql/data
[root@localhost mysql]# systemctl restart mysqld.service

这样表格就回来了
MYSQL的备份和恢复_第8张图片

2. mysqldump 备份与恢复(温备份)

2.1、完全备份一个或多个完整的库 (包括其中所有的表)

mysqldump -uroot -p[密码] – databases 库名1 [库名2] … > /备份路径/备份文件名.sql #导出的就是数据库脚本文件

[root@localhost mysql]# mysqldump -uroot -pzy44123 -- databases class > /back/class.sql
mysql: [Warning] Using a password on the command line interface can be insecure.
[root@localhost ~]# cd /back/
[root@localhost back]# ls

在这里插入图片描述

2.2、备份两个库

[root@localhost ~]# mysqldump -uroot -pzy44123 --databases class mysql > /back/class_mysql.sql
mysql: [Warning] Using a password on the command line interface can be insecure.

在这里插入图片描述

2.3、完全备份 MySQL 服务器中所有的库

mysqldump -u root -p[密码] – all-databases > /备份路径/备份文件名.sql

[root@localhost ~]# mysqdump -uroot -pzy44123 --all-databases  > /back/mysql_all.sql
mysql: [Warning] Using a password on the command line interface can be insecure.

MYSQL的备份和恢复_第9张图片

2.4、完全备份指定库中的部分表

mysqldump -u root -p[密码] 库名 [表名1] [表名2] … > /备份路径/备份文件名.sql

[root@localhost back]# mysqldump -uroot -pzy44123 class cy > /back/class_cy.sql
mysqldump: [Warning] Using a password on the command line interface can be insecure.

MYSQL的备份和恢复_第10张图片

2.5、只备份表格结构

#使用“-d”选项,说明只保存数据库的表结构
#不使用“-d"选项,说明表数据也进行备份
#做为一个表结构模板
在这里插入图片描述
MYSQL的备份和恢复_第11张图片

2.6、 查看备份文件

[root@localhost back]# cat /back/class_cy.sql |grep -v "^--" | grep -v "^/" | grep -v "^$"

MYSQL的备份和恢复_第12张图片

九、恢复数据库

模拟删除class库
MYSQL的备份和恢复_第13张图片

1、恢复数据库

[root@localhost ~]# mysql -uroot -pzy44123 < /back/class_mysql.sql
mysql: [Warning] Using a password on the command line interface can be insecure.

MYSQL的备份和恢复_第14张图片
MYSQL的备份和恢复_第15张图片

当备份文件只有表格时,你要指定数据库,没有需要新建数据库,否则会报错

[root@localhost ~]# mysql -uroot -pzy44123 class
mysql: [Warning] Using a password on the command line interface can be insecure.
ERROR 1049 (42000): Unknown database 'class'

2、恢复表格结构

[root@localhost back]# mysql -uroot -pzy44123 class < /back/class_cy-d.sql
mysql: [Warning] Using a password on the command line interface can be insecure.

MYSQL的备份和恢复_第16张图片
这里只有结构没有数据

十、MySQL数据库增量恢复

1.一般恢复

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

2.基于位置恢复

数据库在某一时间点可能既有错误的操作也有正确的操作
可以基于精准的位置跳过错误的操作
发生错误节点之前的一个节点,上一次正确操作的位置点停止

3.基于时间点恢复

跳过某个发生错误的时间点实现数据恢复
在错误时间点停止,在下一个正确时间点开始

十一、增备实验

1、开启二进制日志功能

vim /etc/my.cnf
[mysqld]
log-bin=mysql-bin
binlog_format = MIXED      #可选,指定二进制日志(binlog)的记录格式为MIXED(混合输入)
server-id = 1              #可加可不加该命令

#二进制日志(binlog)有3种不同的记录格式:
#STATEMENT (基于SQL语句)、
#ROW(基于行)、
#MIXED(混合模式),
#默认格式是STATEMENT

在这里插入图片描述

[root@localhost data]# systemctl restart mysqld             重启服务

这时就会多一个二进制日志
在这里插入图片描述

2、可以每周对数据库或表进行完全备份

mysqldump -uroot -pzy44123 class cy >/backup/class_cy.sql
[root@localhost data]# mysqldump -uroot -pzy44123 --all-databases > /backup/mysql_all.sql
mysqldump: [Warning] Using a password on the command line interface can be insecure.

3、可以每天进行增量备份操作,生成新的二进制文件(mysqlbk-bin.00000n)

mysqladmin -uroot -pzy44123  flush-logs

4、给表插入新数据

insert into cy values(5,'test')

5、再次生成新的二进制日志文件

mysqladmin -uroot -pzy4123  flush-logs

#之前的操作会保存在上一个二进制文件中,之后的操作会保存在新的二进制文件中

6、查看二进制日志文件

cp /usr/loacal/mysql/data/mysql-bin.000001 /back
[root@localhost data]# mysqlbinlog --no-defaults --base64-output=decode-rows -v /usr/local/mysql/data/mysqlbk-bin.000001

先看下正在写的是那个文件
MYSQL的备份和恢复_第17张图片
然后查找上一个文件看有没有你要的内容

(root@localhost) [class]> show binlog events in 'mysqlbk-bin.000001'\G

MYSQL的备份和恢复_第18张图片

7、增量恢复:

(root@localhost) [class]> DROP TABLE cy;        先在数据库中模拟丢失数据
Query OK, 0 rows affected (0.00 sec)
mysqlbinlog --no-defaults /back/mysql-bin.000001|mysql -u -root -pzy44123   找回数据

十二、断点恢复

如果不从完备恢复,那么数据就是先找到你要恢复数据的断点位置

[root@localhost ~]# mysqlbinlog --no-defaults /usr/local/mysql/data/mysqlbk-bin.000001 

在这里插入图片描述

[root@localhost ~]# mysqlbinlog --no-defaults --start-position=790839 /usr/local/mysql/data/mysqlbk-bin.000001 |mysql -uroot -pzy44123
mysql: [Warning] Using a password on the command line interface can be insecure.

MYSQL的备份和恢复_第19张图片

按时间节点恢复

[root@localhost data]# mysqlbinlog --no-defaults --base64-output=decode-rows -v /usr/local/mysql/data/mysqlbk-bin.000007

在这里插入图片描述

[root@localhost data]# mysqlbinlog --no-defaults --start-datetime='2021-11-30 19:15:16' /usr/local/mysql/data/mysqlbk-bin.000007 |mysql -uroot -pzy44123
mysql: [Warning] Using a password on the command line interface can be insecure.

MYSQL的备份和恢复_第20张图片

你可能感兴趣的:(mysql,nginx,运维,apache)