• MySQL数据库的备份


    根据备份的方法来分,可以将备份分为:

    备份方法概述
    热备(Hot Backup)是指数据库运行中直接备份,对正在运行的数据库操作没有任何的影响
    冷备(Cold Backup)是指备份操作是在数据库停止的情况下,这种备份最为简单,一般只需要复制相关的数据库物理文件即可
    温备(Warm Backup)备份同样是在数据库运行中进行的,但是会对当前数据库的操作有所影响,如加一个全局锁以保证备份数据的一致性

    按照备份后文件的内容来分,备份可以分为:

    备份方法概述
    逻辑备份逻辑备份中备份出的文件内容是可读的,一般是文本文件。内容一般是由一条条SQL语句,或者实际数据组成。如mysqldump和SELECT * INTO OUTFILE的方法。这类方法的好处是可以观察导出文件的内容,一般适用于数据库的升级、迁移等工作。但其缺点是回复所需要的时间往往较长
    裸文件备份指复制数据库的物理文件,既可以是在数据库运行中复制(ibbackup、xtrabackup这类工具),也可以是在数据库停止运行时直接的数据文件复制。这类备份的恢复时间往往较逻辑备份短得多

    按照备份数据库的内容来分,备份可以分为:

    备份方法概述
    完全备份指对数据库进行一个完整的备份
    增量备份指在上次完全备份的基础上,对于更改的数据进行备份
    日志备份指对MySQL数据库二进制日志的备份,通过对一个完全备份进行二进制日志的重做来完成数据库的point-in-time的恢复工作
    冷备

    对于InnoDB存储引擎的冷备非常简单,只需要备份MySQL数据库的frm文件,共享表空间文件,独立表空间文件(*.ibd),重做日志文件。另外建议定期备份MySQL数据库的配置文件my.cnf

    冷备的优点:
    • 备份简单,只要复制相关文件即可
    • 备份文件易于在不同操作系统,不同MySQL版本上进行恢复
    • 恢复相当简单,只需要把文件恢复到指定位置即可
    • 恢复速度快,不需要执行任何SQL语句,也不需要重建索引
    冷备的缺点:
    • InnoDB存储引擎冷备的文件通常比逻辑文件大很多,因为表空间中存放着很多其他数据,如undo段,插入缓冲等信息
    • 冷备也不总是可以轻易的跨平台。操作系统、MySQL版本、文件大小写敏感和浮点数格式都会成为问题
    逻辑备份
    mysqldump

    mysqldump备份工具最初是由Igor Romanenko编写完成,通常用来完成转存数据库的备份及不同数据库之间的移植。
    语法:

    $ mysqldump [arguments] > file_name
    
    • 1
    参数作用用例
    --all-databases备份所有的数据库$ mysqldump -all-databases > dump.sql
    --databases备份指定的数据库$ mysqldump --databases db1 db2 db3 > dump.sql
    --single-transaction对某个架构进行备份,在备份开始前,先执行START TRANSACTION命令,以此来获得备份一致性,备份时确保没有其他任何的DDL语句执行,一致性读并不能隔离DDL操作mysqldump --single-transaction test > test_backup.sql
    --lock-tables在备份中,依次锁住每个架构下的所有表。当备份时只能对数据库进行读取操作,备份依然可以保证一致性。--lock-tables--single-transaction是互斥的,不能同时使用。该选项是依次对每个架构中的表上锁的,因此只能保证每个架构下表备份的一致性,而不能保证所有架构下表的一致性
    --lock-all-tables在备份过程中,对所有架构中的所有表上锁,可以避免--lock-tables不能同时锁住所有表的问题
    --add-drop-databaseCREATE DATABASE前先运行DROP DATABASE。这个参数需要和--all-databases或者--database选项一起使用。在默认情况下,导出的文本文件不会有CREATE DATABASE除非指定了这个参数
    --master-data[=value]通过该参数产生的备份转存文件主要用来建立一个replication。当value的值为1时,转存文件中记录CHANGE MASTER语句。当value为2时,CHANGE MASTER语句被注释。在默认情况下,value值为空
    --master-data会自动忽略--lock-tables选项。如果没有使用--single-transaction选项会自动使用--lock-all-tables选项
    --events备份事件调度器
    --routines备份存储过程和函数
    --triggers备份触发器
    --hex-blob将BINARY、VARBINARY、BLOG和BIT列类型被分为十六进制格式。
    --tab=path产生TAB分割数据的数据文件。对于每张表mysqldump创建一个包含CREATE TABLE语句的table_name.sql文件,和包含数据的tbl_name.txt文件。可以使用--fields-terminated-by=...,--fields-enclosed-by=...,--fields-optionally-enclosed-by=...,--fields-escaped-by=...,--line-terminated-by=...来改变默认的分隔符、换行符等
    --where='where_condition'导出给定条件的数据
    SELECT…INTO OUTFILE

    语法如下:

    SELECT [column 1],[column 2] ...
    INTO
    OUTFILE 'file_name'
    [
        {FIELDS|COLUMNS}
        [TERMINATED BY 'string']
        [[OPTIONALLY] ENCLOSED BY 'char']
        [ESCAPED BY 'char']
    ]
    [
        LINES
        [STARTING BY 'string']
        [TERMINATED BY 'string']
    ]
    FROM TABLE WHERE ...
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    参数作用
    FIELDS[TERMINATED BY 'string']表示每个列的分隔符
    [[OPTIONALLY] ENCLOSED BY 'char']表示对于字符串的包含符
    [ESCAPED BY 'char']表示转义符
    [STARTING BY 'string']表示每行的开始符号
    TERMINATED BY 'string'表示每行的结束符号

    如果没有指定任何的FIELDS和LINES的选项,则默认使用:

    FIELDS TERMINATED BY '\t' ENCLOSED BY '' ESCAPED BY '\\'
    LINES TERMINATED BY '\n' STARTING BY ''
    
    • 1
    • 2
    逻辑备份的恢复

    mysqldump的恢复因为备份的文件就是导出的SQL语句,所以只需执行这个文件就可以:

    $ mysql -uroot -p < test_backup.sql;
    
    • 1
    LOAD DATA INFILE

    通过SELECT INTO OUTFILE方法导出的数据恢复可以用LOAD DATA INFILE进行导入:

    LOAD DATA INTO TABLE a IGNORE 1 LINE '/home/mysql/a.txt'
    [REPLACE|IGNORE]
    INTO TABLE tbl_name
    [CHARACTER SET charset_name]
    [
        {FIELDS|COLUMNS}
        [TERMINATED BY 'string']
        [[OPTIONALLY] ENCLOSED BY 'char']
        [ESCAPED BY 'char']
    ]
    [
        LINES
        [STARTING BY 'string']
        [TERMINATED BY 'string']
    ]
    [IGNORE number LINES]
    [(col_name_or_user_var,...)]
    [SET col_name=expr,...]
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18

    例:

    mysql> load data infile '/home/mysql/a.txt' into table a;
    
    • 1

    为了加快InnoDB存储引擎的导入,导入过程忽略外键检查,可以使用如下方式:

    mysql> SET @@foreign_key_checks=0;
    mysql> LOAD DATA INFILE '/home/mysql/a.txt' INTO TABLE a;
    mysql> SET @@foreign_key_checks=1;
    
    • 1
    • 2
    • 3
    mysqlimport

    mysqlimplort是MySQL提供的一个命令行程序,从本质来说是LOAD DATA INFILE的命令接口:

    $ mysqlimport [options] db_name textfile1 [textfile2 ...]
    
    • 1
  • 相关阅读:
    wx小程序学习笔记day01
    什么是作业指导书sop?sop作业指导书是什么意思?
    [思维]Ironforge 2022杭电多校第8场 1005
    VivadoAndTcl: namespace
    keytool工具生成JKS证书
    spring cache (默认方式)
    MAUI Blazor 权限经验分享 (定位,使用相机)
    基于SSH的CRM客户关系管理系统
    移动端App应用
    【java毕业设计】基于java+Eclipse的飞机大战游戏设计与实现(毕业论文+程序源码)——飞机大战游戏
  • 原文地址:https://blog.csdn.net/weixin_41489136/article/details/127764399