数据库备份概述
**(1)数据备份的重要性**
造成数据丢失的原因有如下几种:
程序错误、人为操作错误、运算错误、磁盘故障、灾难和盗窃
*(2)数据库备份类型**
数据库备份可以分为物理备份和逻辑备份。物理备份是对数据
操作系统的物理文件(如数据文件、日志文件等)的备份。这种类型的备份
适用于在出现问题时需要快速恢复的大型重要数据库
物理备份又可以分为冷备份(脱机备份)、热备份(联机备份)和温备份
《1》冷备份:在数据库关闭状态下进行备份操作
《2》热备份:在数据库处于运行状态时进行备份操作,该备份方法依赖
数据库的日志文件
《3》温备份:数据锁定表格(不可写入但可读)的状态下进行备份操作
**(3)常见的备份方法**
打包数据文件:tar
专用备份工具:mysqldump
二进制日志增量备份
第三方工具备份
数据库完全备份操作
(1)备份呢数据库
关闭mysql服务,创建一个/backup目录作为备份数据存储路径。使用
tar创建备份件整个数据库文件夹份属于完全备份。
systemctl stop mysqld
mkdir /backup
tar zcvf /backup/mysql_data-$(date +%F).tar.gz /usr/local/mysql/data/
tar zxvf mysql_data-2018-1-1.tar.gz -C ./
(2)恢复数据库
mkdir bak
mv usr/local/mysql/data /bak
myqldump备份与恢复
**(1)备份数据库**
使用mysqldump命令导出数据时,默认会在终端显示,若要保存文件
还需要结合Shell的 ">"重定向输出操作
格式1:备份指定库中的部分表
mysqkdump [选项] 库名 [表名1] [表明名2]...> /备份路径/备份文件名
格式2:备份一个或多个完整的库(包括其中所有的表)
myslqdumn [选项] --databases 库名1 [库名2] ... > /备份路径/备份文件名
格式3:备份myslq服务器所有的库
mysqldump [选项] --all-databases > /备份路径/备份文件名
常用的选项包括 "-u" "-p",分别指定数据库用户名 密码
例如:
mysqldump -u root -p 库名 表名 > /backup/表名.sql
mysqldump -u root -p --databases 库名 > /backup/库名.sql
mysqldump -u root -p --all-databases > /backup/mysqlall.sql
**(2)恢复数据库**
命令格式:mysql [选项] [库名] [表名] < /备份路径/备份文件名
mysql -u root -p 库名 < 表名.sql
mysql -u root -p < 库名.sql
mysql -u root -p < mysqlall.sql
MYSQL增量备份与恢复
**(1)增量备份的特点**
与完全备份不同,增量备份没有重复数据,备份量不大,时间短,但及其麻烦
需要上次完全备份及完全备份之后所有的增量备份才能恢复,而且要对所有增
量备份进行逐个反推恢复,通过MYSQL提供的二进制日志间接实现增量备份
**(2)开启二进制日志功能**
vim /etc/my.cnf
log-bin=/usr/local/mysql/mysql-bin(添加到配置文件中)
systemctl restart mysqld
mysql增量恢复
常用的增量恢复的方法有三种:一般恢复、基于位置恢复、基于时间点的恢复
一般恢复:将所有备份的二进制日志内容全部恢复
mysqlbinlog [--no-defaults] 增量备份文件 | mysql 用户名 -p
***基于位置恢复***:
格式1:恢复数据到指定位置
mysqlbinlog --stop-position='操作 id' 二进制日志 |MySQL -u 用户
名 -p 密码
格式2:从指定的位置开始恢复数据
mysqlbinlog --start-position='操作 id' 二进制日志 |MySQL -u 用户
名 -p 密
***基于时间点的恢复***
格式1:从日志开头截至到某个时间点的恢复
mysqlbinlog [--no-defaults] --stop-databases='年-月-日 小时'
分钟:秒' 二进制日志 | mysql -u 用户名 -p 密码
格式2:从某个时间点到日志结尾的恢复
mysqlbinlog [--no-defaults] --start-databases='年-月-日 小时'
分钟:秒' 二进制日志 | mysql -u 用户名 -p 密码
格式3:从某个时间点到某个时间点的恢复
mysqlbinlog [--no-defaults] --start-databases='年-月-日 小时'
分钟:秒' --stop-datetime='年-月-日 小时:分钟:秒' 二进制日志
| mysql -u 用户名 -p 密码