数据库的备份与恢复

1、数据库备份的重要性
(1)提高系统的高可用性和灾难恢复性
(2)使用数据库备份还原数据库,是数据库崩溃后数据恢复的最小代价最优方案。
(3)没有数据就没有一切,数据库备份是防范灾难的一种强力手段
2、数据库数据丢失的原因
(1)程序错误
(2)人为错误
(3)计算机失败:操作系统或软件损坏
(4)磁盘失败:硬盘等存储设备长时间运行后可能损坏
(5)灾难(如火灾、地震等)和偷窃
3、备份的分类:
物理角度:
冷备份:关闭数据库进行备份,较好保证数据库完整性
热备份:在数据库运行状态进行操作,依赖于数据库日志文件
逻辑角度:
完全备份:每次对数据进行完整的备份。
差异备份:备份上次完全备份后修改过的文件,并保留以前差异备份的内容,只备份数据库部分内容。
增量备份:只备份上次完全备份或增量备份后被修改的文件。
4、完全备份解读:是完全的备份,是增量备份的基础
优点:备份与恢复操作简单方便
缺点:数据存在大量重复、占用大量备份空间,备份时间长。
5、备份操作
(1)tar包备份,数据大可以xz打包
查看文件大写:du -sh 文件名
yum -y install xz
tar jcvf /opt/mysql-$(date+%F).tar.xz /usr/local/mysql/data
tar jxzf /opt/mysql-2020-8-18.tar.xz /usr/local/mysql/data
(2)mysqldump工具备份
单个表完全备份:mysqldump -u 用户名 -p [密码] [选项] [库名] [数据表名]>/备份路径/备份文件名
单个库完全备份:mysqldump -u 用户名 -p [密码] [选项] [库名] >/备份路径/备份文件名
多个库完全备份:mysqldump -u 用户名 -p [密码] [选项] databases [库名1] [库名2] >/备份路径/备份文件名
所有库完全备份:mysqldump -u 用户名 -p [密码] [选项] –all-databases>/备份路径/备份文件名
备份表结构:mysqldump -u 用户名 -p [密码] -d 库名 表名>/备份路径/备份文件名

二、mysql完全恢复
恢复整库操作:source或mysql命令
1、source命令:确保备份文件中有建库命令,如果没有要手动创建并进入库中
(1)登录数据库
(2)删除损坏数据库:drop database 库名;
(3)source 备份文件
2、source命令恢复表:和恢复库相同操作,只是要先进入库
3、mysql命令整库恢复:确保备份文件中有建库命令,如果没有要手动创建并进入库中
(1)删除损坏的数据库
(2)退出mysql
(3)mysql -u 用户名 -p [密码]<库备份文件脚本路径
4、mysql命令恢复表:其他和恢复库相同,最后
mysql -u 用户名 -p [密码] 库名<库备份文件脚本路径

一、Mysql增量备份
1、使用原因:完全备份重复数据多,备份时间长。
2、特点:没有重复数据,备份量不大,时间短;恢复操作繁琐。通过二进制日志实现间接增量备份。
3、实际操作:
(1)开启二进制日志功能:在配置文件中加入log-bin=选项之后重启;或mysqld –log-bin=filepath之后重启
(2)确定字符集使用的是utf-8,避免出现乱码
(3)创建备份文件保存的文件夹/opt/bak_sql
(4)每周选择服务器负载较轻的时间段进行备份。
备份client库user_info表
mysqldump -uroot -p123456 client user_info>/opt/bak_sql/client_userinfo_KaTeX parse error: Expected group after '_' at position 89: …/bak_sql/client_̲(date +%F).sql
(5)每天进行增量备份操作:生成新二进制文件
mysqladmin -uroot -p123456 flush-logs
(6)插入新数据,模拟数据的增加或变更
(7)mysqlbinlog命令查看二进制文件内容
(8)把二进制文件复制到保存备份的目录,完成增量备份
二、mysql增量恢复
1、需要使用的场景
(1)认为sql语句破坏了数据库
(2)进行下一次全备之前发生系统故障导致数据库数据丢失
(3)主从架构中,主库数据发生故障
2、丢失完全备份之后更改的数据恢复:
(1)准备完全备份文件:mysqldump -uroot -p123456 client>/opt/bak_sql/client_$(date +%F).sql 实际生产中是寻找已有的最后一次完全备份文件
(2)使用flush-logs生产新的二进制日志文件,生产中也是找寻已有的
mysqladmin -uroot -p123456 flush-logs
(3)使用二进制文件进行恢复操作,需要注意恢复顺序,要先恢复最先生成的二进制文件
mysqlbinlog /usr/local/mysql/data/mysql-bin.000045|mysql -uroot -p123456
mysqlbinlog /usr/local/mysql/data/mysql-bin.000046|mysql -uroot -p123456
…… …… …… ……
3、完全备份之后丢失所有数据的恢复步骤
(1)先使用mysql命令进行完全备份的恢复操作
Mysql -uroot -p123456 client</opt/bak_sql/client_2020-08-20.sql
(2)使用二进制文件进行恢复操作,需要注意恢复顺序,要先恢复最先生成的二进制文件
mysqlbinlog /usr/local/mysql/data/mysql-bin.000045|mysql -uroot -p123456
mysqlbinlog /usr/local/mysql/data/mysql-bin.000046|mysql -uroot -p123456
…… …… …… ……
4、基于时间点与位置的恢复
(1)基于时间点的恢复,mysqlbinlog结合–start-datetim和–stop-datetime跳过误操作的语句。
mysqlbinlog –stop-datetime=’20-08-19 14:04:09’ /usr/local/mysql/data/mysql-bin.000048|mysql -uroot -p123456
mysqlbinlog –start-datetime=’20-08-19 14:04:18’ /usr/local/mysql/data/mysql-bin.000048|mysql -uroot -p123456
14:04:09~14:04:18之间的语句不执行,其他该日志的语句执行。
(2)基于位置的恢复:
mysqlbinlog –stop-datetime=’513’ /usr/local/mysql/data/mysql-bin.000048|mysql -uroot -p123456
mysqlbinlog –start-datetime=’540’ /usr/local/mysql/data/mysql-bin.000048|mysql -uroot -p123456
位置513~540中间的语句不执行
5、企业备份策略的思路
(1)数据更新频繁,则备份频繁
(2)数据较为重要,则在有适当更新时备份
(3)数据库压力小的时候进行全备,如一周一次,然后每天增备。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值