一、数据备份的类型:
1、物理备份:
2、逻辑备份:库、表(数据库的sql脚本)
- 完整备份
- 增量备份 基于完整备份或上一次的备份
- 差异备份 基于完整备份(起始)
二、数据库备份的重要性:
1、在生产环境中,数据的安全性只管重要
2、任何数据的丢失都可能产生严重的后果
3、造成数据丢失的原因:
- 程序错误
- 人为操作错误
- 运算错误
- 磁盘故障
- 灾难和盗窃
三、常见的备份方法:
- 1、物理备份:
备份数据库处于关闭状态,直接打包数据库文件
备份速度快,恢复时也是最简单的 - 2、专用备份工具mydump或mysqlhotcopy
mysqldump常用的逻辑备份工具
Mysqlhotcopy仅拥有备份myisam和ARCHIVE表 - 3、启用二进制日志进制增量备份
进行增量备份,需要刷新二进制日志 - 4、第三方工具备份
免费的mysql热备份软件percona xtrabackup
四、mysql完全备份:
-
概念:
1、是对整个数据库、数据库结构和文件结构的备份
2、保存的时备份完成时刻的数据库
3、是差异备份与增量备份的基础 -
优点:
备份与恢操作简单方便 -
缺点:
数据存在大量的重复
占用大量的备份空间
备份与恢复时间长 -
分类:
1、物理冷备份与恢复:
关闭mysql数据库
使用tar命令直接打包数据库文件夹
直接替换现有mysql目录即可
物理冷备份:
[root@localhost~]# sysytemctl stop mysqld
[root@localhost~]# mkdir /backup
[root@localhost~]# tar /backup/mysql_all-$(date+%F).tar.gz /usr/local/mysql/data/
恢复数据库:
[root@localhost~]# mkdir bak
[root@localhost~]# mv /usr/local/mysql/data/ /bak/
[root@localhost~]# mkdir restore
[root@localhost~]# tar zxf /backup/mysql_all-2020-01-02.tar.gz -C restore/
[root@localhost~]# mv restore/usr/local/mysql/data/ /usr/local/mysql/
[root@localhost~]# systemctl start mysqld
2、mysqldump完全备份与恢复
备份:Mysql自带的备份工具,可方便实现对mysql的备份
可以将指定的库、表导出为sql脚本
使用命令mysql导入备份的数据
- 1、mysqldump命令对单个库进行完全备份:
代码:mysqldump -u root -p 密码 库名 > /备份路径/库名.Sql - 2、mysqldump命令对多个库进行完全备份:
代码:mysqldump -u root -p --databases库名1 库名2 > /备份路径/库名.Sql
实例:mysqldump -u root -p 123 --databases school student > /opt/school_student.sql - 3、mysqldump命令对所有的库进行完全备份:
代码:mysqldump -u root -p --all-databases > /备份路径/库名.Sql - 4、mysqldump命令对库特定的表进行完全备份:
代码:mysqldump -u root -p库名表名> /备份路径/库名-表名.Sql
恢复: 使用mysqldump导出的脚本,可使用导入的方法
Source命令:mysql环境 绝对路径
Mysql命令: linux环境
使用source恢复数据库的步骤
登录到mysql数据库
执行source备份sql脚本的路径
1、单库还原:覆盖原来的内容,进入目标的里面
代码:source /路径/文件名.sql (在数据库里面敲)
代码: mysql -u root -p < 目标备份文件.sql;(在linux里面敲)
3、mysql增量备份:
1、使用mysqldump进行完全备份存在的问题
- 备份数据中有重复数据
- 备份时间与恢复时间过长
2、是上一次备份后增加/变化的文件或者内容
3、特点:
- 1、没有重复数据,备份量不大,时间短
- 2、恢复需要上次完全备份及完全备份之后所有的增量备份才能恢复,而且要对所有的增量备份进行逐个反推恢复。
4、mysql没有提供直接的增量备份的方法
5、可通过mysql提供的二进制日志简介实现增量备份
6、mysql二进制日志对备份的意义:
- 二进制日志保存了所有更新或者更新数据库的操作
- 二进制日志在启动mysql服务器后开始记录;并在文件达到max_binlog_size所设置的大小或者接收到flush logs命令后重新创建新的日志文件。
- 只需定时执行flush logs 方法重新创建新的日志,生成二进制文件序列,并既是把这些日志保存到安全的地方就完成了一个时间段的增量备份。
1、一般恢复:
将所有备份的二进制日志内容全部恢复
2、基于位置恢复:
数据库在某个时间点可能既有错误的操作也有正确的操作
可以基于精确的位置跳过错误的操作
3、基于时间点恢复:
1、完全备份:
在linux:mysqldump -u root -p school(库) info(表) > /opt/info.sql
开启二进制日志文件: Vim /etc/my.cnf 添加:log-bin=mysql-bin
Systemctl restart mysqld
Cd /usr/local/mysql/data ls >>>会有mysql-bin.000001的日志文件
Mysqlbinlog --no-defaults mysql-bin.000001 有乱码
后面的操作都在00001日志文件里面记录
在mysql上:insert into(name,address)values(‘wangwu’,’nanjing’);
Delect from info where id=1;
insert into(name,address)values(‘sssu’,’nanjing’);
Mysqladmin -u root -p flush-logs 重新生成新的日志文件,目前里面的没有东西
Mysqlbinlog --no-defaults mysql-bin.0000001 >/opt/bk01.txt
Vim /opt/bk01.txt
Mysqlbinlog --no-defaults --base64-output=decode-rows -v mysql-bin.0000001 >/opt/bk02.txt
还原:
Mysqlbinlogs --nodefaults --stop-position=’573’ /usr/local/mysql/data/mysql-bin.0000001 | mysql-u root -p123
Mysqlbinlogs --nodefaults --start-position=’685’ /usr/local/mysql/data/mysql-bin.0000001 | mysql-u root -p123 跳过错误操作
Mysqlbinlogs --nodefaults --stop-datetime=’2020-08-19 16:24:00’ /usr/local/mysql/data/mysql-bin.0000001 | mysql-u root -p123
Mysqlbinlogs --nodefaults --start-datetime=’2020-08-09 16:25:00’ /usr/local/mysql/data/mysql-bin.0000001 | mysql-u root -p123