MySQL数据库的备份与恢复(一)完全备份与恢复

MySQL数据库的备份与恢复

一、数据备份的重要性

备份的主要目的是灾难恢复
在生产环境中,数据的安全性至关重要
任何数据的丢失都可能产生严重的后果

而造成丢失的原因可能有以下几种

  1. 程序错误:指对数据库操作的程序难免有些错误,造成数据丢失
  2. 人为错误:指由于使用人员的误操作造成的数据被破坏,还有可能是黑客对系统攻击造成的数据丢失等
  3. 计算机失败:指运行数据库的服务器操作系统或软件损坏,有可能造成数据的损坏
  4. 磁盘失败:指硬盘等存储数据的硬件设备,长时间运行后可能损坏,造成数
    据丢失
  5. 灾难(如火灾、地震)和偷窃:指自然灾害等的发生,有可能造成数据丢失

二、数据库备份的分类

从物理与逻辑的角度分类:

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;
#查看

mark

一、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/
#查看是否生成备份文件

mark

(2)完全备份Mysql服务器中所有的库

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

例子

mysqldump -uroot -pabc123 --all-databases > /opt/all.sql

mark

(3)完全备份指定库中的部分表

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

例子

mysqldump -uroot -pabc123 -d school class1 > /opt/school_class1.sql
#使用“-d”选项,说明只保存数据库的表结构
#不使用“-d”选项,说明表数据也进行备份

mark

(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 "^$"

#查看此备份标文件,并且过滤掉以--开头,/开头和空格的内容

mark

二、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;'
#还是查看

先删除数据库

mark

删除成功

再恢复数据库

mark

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;'

mark

猜你喜欢

转载自blog.csdn.net/Gloomyumenge/article/details/113951070