• 数据库的备份和恢复


    备份

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

    增量备份:在完全备份的基础上,对后续新增的变量进行备份

    备份的需求:

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

    2、数据为什么会丢失?【1.程序操作 2.运算错误 3.磁盘故障 4.不可预期的事件(地震、海啸等) 5.人为操作】

    备份的方法

    1、冷备份

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

    2、热备份

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

    3、物理备份

    数据库系统的物理文件(数据文件、日志文件等)进行备份

    4、逻辑备份

    对数据库的逻辑组件进行备份(表结构等),以SQL语句的形式把库、表结构、表数据进行备份保存

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

    物理冷备份

    一般采用完整备份,对整个数据库进行完整的打包备份

    优点:操作简单

    缺点:数据库文件占用量很大,占用空间很大,备份和恢复的时间都很长。而且需要暂停数据库服务

    打包备份最好关闭服务器,避免有新的数据进入,被覆盖。也可能导致恢复失败

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

    A:阿里云tds支持热迁移

    逻辑热备份

    mysqldump是MySQL自带的工具

    如何备份库(只能在命令行执行):

    备份单个库 musqldump -u root -p123456 --databases fmh > /opt/fmh.sql

    备份多个库  mysqldump -u root -p123456 --databases fmh fmh1 > /opt/fmh1.sql

    备份所有库  mysqldump -u root -p123456 --all-databases > /opt/fmh3.sql

    mysal -u root -p123456 -e 'show databases;

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

    mysql1的全部数据库的逻辑备份文件,导入到mysql2,那么有重名库是否会覆盖,不重名的库是否还在。

    屋里冷备份和物理热备份

    特点:操作简单

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

    mysqldump是MySQL自带的备份文件命令

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

    也可以作为数据迁移。占用大空间。比较物理备份相对来说占的空间要小的多

    全量,库,表

    增量备份

    在完全备份的基础上,对后续新增的变量进行备份

    mysqldump也支持增量备份

    特点:

    1、没有重复数据,备份量小,时间短

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

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

    增量备份的过程

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

    二进制文件怎么来?

    修改配置文件

    vim /etc/my.cnf

    log-bin=mysql-bin

    binlog_format=MIXED

    wq!

    mysql二进制日志记录格式

    1、STATEMENT 基于SQL语句

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

    2、ROW  基于行

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

    3、MIXED  既可以根据SQL语句,又可以根据行

    在正常情况下使用的是STATEMENT,一旦发生高并发,会智能自动切换到ROW行

    mysquadmin -u root -p flush-logs  刷新MySQL

    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=位置点 --start-position=位置点 文件名 | mysql -u root -p

    查看位置点

    时间恢复

    基于时间点进行恢复

    1、从某个时间点开始

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

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

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

    3、指定时间范围

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

    时间点

    mysqlbinlog --no-defaults -start-datetime='2023-11-06 11:44:32' mysql-bin.000004 | mysql -u root -p

    总结:

    在生产中,通过binlog进行增量恢复是非常好用的方法

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

    错误日志单独记录

    log-error=/usr/local/mysql/data/mysql_error.log  

    设置日志单独存放

    general_log=ON

    general_log_file=/usr/local/mysql/data/mysql_general.log

    慢查询日志  (记录查询时间超过5秒的)

    general_query_log=ON

    general_query_log_file=/usr/local/mysql/data/mysql_slow_query.log

  • 相关阅读:
    在智能家居领域产品中常用芯片
    go中网络流量分析gopacket库的使用
    Unity嵌入Android项目开发
    华为机试题:HJ5 进制转换
    动态代理(java模拟生活中的代理)
    GoldenEye
    Week 1 Introduction to NLP and Language Modelling
    【MindSpore Profiler】【性能调优】GPU分布式训练卡死
    网络分级设计模型的三层架构:接入层、汇聚层、核心层到底有什么说法?
    ChartMuseum的安装教程和基本配置
  • 原文地址:https://blog.csdn.net/a91888888/article/details/134245549