一、在生产环境中,数据的安全性是相当重要的,任何数据的丢失均可能产生严重的后果
二、形成数据丢失的缘由
程序错误
人为错误
计算机失败
磁盘失败
灾难(如地震等)和偷窃mysql
1、从物理与逻辑的角度,备份可分为:sql
一、物理备份:对数据库操做系统的物理文件(如数据文件、日志文件等)的备份 物理备份又能够分为脱机备份(冷备份)和联机备份(热备份): -冷备份:是在关闭数据库的时候进行的 -热备份:数据库处于运行状态,这种备份方法依赖于数据库的日志文件 二、逻辑备份:对数据库逻辑组件(如表等数据库对象)的备份
2、从数据库的备份策略角度, 备份可分为:shell
一、彻底备份:每次对数据进行完整的备份 二、差别备份:备份那些自从上次彻底备份以后被修改过的文件 三、增量备份:只有那些在.上次彻底备份或者增量备份后被修改的文件才会被备份 注意点:差别备份与增量备份相辅相成
一、彻底备份是对整个数据库的备份、数据库结构和文件结构的备份 二、彻底备份保存的是备份完成时刻的数据库 三、彻底备份是增量备份的基础
彻底备份的优势数据库
备份与恢复操做简单方便
彻底备份的缺点安全
1.数据存在大量的重复 2.占用大量的备份空间 3.备份与恢复时间长
1、MySQL数据库的备份能够采用用多种方式服务器
1.直接打包数据库文件夹,如/usr/local/mysql/data 2.使用专用备份工具mysqldump**
2、mysqldump命令ide
1.MySQL自带的备份工具,至关方便对MySQL进行备份 2.经过该命令工具能够将指定的库、表或所有的库导出为SQL脚本,在须要恢复时可进行数据恢复
3、使用mysqldump命令对单个数据库进行彻底备份工具
mysqldump -u用户名 -p [密码] [选项] [数据库名] > /备份路径/备份文件名
4、使用mysqldump命令对多个库进行彻底备份操作系统
mysqldump -u 用户名 -p [密码] [选项] --databases 库名1 [库名2]... >/备份路径/备份文件名
5、使用mysqldump命令对全部库进行彻底备份日志
mysqldump -u用户名 -p [密码] [选项] --all-databases > /备份路径/备份文件名
在实际生产环境中,存在对某个特定表的维护操做,此时mysqldump一样发挥重大做用
1.使用mysqldump备份表的操做
mysqldump -u 用户名 -p [密码] [选项] 数据库名 表名 > /备份路径/备份文件名
2.使用mysqldump备份表结构的操做
mysqldump -u 用户名 -p [密码] [选项] -d 数据库名 表名 > /备份路径/备份文件名
1、使用mysqldump命令导出的SQL备份脚本,在进行数据恢复时可以使用如下方法导入
source命令 #数据库模式中运行 mysql命令 #Linux模式中运行
一、使用source恢复数据库的步骤
●登陆到MySQL数据库 ●执行source备份sq|脚本的路径(绝对路径)
MySQL [(none)] > source /backup/all-data.sql #source命令恢复
二、使用mysql命令恢复数据
mysql -u用户名 -p [密码] < 库备份脚本的路径
mysql -u root -p < /backup/all-data.sql #mysql命令恢复
2、使用mysqldump进行彻底备份的存在的问题
●备份数据中有重复数据 ●备份时间与恢复时间长
一、恢复表时一样可使用source或者mysql命令进行 二、source恢复表的操做与恢复库的操做相同 三、当备份文件中只包含表的备份,而不包括建立库的语句时,必须指定库名,且目标库必须存在.生产环境中,可使用shell脚本自动实现按期备份 mysql -u用户名-p [密码] < 表备份脚本的路径
mysql -u root -p mysql < /backup/mysql-user.sql #mysql命令恢复表
一、按期实施备份,制定备份计划或者策略,并严格遵照 二、除了进行彻底备份,开启MySQL服务器的日志功能是很重要的 ●彻底备份加上日志,能够对MySQL进行最大化还原 MySQL-bin:MySQL数据库的二进制日志,用于记录用户对数据库操做的SQL语句((除了数据查询语句)信息。可使用mysqlbin命令查看二进制日志的内容 三、使用统一的和易理解的备份文件名称 ●不要使用backup一、backup2等这样没有意义的名字 ●推荐使用库名或者表名加上时间的命名规则
增量备份就是备份自上一次备份以后增长或变化的文件或者内容
增量备份的特色
●没有重复数据,备分量不大,时间短 ●恢复麻烦:须要上次彻底备份及彻底备份以后全部的增量备份才能恢复,并且要对全部增量备份进行逐个反推恢复
MySQL没有提供直接的增量备份方法
能够经过MySQL提供的二进制日志(binary logs)间接实现增量备份
MySQL二进制日志对备份的意义
●二进制日志保存了全部更新或者可能更新数据库的操做 ●二进制日志在启动MySQL服务器后开始记录,并在文件达到max_ binlog_size所设置的大小或者接收到flush logs命令后从新建立新的日志文件 ●只需定时执行flush logs方法从新建立新的日志,生成二进制文件序列,并及时把这些旧的日志保存到安全的地方就完成了一个时间段的增量备份
mysqlbinlog --no-defaults --base64-output=decode-rows -V mysql-bin.000002 > /opt/ bak. txt
就是将某个起始时间的二进制日志导入数据库中,从而跳过某个发生错误的时间点实现数据的恢复
使用基于时间点的恢复,可能会出如今一个时间点里既同时存在正确的操做又存在错误的操做,因此咱们须要一种更为精确的恢复方式
1.通常恢复
mysqlbinlog [--no-defaults] 增量备份文件 | mysql -u用户名 -p
2.基于位置的恢复
恢复数据到指定位置
mysqlbinlog --stop-position=操做'id' 进制日志 | mysql -u用户名 -p 密码
从指定的位置开始恢复数据
mysqlbinlog --start-position=操做'id' 二进制日志 | mysql -u用户名 -p 密码
3.基于时间点的恢复
从日志开头截止到某个时间点的恢复
mysqlbinlog [--no-defaults] --stop-datetime='年-月-日 小时:分钟:秒' 二进制日志 | mysql -u用户名 -p 密码
从某个时间点到日志结尾的恢复
mysqlbinlog [--no defaults] --start-datetime='年-月-日 小时:分钟:秒' 二进制日志 | mysql -u用户名 -p 密码
从某个时间点到某个时间点的恢复
mysqlbinlog [--no defaults] --start-datetime='年-月-日 小时:分钟:秒' --stop-datetime='年-月-日 小时:分钟:秒' 二进制日志 | mysql -u用户名 -p 密码