• 数据库的备份和恢复


    备份:完全备份,增量备份

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

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

    备份的需求

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

    2 数据丢失可能是程序操作,运算错误,磁盘故障,人为操作等

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

    热备份:开机备份,无需停止mysql服务,然后进行备份

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

    逻辑备份:只是对数据库的逻辑组件 进行备份(表结构)以mysql语句的形式,把库 结构,表进行备份(直接在数据库系统中删除全部文件(rm -rf 库名),逻辑备份无法恢复)只能使用逻辑的方式(命令行)进行删除

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

    优点:操作简单

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

    打包备份最好把服务关掉,避免有新的数据进入,备覆盖,恢复失败

    yum -y install xz

    #压缩备份 tar Jcvf /opt/mysql_all_$(date +%F).tar.xz /usr/local/mysql/data/

    #解压恢复 tar Jxvf /opt/mysql_all_2020-11-22.tar.xz

    物理冷备份

    #关闭mysqld

    #查看data下文件

    #安装一个高压缩率的数据压缩工具(备份恢复先下载好这个)

    #打包data

    Tar Jcvf:打包

    Tar Jxvf: 解压

    打包/mysql_all_$(date+%F).tar.xz日期  打包位置

    使用xz工具打包 J要大写J

    把文件/usr/log/mysql/data打包到/opt/mysql_all_$(data +%F).tar.xz

    (把data数据库打包相当于打包全部)

    解压打包过来的数据包

    #解压出来是

    #演示删库(相当于删除所有)

    数据备份恢复

    数据全部还原了

    远程数据迁移:

    复制到、/opt 下之后 再保留权限复制到下面/usr/local/mysql/data/下

    #再赋权之后 刷新 数据库 数据表格等都有了

    重启MySQL

    热备份中的逻辑备份

    MySQL的自带工具:mysqldump

    备份:重定向输出到/opt/下(使用mysqldump用.sql为结尾)

    单个库备份

    Mysqldump -u root -p --databases kgc > /opt/kgc.sql

    多个库备份

    Mysqldump -u root -p --databases kgc kgc1 > /opt/kgc1.sql

    所有库进行备份

    Mysqldump -u root -p --all-databases > /opt/kgc3.sql

    恢复库使用mysql 小于号

    mysql -u root -p < /opt/kgc_all.sql

    ##开启端口号、MySQL服务

    单个数据库的逻辑热备份

    #物理删除Kgc这个库(恢复之后只有库的架构 没有表数据)

    #使用命令行的方式进行删除

    #指定连接完mysql命令 之后自动退出

    mysql -u root -p -e 'show databases;'

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

    #恢复库

    物理删除刷新没有了kgc

    命令行删除还有恢复数据库

    多个数据库的热备份的逻辑

    备份全部数据库

    如何备份指定库 指定表

    指定数据库下 多表恢复

    增量备份

    优点:

    mysgldump支持增量备份。

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

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

    缺点:

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

    MySQl二进制日志记录格式有3种

    1 statemnet基于sql语句

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

    2 row 基于行

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

    3、MIXED: 即可以根据sgl语句,也可以根据行

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

    增量-备份的过程

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

    使用增量备份需要先修改配置文件

    设置把二进制文件打开

    log-bin=mysql-bin

    binlog_format=MIXED

    #二进制日志文件的位置

    #查看二进制文件的内容

    mysqlbinlog --no-defaults --base64-output=decode-rows -v mysql-bin.000002

    mysqladmin -u root -p flush-logs

    #刷新命令会生成一个新的mysql00000x记录点

    恢复

    mysqlbinlog --no-defaults mysql-bin.000001 | mysql -u root -p

    基于位置点来进行恢复:

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

    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

    时间点要加-

    At :数字是位置点

    时间点 位置点

    如何打开MySQL的默认日志

    MySQL 的日志默认保存位置为 /usr/local/mysql/data

    vim /etc/my.cnf

    [mysqld]

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

    #指定日志的保存位置和文件名

    ##错误日志,用来记录当MySQL启动、停止或运行时发生的错误信息,默认已开启

    general_log=ON

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

    ##通用查询日志,用来记录MySQL的所有连接和语句,默认是关闭的

    log-bin=mysql-bin

     #也可以 log_bin=mysql-bin

    ##二进制日志(binlog),用来记录所有更新了数据或者已经潜在更新了数据的语句,记录了数据的更改,可用于数据恢复,默认已开启

    slow_query_log=ON

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

    long_query_time=5

    ##慢查询日志,用来记录所有执行时间超过long_query_time秒的语句,可以找到哪些查询语句执行时间长,

    以便于优化,默认是关闭的

    #设置超过5秒执行的语句被记录,缺省时为10秒

    systemctl restart mysqld

    mysql -u root -p

    show variables like 'general%'; #查看通用查询日志是否开启

    show variables like 'log_bin%'; #查看二进制日志是否开启

    show variables like '%slow%'; #查看慢查询日功能是否开启

    show variables like 'long_query_time'; #查看慢查询时间设置

    set global slow_query_log=ON;               #在数据库中设置开启慢查询的方法

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

    断点之后进行增量备份

  • 相关阅读:
    高级深入--day39
    NPDP证书有用吗?值不值得考?
    HTML期末学生大作业-宠物之家网页作业html+css+javascript
    总结:Spring Boot之@Value
    js基础API初学
    解决windows termail中文乱码的问题
    KMS在腾讯云的微服务实践助力其降本50%
    深入剖析CVE-2021-40444-Cabless利用链
    基于qt软件的网上聊天室软件
    java计算机毕业设计springboot+vue二手车信息网站系统
  • 原文地址:https://blog.csdn.net/Lachewuxian/article/details/134256197