mysql数据备份

一.数据库备份的概述

  • 数据库备份提高系统的高可用性和灾难恢复性,在数据库系统崩溃时,没有数据库备份就没办法找到数据
  • 使用数据库备份还原数据库,是数据库崩溃时提供数据恢复最小代价的最优方案,如果让用户重新添加数据,代价未免太大
  • 没有数据就没有一切,数据库备份是一种防范灾难的强力手段
  • 有多种原因造成数据的丢失:程序错误、人为错误、计算机失败、磁盘失败、物理灾难

二.数据库备份的分类

从物理与逻辑的角度区分

  • 物理备份:指对数据库操作系统的物理文件(如数据文件、日志文件等)的备份。物理备份又可以脱机备份(冷备份:在关闭数据库时进行的备份操作,能够较好地保证数据库的完整性)和联机备份(热备份:在数据库运行状态中进行操作,这种备份方法依赖于数据库的日志文件)
  • 逻辑备份:指对数据库的逻辑组件(如表等数据库对象)的备份

从数据库的备份策略角度区分

  • 完全备份:每次都对数据库进行完整的备份。可以备份整个数据库,包含用户表、系统表、索引、视图和存储过程等所有数据库对象,但是它需要花费更多的时间和空间,所以时间比较长
  • 差异备份:备份那些自从上次完全备份之后被修改过的文件,只备份数据库部分的内容,它比最初的完全备份小,因为只包含自上次完全备份以来所改变的数据库。它的优点是存储和恢复速度快
  • 增量备份:只有那些在上次完全备份或者增量备份后被修改的文件才会被备份
  • 备份方式比较
备份方式完全备份差异备份增量备份
完全备份时的状态表1、表2表1、表2表1、表2
第一次添加内容创建表3创建表3创建表3
备份内容表1、表2、表3表3表3
第二次添加内容创建表4创建表4创建表4
备份内容表1、表2、表3、表4表3、表4表4

三.完全备份与恢复

  • 完全备份的优点是备份与恢复操作简单方便,缺点是数据存在大量重复,占用大量的备份空间,备份时间长
  • 完全备份有两种方式:使用tar打包文件夹备份;使用mysqldump工具备份

使用tar打包文件夹备份

  • MySQL的数据库文件默认都是保存在安装目录的data文件夹下面,可以直接保存data文件夹,但是占用的空间较大,可以使用tar打包压缩进行保存

  • 模拟恢复数据库,删除数据库

  • 解压备份数据,查看数据库

使用mysqldump工具备份

  • 对单个表进行完全备份

  • 模拟source恢复

  • 模拟mysql命令恢复

  • 对表结构备份

  • 对单个库进行备份

  • 对多个库备份

  • 对所有库备份

  • 模拟恢复,source命令和mysql命令

 
 
  1. ##删除单个库
  2. mysql> drop database school;
  3. ##执行source命令
  4. mysql> source /opt/school.sql

 
 
  1. ##删除单个库
  2. mysql> drop database school;
  3. ##执行mysql命令
  4. [root@localhost opt] # mysqldump -u root -pabc123 --all-databases > /opt/school.sql

注:>,会覆盖原有的数据

四.增量备份与恢复

  • 增量备份的优点是没有重复数据,备份量不大,时间短;缺点也明显,需要上次完全备份以及完全备份之后的所有增量备份才能恢复,而且对所有增量备份进行逐个反推恢复,操作较为繁琐
  • MySQL没有直接提供增量备份的方法,但是通过MySQL的二进制日志间接实现增量备份
  • 二进制日志保存了所有更新或者可能更新或者可能更新数据库的操作
  • 二进制日志在启动MySQL服务器后开始记录,并且在文件达到max_binlog_size所设置的大小或者接收到的flush logs命令之后重新创建日志文件
  • 只需要定时执行flush logs 方法重新创建新的日志,生成日志文件序列,并及时把这些日志保存到安全的地方就完成了一个时间段的增量备份

