文章目录
- 一、备份方案
- 二、备份工具mysqldump
- 2.1 备份整张表数据
- 2.2 备份整个库数据
- 三、全量备份
- 四、差异备份
- 五、数据库密码破解
一、备份方案
备份方案 | 概念 | 特点 |
---|---|---|
全量备份 | 对某一个时间点上的所有数据或应用进行完全拷贝。 | 数据恢复快,备份时间长。 |
增量备份 | 在一次全量备份或上一次增量备份后,只备份与前一次相比增加和被修改的文件。 第一次增量备份的对象是进行全备后所产生的增加和修改的文件。 第二次增量备份的对象是进行第一次增量备份后所产生的增加和修改的文件。 | 无重复备份数据 备份时间短 还原数据须按一定顺序进行 |
差异备份 | 对上一次全备份后到进行差异备份的这段时间内,对增加或修改文件的备份。 | 方便快捷。 只需恢复第一次全量备份和最后一次差异备份。 |
二、备份工具mysqldump
备份语法:
- 备份某个库的某张表数据:mysqldump [OPTIONS] database [tables …]
- 备份所有数据:mysqldump [OPTIONS] --all-databases [OPTIONS]
- 备份某个库的所有数据: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.全量备份。
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.将刚才再配置文件新增的那个配置参数删除,并重启服务,再使用新密码登录数据库。