mysql基础3——数据备份与恢复、破解数据库密码

一、备份方案

备份方案概念特点
全量备份对某一个时间点上的所有数据或应用进行完全拷贝。数据恢复快,备份时间长。
增量备份在一次全量备份或上一次增量备份后,只备份与前一次相比增加和被修改的文件。
第一次增量备份的对象是进行全备后所产生的增加和修改的文件。
第二次增量备份的对象是进行第一次增量备份后所产生的增加和修改的文件。
无重复备份数据
备份时间短
还原数据须按一定顺序进行
差异备份对上一次全备份后到进行差异备份的这段时间内,对增加或修改文件的备份。方便快捷。
只需恢复第一次全量备份和最后一次差异备份。

二、备份工具mysqldump

备份语法:

  1. 备份某个库的某张表数据:mysqldump [OPTIONS] database [tables …]
  2. 备份所有数据:mysqldump [OPTIONS] --all-databases [OPTIONS]
  3. 备份某个库的所有数据:mysqldump [OPTIONS] --databases [OPTIONS] DB1 [DB2 DB3…]
常用参数释义
-u指定数据库用户名
-h指定服务器主机,请使用ip地址
-p指定数据库用户的密码
-P指定数据库监听的端口,这里的#需用实际的端口号代替,如-P3307

2.1 备份整张表数据

1.创建一个库,里面创建一张表,插入一条数据。

create database qingjun;
use qingjun;

create table student(id int not null,name varchar(10),age tinyint);
insert student value('2','zhangsan','22');

2.备份某张表,讲qingjun库里的student表数据备份到/opt/data/qingjun_20230629.sql文件。

mysqldump -uroot -pcitms qingjun student > /opt/data/qingjun_20230629.sql

3.删除该表。

mysql -uroot -pcitms -e 'drop qingjun.student;'

4.恢复表数据。

//进入数据库恢复,进入对应的库。读取sql文件,写绝对路径。
use qingjun;
source /opt/data/qingjun_20230629.sql;

//数据库外面恢复,需要指定恢复到哪个库里。
mysql qingjun < /opt/data/qingjun_20230629.sql

5.查看恢复的表数据。
在这里插入图片描述

2.2 备份整个库数据

1.现有2个库,每个库下有一张表。
在这里插入图片描述

2.备份这两个库。

mysqldump --databases qingjun baimu > /opt/data/database_all.sql

3.删除这两个库。

mysql -uroot -pcitms -e 'drop database qingjun;'
mysql -uroot -pcitms -e 'drop database baimu;'

在这里插入图片描述
4.还原两个库数据。

mysql < /opt/data/database_all.sql

在这里插入图片描述

三、全量备份

  1. 全量备份后,若在数据库里修改了数据,则恢复时是恢复到备份之前的内容。

1.全量备份。

mysqldump --all-databases > /opt/data/all.sql

2.删除数据库,模拟数据丢失。
在这里插入图片描述
3.恢复数据库,若如果数据库都存在,也可以执行此步骤。

mysql < /opt/data/all.sql

在这里插入图片描述

四、差异备份

1.开启MySQL服务器的二进制日志功能。

//添加如下2行内容。
vim /etc/my.cnf 
server-id = 10          ##设置服务器标识符,自定义设置数字。
log-bin=mysql_bin       ##开启二进制日志功能。

//重启服务。
service mysqld restart

在这里插入图片描述
2.全量备份,启用事务日志。

mysqldump -uroot -pcitms --single-transaction --flush-logs --master-data=2 --all-databases --delete-master-logs > /opt/data/all_1.sql

在这里插入图片描述
3.此时修改数据。

//插入2条新内容。
insert student(id,name,age) values(3,'wangwu',24),(4,'zhaoliu',33);

//修改1条内容。
update student set name='baimu' where age=33;

在这里插入图片描述
4.此时删除数据库,模拟数据丢失。此时的事务日志/opt/data/mysql_bin.000002已经记录了刚才的所有操作,最后一条操作是删除数据的命令。

mysql -uroot -pcitms -e'drop database qingjun;'

在这里插入图片描述
5.刷新事务日志,会生成一个新事务日志。

mysqladmin -uroot -pcitms flush-logs

在这里插入图片描述

6.数据恢复。

  • 第一步,全量恢复。

1.全量恢复后,查看表内容,表里没有之前增加和修改内容,是因为修改操作是在全量备份之后进行的,是恢复到增、改之前的内容。
在这里插入图片描述
2.若要恢复到增改之后的内容,就要用差量备份恢复,需要用到mysql_bin.000002这个事务日志文件,这里记录到了增、改操作。

  • 第二步,差异恢复。

1.根据事务日志查看误删数据库这步操作的开始编号,如下图得知,删除qingjun数据库之前是799,删除之后是900。

show binlog events in 'mysql_bin.000002';

在这里插入图片描述

2.此时恢复到删除之前的799,查看恢复结果。

mysqlbinlog --stop-position=799 /opt/data/mysql_bin.000002 |mysql -uroot -pcitms

在这里插入图片描述

五、数据库密码破解

  • 数据库账号密码时存放在mysql.user表里,正常情况下用户登陆时会读取该表记录的密码,与用户输入的密码对比,验证是否正确。
  • 若数据库密码遗忘,可以通过一个配置参数来进入数据库修改密码。

1.修改配置文件,重启服务。

//添加该参数, 表示登录时跳过密码验证,即是可以跳过密码验证直接进入数据库。
vim /etc/my.cnf 
skip-grant-tables     

//重启服务。
service mysqld restart

2.进入数据库修改密码,将authentication_string的原本的密文改成新密码。

update user set authentication_string=password('citms@123') where user='root';

在这里插入图片描述
3.将刚才再配置文件新增的那个配置参数删除,并重启服务,再使用新密码登录数据库。
在这里插入图片描述

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

百慕卿君

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值