完全备份:每次对数据进行完整备份,即对整个数据库、数据库结构和文件结构的备份,保存的是备份完成时刻的数据库,是差异备份与增量备份的基础完全备份的备份与恢复操作都非常简单方便,但是数据存在大量的重复并且会占用大量的磁盘空间,备份的时间也很长
差异备份:备份那些自从上次完全备份之后被修改过的所有文件,备份的时间节点是从上次完整备份起,备份数据量会越来越大。恢复数据时只需要恢复上次的完全备份与最佳的一次差异备份
增量备份:只有那些在上次完全备份或者增量备份后被修改的文件才会被备份
备份方式 | 完全备份 | 差异备份 | 增量备份 |
---|---|---|---|
完全备份时的状态 | 表1、表2 | 表1、表2 | 表1、表2 |
第一次添加内容 | 创建表3 | 创建表3 | 创建表3 |
备份内容 | 表1、表2、表3 | 表3 | 表3 |
第二次添加内容 | 创建表4 | 创建表4 | 创建表4 |
备份内容 | 表1、表2、表3、表4 | 表3、表4 | 表4 |
打包前应关闭数据库,防止出现数据丢失的错误
[root@localhost mysql]# tar -jcf /opt/mysql-$(date +%F).tar.xz /usr/local/mysql/data/ //数据库占用空间较大,可用xz格式压缩 [root@localhost mysql]# ls /opt/ mysql-2021-07-13.tar.xz [root@localhost mysql]# du -sh data/ //压缩前大小 134M data/ [root@localhost mysql]# du -sh /opt/mysql-2021-07-13.tar.xz //压缩后大小 852K /opt/mysql-2021-07-13.tar.xz
如果数据库文件损坏数据丢失,可以直接解压备份文件
mysqldump -u root -p[密码] --databases 库名1 [库名2] ... > /备份路径/备份文件名.sql
[root@localhost ~]# mysqldump -uroot -p123123 --databases test > /bak/test-bak.sql mysqldump: [Warning] Using a password on the command line interface can be insecure. [root@localhost ~]# cat /bak/test-bak.sql
mysqldump -u root -p[密码] 库名 [表名1] [表名2] ... > /备份路径/备份文件名.sql
[root@localhost ~]# mysqldump -uroot -p123123 test test01 > /bak/test01-bak.sql mysqldump: [Warning] Using a password on the command line interface can be insecure.
mysqldump -u root -p[密码] --all-databases > /备份路径/备份文件名.sql
[root@localhost ~]# mysqldump -uroot -p123123 --all-databases > /bak/all-bak.sql mysqldump: [Warning] Using a password on the command line interface can be insecure.
[root@localhost ~]# mysqldump -uroot -p123123 -d test test01 > /bak/test01-bak.sql mysqldump: [Warning] Using a password on the command line interface can be insecure. [root@localhost ~]# cat /bak/test01-bak.sql
因为库被删了,需要先创建库再进行恢复,否则会报错
[root@localhost ~]# mysql -uroot -p123123 test < /bak/test01-bak.sql mysql: [Warning] Using a password on the command line interface can be insecure.
一般恢复
将所有备份的二进制日志内容全部恢复
基于位置恢复
数据库在某一时间点可能既有错误的操作也有正确的操作
可以基于精准的位置跳过错误的操作
发生错误节点之前的一个节点,上一次正确操作的位置点停止
基于时间点恢复
跳过某个发生错误的时间点实现数据恢复
在错误时间点停止,在下一个正确时间点开始
二进制日志(binlog)有3种不同的记录格式: STATEMENT (基于SQL语句)、ROW(基于行)、MIXED(混合模式),默认格式是STATEMENT
STATEMENT(基于SQL语句):
每一条涉及到被修改的sql 都会记录在binlog中
ROW(基于行)
只记录变动的记录,不记录sql的上下文环境
MIXED 推荐使用
一般的语句使用statement,函数使用ROW方式存储。
[root@localhost data]# mysqldump -uroot -p123123 test > /opt/test_all_$(date +%F).sql mysqldump: [Warning] Using a password on the command line interface can be insecure. [root@localhost data]# mysqladmin -u root -p flush-logs Enter password: [root@localhost data]#
[root@localhost ~]# mysqlbinlog --no-defaults /usr/local/mysql/data/mysql-bin.000002 | mysql -u root -p Enter password: [root@localhost ~]#
从物理与逻辑的角度,备份分为物理备份与逻辑备份
从数据库的备份策略角度,备份可分为完全备份、差异备份、增量备份
一周一次的全备,全备的时间需要在不提供业务的时间区间进行
增量:3天/2天/1天一次增量备份
差异:选择特定的场景进行备份