MySQL备份与恢复_mysql备份与恢复命令,面试必问知识点

先自我介绍一下,小编浙江大学毕业,去过华为、字节跳动等大厂,目前阿里P7

深知大多数程序员,想要提升技能,往往是自己摸索成长,但自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

因此收集整理了一份《2024年最新大数据全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友。
img
img
img
img
img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上大数据知识点,真正体系化!

由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新

如果你需要这些资料,可以添加V获取:vip204888 (备注大数据)
img

正文

1.优点

备份与恢复操作简单方便。

2.缺点

(1)数据存在大量的恢复。

(2)占用大量的备份空间。

(3)备份与恢复时间长。

3.数据库完全备份分类

(1)物理冷备份与恢复

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

(2)mysqldump备份与恢复

直接替换现有MySQL目录即可。

(3)mysqldump备份与恢复

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

五、MySQL完全备份与恢复

1.环境准备

use 数据库名;
create table if not exists info1 (
id int(4) not null auto_ increment,
name varchar(10) not null,
age char(10) not null, 
hobby varchar (50),
primary key (id));
insert into info1 values(1, 'user1' ,20, 'running');
insert into info1 values (2, 'user2',30, 'singing');

2.备份与恢复

InnoDB 存储引擎的数据库在磁盘上存储成三个文件: db.opt (表属性文件)、表名.frm(表结构文件)、表名.ibd(表数据文件)。

(1)物理冷备份与恢复
systemctl stop mysqld
yum -y install xz

(2)压缩备份
tar Jcvf /opt/mysql_all_ $(date +%F) .tar.xz /usr/local/mysql/data/
mv /usr/local/mysql/data/ /opt/