增量备份的具体操作

  • 开启二进制日志功能,重启服务

 
 
  1. [root@localhost ~] # vim /etc/my.cnf
  2. ...
  3. log-bin=mysql-bin
  4. ...
  5. [root@localhost ~] # service mysqld restart
  6. Shutting down MySQL... SUCCESS!
  7. Starting MySQL.. SUCCESS!
  8. [root@localhost ~] #
  • 确定字符集使用 utf-8 ,避免出现乱码问题

 
 
  1. mysql> show variables like '%char%';
  2. +--------------------------+----------------------------------+
  3. | Variable_name | Value |
  4. +--------------------------+----------------------------------+
  5. | character_set_client | utf8 |
  6. | character_set_connection | utf8 |
  7. | character_set_database | utf8 |
  8. | character_set_filesystem | binary |
  9. | character_set_results | utf8 |
  10. | character_set_server | utf8 |
  11. | character_set_system | utf8 |
  12. | character_sets_dir | /usr/local/mysql/share/charsets/ |
  13. +--------------------------+----------------------------------+
  14. 8 rows in set (0.00 sec)
  15. mysql>
  • 使用mysqldump工具进行完全备份表和库

 
 
  1. [root@ 192 opt] # ls
  2. mysql -5.6 .26 rh
  3. [root@ 192 opt] #
  4. [root@ 192 opt] # mysqldump -u root -pabc123 school info > /opt/info$(date +%F).sql
  5. Warning: Using a password on the command line interface can be insecure.
  6. [root@ 192 opt] # mysqldump -u root -pabc123 --databases school > /opt/school$(date +%F).sql
  7. Warning: Using a password on the command line interface can be insecure.
  8. [root@ 192 opt] # ls /opt
  9. info2020 -01 -08.sql mysql -5.6 .26 rh school2020 -01 -08.sql
  • 查看二进制文件

  • 刷新生成新二进制文件,记录接下来的插入命令

 
 
  1. [root@192 mysql]# mysqladmin -uroot -pabc123 flush-logs
  2. Warning: Using a password on the command line interface can be insecure.
  3. [root@192 mysql]# ls
  4. auto .cnf ibdata1 ib_logfile1
  5. localhost .localdomain .pid mysql-bin .000001
  6. mysql-bin .index performance_schema test
  7. class ib_logfile0 localhost .localdomain .err
  8. mysql mysql .sock school

  • 查看二进制日志文件,完成增量备份

增量备份的恢复


 
 
  1. /home/mysql/mysql-bin .000001 中的信息
  2. 第一条插入语句的开始位置和时间
  3. # at 447
  4. #200108 22:19:33
  5. 第一条语句的提交时间和位置
  6. # at 595
  7. #200108 22:19:59
  8. 第二条删除语句的开始位置和时间
  9. # at 678
  10. #200108 22:19:59
  11. 第二条删除语句的提交位置和时间
  12. # at 817
  13. #200108 22:20:15
  14. 第三条插入语句的开始位置和时间
  15. # at 900
  16. #200108 22:20:15
  17. 第三条语句的提交位置和时间
  18. # at 1048
  19. #200108 22:20:29
  • 基于时间的恢复

 
 
  1. [ root@ 192 mysql]# mysqlbinlog --stop-datetime= '2020-01-08 22:19:59'
  2. /home/mysql/mysql-bin .000001 | mysql -u root -pabc123
  3. Warning: Using a password on the command line interface can be insecure.
  4. [ root@ 192 mysql]# mysqlbinlog --start-datetime= '2020-01-08 22:20:15'
  5. /home/mysql/mysql-bin .000001 | mysql -u root -pabc123
  6. Warning: Using a password on the command line interface can be insecure.
  • 基于位置的恢复

 
 
  1. [ root@ 192 mysql]# mysqlbinlog --start-position= '595'
  2. /home/mysql/mysql-bin .000001 | mysql -u root -pabc123
  3. Warning: Using a password on the command line interface can be insecure.
  4. [ root@ 192 mysql]# mysqlbinlog --stop-position= '900'
  5. /home/mysql/mysql-bin .000001 | mysql -u root -pabc123
  6. Warning: Using a password on the command line interface can be insecure.
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值