MySQL数据库备份与恢复
2023-12-27 00:55:01
目录
一、数据库备份
(一)数据备份的重要性
? ? ? ?备份的主要目的是灾难恢复,在生产环境中,数据的安全性至关重要,任何数据的丢失都可能产生严重的后果。
(二)备份分类
1.物理备份
? ? ? 直接对数据库的物理文件(数据文件、日志文件等)进行备份
2.逻辑备份
? ? ?对数据库的库和表对象以SQL语言的形式导出进行备份
(三)备份策略
1.完全备份
? ? ? 每次备份都备份完整的库或者表数据
2.差异备份
? ? ? 只备份上一次完全备份后的更新数据
3.增量备份
? ? ? 每次备份只备份上一次完全备份或增量备份后的更新数据
(四)常见备份方法
1.完全备份策略
(1)物理冷备
① 关闭数据库
systemctl stop mysqld
#关闭数据库
② 压缩备份
? ? 使用tar命令打包备份数据库的数据目录和文件?
tar Jcvf /opt/mysql_all_$(date +%F).tar.xz /usr/local/mysql/data/
#用tar命令打包备份数据库的数据目录和文件?
③?打好的包远程复制到新开的服务器
④ 新服务器下data目录改名
⑤?将opt下的data目录移动过来
⑥?开启mysql数据库
⑦ 查看备份的库和表
(2)mysqldump逻辑热备
① 备份一个或多个库及库中所有的表数据
mysqldump -uXXX -pXXX --databases 库1 [库2 ....] > XXX.sql
#备份一个或多个库及库中所有的表数据
②?备份所有的库
mysqldump -uXXX -pXXX --all-databases > XXX.sql
#备份所有库
③?备份指定库中的所有的表数据,不包含库对象
mysqldump -uXXX -pXXX 库名 > XXX.sql
#备份指定库中的所有的表数据,不包含库对象
④?备份指定库中的一个或多个表数据,不包含库对象
mysqldump -uXXX -pXXX 库名 表1 [表2 ....] > XXX.sql
#备份指定库中的一个或多个表数据,不包含库对象
2.增量备份策略
(1)开启二进制日志功能
? ? ? ?二进制日志(binlog)有3种不同的记录格式:STATEMENT(基于SQL语句)、ROW(基于行)、MIXED(混合模式),默认格式是STATEMENT
vim /etc/my.cnf
[mysqld]
log-bin=mysql-bin
binlog_format = MIXED/STATEMENT/ROW
#指定二进制日志(binlog)的记录格式为 MIXED,STATEMENT(基于SQL语句)、ROW(基于行)、MIXED(混合模式),默认格式是STATEMENT
server-id = 1
#开启二进制日志功能
systemctl start mysqld
#开启数据库
ls -l /usr/local/mysql/data/mysql-bin.*
#长格式查看文件内容
(2)通过刷新二进制日志间接实现增量备份
mysqladmin -uXXX -pXXX flush-logs
(3)查看二进制日志内容
mysqlbinlog --no-defaults --base64-output=decode-rows -v <BINLOG>
(五)恢复方法
1.完全恢复
(1)物理恢复
① 登录数据库
mysql -uXXX -pXXX
②?执行 source
如果sql文件是只备份了表数据的文件,需要先创建库并 use 切换库后再执行
source XXX.sql
(2)mysqldump 恢复
① 恢复库
mysql -uXXX -pXXX < XXX.sql
cat XXX.sql | mysql -uXXX -pXXX
#恢复库
② 恢复库中的表
mysql -uXXX -pXXX 库名 < XXX.sql
cat XXX.sql | mysql -uXXX -pXXX 库名
#恢复表
2.增量恢复
(1)一般恢复
? ? ? ?使用二进制日志增量恢复
mysqlbinlog --no-defaults <BINLOG> | mysql -uXXX -pXXX
#使用二进制日志增量恢复
① 添加数据
② 查看日志文件
③ 删除表
④ 二进制日志增量恢复
(2)断点恢复
? ? 如果需要恢复到某条sql语句之前的所有数据,就stop在这个语句的位置点或时间点之前。
? ??如果需要恢复某条sql语句及其之后的所有数据,就从这个语句的位置点或时间点开始start。
①?基于位置点恢复
mysqlbinlog --no-defaults --start-position='开始位置点' --stop-position='结束位置点' <BINLOG> | mysql -uXXX -pXXX
#基于位置点恢复
②?基于时间点恢复
mysqlbinlog --no-defaults --start-datetime='YYYY-mm-dd HH:MM:SS' --stop-position='YYYY-mm-dd HH:MM:SS' <BINLOG> | mysql -uXXX -pXXX
#基于时间点恢复
文章来源:https://blog.csdn.net/byq002488/article/details/135224555
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!