MySQL数据库的备份与恢复
文章目录
一、数据备份的重要性
备份的主要目的是灾难恢复
在生产环境中,数据的安全性至关重要
任何数据的丢失都可能产生严重的后果
而造成丢失的原因可能有以下几种
- 程序错误:指对数据库操作的程序难免有些错误,造成数据丢失
- 人为错误:指由于使用人员的误操作造成的数据被破坏,还有可能是黑客对系统攻击造成的数据丢失等
- 计算机失败:指运行数据库的服务器操作系统或软件损坏,有可能造成数据的损坏
- 磁盘失败:指硬盘等存储数据的硬件设备,长时间运行后可能损坏,造成数
据丢失 - 灾难(如火灾、地震)和偷窃:指自然灾害等的发生,有可能造成数据丢失
二、数据库备份的分类
从物理与逻辑的角度分类:
1.物理备份
- 指对数据库操作系统的物理文件(如数据文件、日志文件等)的备份
物理备份又可分为脱机备份(冷备份)和联机备份(热备份)
- 冷备份(脱机备份):在关闭数据库时进行的备份操作,能够较好地保证数据库的完整性
- 热备份(联机备份):在数据库运行状态中进行操作,这种备份方法依赖于数据库的日志文件
2.逻辑备份
- 对数据库逻辑组件(如表等数据库对象)的备份
从数据库的备份策略角度分类:
1.完全备份
- 每次对数据进行完整的备份
- 可以备份整个数据库,包含用户表、系统表、索引、视图和存储过程等所有数据库对象
- 但它需要花费更多的时间和空间,所以,做一次完全备份的周期要长些
2.差异备份
- 备份那些自从上次完全备份之后被修改过的文件,即只备份数据库部分的内容
- 它比最初的完全备份小,因为只包含自上次完全备份以来所改变的数据库
- 它的优点是存储和恢复速度快
3.增量备份
- 只有那些在上次完全备份或者增量备份后被修改的文件才会被备份
三、常见的备份方法
1、物理冷备
- 备份时数据库处于关闭状态,直接打包数据库文件
- 备份速度快,恢复时也是最简单的
2、专用备份工具 mydump 或 mysqlhotcopy
- mysqldump 常用的逻辑备份工具
- mysqlhotcopy 仅拥有备份 MyISAM 和 ARCHIVE 表
3、启用二进制日志进行增量备份
- 进行增量备份,需要刷新二进制日志
4、第三方工具备份
- 免费的MySQL 热备份软件 Percona XtraBackup
MySQL完全备份与恢复
环境准备
主机 | 操作系统 | IP地址 | 必装软件包 |
---|---|---|---|
安装好Mysql的主机 | CentOS7 | 192.168.171.7 | mysql-boost-5.7.20.tar.gz |
创建库和表用作实验
create database school;
use school;
create table class1 (
id int(4) not null auto_increment,
name varchar(10) not null,
sex char(10) not null,
hobby varchar(50),
primary key (id));
#创建表结构
#字段一:id,最大显示长度2,不能为空,自动递增从1开始
#字段二:name,可变长度字段,10,不能为空
#字段三:sex,固定长度5,不能为空
#字段四:hobby,可变长度,最多10字符
#字段四:主键(id)
insert into class1 values(1,'user1','male','running');
insert into class1 values(2,'user2','female','singing');
select * from class1;
#查看
一、Mysql完全备份
1、物理冷备份与恢复
安装服务
systemctl stop mysqld
yum -y install xz
压缩备份
tar Jcvf /opt/mysql_all_$(date +%F).tar.xz /usr/local/mysql/data/
解压备份
tar Jxvf /opt/mysql_all_2020-11-22.tar.xz -C /usr/local/mysql/data
systemctl restart mysql
2、mysqldump备份与恢复
(1)完全备份一个或过个完整的库(包括其中所有的表)
mysqldump -u[用户名] -p[密码] --databases [数据库名1] [数据库名2] > /备份路径/备份文件名.sql
#导出的为数据库脚本文件
例子
mysqldump -uroot -pabc123 --databases school > /opt/school.sql;
#备份一个完整的库到指定目录下并命名
mysqldump -uroot -pabc123 --databases mysql school > /opt/mysql-school.sql;
#备份多个完整的库到指定目录下并命名
ls /opt/
#查看是否生成备份文件
(2)完全备份Mysql服务器中所有的库
mysqldump -u root -p[密码] --all-databases > /备份路径/备份文件名.sql
例子
mysqldump -uroot -pabc123 --all-databases > /opt/all.sql
(3)完全备份指定库中的部分表
mysqldump -u root -p[密码] 库名 [表名1] [表名2] … > /备份路径/备份文件名.sql
例子
mysqldump -uroot -pabc123 -d school class1 > /opt/school_class1.sql
#使用“-d”选项,说明只保存数据库的表结构
#不使用“-d”选项,说明表数据也进行备份
(4)查看备份文件
grep -v "^--" /opt/schoo_class1.sql | grep -v "^/" | grep -v "^$"
#过滤
再在此命令的前面加上cat命令并用管道符号连接
cat school_class1.sql | grep -v "^--" /opt/school_class1.sql | grep -v "^/" | grep -v "^$"
#查看此备份标文件,并且过滤掉以--开头,/开头和空格的内容
二、Mysql完全恢复
将备份文件恢复到文件里
1、恢复数据库
mysql -uroot -pabc123 -e 'drop database school;'
#删除库school
mysql -uroot -pabc123 -e 'SHOW DATABASES;'
#查看服务器库文件
#-e选项用于指定连接mysql后执行的命令,执行完后自动退出
mysql -uroot -pabc123 < /opt/school.sql
#恢复数据库,将库备份文件注入到mysql中
mysql -uroot -pabc123 -e 'SHOW DATABASES;'
#还是查看
先删除数据库
删除成功
再恢复数据库
2、恢复数据表
mysql -uroot -pabc123 -e 'DROP TABLES school.class1;'
mysql -uroot -pabc123 -e 'SHOW TABLES FROM school;'
mysql -uroot -pabc123 school < /opt/school_class1.sql
mysql -uroot -pabc123 -e 'SHOW TABLES FROM school;'