备份的主要目的是灾难恢复
在生产环境中,数据的安全性至关重要
任何数据的丢失都可能产生严重的后果
而造成丢失的原因可能有以下几种
物理备份又可分为脱机备份(冷备份)和联机备份(热备份)
环境准备
主机 | 操作系统 | 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;
#查看
安装服务
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
(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 -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;'
#还是查看
先删除数据库
删除成功
再恢复数据库
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;'