MySQL完全、增量的备份与恢复
发表于:2025-01-21 作者:千家信息网编辑
千家信息网最后更新 2025年01月21日,数据库备份的重要性提高系统的高可用性和灾难可恢复性,在数据库系统崩溃时,没有数据备份就没法找到数据。使用数据库备份还原数据库,是数据库崩溃时提供数据恢复最小代价的最优方案。没有数据库就没有一切,数据库
千家信息网最后更新 2025年01月21日MySQL完全、增量的备份与恢复
数据库备份的重要性
- 提高系统的高可用性和灾难可恢复性,在数据库系统崩溃时,没有数据备份就没法找到数据。
- 使用数据库备份还原数据库,是数据库崩溃时提供数据恢复最小代价的最优方案。
- 没有数据库就没有一切,数据库备份是一种防范灾难的强力手段。
数据库备份的分类
- 物理备份:指对数据库操作系统的物理文件(例如数据文件、日志文件等)的备份。物理备份游客分为脱机备份(冷备份)和联机备份(热备份)。
冷备份:在关闭数据库时进行的备份操作,能够较好地保证数据库的完整性。
热备份:在数据库运行状态中进行操作,这种备份方法依赖于数据库的日志文件。 - 逻辑备份:指对数据库逻辑组件(如表等数据库对象)的备份。从数据库的备份策略角度,备份可分为完全备份、差异备份和增量备份。
完全备份:每次对数据库进行完整的备份。可以备份整个数据库,包含用户表、系统表、索引、视图和存储过程等所有数据库对象。
差异备份:备份那些自从上次完全备份之后被修改过的文件,只备份数据库的部分内容。
增量备份:只有那些在上次完全备份或者增量备份后被修改的文件才会被备份。
完全备份(在linux模式中进行备份操作)
完全物理备份
使用tar打包文件夹备份
- 数据库压缩时会使用压缩率较大的xz格式压缩。
rpm -q xz //检查xz软件包是否安装yum -y install xz //安装xz软件包
- 对数据库文件夹(/usr/local/mysql/data/)进行打包操作
tar Jcvf /opt/mysql-$(date +%F).tar.xz /usr/local/mysql/data/ //备份数据库文件夹,并以年月日的形式命名ls /opt/mysql-2018-07-02.tar.xz
- 对数据库文件进行恢复操作
只需将数据库文件的压缩包,解压缩即可,即使整个/data/目录都丢失仍可找回mkdir /abctar Jxf mysql-2018-07-03.tar.xz -C /abc/
完全逻辑备份
使用mysqldump工具备份
- 备份某个数据库
mysqldump -u root -p stady > /opt/stady.sql//备份stady库到/opt目录下,-p之后可跟密码,也可不写。不写就在回车之后输入密码验证。 **备份文件后缀都为.sql,前面名称见名知意即可**
- 查看备份文件的内容
- 备份多个数据库
mysqldump -u root -p --databases mysql stady > /opt/mysql-stady.sql
- 备份所有数据库
mysqldump -u root -p --opt --all-databases > /opt//all.sql
- 备份数据库中的表
mysqldump -u root -p stady info > /opt/stady-info.sql //险些库名,再接表名
- 备份数据库的表结构
mysqldump -u root -p -d stady info > /opt/decribe-info.sql// -d 库名+表名
数据恢复
登陆MySQL,使用source命令恢复
- 备份多个数据库
- 恢复"备份数据库中的表"步骤中的info表
[root@centos7-6 /]# mysql -u root -p Enter password: ··· //省略部分内容mysql> use stady; //切换到库Database changedmysql> drop table info; //删除info表Query OK, 0 rows affected (0.02 sec)mysql> show tables; //查看库中表Empty set (0.00 sec) //库中为空mysql> source /opt/stady-info.sql //恢复info表,格式是source+备份文件路径和文件名称Query OK, 0 rows affected (0.02 sec)··· //省略部分内容mysql> show tables; //查看库中表+-----------------+| Tables_in_stady |+-----------------+| info | //info表已经成功恢复+-----------------+1 row in set (0.00 sec)
- 使用mysql命令恢复表
[root@centos7-6 /]# mysql -u root -p Enter password: ··· //省略部分内容mysql> use stady; //切换到库Database changedmysql> drop table info; //删除info表Query OK, 0 rows affected (0.02 sec)mysql> show tables; //查看库中表Empty set (0.00 sec) //库中为空mysql> quit //退出数据库,切换到linuxBye[root@centos7-6 /]# mysql -u root -p stady < /opt/stady-info.sql //在linux环境中恢复Enter password: [root@centos7-6 /]# mysql -u root -p //进入数据库查看Enter password: ··· //省略部分内容mysql> use stady;Reading table information for completion of table and column namesYou can turn off this feature to get a quicker startup with -ADatabase changedmysql> show tables;+-----------------+| Tables_in_stady |+-----------------+| info | //info表已恢复+-----------------+1 row in set (0.00 sec)
恢复库和恢复表的方式相同,但在恢复数据表时要注意,如果备份文件中只备份了表文件,此时mysql中又没有库时,若直接恢复,会失败,必须先创建库,然后再进行恢复。
增量备份
在MySQL数据库中创建stady库,创建info表,并插入数据
mysql> use stady;mysql> select * from info;+----------+-------+| name | score |+----------+-------+| zhangsan | 80.00 || lisi | 90.00 |+----------+-------+2 rows in set (0.00 sec)
- 开启二进制日志
vim /etc/my.cnflog-bin=mysql-bin //在[mysqld]段插入该语句systemctl restart mysqld.service //重启mysql服务,会在/data/目录下生成新的日志文件(空文件)
- 使用mysqldump备份stady库
mkdir /backupmysqldump -u root -p stady > /backup/stady.sqlmysqladmin -u root -p flush-logs //刷新生成新的日志文件,存在01中,新存在的02为空文件
- 插入新数据,生成新的增量日志文件
mysql> insert into info (name,score) values ('chen',90);//进入数据库,向表中插入数据mysqladmin -u root -p flush-logs //刷新生成新的增量文件,增量备份保存在02中mysql> insert into info (name,score) values ('chen01',96);//再次进入数据库,向表中插入数据mysql> select * from info;+----------+-------+| name | score |+----------+-------+| zhangsan | 80.00 || lisi | 90.00 || chen | 90.00 || chen01 | 96.00 |+----------+-------+4 rows in set (0.00 sec)mysqladmin -u root -p flush-logs //再次刷新,增量备份保存在03中
增量恢复
- 模拟数据丢失,删除新添加的两条记录
[root@centos7-6 data]# mysql -u root -p Enter password: mysql> use stady;Database changedmysql> delete from info where name='chen';Query OK, 1 row affected (0.00 sec)mysql> delete from info where name='chen01';Query OK, 1 row affected (0.00 sec)mysql> select * from info;+----------+-------+| name | score |+----------+-------+| zhangsan | 80.00 || lisi | 90.00 |+----------+-------+2 rows in set (0.00 sec)
- 使用mysqlbinlog命令,恢复数据
[root@centos7-6 data]# mysqlbinlog --no-defaults mysql-bin.000002 | mysql -u root -pEnter password: //输入密码确认恢复数据[root@centos7-6 data]# mysql -u root -p Enter password: //输入密码登陆系统mysql> use stady;Database changedmysql> select * from info;+----------+-------+| name | score |+----------+-------+| zhangsan | 80.00 || lisi | 90.00 || chen | 90.00 |//增量备份的02数据成功恢复+----------+-------+3 rows in set (0.00 sec)
使用mysqlbinlog查看增量备份文件的内容
mysqlbinlog --no-defaults --base64-output-decode-rows -v /usr/local/mysql/data/mysql-bin.000002//--base64-output=decode-rows使用64位编码机制解码,按行读取 -v 显示出来/*!50530 SET @@SESSION.PSEUDO_SLAVE_MODE=1*/;··· //省略部分内容# at 345#180703 21:12:11 server id 1 end_log_pos 389 CRC32 0xb0bc2cb1 Write_rows: table id 118 flags: STMT_END_F### INSERT INTO `stady`.`info`### SET### @1='chen'### @2=90.00···//省略部分内容
在开启二进制日志之后就会在/data/目录下生成空的mysql-bin.000001文件,在使用该命令mysqladmin -u root -p flush-logs 后会将增量备份写入mysql-bin.000001,同时生成一个新的mysql-bin.000002空文件,等待下次刷新写入,同时再创建mysql-bin.000003……
增量断点恢复
模拟环境
模拟插入数据出现误操作,在插入两条数据的同时,删除了一条正确的数据。
[root@centos7-6 data]# mysql -u root -p Enter password: mysql> use stady;Database changedmysql> insert into info (name,score) values ('test01',88);Query OK, 1 row affected (0.00 sec)mysql> delete from info where name='chen';Query OK, 1 row affected (0.00 sec)mysql> insert into info (name,score) values ('test02',88);Query OK, 1 row affected (0.01 sec)mysql> select * from info;+----------+-------+| name | score |+----------+-------+| zhangsan | 80.00 || lisi | 90.00 || test01 | 88.00 || test02 | 88.00 |+----------+-------+4 rows in set (0.00 sec) //插入了两条test01和test02,但是chen被操作删除mysql> quit //退出数据库Bye[root@centos7-6 data]# mysqladmin -u root -p flush-logs //刷新生成新的增量文件,保存在04中Enter password:
增量时间节点恢复
- 解码导出增量备份文件,便于查看和做恢复
mysqlbinlog --no-defaults --base64-output=decode-rows -v mysql-bin.000004 > /backup/info.txtcd /backup
记录错误操作的开始时间,以及正确操作的开始时间,恢复时跳过该时段的操作。
- 根据时间点恢复被误操作的数据
mysql> drop table info; //删除被误操作的表mysql -u root -p stady < /backup/stady.sql //恢复完全备份的stady库mysqlbinlog --no-defaults --stop-datetime='2018-07-03 21:57:08' /usr/local/mysql/data/mysql-bin.000004 | mysql -u root -p //恢复误操作前的内容mysqlbinlog --no-defaults --start-datetime='2018-07-03 21:57:14' /usr/local/mysql/data/mysql-bin.000004 | mysql -u root -p //恢复误操作之后的内容
- 根据位置标记号恢复数据
mysql> drop table info; //删除被误操作的表mysql -u root -p stady < /backup/stady.sql //恢复完全备份的stady库mysqlbinlog --no-defaults --stop-position='1408' /usr/local/mysql/data/mysql-bin.000005 | mysql -u root -pmysqlbinlog --no-defaults --start-position='1674' /usr/local/mysql/data/mysql-bin.000005 | mysql -u root -p
数据完成恢复
备份
数据
数据库
文件
增量
内容
生成
日志
部分
系统
命令
密码
时间
物理
目录
中表
同时
文件夹
逻辑
切换
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
存放照片文档的数据库软件
dell服务器默认raid0
本网站服务器来自美国
单机软件一般用什么数据库
物联网遥控车服务器搭建
科技司 互联网金融师
程序调用数据库数据
图像识别和软件开发哪个好
网络技术与应用精品课
服务器生存游戏我的世界合集
宁波软件开发新感觉建站
互联网公司服务器工作
网络安全规定 个人
网络安全靠人民手抄报 青少年
考研西电网络安全
网络安全儿歌童谣简单
滨州oa管理软件开发公司
网络安全靠大家的歌
网络安全技术相关知识
计算机网络技术就业前景工资待遇
SAP界面未显示数据库
删除数据库链接文件
华软软件学院网络技术学
东方电子软件开发一月工资
监控应用服务器中间件作用
开眼数据库系统
上海信息化软件开发设施检测中心
手游服务器开发教程
网络安全靠大家的歌
数据库交叉连接和自连接