• 数据库的备份和恢复


    1)物理备份

    物理备份:对数据库操作系统的物理文件(如数据文件、日志文件等)的备份。

    物理备份方法:

    冷备份(脱机备份) :是在关闭数据库的时候进行的

    热备份(联机备份) :数据库处于运行状态,依赖于数据库的日志文件

    温备份:数据库锁定表格(不可写入但可读)的状态下进行备份操作

    2)逻辑备份

    逻辑备份:对数据库逻辑组件(如:表等数据库对象)的备份。

    即以sql语句的形式,把库、表结构、表数据保存下来。

    常见的备份方法

    物理冷备: (完全备份)

    备份时数据库处于关闭状态,直接打包数据库文件

    备份速度快,恢复时也是最简单的

    专用备份工具mydump或mysqlhotcopy (完全备份,逻辑备份)

    mysqldump常用的逻辑备份工具 (导出为sql脚本)

    mysqlhotcopy仅拥有备份MyISAM和ARCHIVE表

    启用二进制日志进行增量备份 (增量备份)

    进行增量备份,需要刷新二进制日志

    第三方工具备份

    免费的MySQL热备份软件Percona XtraBackup

    (阿里云的工具:dts,支持热迁移)

    数据接的备份和恢复:

    备份:完全备份 增量备份

    完全备份:将整个数据库完整的进行备份。

    增量备份:在完全备份的基础之上,对后续新增的内容进行备份。

    备份的需求:

    1,在生产环境中,数据的安全至关重要,任何数据的丢失都可能生产非常严重的后果。

    2,数据为什么会丢失,程序操作,运算错误,磁盘故障,不可预期的事件,人为操作。

    冷备份:关机备份,停止mysql服务,然后进行备份

    热备份:开机备份,无需关闭mysql服务,进行备份

    物理备份:对数据库的物理文件(数据文件,日志文件),进行备份。

    逻辑备份:只是对数据库的逻辑组件进行备份,(表结构),以及sql语句的形式,把库,表结构,表数据进行备份保存。

    (直接在数据库系统中删除全部文件,逻辑备份无法恢复。)

    1、整体备份 物理冷备份

    按照压缩工具:

    打包整个data:

    解压:

    删库:

    还原:

    移到另一个数据库中去:

    远程复制;

    scp -r root@192.168.176.30:/opt/usr/local/mysql/data /opt

    cp -a data/ /usr/local/mysql/data

    systemctl restart mysqld.service

    cd /usr/local/mysql/

    cd data

    chown -R mysql.mysql kgc1 kgc2

    物理备份:完全备份,对整个数据库进行完整打包备份。

    优点:操作简单

    缺点:数据库文件占用量是很大的,占用空间太大,备份和恢复的

    面试题:

    如何把本地的数据库迁移上云?

    1,直接打包 最好把服务器关掉,避免有新的数据进入,被覆盖。也可能会导致恢复失败。

    阿里云 dts工具支持热迁移。

    热备份当中的逻辑备份。

    这是mysql自带的工具:

    mysqldump

    mysqldump -u root -p123456 --databases kgc >/opt/kgc.sql 单个

    mysqldump -u root -p123456 --databases kgc kgc1 > /opt/kgc1.sql

    mysqldump -u root -p123456 --all-databases > /opt/kgc3.sql

    不能物理删除

    -e:指定连接MySQL之后执行完命令,自动退出。

    恢复库中的表

    多个表

    其他库

    全量负责过来了。mysql2中的表给覆盖了同名的库肯定会被覆盖,不重名的库可不可以覆盖。

    物理冷备份和物理热备份

    特点:简单。

    数据量大,占用的空间比较大。

    mysqldump:这是mysql自带的备份文件命令。

    特点:方便,简单。但是只能基于逻辑上的表结构和表数据恢复。物理删除之后再用逻辑恢复会报错。

    他也可以作为数据迁移。占用大空间。比较物理备份数据量小的多。

    全量,库,表。

    增量备份:mysqldump 支持增量备份。

    特点:优点:没有重复数据,备份量小,时间短。

    mysqldump增量备份恢复表数据期间,表会 锁定。

    缺点:备份时锁表,必然会影响业务。超过10G,耗时会比较长,导致服务不可用。

    增量备份的过程:

    1,mysql提供的二进制日志间接的实现增量备份。

    二进制文件怎么来的?修改配置文件:

    log-bin=mysql-bin

    binlog_format=MIXED

    mysql二进制日志记录格式有三种:

    1,STATEMNET:基于sql语句

    记录修改的sql语句,高并发情况下,记录sql语句时候可能会出错,恢复数据时可能会导致丢失和误差。效率比较高。

    2,ROW:基于行

    精确记录每一行的数据,准确率高,但是恢复的时效率低。

    3,MIXED:既可以根据sql语句,也可以根据行

    查看文件:mysqlbinlog --no-defaults --base64-output=decode-rows -v mysql-bin.000002

    基于位置点来进行恢复:

    从某一个点开始,恢复到最后

    mysqlbinlog --no-defaults --start-position='位置点' 文件名 | mysql - u root -p

    从开头,一直恢复到某个位置

    mysqlbinlog --no-defaults --stop-position='位置点' 文件名 | mysql - u root -p

    从指定点-----指点结束点。

    mysqlbinlog --no-defaults --start-position='位置点' --stop-position='位置点' 文件名 | mysql - u root -p

    基于时间点进行恢复:

    1、从某个时间点开始:

    mysqlbinlog --no-defaults --start-datetime='时间点' 文件 | mysql -u root -p

    2、从开头,到指定的结尾时间点:

    mysqlbinlog --no-defaults --stop-datetime='时间点' 文件 | mysql -u root -p

    3、指定时间范围:

    mysqlbinlog --no-defaults --start-datetime='时间点' --stop-datetime='时间点' 文件 | mysql -u root -p

    总结:

    再生产中,提高binlog进行增量恢复是非常好用的方法。

    我们只需要对binlog文件进行备份,随时可以进行备份和恢复。

    附加题,写一个脚本,每个月的20号,对数据库打一个断点。

    断点之后进行自动备份。

    如何打开mysql的默认日志:

    错误日志:

    一般查询日志:

    慢查询日志:

  • 相关阅读:
    技术博客|第8期:广告流量匹配算法在Hulu/Disney Streaming平台的实战
    Spring概述及IOC理论推导
    易基因-原核转录组“rRNA捕获探针及其应用“方法获发明专利授权
    HC32_HC32F072FAUA_FLASH使用
    句法引导的机器阅读理解
    tensorflow学习笔记
    spring boot + sql server大数据量批量新增
    Ubuntu20.04安装 nginx1.23.1
    Web前端—移动Web第二天(空间转换、动画、综合案例:全名出游)
    Vim编辑器的使用
  • 原文地址:https://blog.csdn.net/weixin_51694382/article/details/134271549