MySQL数据库完全备份与恢复
数据库的备份与恢复
- 一、数据库备份的重要性
- 二、数据库的备份分类
- 三、完全备份、增量备份概述与对比
- 四、完全备份的实例
- 1.4.1、冷备份与数据恢复
- 1.4.2、mysqldump备份与恢复
- 五、增量备份的实例(基于完全备份)
- 1.5.1、一般恢复
- 1.5.2、时间点恢复
一、数据库备份的重要性
数据库备份的重要性主要体现在:
- 提高系统的高可用性和灾难可恢复性,在数据库系统崩溃是。没有数据库备份就没办法找到数据。
- 使用数据库备份还原数据库,是数据库崩溃是提供数据恢复最小代价的最优方案,如果让用户重新添加数据,代价太大。
- 没有数据就没有一切,数据库备份是一种防范灾难的强力手段。
使用数据库的过程中,有多种原因造成数据的丢失:
- 程序错误:指对数据库操作的程序难免有些错误,造成数据丢失。
- 人为错误:误操作造成的数据被破坏,也可能是黑客对系统攻击造成的。
- 计算机失败:指运行数据库的服务器操作系统或软件损坏,有可能造成数据的损坏。
- 磁盘失败:指硬盘等存储数据的硬件设备,长时间运行后可能损坏,造成数据丢失。
二、数据库的备份分类
从物理与逻辑的角度,备份可分为
- 物理备份:对数据库操作系统的物理文件(如数据文件、日志文件等)的备份
物理备份方法
- 冷备份(脱机备份):是在关闭数据库的时候进行的
- 热备份(联机备份):数据库处于运行状态,依赖于数据库的日志文件
- 温备份:数据库锁定表格(不可写入但可读)的状态下进行备份操作
- 逻辑备份:对数据库逻辑组件(如:表等数据库对象)的备份
从数据库的备份策略角度备份可分为:
- 完全备份:每次对数据库进行完整的备份
- 差异备份:备份自从上次完全备份之后被修改过的文件
- 增量备份:只有在上次完全备份或者增量备份后被修改的文件才会被备份
三、完全备份、增量备份概述与对比
完全备份:
- 是对整个数据库、数据库结构和文件结构的备份;
- 保存的是备份完成时刻的数据库;
- 是差异备份与增量备份的基础
- 每次对数据进行完整的备份
优点: 备份与恢复操作简单方便
缺点:
数据存在大量的重复;
占用大量的备份空间;
备份与恢复时间长。
增量备份:
- MySQL增量备份是自上一次备份后增加/变化的文件或者内容 特点
- 没有重复数据,备份量不大,时间短;
- 依靠二进制日志文件进行逐次增量备份,单个文件丢失则数据不完整,安全性低
MySQL二进制日志对增量备份有重要的作用
二进制日志保存了所有更新或者可能更新数据库的操作;
二进制日志在启动MySQL服务器后开始记录,并在文件达到max_binlog_size所设置的大小或者接收到flush logs命令后重新创建新的日志文件;
只需定时执行flush logs方法重新创建新的日志,生成二进制文件序列,并及时把这些日志保存到安全的地方就完成了一个时间段的增量备份。
备份方式比较
备份方式 | 完全备份 | 差异备份 | 增量备份 |
---|---|---|---|
完全备份时的状态 | 表1、表2 | 表1、表2 | 表1、表2 |
第1次添加内容 | 创建表3 | 创建表3 | 创建表3 |
备份内容 | 表1、表2、表3 | 表3 | 表3 |
第2次添加内容 | 创建表4 | 创建表4 | 创建表4 |
备份内容 | 表1、表2、表3、表4 | 表3、表4 | 表4 |
四、完全备份的实例
1.4.1、冷备份与数据恢复
备份前需要先停止数据库服务,在直接打包压缩数据库文件
数据库所有文件目录位置:/usr/local/mysql/data
故障时,停止服务,将故障的数据库文件移走到备份文件夹中,解压刚才备份数据库包到/restore目录下,再移动到/usr/local/mysql/data下,再重启服务
恢复成功
1.4.2、mysqldump备份与恢复
备份方法:
mysqldump -u root -p --all-databses > all-data-$(date +%F).sql###备份所有数据库到当前目录下的all-data-$(date +%F).sql 文件
mysqldump -u root -p -databases auth mysql > auth-mysql.sql ###备份auth和mysql库
mysqldump -u root -p auth > auth-$(date +%F).sql ###备份auth数据库
mysqldump -u root -p mysql user > mysql-user-$(date +%F).sql ###备份mysql的user表
mysqldump -u root -p -d mysql user > /tmp/desc-mysql-user.sql ###备份mysql库user表的结构
实例一
单独备份一个auth库
mysql> drop database auth;
Query OK, 3 rows affected (0.02 sec)mysql> create database test;#命名可根据需要
Query OK, 1 row affected (0.00 sec)
mysql> exit
Bye方法一:在数据库外导入
[root@server1 ~]# mysql -u root -p test < auth-2020-11-02.sql #将刚刚备份的导入test
Enter password:
方法二:在数据库内用source
#这里必须要use 数据库,否则无法有对应的数据库可以导入
mysql> use test;
mysql> source /auth-2020-11-02.sql;
查看恢复结果
mysql> show tables;
+-------------------+
| Tables_in_student |
+-------------------+
| info |
| test |
| zf |
+-------------------+
3 rows in set (0.00 sec)
mysql> select * from info;
+----+--------+---------+
| id | name | address |
+----+--------+---------+
| 1 | lisi | 苏州 |
| 2 | liqi | 杭州 |
| 3 | wangwu | 北京 |
+----+--------+---------+
3 rows in set (0.00 sec)
实例2
备份多个数据库
[root@server1 ~]# mysqldump -uroot -pzbc123 --databases mysql student > mysql-student-bak.sql
#备份数据库mysql和student到当前目录下的mysql-student.sql,可查看到,也可加绝对路径保存
[root@server1 ~]# ll
总用量 48784
-rw-------. 1 root root 1878 8月 11 04:02 anaconda-ks.cfg
-rw-r--r--. 1 root root 1926 8月 11 04:49 initial-setup-ks.cfg
drwxr-xr-x. 38 7161 31415 4096 10月 22 11:11 mysql-5.7.20
-rw-r--r--. 1 root root 48833145 10月 22 10:31 mysql-boost-5.7.20.tar.gz ####
-rw-r--r--. 1 root root 1101429 11月 2 12:14 mysql-student-bak.sql
......
误删除两个库
mysql> drop database mysql;
Query OK, 32 rows affected, 2 warnings (0.04 sec)
mysql> drop database student;
Query OK, 3 rows affected, 2 warnings (0.00 sec)
恢复:无需再创建数据库,可直接恢复
mysql> source /root/mysql-auth-bak.sql
查看恢复结果
mysql> show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| mysql |
| performance_schema |
| student |
| sys |
+--------------------+
5 rows in set (0.00 sec)mysql> select * from auth.info;
+----+--------+---------+
| id | name | address |
+----+--------+---------+
| 1 | lisi | 苏州 |
| 2 | liqi | 杭州 |
| 3 | wangwu | 北京 |
+----+--------+---------+
3 rows in set (0.00 sec)
五、增量备份的实例(基于完全备份)
增量备份分类:
- 一般恢复将所有备份的二进制日志内容全部恢复
- 断点恢复
基于位置恢复:
- 据库在某一时间点可能既有错误的操作也有正确的操作
- 可以基于精准的位置跳过错误的操作
基于时间点恢复:
- 跳过某个发生错误的时间点实现数据恢复
MySQL二进制日志对增量备份有重要的作用
二进制日志保存了所有更新或者可能更新数据库的操作;
二进制日志在启动MySQL服务器后开始记录,并在文件达到max_binlog_size所设置的大小或者接收到flush logs命令后重新创建新的日志文件;
只需定时执行flush logs方法重新创建新的日志,生成二进制文件序列,并及时把这些日志保存到安全的地方就完成了一个时间段的增量备份。
修改配置文件,开启二进制日志功能
vi /etc/my.cnf
.....
[root@server1 ~]# [mysqld]
末尾加
log-bin=mysql-bin 前面是功能名称,后面是二进制日志文件名称
#重启数据库
[root@server1 ~]# systemctl restart mysqld
[root@server1 ~]# cd /usr/local/mysql/data/
[root@server1 data]# ll
总用量 122924
-rw-r-----. 1 mysql mysql 56 10月 22 11:29 auto.cnf
-rw-r-----. 1 mysql mysql 917 11月 2 15:45 ib_buffer_pool
-rw-r-----. 1 mysql mysql 12582912 11月 2 15:45 ibdata1
-rw-r-----. 1 mysql mysql 50331648 11月 2 15:45 ib_logfile0
-rw-r-----. 1 mysql mysql 50331648 10月 22 11:29 ib_logfile1
-rw-r-----. 1 mysql mysql 12582912 11月 2 15:45 ibtmp1
drwxr-x---. 2 mysql mysql 4096 11月 2 12:51 mysql
-rw-r-----. 1 mysql mysql 154 11月 2 15:45 mysql-bin.000001 #生成二进制日志文件
-rw-r-----. 1 mysql mysql 19 11月 2 15:45 mysql-bin.index
以下所有的数据库操作都会记录在mysql-bin.000001这个二进制文件中
#原有的记录,已做了完全备份
ysql> select * from auth.info;
+----+--------+---------+
| id | name | address |
+----+--------+---------+
| 1 | lisi | 苏州 |
| 2 | liqi | 杭州 |
| 3 | wangwu | 北京 |
+----+--------+---------+
3 rows in set (0.00 sec)#先做一些数据库操作
mysql> insert into auth.info values(4,'yangli','南京');
Query OK, 1 row affected (0.02 sec)#误删除了一条记录
mysql> delete from auth.info where name='lisi';
Query OK, 1 row affected (0.01 sec)#又插入了一条数据
mysql> insert into auth.info values(5,'lili','南京');
Query OK, 1 row affected (0.01 sec)mysql> select * from auth.info;
+----+--------+---------+
| id | name | address |
+----+--------+---------+
| 2 | liqi | 杭州 |
| 3 | wangwu | 北京 |
| 4 | yangli | 南京 |
| 5 | lili | 南京 |
+----+--------+---------+
4 rows in set (0.00 sec)
恢复:先刷新二进制文件,mysql-bin.000002里会存储后续的数据库操作,而不会在存储在bysql-bin.000001中了
[root@server1 ~]# mysqladmin -uroot -p flush-logs
Enter password:
[root@server1 ~]# ll /usr/local/mysql/data/
总用量 122928
-rw-r-----. 1 mysql mysql 56 10月 22 11:29 auto.cnf
-rw-r-----. 1 mysql mysql 917 11月 2 15:45 ib_buffer_pool
-rw-r-----. 1 mysql mysql 12582912 11月 2 16:49 ibdata1
-rw-r-----. 1 mysql mysql 50331648 11月 2 16:49 ib_logfile0
-rw-r-----. 1 mysql mysql 50331648 10月 22 11:29 ib_logfile1
-rw-r-----. 1 mysql mysql 12582912 11月 2 15:45 ibtmp1
drwxr-x---. 2 mysql mysql 4096 11月 2 12:51 mysql
-rw-r-----. 1 mysql mysql 1019 11月 2 16:57 mysql-bin.000001##刷新之前的操作存储在这里
-rw-r-----. 1 mysql mysql 154 11月 2 16:57 mysql-bin.000002##新增的二进制文件
-rw-r-----. 1 mysql mysql 38 11月 2 16:57 mysql-bin.index
1.5.1、一般恢复
直接把整个二进制文件的内容进行恢复
mysql> select * from auth.info;
+----+--------+---------+
| id | name | address |
+----+--------+---------+
| 2 | liqi | 杭州 |
| 3 | wangwu | 北京 |
| 4 | yangli | 南京 |
| 5 | lili | 南京 |
+----+--------+---------+
4 rows in set (0.00 sec)
误删除表后,先用完全备份恢复,在用二进制文件恢复表至上述状态
mysql> drop database auth;
Query OK, 0 rows affected (0.01 sec)
#完全备份
mysql> source /root/mysql-auth-bak.sql;
mysql> select * from auth.info;
+----+--------+---------+
| id | name | address |
+----+--------+---------+
| 1 | lisi | 苏州 |
| 2 | liqi | 杭州 |
| 3 | wangwu | 北京 |
+----+--------+---------+
#一般备份
[root@server1 ~]# cd /usr/local/mysql/data/
[root@server1 data]# mysqlbinlog --no-defaults mysql-bin.000001 |mysql -uroot -pzbc123
#查看恢复结果
mysql> select * from auth.info;
+----+--------+---------+
| id | name | address |
+----+--------+---------+
| 2 | liqi | 杭州 |
| 3 | wangwu | 北京 |
| 4 | yangli | 南京 |
| 5 | lili | 南京 |
+----+--------+---------+
4 rows in set (0.00 sec)
1.5.2、时间点恢复
从日志开头截止到某个时间点的恢复
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 密码
MySQL数据库完全备份与恢复相关推荐
- mysql数据库的备份与恢复PPT_mysql数据库的备份与恢复
mysql数据库的备份与恢复 mysqldump命令用于备份数据库数据 格式为:mysqldump [参数][数据库名称] 如果是用mysqldump 来做备份.那么备份用户的相关权限如下: crea ...
- mysql对数据库进行备份吗_怎么对MySQL数据库进行备份与恢复
MySQL的备份与恢复 前言:前面我们已经了解了 MySQL 数据库的安装及使用,但随着自动化办公与电子商务的不断发展,企业对信息系统的依赖性越来越高,而 数据库 在信息系统中担任着非常重要的角色.尤 ...
- MySQL数据库之备份与恢复
目录 引言 一.MySQL日志管理 1.日志的类型与作用 redo 重做日志 undo 回滚日志 errorlog 错误日志 slow query log 慢查询日志 bin log 二进制日志 re ...
- discuz x2.5 mysql_Discuz2.5的MYSQL数据库的备份与恢复
在网上找到许多资料看都是用Discuz的备份功能,恢复用PHPMYADMIN管理工具进行备份的,感觉用密码备份更加的方便. 备份MySQL数据库的命令 mysqldump -hhostname -uu ...
- 小韩实操 -- Mysql数据库的备份与恢复及安全配置
Mysql数据库的备份: mysqldump命令将数据库中的数据备份成一个文本文件.表的结构和表中的数据将存储在生成的文本文件中. mysqldump命令的工作原理很简单.它先查出需要备份的表的结构, ...
- ubuntu系统下mysql数据库的备份与恢复
shell脚本的形式备份/恢复mysql数据库(可通过定时任务定时执行). 1.mysql数据库的备份脚本如下: #!/bin/sh #mysqldump备份程序执行路径 DUMP=/usr/bin/ ...
- mysql 数据库增量备份与恢复
文章目录 前言 一:数据库备份的分类 1.1:数据丢失的原因有哪些? 1.2:从物理与逻辑的角度,如何分类备份? 1.3:从数据库的备份策略角度,如何分类备份? 二:如何实现MySQL增量备份? 2. ...
- Mysql数据库增量备份与恢复
一.MySQL 增量备份概念 使用 mysqldump 进行完全备份,备份的数据中有重复数据,备份时间与恢复时间长. 而增量备份就是备份自上一次备份之后增加或改变的文件或内容. 1.增量备份的特点: ...
- mysql数据库逻辑备份与恢复_Mysqldump逻辑备份与恢复
文档结构: mysqldump备份影响性能,可能会把内存里面的热数据给冲刷掉,5.7后,新增一个参数,innodb_buffer_pool_dump_pct,控制每个innodb_buffer中转存活 ...
- 从linux中恢复数据库,linux中mysql数据库的备份与恢复
mysqldump常见选项: --all-databases, -A: 备份所有数据库 --databases, -B: 用于备份多个数据库,如果没有该选项,mysqldump把第一个名字参数作为数据 ...
最新文章
- java 实现hashmap_Java集合(十)实现Map接口的HashMap
- 纪念lxwcto(潜龙)
- python windows安装readline
- C#使用集合组织相关数据
- c语言标准整形,C语言整形数值范围问题
- html5 image 同步,html5 image使用大全
- unity最基本操作
- 数组乱码_python 爬虫随笔-土办法治乱码
- 【totti】一道weblogic认证考题所想到的
- springboot如何对本地数据库增删改查_SpringBoot 数据库操作 增删改查
- wifi的web 认证。
- 《JavaScript高级程序设计》- 第一章:介绍JavaScript
- 苏州外壳防护试验IP防尘防水测试IP65 IP66 IP69K
- 常用汇编指令 rep movs / rep stos
- python搬家具_Python语言之学会Python之后!亲朋好友都夸我厉害!用Python买到最优惠的家具...
- java读书网站课程设计_Java课程设计
- linux第7章进程状态和控制
- 中国境内哪个chatGPT最好用
- 不知道测试什么?你需要知道的软件测试类型和常识【经典长文】
- 群、环、域的概念总结