(3)解压恢复
tar jxvf /opt/mysql_all_2022-9-17.tar.xz -C /usr/local/mysql/data/
cd /usr/local/mysql/data 
mv /usr/local/mysql/data/* ./

如果重启失败更改data的权限

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

(1)完全备份一个或多个完整的库(包括其中所有的表)
mysqldump -u root -p[密码] --databases 库名1 [库名2] ... > /备份路径/ 备份文件名.sql

导出的就是数据库脚本文件

例:
mysqldump -u root -p --databases 数据库名 > /opt/数据库名. sql
备份一个数据库

mysqldump -u root -p --databases mysql 数据库名 > /opt/mysql-数据库名.sql
备份mysql与另一个数据库两个库

(2)完全备份MySQL服务器中所有的库
mysqldump -u root -p[密码] --all-databases > / 备份路径/备份文件名.sql

例:
mysqldump -u root -P --all-databases > /opt/all.sql

(3)完全备份指定库中的部分表
mysqldump -u root -p[密码] 库名[表名1] [表名2] ... > /备份路径/备份文件名.sql

例:

mysqldump -u root -p [-d] 数据库名 info1 info2 > /opt/库名_info1. sql
使用“-d”选项,说明只保存数据库的表结构
不使用“-d"选项,说明表数据也进行备份
做为一个表结构模板

(4) 查看备份文件
grep -v "^--" /opt/库名_info1.sql | grep -v "^/" | grep -v "^$"

六、MySQL物理冷备份及恢复

先备份数据库中的数据打包,模拟数据丢失,损坏,利用备份打包恢复数据。

1.物理冷备份

1)先关闭数据库,之后打包备份。
2)恢复数据库。
3)恢复数据库,采用将备份数据mv成线上库文件夹的方式。

(1)创建数据库数据
mysql -uroot -p密码	                        登录数据库
mysql> create database 数据库名;  			创建数据库
mysql> use 库名;  						    使用数据库
mysql> create table a(id int(10)); 			创建数据库并设置数据
mysql> desc a; 								描述表a的结构
mysql> exit 								退出

(2)进行数据备份打包
systemctl stop mysqld    关闭数据库
tar zcvf /opt/mysql_all-$(date +%F).tar.gz /usr/local/mysql/data/  源文件来源路径
备份打包所有数据库,当天日期
cd /opt/ 
ls -lh   查看文件
(3)模拟数据丢失,损坏
systemctl start mysqld          开启数据库
mysql -uroot -p密码             登录数据库
mysql> show databases;          查看数据库信息
mysql> drop database 数据库名;   删除数据库
mysql> show databases;          查看数据库
mysql> exit

(4)恢复数据
systemctl stop mysqld                  关闭数据库
cd /opt/ 
tar zxvf mysql_all-2020-12-24.tar.gz   解压缩
ls -lh
mkdir mysql_old                        创建目录
mv /usr/local/mysql/data/ mysql_old/  
                                       剪切在备份完成之前产生的数据
mv usr/local/mysql/data/ /usr/local/mysql/
cd /usr/local/mysql/
ls -lh
cd
systemctl start mysqld                开启数据库
mysql -uroot -p密码                   登录数据库
mysql> show databases;                查看数据库信息 ,数据恢复
mysql> use 库名;                      使用数据库
mysql> show tables;                   查看表
mysql> desc a;                        模式表结构
mysql> exit                           退出

七、MySQL完全备份与恢复

InnoDB 存储引擎的数据库在磁盘上存储成三个文件: db.opt(表属性文件)、表名.frm(表结构文件)、表名.ibd(表数据文件)。

1.mysqldump 备份与恢复

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

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

例:
mysqldump -u root -p --databases 库名 > /opt/库名.sql                备份一个gcc库
mysqldump -u root -p --databases mysql 库名 > /opt/mysql-库名.sql    备份mysql与 gcc两个库

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

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

例:
mysqldump -u root -p --all-databases > /opt/all.sql

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

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

例:
mysqldump -u root -p [-d] 库名 info1 info2 > /opt/gcc_info1.sql

使用“-d”选项,说明只保存数据库的表结构
不使用“-d"选项,说明表数据也进行备份

2.恢复数据库

(1)使用mysqldump导出的文件,可使用导入的方法。

source命令
mysql命令

(2)使用source恢复数据库的步骤

登录到MySQL数据库
执行source备份sql脚本的路径

(3)source恢复的示例

MySQL [(none)]> source /backup/all-data.sql

3.使用source命令恢复数据

(1)模拟数据库出现问题

mysql -uroot -p密码           登录数据库
mysql> show databases;        查看数据库信息
mysql> drop database 库名;    删除数据库
mysql> show databases; 

(2)应用

1)创建备份(对表进行备份)

mysqldump -uroot -p密码 库名 info > /opt/info.sql  
mysql -uroot -p密码 登录数据库查看

2)恢复数据表

mysql> source /opt/info.sql   
mysql> select * from info;  查询所有字段
mysql> show tables;         查看表信息

3)方法2

mysqldump -uroot -p密码 库名 info >/abc/库名.info.sql

mysql -uroot -p密码 -e 'drop table 库名.info;'

mysql -uroot -p密码 -e 'show tables from 库名;'

mysql -uroot -p密码 库名 < /abc/库名.info.sql 

mysql -uroot -p密码 -e 'show tables from 库名'

mysqldump 严格来说属于温备份,会需要对表进行写入的锁定

八、MySQL 增量备份与恢复

1.MySQL数据库增量恢复

(1)一般恢复

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

(2)基于位置恢复

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

(3)基于时间点恢复

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

2.MySQL 增量备份

(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。

1)STATEMENT(基于SQL语句):
①每一条涉及到被修改的sql 都会记录在binlog中。
②缺点:日志量过大,如sleep()函数,last_insert_id()>,以及user-defined fuctions(udf)、主从复制等架构记录日志时会出现问题。

2)ROW(基于行)
①只记录变动的记录,不记录sql的上下文环境。
②缺点:如果遇到update…set…where true 那么binlog的数据量会越来越大。

create table info 
insert into info values(1,'自定义');
insert into info values(2,'自定义');
delete id=其中一个

3)MIXED 推荐使用
一般的语句使用statement,函数使用ROW方式存储。

systemctl restart mysqld 

4)查看二进制日志文件的内容

cp /usr/local/mysql/data/mysql-bin.000002 /opt/

mysqlbinlog --no-defaults  /opt/mysql-bin.000002
mysqlbinlog --no-defaults --base64-output=decode-rows -v /opt/mysql-bin.000002

--base64-output=decode-rows:使用64位编码机制去解码(decode)并按行读取(rows)
-v: 显示详细内容
--no-defaults : 默认字符集(不加会报UTF-8的错误)

PS: 可以将解码后的文件导出为txt格式,方便查阅
mysqlbinlog --no-defaults --base64-output=decode-rows -v /opt/mysql-bin.000002 > /opt/mysql-bin.000002

5)二进制日志中需要关注的部分

①at :开始的位置点 
②end_log_pos:结束的位置 position (位置点)
③时间戳: 210712 11:50:30 
④SQL语句

(2)进行完全备份
mysqldump -uroot -p school info > /opt/库名_info1_$(date +%F).sql
mysqldump -uroot -p密码 库名 > /opt/库名_all_$(date +%F).sql

可每天进行增量备份操作,生成新的二进制日志文件(例如:mysql-bin.000002)
mysqladmin -u root -p flush-logs

1)插入新数据,以模拟数据的增加或变更

PS:在第一次完全备份之后刷新二进制文件,在第二个二进制文件中记载着"增量备份的数据"
create database 数据库名;

use 库名;

create table test1 (id int(2),name varchar(4));

insert into test1 values(1,'one');

insert into test1 values(2,'two');

select * from test1;

再次生成新的二进制日志文件(例如:mysql-bin.000003)
mysqladmin -u root -p flush-logs

之前的步骤的数据库操作会保存到mysql-bin.000002文件中,之后测试删除数据库的操作会保存在mysql-bin.000003文件中 (以免当基于mysql-bin.000002日志进行恢复时,依然会删除库)

3.MySQL增量恢复

(1)一般恢复

1)模拟丢失更改的数据的恢复步骤(直接使用恢复即可)
① 备份数据库库中test1表

mysqldump -uroot -p密码 库名 test1 > /opt/库名_test1.sql

② 删除数据库中test1表

drop table 表名.test1;

③ 恢复test1表

mysql -uroot -p 库名 < info-年-月-日.sql 

查看日志文件

mysqlbinlog --no-defaults --base64-output=decode-rows -v mysql-bin.000002

2)模拟丢失所有数据的恢复步骤

模拟丢失所有数据
mysql -uroot -p密码
show databases;
exit

基于mysql-bin.000002恢复

mysqlbinlog --no-defaults /opt/mysql-bin.000002 | mysql -u root -p
(2)断点恢复
mysqlbinlog --no-defaults --base64-output=decode-rows -v /opt/mysql-bin.000002
(3)基于位置恢复

1)插入三条数据

use 数据库;

select * from test1;

insert into test1 values(3,'true');

insert into test1 values(4,'f');

insert into test1 values(5,'t');

select * from test1;

2)确认位置点,刷新二进制日志并删除test1表

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化的资料的朋友,可以添加V获取:vip204888 (备注大数据)
img

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

模拟丢失所有数据
mysql -uroot -p密码
show databases;
exit

基于mysql-bin.000002恢复

mysqlbinlog --no-defaults /opt/mysql-bin.000002 | mysql -u root -p
(2)断点恢复
mysqlbinlog --no-defaults --base64-output=decode-rows -v /opt/mysql-bin.000002
(3)基于位置恢复

1)插入三条数据

use 数据库;

select * from test1;

insert into test1 values(3,'true');

insert into test1 values(4,'f');

insert into test1 values(5,'t');

select * from test1;

2)确认位置点,刷新二进制日志并删除test1表

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化的资料的朋友,可以添加V获取:vip204888 (备注大数据)
[外链图片转存中…(img-OzOPDO5D-1713311485673)]

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

  • 21
    点赞
  • 27
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值