mysql备份与恢复

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了mysql备份与恢复相关的知识,希望对你有一定的参考价值。

备份的重要性: 灾难恢复,测试应用,回滚数据修改,查询历史数据,审计等
造成数据丢失的原因有以下几种:程序错误,人为操作错误,运算错误,磁盘故障,灾难和盗窃
数据库的备份类型:物理备份和逻辑备份
物理备份:是对数据库操作系统的物理文件(如数据文件,日志文件等)的备份
物理备份分为:冷备份,热备份,温备份
冷备份: 数据库关闭状态下进行的备份或者说是服务停止的情况下备份
热备份: 数据库运行状态或者是服务运行状态下的备份
温备份: 数据库特定状态下的备份操作 只能备份部分的特定数据
逻辑备份:是对数据库的逻辑组件(表,数据库对象等)的备份
备份的策略角度分为三种:完全备份,差异备份,增量备份
完全备份:对整个数据库的备份,备份时间长
差异备份:备份那些自上次完全备份之后被修改过的文件 恢复数据时,只恢复上次的完全备份与最近一次的差异备份
增量备份:只有那些在上次完成备份或者增量备份后被修改的文件才会被备份 恢复数据时 需要从上一次的完整备份开始到最后一次增量被封之间的所有增量依次恢复
常见的备份方法有:物理冷备份(tar或者cp) 专业备份工具(mysqldump)或mysqlhostcopy ,通过启用二进制日志进行增量备份 ,通过第三方工具备份
完整备份是其他两个备份的基础
完全备份的操作

  1. 物理冷备份与恢复
    首先备份数据库 先停止服务 systemctl stop mysqld 创建一个备份文件 /backup
    Tar zcf /backup/mysql_all-$(date +%F).tar.gz /usr/local/mysql/data/
    $是命令替换 把括号内的结果替换$
    恢复数据库 先模拟故障 mkdir bak
    Mv /usr/local/mysql/data /bak
    然后把备份的tar包解出来 tar zxf /backup/包名 -C /bak
    把备份的数据移动 Mv /bak/usr/local/mysql/data/ /usr/local/mysql
    Systemctl start mysqld
  2. mysqldump备份
    先备份数据库 1.备份指定库中的部分表 mysqldump {选项} 库名 {表名1 } {表名2} >/备份路径/备份文件名
    选项有 -U -P -U指定用户名 -P密码
    2.备份一个或多个完整的库 (包括其中的所有表)
    Mysqldump 选项 –-databases 库名1 {库名2} >/备份路径/备份文件名
    3.备份Mysql服务器中的所有库
    Mysqldump 选项 –all-databases >/备份路径/备份文件名
    当导出数据量较大的时候可以添加—opt 选项来优化执行速度
    恢复数据库
    使用mysqldump命令来导出的sql备份脚本 在需要恢复时可以通过mysql 命令对其进行导入操作 命令格式如下
    Mysql {选项} {库名} {表名} </备份路径/备份文件名
    重定向我们一般用的 > 是输出重定向 而< 是输入重定向
    当备份文件中只包含表的备份,而不包含创建的库的语句时,执行导入操作时必须指定库名,且目标库必须存在
    实例 :从备份文件mysql-user.sql 中将表导入test库
    mysql -u root test <mysql-user.sql
    mysql -u root -e ‘show tables from test;‘
    -e 选项的作用是用于指定链接Mysql后执行的命令 命令执行完后自动退出
    若备份文件中已经包括完整的库信息 则执行导入操作时无须指定库名
    以上就是完整备份的操作
    mysql 增量备份
    增量备份的特点 没有重复数据,备份量不大 时间短 但恢复麻烦 需要上次完全备份及完全备份之后所有的增量备份才能恢复
    mysql没有提供直接的增量备份方法,可以通过mysql 提供的二进制日志间接实现增量备份
    mysql二进制日志是增量备份的基础,他会记录数据库的每一个修改操作,二进制日志内的数据是自动产生的
    要进行mysql的增量备份,首先要开启二进制日志功能,开始mysql的二进制日志功能的实现方式有很多种
    在mysql配置文件的mysqld项下加入 log-bin=/usr/local/mysql/mysql-bin 然后重启服务 就可以在usr/local/mysql下查看到二进制日志文件了 默认情况下二进制文件的扩展名是一个六位数字 如mysql-bin.000001
    二进制日志文件的适用场合有很多 比如 增量备份和主从复制
    二进制增加的时机 1.重启mysqld服务 2. flush logs 刷新二进制 3.二进制日志文件达到最大值得时候也会自动增加
    我们开启二进制日志文件后他就会自动记录 相当于我们的增量备份
    那么我们如何增量恢复呢
    常见的增量恢复有三种 一般恢复,基于位置恢复,基于时间点的恢复
    一般恢复:将所有备份的二进制日志内容全部恢复
    恢复命令如下:mysqlbinlog --no-defaults 增量备份文件 | (管道符) mysql -u 用户名 -p 密码
    --no-defaults 这个选项在mysql5.5以下的版本需要使用 5.5版本以上就可以不使用
    基于位置恢复1.恢复数据到指定位置 :mysqlbinlog --stop-position=‘操作id’ 二进制日志 | mysql -u 用户名 -p 密码 操作id 在二进制日志文件内
    查看二进制日志文件 使用命令 mysqlbinlog 二进制日志文件名 即可
    2.从指定位置开始恢复数据:mysqlbinlog --start-position=‘操作id’ 二进制日志 | mysql -u 用户名 -p密码
    基于时间点的恢复 1.从日志开头截止到某个时间点的恢复
    mysqlbinlog --stop-datetime ‘年-月-日 小时:分钟:秒’ 二进制日志 | mysql -u 用户名 -p 密码
    2.从某个时间点到日志结尾的恢复
    mysqlbinlog --start-datetime=‘年-月-日 小时:分钟:秒’ 二进制日志 | mysql -u 用户名-p 密码
    3.从某个时间点到某个时间点的恢复
    mysqlbinlog --start-datetime=‘年-月-日 小时:分钟:秒’ --stop-datetime=‘年-月-日 小时:分钟:秒‘ |mysql -u 用户名 -p 密码

以上是关于mysql备份与恢复的主要内容,如果未能解决你的问题,请参考以下文章

MySQL备份与恢复

Mysql备份与恢复

MySQL备份与恢复

MySQL备份与恢复

MySQL增量备份与恢复

MySQL备份与恢复