精华内容
下载资源
问答
  • 备份
    千次阅读
    2022-03-21 23:52:31

    1、MySQL数据库备份

    实现我们要知道为什么要进行备份,备份这个数据做什么,有什么用。

    备份的目的:

    1、做灾难恢复:对损坏的数据进行恢复和还原

    2、需求改变:因需求改变而需要把数据还原到改变以前

    3、测试:测试新功能是否可用

    现在各种规模的企业都在经历着数据量的爆炸性增长,不论是由于互联网、电子邮件的出现,还是越来越庞大、需要大量介质的应用软件所致。数据丢失或系统停运均会影响客户正常工作,数据遭到破坏,有可能是人为的因素,也可能是由于各种不可预测的因素

    1.1、数据丢失的原因场景

    1. 人为操作失误造成某些数据被误操作
    2. 软件BUG造成部分或全部数据丢失
    3. 硬件故障造成数据库部分或全部数据丢失
    4. 安全漏洞被入侵数据恶意破坏
    5. 磁盘故障导致整个数据丢失

    1.2、数据丢失的损失

    相对于客户公司损失:

    有专业机构的研究数据表明:丢失500MB的生产业务数据对于市场营销部门就意味着13万元人民币的损失,对财务部门意味着16万的损失,对核心部门来说损失可达80万。而丢失的数据如果15天内仍得不到恢复,企业就可能被淘汰出局。

    相对于客户公司-技术人员:

    技术人员:主要负责公司服务器日常运维工作,负责服务器的稳定性,确保web等服务可以7*24H不间断地为用户提供服务,一般技术人员会在服务器设置本地备份或远程不定时备份或使用脚本定时备份,但服务器如果硬件故障,硬盘损坏,或入侵病毒等原因,导致公司主要业务数据丢失或不完整,同时技术人员也没有数据备份机制,没有最新备份数据,技术人员是第一负责人,主要问责人。

    1.3、备份需要考虑的问题

    1、可以容忍丢失多长时间的数据

    2、恢复数据要在多长时间内完成

    3、恢复的时候是否需要持续提供服务

    4、恢复的对象是什么,整个库、单个库、多个表、单个表?

    2、数据库备份的分类

    • 完全备份:对数据库进行完整的备份,需要花费更多的时间和存储空间
    • 差异备份:在上一次完全备份基础上,对更新的数据进行备份。因为只备份数据库部分的内容。它比完全备份小,因为只包含自上次完全备份以来所改变的数据。它的优点是存储和恢复速度快。
    • 增量备份:在上次备份的基础上,对更新的数据进行备份
    • 日志备份:二进制日志备份
    • 逻辑备份: 指备份后的文件内容是可读的,通常为文本文件,内容一般是SQL语句,或者是表内的实际数据,如mysqldump和SELECT * INTO OUTFILE的方法,一般适用于数据库的升级和迁移,恢复时间较长
    • 物理文件备份: 对数据库物理文件(如数据文件、日志文件等)的备份,数据库既可以处于运行状态(mysqlhotcopy 、ibbackup、xtrabackup这类工具),也可以处于停止状态(如cp、tar等),恢复时间较短。

    根据数据库的状态分类:

    • 冷备(Cold Backup):在数据库关闭的情况下进行备份,将关键性文件拷贝到另外位置的一种说法,对数据库信息而言,冷备份是最快和最安全的方法,冷备优缺点:

      • 优点:1、快速的备份(因为只需要拷贝文件)

        ​ 2、容易恢复(只需要在将文件拷贝回去)

        缺点:1、数据库在备份时是关闭的,不能作其它工作

        ​ 2、不能按表或按用户恢复

        ​ 3、若磁盘空间有限,只能拷贝到磁盘等其它外部存储设备上,速度很慢

    • 热备份(Hot backup):热备是在数据库运行的情况下,备份数据库操作的sql语句,当数据库发生问题时,可以重新执行一遍备份的sql语句,热备份只能在数据库不使用或使用率低的情况下进行

      • 优点:1、备份时间短,可在表空间或数据文件级备份

        ​ 2、备份时数据库仍可使用

        ​ 3、可对几乎所有数据库实体作恢复

        ​ 4、可达到秒级恢复(恢复到某一时间点上)

        缺点:1、不能出错,否则后果严重

        ​ 2、困难于维护,所以要特别仔细小心,不允许以失败而告终

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

    2.1、常见的备份方法

    1、物理冷备:

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

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

    2、专用备份工具:mydump、mysqlhotcopy

    mysqldump常用的逻辑备份工具

    mysqlhotcopy仅拥有备份MyISAM和ARCHIVE表

    3、启用二进制日志进行增量备份:

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

    4、免费的mysql热备软件:xtrabackup

    建议的备份策略:

    • 完全+增量+二进制日志

    • 完全+差异+二进制日志

    3、MySQL物理冷备

    1、关闭MySQL数据库

    2、使用tar命令直接打包数据库文件夹

    3、直接替换现有MySQL目录

    备份:

    [root@localhost ~]# systemctl stop mysqld //先关闭数据库,之后打包备份
    [root@localhost ~]# mkdir /backup //创建目录
    [root@localhost ~]# tar zcf /backup/mysql_all-$(date +%F).tar.gz /usrlocal/mysql/data/

    恢复:

    [root@localhost ~]# mkdir bak //在当前目录下创建目录
    [root@localhost ~]# mv /usr/local/mysql/data/ /bak/ //mv命令:移动,把什么东西移动到什么位置
    [root@localhost ~]# mkdir restore
    [root@localhost ~]# tar zxf /backup/mysql_all-2020-01-02.tar.gz -C restore/ //恢复数据库,采用将备份数据mv成线上库文件夹的方式
    [root@localhost ~]# mv restore/usr/local/mysql/data/ /usr/local/mysql/
    [root@localhost ~]# systemctl start mysqld

    4、MySQLdump

    mysqldump是MySQL数据库自带的一款命令行工具,mysqldump属于单线程,功能是非常强大的,不仅常被用于执行数据备份任务,甚至还可以用于数据迁移。

    mysqldump的工作原理:通过协议连接到mysql数据库,将数据转换成标准SQL语句(一堆 CREATE , DROP ,INSERT等语句);但我们需要还原时,只要执行这些语句即可将对应的数据还原。

    优点:

    1、备份粒度相当灵活,既可以针对整个MySQL服务,也可以只备份某个或者某几个DB,或者还可以指定只备份某个或者某几个表对象,甚至可以实现只备份表中某些符合条件的记录(-w, --where: 只导出符合条件的记录)。

    缺点:

    1、当数据是浮点数时,会出现精度丢失。

    2、 Mysqldump的备份过程属于逻辑备份,备份速度、恢复速度与物理备份工具相比较慢,而且mysqldump备份的过程是串行化的,不会并行的进行备份,当数据量较大时,一般不会使用mysqldump进行备份,因为效率较低。

    Mysqldump对innodb存储引擎支持热备,innodb支持事务,我们可以基于事务通过mysqldump对数据库进行热备(–single-transaction选项)。

    Mysqldump对myisam存储引擎只支持温备,通过mysqldump对使用myisam存储引擎的表进行备份时,最多只能实现温备,因为在备份时会对备份的表请求一个读锁,当备份完成后,锁会被释放。

    注:mysqldump采用的是逻辑备份,最大的缺陷就是备份和恢复速度都很慢,对于一个小于50G的数据而言,速度还是可以接受的,如果数据库非常大的话,就不建议了,这个速度会让你发狂的

    4.1、mysqldump对单个库进行完全备份

    MySQL提供的mysqldump工具,导出导入数据库,实现数据库的备份与还原

    语法:mysqldump -u[用户名] -p[密码] [选项] [数据库名] > /备份路径/备份文件名

    示例:mysqldump -u root -p proxy > /backup/proxy.sql

    4.2、mysqldump命令对多个库进行完全备份

    语法:
    mysqldump -u 用户名 -p [密码] [选项] --databases 库名1 [库名2] ... > /备份路径/备份文件名
    
    示例:mysqldump -uroot -p --databases proxy mysql > /backup/databases-proxy-mysql.sql 
    

    4.3、对所有库进行完全备份

    语法:mysqldump -u用户名 -p [密码] [选项] --all-databases > /备份路径/备份文件名

    示例:mysqldump -u root -p --opt --all-databases > /backup/all-data.sq

    4.4、备份表

    语法:mysqldump -u 用户名-p [密码] [|选项] 数据库名 表名 > /备份路径/备份文件名

    示例:mysqldump -u root -p mysql user > /backup/mysql-user.sql

    参数:

    -?, --help: 显示帮助信息,英文的;
    -u, --user: 指定连接的用户名;
    -p, --password: 指定用户的密码,可以交互输入密码;
    -S , --socket: 指定socket文件连接,本地登录才会使用。
    -h, --host: 指定连接的服务器名称或者IP。
    -P, --port=: 连接数据库监听的端口。
    --default-character-set: 设置字符集,默认是UTF8。
    -A,--all-databases: 导出所有数据库。不过默认情况下是不会导出information_schema库。
    -B, --databases: 导出指定的某个/或者某几个数据库,参数后面所有名字都被看作数据库名,用空格隔开,包含CREATE DATABASE创建库的语句。
    --tables: 导出指定表对象,参数格式为“库名 表名”,默认该参数将覆盖-B参数。
    -w, --where: 只导出符合条件的记录。
    -l, --lock-tables: 默认参数,锁定读取的表对象,想导出一致性备份的话最好使用该参数,但会导致无法对表执行写入操作。
    --single-transaction:
    该选项在导出数据之前提交一个BEGIN SQL语句,BEGIN 不会阻塞任何应用程序且能保证导出时数据库的一致性状态。它只适用于innoDB存储引擎。
    在InnoDB导出时会建立一致性快照,在保证导出数据的一致性前提下,又不会堵塞其他会话的读写操作。指定这个参数后,其他连接不能执行ALTER TABLE、DROP TABLE 、RENAME TABLE、TRUNCATE TABLE这类语句,事务的隔离级别无法控制DDL语句。本选项和--lock-tables 选项是互斥的,使用参数--single-transaction会自动关闭该选项。
    -d, --no-data: 只导出表结构,不导出表数据。
    -t, --no-create-info: 只导出数据,而不添加CREATE TABLE 语句。
    -f, --force: 即使遇到SQL错误,也继续执行。
    -F, --flush-logs: 在执行导出前先刷新二进制日志文件,一般来说,如果是全库导出,建议先刷新日志文件,否则就不用了。
    -x, --lock-all-tables: 在导出任务执行期间锁定所有数据库中的所有表,以保证数据的一致性。这是一个全局锁定,并且自动关闭--single-transaction 和--lock-tables 选项。这个参数副作用比较大,这是全库锁定,备份执行过程中,该库无法进行读写操作,不是所有业务场景都能接受的。请慎用。
    -n, --no-create-db: 不生成建库的语句CREATE DATABASE … IF EXISTS,即使指定---all-databases或--databases这类参数。
    --triggers: 导出表的触发器脚本,默认就是启用状态。使用–skip-triggers禁用它。
    -R, --outines: 导出存储过程以及自定义函数。
    

    4.5、恢复数据库

    使用mysqldump导出的数据,可以使用导入的方式恢复

    1、使用source命令恢复,此方法需要进入到数据库然后进行恢复

    语法:source /backup/all-data.sql                 //source后面跟绝对路径
    

    2、mysql命令,直接使用mysql命令本身进行恢复,不需要进入数据库

    语法:mysql -u用户名-p [密码] <库备份脚本的路径
    

    4.6、脚本

    在Linux系统使用crontab -e命令,设置任务

    每天执行备份脚本:每个星期日凌晨1:00执行完全备份脚本

    0 1 * * 0 /root/mysqlfullbackup.sh >/dev/null 2>&1
    
    #!/bin/sh
    # Name:mysqlFullBackup.sh
    # 定义数据库目录
    mysqlDir=/usr/local/mysql
    # 定义用于备份数据库的用户名和密码
    user=root
    userpwd=123456
    dbname=test_db
    # 定义备份目录
    databackupdir=/opt/mysqlbackup
    [ ! -d $databackupdir ] && mkdir $databackupdir
    # 定义备份日志文件
    logfile=$databackupdir/mysqlbackup.log
    DATE=$(date +%Y%m%d)
    cd $databackupdir
    # 定义备份文件名
    dumpfile=mysql_${DATE}.sql
    gzdumpfile=mysql_${DATE}.sql.tar.gz
    
    # 使用mysqldump备份数据库,请根据具体情况设置参数
    $mysqlDir/bin/mysqldump -u$user -p$userpwd --single-transaction --flush-logs -B $dbname > $dumpfile
    # 压缩备份文件
    if [ $? -eq 0 ]; then
      echo "--------------------------------------------------------" >> $logfile
      tar czf $gzdumpfile $dumpfile >> $logfile 2>&1
      echo "BackupFileName:$gzdumpfile" >> $logfile
      echo "DataBase Backup Success!" >> $logfile
      rm -f $dumpfile
    else
      echo "--------------------------------------------------------" >> $logfile
      echo "$(date +%Y-%m-%d)  DataBase Backup Fail!" >> $logfile
    fi
    

    5、xtrabackup

    xtrabackup一款基于InnoDB的在线热备工具,开源、免费、支持在线热备、备份恢复速度快、自动实现备份检验、备份过程中不会打断正在执行的事务、能够基于压缩等功能节约磁盘空间和流量

    xtrabackup包含两个主要的工具:xtrabackup、innobackupex

    • xtrabackup只能备份innodb和xtradb两种引擎的表,而不能备份myisam引擎的表

    • innobackupex是一个封装了xtrabackup的Perl脚本,支持同时备份innodb和myisam,但在对myisam备份时需要加一个全局的读锁。还有就是myisam不支持增量备份

    参数:

    –defaults-file指定数据库的配置文件

    –user 指定连接数据库的用户名

    –password 指定连接数据库的密码

    –port=PORT 指定连接数据库使用的端口

    –databases 指定备份的数据库

    –socket 指定连接到本地数据库sever时使用的一个unix domain socket

    使用xtrabackup或innobackupex备份时需要2类用户权限:

    • 用来调用xtra或inno备份工具的系统用户

    • 数据库使用的用户

    5.1、xtrabackup完全备份+binlog增量备份

    首先创建一个备份目录: mkdir -p /opt/mysqlbackup/{full,inc}

    注:full:全备存放的目录;inc:增量备份存放的目录。

    注:确定要备份的数据库和表(如test_db库的stu表)存在及表中插入要测试的数据。开启binlog功能。

    5.1.1、完全备份:

    innobackupex --defaults-file=/etc/my.cnf --socket=/usr/local/mysql/mysql.sock --user=root --password=123456 /opt/mysqlbackup/full/
    

    出现如下提示,表示成功

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-iQEe6kOr-1647877933685)(…/指定typora图像存放目录/image-20220321231842144.png)]

    注:–databases指定要备份的数据库,这里指定的数据库只对MyISAM表有效,对于InnoDB 数据来说都是全备(所有数据库中的InnoDB数据都进行了备份,不是只备份指定的数据库,恢复时也一样)

    /opt/mysqlbackup/full是备份文件的存放位置。备份过程会创建一个以当时备份时间命名的目录存放备份文件。

    各文件说明:

    (1)xtrabackup_checkpoints —— 备份类型(如完全或增量)、备份状态(如是否已经为prepared状态)和LSN(日志序列号)范围信息;
    每个InnoDB页(通常为16k大小)都会包含一个日志序列号,即LSN。LSN是整个数据库系统的系统版本号,每个页面相关的LSN能够表明此页面最近是如何发生改变的。
    
    (2)xtrabackup_binlog_info —— mysql服务器当前正在使用的二进制日志文件及至备份这一刻为止二进制日志事件的位置。
    
    (3) xtrabackup_info —— 记录备份的基本信息,uuid、备份命令、备份时间、binlog、LSN、以及其他加密压缩等信息。
    
    (4)backup-my.cnf —— 备份命令用到的配置选项信息;
    

    注:在使用innobackupex进行备份时,还可以使用–no-timestamp选项来阻止命令自动创建一个以时间命名的目录;指定了这个选项,备份会直接备份在BACKUP-DIR,不再创建时间戳文件夹。例如:

    innobackupex --user=root --password=123456 --no-timestamp /tmp/db_backup/full
    

    使用–no-timestamp时,后面的这个full目录必须写上且可以不用提前自己建立,它由innobackupex自动建立

    5.1.2、增量备份二进制文件

    mysqlbinlog -v --start-position=154 /data/mysql/log/mysql-bin.000029 > /opt/mysqlbackup/inc/$(date +%Y%m%d%H%M%S).sql
    

    5.1.3、使用innobackupex还原数据库

    /etc/init.d/mysqld stop //停止数据库

    还原完全备份:

    准备(prepare)一个完全备份,一般情况下,在备份完成后,数据尚且不能用于恢复操作,因为备份的数据中可能会包含尚未提交的事务或已经提交但尚未同步至数据文件中的事务。因此,此时数据文件仍处理不一致状态。“准备”的主要作用正是通过回滚未提交的事务及同步已经提交的事务至数据文件也使得数据文件处于一致性状态。

    在准备(prepare)过程结束后,InnoDB表数据已经前滚到整个备份结束的点,而不是回滚到xtrabackup刚开始时的点。

    innobakupex命令的–apply-log选项可用于实现上述功能。如下面的命令:

    –apply-log指明是将日志应用到数据文件上,完成之后将备份文件中的数据恢复到数据库中。操作如下:

    innobackupex --apply-log /opt/mysqlbackup/full/2019-07-12_15-34-01/
    

    注:/opt/mysqlbackup/full/2019-07-12_15-34-01/备份文件所在目录名称

    使用完全备份还原数据库:

    innobackupex命令的–copy-back选项用于执行恢复操作,其通过复制所有数据相关的文件至mysql服务器DATADIR目录中来执行恢复过程。innobackupex通过backup-my.cnf来获取DATADIR目录的相关信息。

    操作如下:

    innobackupex --copy-back /opt/mysqlbackup/full/2019-07-12_15-34-01/
    

    这里的–copy-back指明是进行数据恢复。数据恢复完成之后,需要修改相关文件的权限mysql数据库才能正常启动。

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ubOnMxer-1647877933685)(…/指定typora图像存放目录/image-20220321233452904.png)]

    请确保如上信息的最行一行出现“completed OK!”。

    5.2、xtrabackup完全备份+xtrabacup增量备份

    增量备份优点:减少备份数据重复,节省磁盘空间,缩短备份时间

    增量备份的实现,依赖于innodb页上面的LSN(log sequence number),每次对数据库的修改都会导致LSN自增。增量备份会复制指定LSN<日志序列号>之后的所有数据页。

    xtrabacup进行备份

    innobackupex --defaults-file=/etc/my.cnf --socket=/usr/local/mysql/mysql.sock --user=root --password=123456 --port=3306 /opt/mysqlbackup/full/
    

    xtrabackup进行增量备份

    使用–incremental创建增量备份

    语法:innobackupex --user=root --password=123456 --incremental /增量1路径 --incremental-basedir=全备路径,后面指定在哪个全备上进行增量备份

    innobackupex --user=root --password=123456 --incremental /opt/mysqlbackup/inc/ --incremental-basedir=/opt/mysqlbackup/full/2019-07-12_17-29-48/ --socket=/usr/local/mysql/mysql.sock
    

    选项说明:

    –incremental:这个选项告诉 xtrabackup 创建一个增量备份,而不是完全备份。

    –incremental-basedir:指定上次完整备份或者增量备份文件的位置(即如果是第一次增量备份则指向完全备份所在目录,在执行过增量备份之后再一次进行增量备份时,其–incremental-basedir应该指向上一次的增量备份所在的目录)。

    5.2.1、增量备份的另一种方式

    innobackupex --user=root --password=123456 --incremental /opt/mysqlbackup/inc/ --incremental-lsn=8222480 --socket=/usr/local/mysql/mysql.sock
    

    进行第2次增备份:(以增量1为基准:/opt/mysqlbackup/inc/2019-07-13_17-26-01/ )

    innobackupex --user=root --password=123456 --incremental /opt/mysqlbackup/inc/ --incremental-basedir=/opt/mysqlbackup/inc/2019-07-13_17-26-01/ --socket=/usr/local/mysql/mysql.sock
    

    注:第二次增量备份–incremental-basedir指向上一次增量备份文件的位置。

    5.2.2、增量备份的恢复

    增量备份的恢复需要有3个步骤

    1. 准备完全备份

    2. 恢复增量备份到完全备份(开始恢复的增量备份要添加–redo-only参数,到最后一次增量备份要去掉–redo-only)

    3. 对整体的完全备份进行恢复,回滚未提交的数据

    注:–redo-only 用于准备增量备份内容把数据合并到全备份目录

    准备一个全备:

    innobackupex --apply-log --redo-only /opt/mysqlbackup/full/2019-07-12_17-29-48/
    

    将增量1应用到完全备份:

    innobackupex --apply-log --redo-only /opt/mysqlbackup/full/2019-07-12_17-29-48/ --incremental-dir=/opt/mysqlbackup/inc/2019-07-13_17-26-01/
    

    将增量2应用到完全备份,注意不加 --redo-only 参数了(因为这是最后一个增量备份)

    innobackupex --apply-log /opt/mysqlbackup/full/2019-07-12_17-29-48/ --incremental-dir=/opt/mysqlbackup/inc/2019-07-15_15-38-57/
    

    注:/opt/mysqlbackup/full/2019-07-12_17-29-48/ 是全库备份路径

    /opt/mysqlbackup/inc/2019-07-13_17-26-01/ 是第一次增量备份路径

    /opt/mysqlbackup/inc/2019-07-15_15-38-57/ 是第二次增量备份路径

    把所有合在一起的完全备份整体进行一次apply操作,回滚未提交的数据

    innobackupex --apply-log /opt/mysqlbackup/full/2019-07-12_17-29-48/
    

    ental-dir=/opt/mysqlbackup/inc/2019-07-13_17-26-01/

    将增量2应用到完全备份,注意不加 --redo-only 参数了(因为这是最后一个增量备份)
    

    innobackupex --apply-log /opt/mysqlbackup/full/2019-07-12_17-29-48/ --incremental-dir=/opt/mysqlbackup/inc/2019-07-15_15-38-57/

    
    注:/opt/mysqlbackup/full/2019-07-12_17-29-48/ 是全库备份路径
    
       /opt/mysqlbackup/inc/2019-07-13_17-26-01/ 是第一次增量备份路径
    
       /opt/mysqlbackup/inc/2019-07-15_15-38-57/ 是第二次增量备份路径
    
    把所有合在一起的完全备份整体进行一次apply操作,回滚未提交的数据
    
    

    innobackupex --apply-log /opt/mysqlbackup/full/2019-07-12_17-29-48/

    
    
    更多相关内容
  • 为了保证安全,可以开启当有数据没有备份成功时,不删除历史备份。 5.较完善的环境检测,能准确的提醒用户那里配置出现问题。 和上一版本比较做了如下调整: 1.完善的环境和参数校验。 2.代码结构更加整洁 3.调整...
  • mysql完整备份和增量备份脚本,本文档采用mysqldump 对数据库进行备份,mysqldump 是采用SQL级别的备份机制,它将数据表导成 SQL脚本文件,在不同的 MySQL 版本之间升级时相对比较合适,这也是最常用的备份方法,...
  • 该脚本支持日志功能,在备份成功或是失败都会讲日志信息写入到数据备份目录下的MySQLBackLog.txt文件中,如果在备份过程中存在错误,没有备份成功的数据库会写入到具体的备份目录下的__error.txt文件中,以方便手动...
  • MySQL数据库备份

    千次阅读 2022-06-21 20:36:53
    日志文件在数据库进行备份和恢复时起到了很重要的作用 常用的日志文件默认保存在 /usr/local/mysql/data 目录下 可在 /etc/my.cnf 配置文件中的 [mysqld] 中进行日志的路径修改、开启、关闭等操作用于记录 mysql ...


    前言:
    数据库备份谨防数据丢失

    一、MySQL常用日志

    1.1 概述

    日志文件在数据库进行备份和恢复时起到了很重要的作用
    常用的日志文件默认保存在 /usr/local/mysql/data 目录下
    可在 /etc/my.cnf 配置文件中的 [mysqld] 中进行日志的路径修改、开启、关闭等操作

    1.2 错误日志

    用于记录 mysql 启动、停止或运行时产生的错误信息
    可通过一下字段进行更新

    log-error=/usr/local/mysql/data/mysql_error.log (指定日志的保存位置和文件名)
    

    1.3 二进制文件

    二进制日志,用来记录所有更新的数据或者已经潜在更新了数据的语句,记录了数据的更改,可用于数据恢复
    开启方式:

    log-bin=mysql-bin 或者 log_bin=mysql-bin
    

    1.4 中继日志

    一般情况下,它在 mysql 主从同步(复制)、读写分离集群的从节点上才开启。
    主节点一般不需要这个日志。

    1.5 慢查询日志

    慢查询日志,用来记录所有执行时间超过long_query_time秒的语句,可以找到哪些查询语句执行时间长,以便于优化
    开启方式:

    slow_query_log=ON
    slow_query_log_file=/usr/local/mysql/data/mysql_slow_query.log (指定文件路径和名称)
    long_query_time=5 (设置执行超过5秒的语句会被记录,缺省时默认为10秒)
    

    1.6 数据库中的查询日志状态

    1.6.1 查看二进制日志状态开启

    show variables like '%log_bin%';
    

    在这里插入图片描述

    1.6.2 查看慢查询日志功能是否开启

    show variables like '%slow%';
    

    在这里插入图片描述

    1.6.3 查询慢时间设置

    
    show variables like 'long_query_time';
    
    

    在这里插入图片描述

    1.6.4 在数据库中设置开启慢查询的办法(临时)

    set global slow_query_log=ON;
    
    查看
    show variables like ‘long_query_time’;
    

    日志超时时间
    在这里插入图片描述

    二、备份

    2.1 概述

    备份的主要目的是灾难恢复

    还可以用来测试应用、回滚数据修改、查询历史数据、审计等

    在生产环境中,数据的安全性至关重要

    任何数据的丢失都可能产生严重的后果

    2.2 备份的重要性

    在企业中,数据的价值至关重要,数据保障了企业业务的正常运行。
    因此,数据的安全性及数据的可靠性是运维的重中之重,任何数据的吊事都可能对企业产生严重的后果。

    == 通常情况下,造成数据丢失的原因有一下几种:==

    程序错误
    人为操作错误
    运算错误
    磁盘故障
    灾难(火灾、地震、盗窃等)

    2.3 备份类型

    从物理与逻辑的角度分类可分为:逻辑备份、物理备份

    从数据库的备份策略角度分类可分为:完全备份、差异备份、增量备份

    ==完全备份:==每次对数据进行完整的备份,即对整个数据库、数据库结构和文件结构的备份,保存的是备份完成时刻的数据库,是差异备份与增量备份的基础。完全备份的备份与恢复操作都非常简单方便,但是数据存在大量的重复,并且会占用大量的磁盘空间,备份的时间也很长。

    ==差异备份:==备份那些自从上次完全备份之后被修改过的所有文件,备份的时间节点是从上次完整备份起,备份数据量会越来越大。恢复数据时,只需恢复上次的完全备份与最近的一次差异备份。

    ==增量备份:==只有那些在上次完全备份或者增量备份后被修改的文件才会被备份。以上次完整备份或上次增量备份的时间为时间点,仅备份这之间的数据变化,因而备份的数据量小,占用空间小,备份速度快。但恢复时,需要从上一次的完整备份开始到最后一次增量备份之的所有增量依次恢复,如中间某次的备份数据损坏,将导致数据的丢失。

    2.4 备份的办法

    数据库的备份可以采用很多种方式,如直接打包数据库文件(物理冷备份)、专用备份工具(mysqldump)、二进制日志增量备份、第三方工具备份等

    2.4.1 冷备份

    冷备份时需要在数据库处于关闭状态下,能够较好地保证数据库的完整性
    冷备份的特点就是速度快,恢复时也是最为简单的。
    通过直接打包数据库文件夹(/usr/loc.al/mysql/data)来实现备份

    2.4.2 通过启用二进制日志进行增量备份

    支持增量备份,进行增量备份时必须启用二进制日志。
    二进制日志文件为用户提供复制,对执行备份点后进行的数据库更改所需的信息进行恢复。
    如果进行增量备份(包含自上次完全备份或增量备份以来发生的数据修改) ,需要刷新二进制日志

    2.4.3 通过第三方工具备份

    第三方工具Percona xtraBackup是一个免费的MysQL热备份软件,支持在线热备份Innodb和xtraDB,也可以支持MySQL表备份,不过MyISAM表的备份要在表锁的情况下进行。

    2.5 备份命令

    完全备份

    InnoDB存储引擎的数据库在磁盘上存储成三个文件:db.opt(表属性文件)、表名.frm(表结构文件)、表名.ibd(表数据文件)。
    
    

    物理冷备份与恢复

    systemctl stop mysqld
    yum -y install xz
     
    #压缩备份
    cd /usr/local/mysql/data
    tar jcvf mysql_all_$(date +%F).tar.xz /usr/local/mysql/data
    systemctl start mysqld
     
    #模拟故障,删除数据库
    drop database HUISUO;
     
    #解压恢复
    tar jxvf /opt/mysql_all_2022-06-21.tar.xz -C /usr/local/mysql/data
    cd /usr/local/mysql/data
    mv usr/local/mysql/data/* ./
    

    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

    完全备份一个或多个完整的库(包括其中所有的表)

    mysqldump -u root -p[密码] --databases 库名1 [库名2] ... > /备份路径/备份文件名.sql   
    #导出的就是数据库脚本文件
     
    例:
     
    mysqldump -u root -p --databases liu > /opt/kgc.sql       #备份一个kgc库
    mysqldump -u root -p --databases mysql li > /opt/mysql-kgc.sql    #备份mysql与 kgc两个库
    

    在这里插入图片描述

    备份所有的库

    mysqldump -uroot -p[密码] --all-databases > /备份路径/备份文件名.sql
     
    

    完全备份指定库中的部分表

    mysqldump -u root -p[密码] 库名 [表名1] [表名2] … > /备份路径/备份文件名.sql
     
    如:
    mysqldump -uroot -p[密码] [-d] HUISUO member1 > /opt/member1.sql
    #使用“-d”选项,说明只保存数据库的表结构
    #不使用“-d”选项,说明表数据也进行备份
    

    在这里插入图片描述在这里插入图片描述

    查看备份文件

    grep -v "^--" /opt/member1.sql | grep -v "^/" | grep -v "^$"
    

    在这里插入图片描述

    2.6 增量备份与恢复

    2.6.1 增量备份需要开启二进制日志功能

    vim /etc/my.cnf
    #错误日志
    log-error=/usr/local/mysql/data/mysql_error.log	 
    #通用查询日志
    general_log=ON
    general_log_file=/usr/local/mysql/data/mysql_general.log
    #二进制日志
    log-bin=mysql-bin	
    #慢查询日志
    slow_query_log=ON
    slow_query_log_file=/usr/local/mysql/data/mysql_slow_query.log
    long_query_time=5
    #配置文件添加完后需要重启MySQL
    systemctl restart mysql
    

    在这里插入图片描述

    2.6.2 可每天进行增量备份操作,生成新的二进制文件

    先完成完全备份(在创建好表和库的基础上)

    systemctl restart mysqld.service
    mysqldump -uroot -p meeting working > /mnt/meeting_working_$(date +%F).sql
    mysqldump -uroot -p meeting > /mnt/meeting_$(date +%F).sql
    生成新的二进制文件(可每天进行增量备份操作)
    mysqladmin -uroot -p flush-logs
    

    2.6.3 查看新生成的日志内容

    mysqlbinlog --no-defaults --base64-output=decode-rows -v /usr/local/mysql/data/mysql-bin.000002
    

    2.7 恢复的方法

    2.7.1 按位置恢复

    先删除表
    drop table working;
     
    清空表内容
    truncate table meeting.working;
     
    恢复结束点为删除命令前和插入命令后
    mysqlbinlog --no-defaults --stop-position='902' usr/local/mysql/data/mysql-bin.000003 | mysql -uroot -p
    

    2.7.2 按时间恢复

    先清空表CLASS1,方便实验
    mysql -uroot -p -e "truncate table meeting.working;"
    mysql -uroot -p -e "select * from meeting.woring;"
     
    mysqlbinlog --no-defaults --stop-datetime='2021-04-15 15:39:23' /opt/mysql-bin.000003 |mysql -uroot -p
    mysql -uroot -p -e "select * from meeting.woring;"
    

    总结:

    mysql没有直接提供增量备份的工具,需要借助二进制日志文件进行操作

    使用日志分隔日志的方式进行增量备份

    增量恢复需要根据日志文件的时间先后逐个执行

    使用基于时间和位置的方式进行恢复,可以更精准的恢复数据

    展开全文
  • 数据库备份,是在数据丢失的情况下,能及时恢复重要数据,防止数据丢失的一种重要手段 一个合理的数据库备份方案,能够在数据丢失时,有有效地恢复数据,而且也需要考虑技术实现难度和有效地利用资源 一、MySQL ...

    目录

    前言

    一、MySQL 完全备份

    1.数据库备份方式精讲

    1.1 数据库备份的重要性

    1.2 数据库备份的分类

    1.3 MySQL 完全备份概念解读

    2.mysqldump 备份演练

    2.1 使用 tar 打包文件夹备份

    2.2 使用 mysqldump 工具备份 

    二、MySQL 完全恢复

    1.恢复整库操作

    1.1 source 命令整库恢复

    1.2 MySQL 命令整库恢复

     2.恢复表操作

    2.1 使用 source 命令恢复表

    总结


    前言

    随着办公自动化和电子商务的飞速发展,企业对信息系统的依赖性越来越高,数据库作为信息系统的核心,担当者重要的角色
    数据库备份,是在数据丢失的情况下,能及时恢复重要数据,防止数据丢失的一种重要手段
    一个合理的数据库备份方案,能够在数据丢失时,有有效地恢复数据,而且也需要考虑技术实现难度和有效地利用资源

    一、MySQL 完全备份

    1.数据库备份方式精讲

    1.1 数据库备份的重要性

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

    数据库备份的重要性主要体现在:

    1. 提高系统的高可用性和灾难可恢复性,在数据库系统崩溃时,没有数据库备份就没法找到数据
    2. 使用数据库备份还原数据库,是数据库崩溃时提供数据恢复最小代价的最优方案,如果让用户重新添加数据,代价未免太大
    3. 没有数据就没有一切,数据库备份是一种防范灾难的强力手段

     使用数据库的过程中,有多种原因造成数据的丢失:

    1. 程序错误:指对数据库操作的程序难免有些错误,造成数据丢失
    2. 人为错误:指由于使用人员的误操作造成的数据被破坏,还有可能是黑客对系统攻击造成的数据丢失等
    3. 计算机失败:指运行数据库的服务器操作系统或软件损坏,有可能造成数据的损坏
    4. 磁盘失败:指硬盘等存储数据的硬件设备,长时间运行后可能损坏,造成数据丢失
    5. 灾难(如火灾、地震)和偷窃:指自然灾害等的发生,有可能造成数据丢失
    • 数据丢失会造成严重的经济损失,如携程网2015年5月28日数据库崩溃,每小时损失大概106万美元
    • 所以在企业信息系统建设中,数据库的备份管理是非常重要的内容

    1.2 数据库备份的分类

    备份方式分很多种,从物理与逻辑的角度,备份可分为以下几类:

     1.2.1 物理备份

    • 指对数据库操作系统的物理文件(如数据文件、日志文件等)的备份
    • 物理备份是磁盘块为基本单位将数据从主机复制到备机
    • 物理备份又可以分为脱机备份(冷备份)和联机备份(热备份)
    • 冷备份(脱机备份):在关闭数据库时进行的备份操作,能够较好地保证数据库的完整性
    • 热备份(联机备份):在数据库运行状态中进行操作,这种备份方法依赖于数据库的日志文件

    1.2.2 逻辑备份

    • 逻辑备份是以文件为基本单位将数据从主机复制到备机
    • 指对数据库逻辑组件(如表等数据库对象)的备份

    从数据库的备份策略角度来看,备份又可分为完全备份、差异备份和增量备份

    1.2.3 完全备份

    • 每次对数据进行完整的备份
    • 可以备份整个数据库,包含用户表、系统表、索引、视图和存储过程等所有数据库对象
    • 但它需要花费更多的时间和空间,所以,做一次完全备份的周期要长些

    1.2.4 差异备份

    • 备份那些自从上次完全备份之后被修改过的文件,即只备份数据库部分的内容
    • 它比最初的完全备份小,因为只包含自上次完全备份以来所改变的数据库
    • 它的优点是存储和恢复速度快

    1.2.5 增量备份

    • 只有那些在上次完全备份或者增量备份后被修改的文件才会被备份

    1.2.6 备份方式比较

    备份方式完全备份差异备份增量备份
    完全备份时的状态表1、表2表1、表2表1、表2
    第1次添加内容创建表3创建表3创建表3
    备份内容表1、表2、表3表3表3
    第2次添加内容创建表4创建表4创建表4
    备份内容表1、表2、表3、表4表3、表4表4
    • 完全备份每次都是把整个数据库中的内容进行备份
    • 差异备份在第1次添加内容后备份,即备份新添加的内容;第2次添加内容后备份,把第1次添加的内容也进行了备份,它是根据完全备份时的状态决定的
    • 差异备份每次都是把完全备份之后所有的修改进行备份,而不管之前是否做过差异备份
    • 增量备份只备份每次新修改的内容,第1次创建表3,就对表3备份,第2次添加表4后,因为之前已经备份过表3,所以只备份表4的内容

    1.3 MySQL 完全备份概念解读

    • MySQL 的备份方式主要有完全备份与增量备份
    • 完全备份是对整个数据库的备份、数据库结构和文件结构的备份,保存的是备份完成时刻的数据库,是增量备份的基础
    • 完全备份的优点是备份与恢复操作简单方便,缺点是数据存在大量重复,占用大量的备份空间,备份的时间长
    • 在生产环境中,这两种备份方式都会使用,需要制定合理高效的方案达到备份数据的目的,避免数据丢失造成严重的后果

    2.mysqldump 备份演练

    • MySQL 数据库的备份可以采用两种方式
    • 因为数据库实际上就是文件,直接打包数据库文件夹,或者是使用专用备份工具 mysqldump 都可以进行备份工作

    2.1 使用 tar 打包文件夹备份

    MySQL 的数据库文件默认都是保存在安全目录的 data 文件夹下,可以直接保存 data 文件夹,因为占用空间较大,可以使用data 打包压缩进行保存

    yum -y install xz
    #数据库文件很大,可以使用压缩率较大的xz格式压缩,首选需要安装xz压缩格式工具
    
    tar Jcvf /opt/mysql-$(date +%F).tar.xz /usr/local/mysql/data/
    #对数据库文件夹进行打包操作
    
    ls /opt
    #查看打包命令是否运行成功,已经生成了备份文件
    
    du -sh /opt/mysql-2021-10-26.tar.xz 
    #对比打包前后的文件大小,可以看到压缩的备份文件所占用空间很小
    
    tar -Jxvf /opt/mysql-2021-10-26.tar.xz -C /usr/local/mysql/data/
    systemctl restart mysql
    #如果数据库文件损坏数据丢失,可以解压缩文件,相当于数据恢复
    

     

    2.2 使用 mysqldump 工具备份 

    • mysqldump是客户端常用逻辑备份程序,能够产生一组被执行以后再现原始数据库对象定义和表数据的SQL语句。它可以转储一个到多个MySQL数据库,对其进行备份或传输到远程SQL服务器。mysqldump更为通用,因为它可以备份各种表。
    • 使用 mysqldump 可以更加灵活地控制备份的内容,比如某几个表或库都可以单独备份
    •  mysqlhotcopy仅适用于某些存储引擎(MyISAM和ARCHIVE)
    #开始之前,创建库和表,用作例子
    
    mysql -uroot -p123123
    #输入密码进入数据库,以上为我的密码
    
    create database SCHOOL;
    #创建库
    use SCHOOL;
    
    create table CLASS01 ( id int(2) not null auto_increment, name varchar(10) not null, sex char(5) not null, hobby varchar(10), primary key (id));
    #创建表结构
    #字段一:id,最大显示长度2,不能为空,自动递增从1开始
    #字段二:name,可变长度字段,10,不能为空
    #字段三:sex,固定长度5,不能为空
    #字段四:hobby,可变长度,最多10字符
    #字段四:主键(id)
    
    insert into CLASS01 values(1,'wangyi','man','reading');
    insert into CLASS01 values(2,'wanger','woman','singing');
    #插入2条数据
    
    select * from CLASS01;
    #检查一下
    
    quit
    #退出数据库
    

    #使用 mysqldump 对某些表进行完全备份,命令格式如下:
    mysqldump -u[用户名] -p[密码] [选项] [数据库名] [数据表名] > /备份路径/备份文件名.sql
    #导出的为数据库脚本文件
    
    例:对库SCHOOL中的表class进行备份至/opt/目录下
    mysqldump -uroot -p[密码] SCHOOL CLASS01 > /opt/test01.sql
    

    #对某些库进行完全备份
    mysqldump -uroot -p[密码] [数据库名] > /目录/备份文件名.sql
    
    例:
    mysqldump -uroot -p123123 SCHOOL > /opt/test02
    
    
    #对多个库进行完全备份
    mysqldump -uroot -p123123 --databases SCHOOL sys > /opt/test03.sql
    
    
    #对所有库进行完全备份
    mysqldump -uroot -p123123 --all-databases > /opt/test04.sql
    
    
    #直接备份表结构
    mysqldump -uroot -p123123 -d SCHOOL CLASS01 > /opt/test05.sql
    
    
    ls /opt/
    #查看打包命令是否运行成功,已经生成了备份文件
    

     

    cat /opt/test05.sql
    #分析 mysqldump 工具生成的备份文件的内容
    

     

    •  上面使用了 -d 选项,说明只保存数据库的表结构,且表中只有一个库,可以看到先删除了表(同名),再创建了它
    • 删除和创建都是最普通的 MySQL 命令,任何一条在 MySQL 中都是可以执行的语句,有了这些语句就可以创建出和现在的表结构相同的表
    • 如果不使用 -d 选项,会把数据也进行备份,下面看看数据时如何保存
    cat /opt/test01
    

    • 可以看到与使用 -d 参数的差别是最后出现了 insert into 语句,往数据库中插入了两条数据,也就是说,数据的备份是保存的插入语句操作
    • 通过以上分析,很容易理解,备份的本质就是保存数据库当前表结构的创建语句和现有数据的插入语句,有了它们就可以直接恢复数据库的状态

    二、MySQL 完全恢复

    • 前面介绍了数据库的完全备份,使用 mysqldump 工具可以把数据的创建语句保存在备份的脚本文件中
    • 当出现错误时,可以使用以下几种方法恢复它们

    1.恢复整库操作

    1.1 source 命令整库恢复

    mysql -uroot -p123123
    
    show databases;
    drop database SCHOOL;
    show databases;
    
    source /opt/test03.sql
    #之前备份过的,该备份为SCHOOL和sys两个库的完整备份
    #注意!选项得加“--databases”才是完整的备份,不然会恢复不了
    

    1.2 MySQL 命令整库恢复

    quit
    
    mysql -uroot -p123123 -e 'drop database SCHOOL;'
    mysql -uroot -p123123 -e 'SHOW DATABASES;'
    
    mysql -uroot -p123123 < /opt/test03.sql
    
     mysql -uroot -p123123 -e 'SHOW DATABASES;'
    

     2.恢复表操作

    • 恢复数据表同样可以使用 source 命令和 mysql 命令操作

    2.1 使用 source 命令恢复表

    mysql -uroot -p123123
    use SCHOOL;
    show tables;
    drop table CLASS01;
     
    source /opt/test01.sql
    #恢复表
    
    show tables;
    select * from CLASS01;
    #查看
    

     2.2 使用 mysql 命令恢复表

    quit
    
    mysql -uroot -p123123 -e 'SHOW TABLES FROM SCHOOL;'
    
    mysql -uroot -p123123 -e 'DROP TABLES SCHOOL.CLASS01;'
    mysql -uroot -p123123 -e 'SHOW TABLES FROM SCHOOL;'
    
    mysql -uroot -p123123 SCHOOL < /opt/test01.sql
    mysql -uroot -p123123 -e 'SHOW TABLES FROM SCHOOL;'
    

     

    总结

    MySQL 需要定期实施备份,指定合适的备份计划或策略,并严格遵守
    除了进行完全备份,开启 MySQL 服务器的日志功能也很重要,完全备份加上日志,可以对 MySQL 进行最大化还原
    备份文件的名字还需钥使用统一的易于理解的名称,推荐使用库名或表名加上时间的命名规则,在需要恢复数据库时能很容易的定位到相应的所需备份文件
     

    展开全文
  • 还是已经工作了,想必多多少少都听说过删库跑路、rm -rf的情况,主要指的就是被有意或无意的删除掉了数据库的数据,而数据是整个业务最重要的价值体现,如果你的公司或者项目组没有一个成熟的数据库数据备份方案,...

    【实战背景】

    不管你是正在上学,还是已经工作了,想必多多少少都听说过发生rm -rf删库跑路的情况,主要指的就是被有意无意的删除掉了数据库的数据,而数据是整个业务最重要的价值体现,如果你的公司或者项目组没有一个成熟的数据库数据备份方案,一旦发生意外,我只能说年轻人,大意了吧,没有备份数据库!!!

    数据库备份方案根据实际需要进行定制,一般比较主流的方案是方案一:每周一次全量备份+每天一次增量备份,主要是为了节省MySQL数据库服务器的空间(省钱),当然如果老板比较有钱,光是MySQL服务器的空间就有几千个G,空间大,比较任性的,直接方案二:每天做一次全量备份也可以~

    本文主要介绍基于Xtrabackup实现MySQL数据库的全量备份+增量备份方案~

    很细,建议先点⭐收藏,预防走丢❤️‍,进入正文~

    一、Xtrabackup介绍

    官方介绍文档
    在这里插入图片描述

    简单总结下来就是XtraBackupPercona旗下的一款产品,支持MySQL数据库的热备份(在线不停机),并且是免费开源,适用所有MySQL版本非阻塞紧密压缩高度安全~

    在这里插入图片描述
    心动就先点一下⭐收藏呗! 哈哈哈,回归正题,进入实战演练~

    二、Xtrabackup安装

    2.1 版本说明

    (1)Percona XtraBackup 2.4版本,支持 MySQL 5.1 [1]、5.5、5.6 和 5.7服务器上的InnoDB数据库备份,但不支持MySQL 8.0 数据库备份。
    (2)Percona XtraBackup8.0版本,仅支持MySQL 8.0服务器上存储引擎为InnoDB的数据库备份,但不支持在MySQL 8.0之前版本的数据库备份~

    Percona XtraBackup 8.0 官方文档
    在这里插入图片描述
    Percona XtraBackup 2.4 官方文档
    在这里插入图片描述

    2.2 资源准备

    2.2.1 查看操作系统

    查看服务器 lsb_release -a
    在这里插入图片描述
    我的操作系统信息是Linux CentOS 7.7.1908 位数64,那么我后面我需要下载对应的相关安装包~

    2.2.2 查看MySQL版本号

    方式一:Linux终端命令行
    mysql -V
    在这里插入图片描述

    方式二:MySQL终端命令行
    mysql> select version();
    在这里插入图片描述
    根据前面【版本说明】提到的MySQL5.7应该选择的是Percona XtraBackup 2.4相关版本~

    2.2.3 资源下载

    这里我个人操作系统环境对应安装的资源及版本如下:

    XtraBackup其他版本官方下载 https://www.percona.com/downloads/

    XtraBackup 8.0
    XtraBackup 2.4
    在这里插入图片描述
    在这里插入图片描述

    (1)问题:
    有同学问,你为啥下载的是rpm包,我选择的却是tar.gz安装包?而且你为啥不直接在服务器通过wget +资源url在线下载呢?简单又省事~
    (2)回答:
    首先下载什么包,这个跟你选择的操作系统有关,选择Linux-Generic是通用版本的,对应tar.gz包,我选择的是CentOS7,对应rpm安装包~
    其次下载好rpm的安装包后,再进行离线安装这种方式,我个人觉得比较稳妥,因为实际生产环境很多都是内网,无法直接在线下载安装,因此需要提前下载好离线安装包,再上传到服务器,进行安装~
    在这里插入图片描述

    2.2.4 资源上传

    按实际需要,创建存放安装资源的目录~

    mkdir -p /opt/mysql/xtrabackup
    cd /opt/mysql/xtrabackup
    

    2.3 开始安装

    2.3.1 安装xtrabackup

    先查看是否已安装~

    rpm -qa |grep xtrabackup
    

    若没有任何提示信息,说明未安装,再使用root用户进行操作安装~

    cd /opt/mysql/xtrabackup
    yum -y localinstall percona-xtrabackup-24-2.4.19-1.el7.x86_64.rpm
    

    提示如下,表明安装成功~
    在这里插入图片描述

    2.3.2 安装libv

    libvxtrabackup的依赖包,如果使用yum命令已经正常安装Xtrabackup,这步可以跳过~

    但是有的小伙伴可能没有使用yum命令安装Xtrabackup:

    yum -y localinstall percona-xtrabackup-24-2.4.19-1.el7.x86_64.rpm
    

    而是使用了rpm命令进行安装Xtrabackup:

    rpm -ivh percona-xtrabackup-24-2.4.19-1.el7.x86_64.rpm
    

    PS:yumrpm最大的区别就是通过yum命令安装缺失包时,会自动去加载需要的包,而通过rpm命令安装缺失包时,不会自动去加载缺失的包,而是直接报错~

    所以当使用rpm命令安装xtrabackup时,此时安装xtrabackup需要依赖libev,如果libev没安装,则会安装失败,报错关键信息如下:
    libev.so.4()(64bit) is needed by percona-xtrabackup-24-2.4.19-1.el7.x86_64

    这种情况就需要下载对应版本的依赖包libev进行安装,再继续安装xtrabackup~

    (1)下载libev包
    推荐比较靠谱的rpm包下载地址:http://rpm.pbone.net/
    在这里插入图片描述
    根据我的操作系统及操作系统版本号(CentOS 7.7.1908 位数x64)对应的libevrpm安装包版本是 libev-4.04-2.el5.x86_64.rpm~
    在这里插入图片描述

    另外两个也挺靠谱的rpm包下载地址:
    https://pkgs.org/search/?q=libev
    https://rpmfind.net/linux/rpm2html/search.php?query=libev

    (2)查看是否已安装libev~

    rpm -qa |grep libev
    

    若没有任何提示信息,说明未安装,再使用root用户进行操作安装~

    cd /opt/mysql/xtrabackup
    rpm -ivh libev-4.15-7.el7.x86_64.rpm
    

    再使用rpm命令进行安装Xtrabackup:

    rpm -ivh percona-xtrabackup-24-2.4.19-1.el7.x86_64.rpm
    

    安装成功,提示如下信息:
    在这里插入图片描述
    不过还是更推荐大家使用yum命令进行安装Xtrabackup:

    yum -y localinstall percona-xtrabackup-24-2.4.19-1.el7.x86_64.rpm
    

    2.3.3 卸载重装

    如果想要重装libevxtrabackup,需要先卸载原来安装的,不需要卸载这步可以忽略~

    (1)查询

    rpm -qa |grep libev
    rpm -qa |grep xtrabackup
    

    (2)卸载

    yum -y remove libev
    yum -y remove percona-xtrabackup
    

    (3)再次查询

    rpm -qa |grep libev
    rpm -qa |grep xtrabackup
    

    2.3.3 安装qpress

    需要使用root用户操作安装qpressqpress主要用于xtrabackup备份数据库时对数据文件进行压缩(压缩文件后缀.qp)以及还原数据库时再对压缩数据文件(后缀.qp)进行解压,大大节省存储空间,当然如果老板非常有钱,服务器空间超大,不需要进行压缩的可以忽略~

    安装过程

    cd /opt/mysql/xtrabackup
    tar -xvf qpress-11-linux-x64.tar
    mv qpress /usr/bin
    chmod 755 /usr/bin/qpress
    

    三、MySQL开启binlog日志

    3.1 什么是binlog日志?

    简单点的说就是记录了MySQL修改和添加的操作信息,主要用于数据库的主从复制以及备份还原,几乎所有的第三方数据库备份及恢复,都需要依赖于这个binlog日志实现,非常重要!!!
    MySQL的binlog主要有STATEMENTROWMIXED三种模式,比较主流的是ROW模式,建议大家有空可以了解了解~

    3.2 如何开启binlog日志?

    修改MySQL的配置文件vim /etc/my.cnf,设置binlog为开启:

    #=====设置binlog方式1===========
    log_bin=ON
    log_bin_basename=/data/mysqllog/bin-log/mysql-bin
    log_bin_index=/data/mysqllog/bin-log/mysql-bin.index
    
    #=====设置binlog方式2===========
    log_bin=/data/mysqllog/bin-log/mysql-bin
    

    建议使用方式2,比较简洁,相当于方式1的三行配置~

    同样vim /etc/my.cnf设置binlog模式(具体模式按实际需要进行设置):

    #设置binlog模式,ROW表示日志格式为记录每行数据的变化
    binlog_format=ROW
    

    三、Xtrabackup备份及还原命令

    3.1 xtrabackup全量备份命令

    全备命令:

    xtrabackup --defaults-file=/etc/my.cnf --backup --user=bkpuser --password=123456 --socket=/data/mysqldata/mysql.sock --compress --compress-thread --parallel=4 --throttle=400 --target-dir=/data/mysqlbackup/full
    

    参数说明:

    参数说明
    --defaults-filemysql配置文件全路径
    --backup表示备份操作
    --user有权限的备份用户
    --password备份用户密码
    --socketmysql的lock文件
    --compress使用qpress压缩数据文件,文件后缀.qp
    --compress-thread压缩文件线程数(不清楚就不写该参数,使用默认的)
    --parallel并发数(不清楚就不写该参数,使用默认的
    --throttle每秒IO操作的次数(不清楚就不写该参数,使用默认的
    --target-dir备份数据目录

    3.2 xtrabackup增量备份命令

    增备命令

    xtrabackup --defaults-file=/etc/my.cnf --backup --user=bkpuser --password=123456 --socket=/data/mysqldata/mysql.sock --compress --compress-thread --parallel=4 --throttle=400 --target-dir=/data/mysqlbackup/incr --incremental-basedir=/data/mysqlbackup/full
    

    参数说明:

    参数说明
    --defaults-filemysql配置文件全路径
    --backup表示备份操作
    --user有权限的备份用户
    --password备份用户密码
    --socketmysql的lock文件
    --compress使用qpress压缩数据文件,文件后缀.qp
    --compress-thread压缩文件线程数(不清楚就不写该参数,使用默认的)
    --parallel并发数(不清楚就不写该参数,使用默认的
    --throttle每秒IO操作的次数(不清楚就不写该参数,使用默认的
    --target-dir备份数据目录
    --incremental-basedir备份要基于前面哪个基础备份目录

    3.3 xtrabackup恢复备份命令

    3.3.1 解压数据

    没对数据进行压缩的,这步可以直接跳过~
    如果在备份(全备或增备)时使用了--compress 压缩数据文件,此时的数据文件后缀为.qp,恢复数据库数据时,需要先通过qpress进行解压.qp得到正常的数据文件,再删除原.qp压缩文件~

    for j in $(find /data/mysqlbackup/full -name "*.qp"); do qpress -d $j $(dirname $j) && rm -rf $j; done;
    for j in $(find /data/mysqlbackup/incr -name "*.qp"); do qpress -d $j $(dirname $j) && rm -rf $j; done;
    

    3.3.2 预恢复备份

    使用xtrabackup进行恢复数据库数据之前,需要先进行预恢复备份~
    假设数据库备份方案是全量备份+增量备份,那么这个预恢复就分为两步来完成~

    第一步:先进行预恢复全量备份

    xtrabackup --prepare --apply-log-only --target-dir=/data/mysqlbackup/full
    

    第二步:再进行预恢复增量备份,合并当前预恢复备份到前一个备份(可能是全量或增量备份)目录,如果有多个增量备份,依次完成所有增量备份的预恢复操作~

    xtrabackup --prepare --target-dir=/data/mysqlbackup/full --incremental-dir=/data/mysqlbackup/incr
    

    参数说明:

    参数说明
    --prepare表示预恢复
    --apply-log-only指定该参数时,表示防止未提交事务的回滚
    --target-dir预恢复目标目录
    --incremental-dir预恢复备份基于上一个备份的目录(全量或增量备份)

    全量+增量预恢复备份,最核心的部分就是 --apply-log-only 参数,可以看下
    增量备份官方文档说明
    在这里插入图片描述
    简单的总结就是预恢复备份时必须要指定 --apply-log-only 参数,用来防止未提交事务的回滚,当预恢复备份到最后一个备份版本时,需要去掉该参数~

    3.3.3 恢复备份数据

    恢复命令

    xtrabackup --defaults-file=/etc/my.cnf  --copy-back --target-dir=/data/mysqlbackup/full
    

    参数说明:

    参数说明
    --defaults-filemysql配置文件全路径
    --copy-back表示恢复操作
    --target-dir要恢复数据的备份目录

    这里需要注意的是--target-dir指定恢复的备份目录,是经过预恢复备份之后~

    四、MySQL数据库备份及还原(完整方案)

    4.1 完整方案介绍

    前面介绍了如何xtrabackup对MySQL进行全量备份增量备份预恢复备份恢复备份的基本命令~
    本文实际上实施整套MySQL数据库备份及还原方案的话,需要通过Shell脚本+定时服务来实现~

    (1)Shell脚本主要用来来编写Xtrabackup的基本命令~

    (2)定时服务主要目的是定时每天执行Shell脚本,完成数据库备份,定时服务方式很多,本文主要介绍Linux自带的Crond定时服务,简单易上手~
    (3)本文采用周日全量备份+非周日增量备份的完整数据库备份方案,需要注意的是数据库的备份方案都是比较严谨的,一般都是定制化好的,该方案要保证每天只有一份备份,如果当天有多份备份,那又需要重新定制备份和恢复的Shell脚本了~

    4.2 数据库备份脚本

    4.2.1 创建目录

    分别规划以下几个目录:

    • 脚本存放目录:mkdir -p /data/mysqlbackup/tools
    • 全量备份主目录:mkdir -p /data/mysqlbackup/full
    • 增量备份主目录:mkdir -p /data/mysqlbackup/incr
    • 备份日志主目录:mkdir -p /data/mysqlbackup/logs

    4.2.2 创建脚本

    mysqlbackup.sh内容如下:

    #!/bin/sh
    #基于XtrabackupMySQL数据库备份脚本,每周日全量备份,其他增量备份
    
    #MySQL配置文件
    mysqlConfig="/data/mysqldata/my.cnf"
    #MySQL的sock文件
    mysqlSocket="/data/mysqldata/mysql.sock"
    #数据库用户
    dbUser="bkpuser"
    #数据库密码
    dbPassword="abc@123456"
    
    #全量备份主目录
    fullBackupPath="/data/mysqlbackup/full"
    #增量备份主目录
    incrBackupPath="/data/mysqlbackup/incr"
    #备份日志主目录及
    logPath="/data/mysqlbackup/logs"
    #备份日志文件名
    logfile="/data/mysqlbackup/logs/backup_$(date +%Y%m%d).log"
    
    #数据库备份保存天数
    SAVE_DAYS=7
    
    #清理备份保存天数之前的数据文件
    find $fullBackupPath -type d -mtime +$SAVE_DAYS |xargs rm -rf
    find $incrBackupPath -type d -mtime +$SAVE_DAYS |xargs rm -rf
    
    #格式化今天的日期(年月日)
    todayFormat=$(date -d "today" +%Y%m%d)
    #格式化昨天的日期(年月日)
    yesterdayformat=$(date -d "yesterday" +%Y%m%d)
    #格式化昨天的星期标识(0~6表示周日~周六)
    todayWeekFlg=`date -d ${todayFormat} +%w`
    #格式化昨天的日期标识(0~6表示周日~周六)
    yesterdayWeekFlg=`date -d ${yesterdayformat} +%w`
    
    #一、第一次备份
    if [ ! -d $fullBackupPath/$todayFormat ] && [ ! -d $fullBackupPath/$yesterdayformat ] && [ ! -d $incrBackupPath/$todayFormat ] && [ ! -d $incrBackupPath/$yesterdayformat ];then
      #全量备份
      xtrabackup --defaults-file=$mysqlConfig --backup --user=$dbUser --password=$dbPassword --socket=$mysqlSocket --compress --target-dir=$fullBackupPath/$todayFormat 2>> ${logfile}
    #二、不是第一次备份
    else
      #2.1 今天是周日
      if [ $todayWeekFlg == "0" ];then
        #全量备份
        xtrabackup --defaults-file=$mysqlConfig --backup --user=$dbUser --password=$dbPassword --socket=$mysqlSocket --compress --target-dir=$fullBackupPath/$todayFormat 2>> ${logfile}
      #2.2 今天不是周日
      else
        #2.2.1 昨天是周日或昨天有全量备份
        if [ $yesterdayWeekFlg == "0" ] || [ -d $fullBackupPath/$yesterdayformat ];then
          #增量备份: 依赖于昨天的全量备份  
          xtrabackup --defaults-file=$mysqlConfig --backup --user=$dbUser --password=$dbPassword --socket=$mysqlSocket --compress --target-dir=$incrBackupPath/$todayFormat --incremental-basedir=$fullBackupPath/$yesterdayformat 2>> ${logfile}
        #2.2.1 昨天不是周日并且昨天也没有全量备份
        else
          #增量备份: 依赖于昨天的增量备份
          xtrabackup --defaults-file=$mysqlConfig --backup --user=$dbUser --password=$dbPassword --socket=$mysqlSocket --compress --target-dir=$incrBackupPath/$todayFormat --incremental-basedir=$incrBackupPath/$yesterdayformat 2>> ${logfile}
        fi
      fi
    fi
    exit 0
    

    4.2.3 执行脚本

    (1)手动修改时间
    生产环境,要通过后面设置的定时服务来执行Shell脚本~
    不过实际开发环境时,一般需要马上验证脚本是否正确,这时可以通过修改Linux操作系统的日期,两个间隔的日期分别手动执行一次备份脚本,模拟按日的数据库备份方案,修改操作时间需谨慎!!!不能修改系统时间的可以当天手动执行一次备份脚本,隔天后再手动执行一次备份脚本进行验证~

    date
    date -s  "2021-08-26 04:00:00"
    date -s  "2021-08-27 04:00:00"
    

    (2)同步网络时间(最后)
    这步仅用于修改Linux操作系统时间后,分别在不同日期下执行完备份脚本后,再将Linux操作系统时间同步为互联网的时间,没修改系统时间的可以忽略~

    yum install -y ntpdate
    ntpdate 0.asia.pool.ntp.org
    hwclock --systohc
    或(指定具体时间)
    date -s  "2021-08-27 04:00:00"
    hwclock --systohc
    

    (3)执行备份脚本

    /bin/sh /data/mysqlbackup/tools/mysqlbackup.sh
    

    (4)查看日志

    tail -f /data/mysqlbackup/logs/backup_20210826.log
    

    备份成功会提示如下:
    在这里插入图片描述

    如果给的权限不够可能会报错:
    210826 21:02:01 Connecting to MySQL server host: localhost, user: bkpuser, password: set, port: 3306, socket: /data/mysqldata/mysql.sock
    Using server version 5.7.29-log
    Error: failed to execute query ‘SHOW ENGINE INNODB STATUS’: 1227 (42000) Access denied; you need (at least one of) the PROCESS privilege(s) for this operation

    说明执行备份的MySQL用户权限不够~

    查看权限

    mysql> select * from mysql.user where user = 'bkpuser' \G;
    

    授权如下权限:

    GRANT SELECT, INSERT, CREATE, RELOAD, PROCESS, SUPER, LOCK TABLES, REPLICATION CLIENT, CREATE TABLESPACE ON *.* TO `bkpuser`@`localhost`;
    FLUSH PRIVILEGES;
    

    实在不确定啥权限,可以授权所有权限给备份用户也可以:

    GRANT ALL PRIVILEGES ON  *.* TO `bkpuser`@`localhost`;
    FLUSH PRIVILEGES;
    

    4.2.4 配置定时服务

    (1)定时服务作用?

    配置定时服务主要目的是定时每天执行Shell备份脚本,完成数据库备份,定时服务方式很多,本文主要介绍Linux自带的Crond定时服务,简单易上手~

    (2)什么是Crond服务?

    • crond是Linux操作系统自带的定时服务,自带守护进程,一般用于运行计划任务如系统备份、日志分割及清理。
    • crond服务适合在那些24x7不间断运行的机器如服务器上运行的计划任务。
    • crond表达式
      示例1:0 0 * * * 每天整点执行
      示例2:0 4 * * * 每天4点整执行
      示例3:*/1 0 * * * 每隔一分钟执行
      –参数说明
      crond表达式从左右分别表示分钟(0-59) 小时(0-23) 日期(1-31) 月份(1-12) 星期(0-6,0代表星期天)
    • 验证crond配置
      配置当前用户crond的执行命令/usr/bin/crontab -e
      编辑内容为: crond表达式 要执行的Command命令
    • 实时查看cron执行日志(这里只有root用户有权限查看~)
      tail -f /var/log/cron

    (3)Crond常用命令

    Linux通过Crond服务配置定时服务,需要确保Crond处于运行状态~

    查看启动状态命令
    systemctl status crond.service
    在这里插入图片描述
    其他常用命令
    systemctl start crond.service
    systemctl restart crond.service
    systemctl stop crond.service

    关于Crond定时服务,也可以看下我的这篇博文学习
    Linux-- 定时服务crond VS anacron和 crontab VS anacrontab区别对比

    (4)定时执行备份脚本
    使用启动MySQL的Linux终端用户进行操作,我这里是mysql用户~
    执行命令

    /usr/bin/crontab -e
    

    添加内容:

    0 4 * * * /bin/sh /data/mysqlbackup/tools/mysqlbackup.sh
    

    表示每天凌晨4点整,会自动执行基于Xtrabackup的MySQL数据库全量备份+增量备份的Shell脚本~

    4.3 数据库恢复脚本

    4.3.1 创建脚本

    vim mysqlrecovery.sh添加内容:

    #!/bin/sh
    #基于Xtrabackup的MySQL数据库恢复脚本,手动执行恢复
    
    #全量备份主目录
    fullBackupPath="/data/mysqlbackup/full"
    #增量备份主目录
    incrBackupPath="/data/mysqlbackup/incr"
    #全量备份日期(最新)
    fullBackupDate="20210826"
    #增量备份日期(最新)
    incrBackupDate="20210827"
    #MySQL配置文件
    mysqlConfig="/data/mysqldata/my.cnf"
    
    #数据恢复日志文件
    logfile="/data/mysqlbackup/logs/recovery_$(date +%Y%m%d).log"
    
    #格式化全量备份日期为秒数
    fullBackupTime=`date -d "$fullBackupDate" +%s`
    #格式化增量备份日期为秒数
    incrBackupTime=`date -d "$incrBackupDate" +%s`
    #计算两个日期之间的天数差
    diffTimes=$[$incrBackupTime - $fullBackupTime]
    #天数差
    diffDays=$[diffTimes/86400]
    
    #解压全量备份的压缩文件
    for j in $(find $fullBackupPath/$fullBackupDate -name "*.qp"); do qpress -d $j $(dirname $j) && rm -rf $j; done;
    
    #按天数差遍历:从最新全量备份依次预恢复到最新增量备份
    for((i=0;i<=diffDays;i++))
    do
      #预恢复备份日期
      prepareRevoveryDate=`date -d "$fullBackupDate $i day" +%Y%m%d`
      #一、天数差为0
      if [ $diffDays == 0 ];then
        #预恢复最新全量备份,后面没有增量备份,不需要指定--apply-log-only,回滚未提交事务
        xtrabackup --prepare --target-dir=$fullBackupPath/$fullBackupDate 2>> ${logfile}
      #二、天数差不为0
      else
        #2.1 预恢复备份日期等于全量备份日期
        if [ $prepareRevoveryDate == $fullBackupDate ];then
          #预恢复最新全量备份,后面还有增量备份,需指定--apply-log-only,防止回滚未提交事务
          xtrabackup --prepare --apply-log-only --target-dir=$fullBackupPath/$fullBackupDate 2>> ${logfile}
        #2.2 预恢复备份日期不等于全量备份日期
        else
          #解压预恢复增量备份
          for j in $(find $incrBackupPath/$prepareRevoveryDate -name "*.qp"); do qpress -d $j $(dirname $j) && rm -rf $j; done;
          #2.2.1 最新增量备份
          if [ i == $diffDays ];then
            #预恢复最新增量备份,不需要指定--apply-log-only,回滚未提交事务
            xtrabackup --prepare --target-dir=$fullBackupPath/$fullBackupDate --incremental-dir=$incrBackupPath/$prepareRevoveryDate 2>> ${logfile}
          #2.2.2 非最新增量备份
          else
            #预恢复非最新增量备份,需指定--apply-log-only,防止回滚未提交事务
            xtrabackup --prepare --apply-log-only --target-dir=$fullBackupPath/$fullBackupDate --incremental-dir=$incrBackupPath/$prepareRevoveryDate 2>> ${logfile}
          fi
        fi
      fi
    done
    
    #xtrabackup恢复预恢复完成的全量备份数据
    xtrabackup --defaults-file=$mysqlConfig --copy-back --target-dir=$fullBackupPath/$fullBackupDate 2>> ${logfile}
    
    #退出程序
    exit 0
    

    4.3.2 删库跑路(模拟)

    手动备份数据目录(预防恢复失败)

    cd /data/mysqldata
    tar -czvf 3306_$(date +%Y%m%d)_$(date +%H%M%S)2.tar.gz 3306
    

    删库跑路(模拟)~

    cd /data/mysqldata
    rm -rf 3306
    

    在这里插入图片描述

    4.3.3 手动执行恢复脚本

    查看MySQL进程

    ps -ef|grep mysql
    

    如果存在进程,需要先停止mysql

    service mysql stop
    

    或者

    kill -9 进程号
    

    执行恢复脚本

    /bin/sh /data/mysqlbackup/tools/mysqlrecovery.sh
    

    查看恢复日志

    tail -f /data/mysqlbackup/logs/recovery_$(date +%Y%m%d).log
    

    在这里插入图片描述

    启动mysql
    如图所示,表示恢复成功~
    在这里插入图片描述
    最后连接MySQL查看全量备份和增量备份恢复是否完整~
    $ mysql -uroot -p


    肝完了,兄弟们,冲冲冲!!!!!

    原创不易,觉得有用的小伙伴来个一键三连(点赞+收藏+评论 )+关注支持一下,非常感谢~
    在这里插入图片描述

    展开全文
  • 一、MySQL 增量备份 增量备份可以在完全备份的基础上,减少备份文件的大小,从而加快备份和恢复的速度 ... 解决完全备份存在的问题就是使用增量备份的方式,增量备份就是备份自上一次备份之后增加或改变的文件或者内
  • Mysql 备份的三种方式

    千次阅读 2021-06-16 14:21:03
    备份的本质就是将数据集另存一个副本,但是原数据会不停的发生变化,所以利用备份只能回复到数据变化之前的数据。那变化之后的呢?所以制定一个好的备份策略很重要。 一、备份的目的 做灾难恢复:对损坏的数据...
  • MySQL 数据库备份(一)(完全备份与恢复)

    千次阅读 多人点赞 2021-02-05 19:29:54
    数据库备份方式精讲1.1 数据库备份的重要性1.2 数据库备份的分类1.2.1 物理备份1.2.2 逻辑备份1.2.3 完全备份1.2.4 差异备份1.2.5 增量备份1.2.6 备份方式比较1.3 MySQL 完全备份概念解读2.mysqldump 备份演练2.1 ...
  • innobackupex备份与恢复

    千次阅读 2022-01-03 23:12:24
    innobackupex备份与恢复 完全备份与恢复 完全备份 完全恢复 恢复单张表 操作步骤 完全备份 相关命令 增量备份与恢复 增量备份 增量恢复 innobackupex备份与恢复 完全备份与恢复 完全备份 命令格式...
  • (整理)RMAN备份详解

    千次阅读 2021-06-08 11:40:04
    一、数据库备份与RMAN备份的概念 1.数据库完全备份:按归档模式分为归档和非归档 归档模式: 打开状态,属于非一致性备份 关闭状态,可以分为一致性和非一致性 非归档模式: 打开状态,非一致性备份无效 关闭状态,...
  • 文章目录一、xtrabackup介绍二、Xtrabackup优点三、备份原理四、参数选项四、完全备份并恢复 一、xtrabackup介绍 percona公司官网 https://www.percona.com/ Xtrabackup是由percona开源的免费数据库热备份软件,它...
  • MongoDB数据库的备份恢复

    千次阅读 多人点赞 2022-01-10 13:06:04
    文章目录MongoDB数据库的备份恢复1.mongodb备份还原工具2.mongoexport备份还原某个库的某张表2.1.备份还原语法格式2.2.创建备份目录2.3.备份某个库的某张表2.4.将某张表指定的字段备份成csv格式2.5.将user_info表...
  • 容灾备份——备份技术

    千次阅读 2022-04-05 15:07:53
    备份是指对数据进行复制,当发生故障时可以及时的恢复有效数据 备份是容灾的基础 备份与容灾的区别: 备份关注数据可恢复性,容灾关注业务连续性 备份和归档的区别: 备份为了数据恢复、归档为了法规遵从 ...
  • MySQL完全备份与恢复

    千次阅读 2021-10-23 14:49:31
    数据库备份,是在数据丢失的情况下,能及时恢复重要数据,防止数据丢失的一种重要手段 一个合理的数据库备份方案,能够在数据丢失时,有有效地恢复数据,而且也需要考虑技术实现难度和有效地利用资源 一、 ...
  • Windows系统备份

    千次阅读 2021-12-17 15:12:11
    Windows系统备份 备份种类 全量备份 全量备份就是指对某一个时间点上的所有数据或应用进行一个完全拷贝。实际应用中就是用存储介质(如磁盘或其他方式)对整个系统进行全量备份,包括其中的系统和所有数据。 这种...
  • Oracle RMAN 备份与恢复

    千次阅读 2021-01-07 11:44:08
    这里写目录标题一、RMAN 备份与恢复1.RMAN备份(1)连接数据库(2)通道分配(3)RMAN 备份类型(4)BACKUP 命令(5)FORMAT 参数替换变量2.RMAN 恢复(1)数据库进行完全介质恢复(2)表空间的恢复(3)恢复数据文件...
  • gitLab数据备份和迁移

    千次阅读 2022-02-17 20:25:48
    备份、迁移、恢复、升级过程如下 一、gitlab备份 备份前gitlab的项目如图所示 1.1 修改仓库存储位置 gitlab通过rpm包安装后,默认存储位置在/var/opt/gitlab/git-data/repositories,通常需要更改此路径到单独...
  • Linux系统管理---数据备份

    万次阅读 2022-03-03 10:50:48
    1、数据备份简介 1.Linux服务器中哪些数据需要备份 1)Linux系统重要数据 2)安装服务的数据 配置文件: 网页主目录: 日志文件: 二、备份策略(方式) 1.完全备份 2.增量备份 3.差异备份 三、备份工具...
  • MYSQL的备份和恢复

    万次阅读 2021-11-29 18:27:59
    一、数据备份的重要性 在生产环境中,数据的安全性至关重要 任何数据的丢失都可能产生严重的后果 造成数据丢失的原因 程序错误 人为操作错误 运算错误磁盘故障 灾难(如火灾、地震)和盗窃 二、从物理与逻辑的角度,...
  • #创建备份目录,下载完整的包 #备注:2.3.3之后不备份死锁,如果数据库是mysql 5.7之后的 #必须要装2.4.4才可以用,可以向下兼容。 mkdir -p /xtrabackup/full/ cd /xtrabackup/ wget ...
  • 2011年下半年系统架构设计师考试上午真题试题(综合知识) 数据备份是信息系统运行管理时保护数据的重要...()可针对上次任何一种备份进行,将上次备份后所有发生变化的数据进行备份,并将备份后的数据进行标记。 ...
  • MySQL 数据库管理之 --- 备份与恢复

    万次阅读 2021-10-26 09:35:06
    逻辑备份2.1 完全备份2.2 差异备份2.3 增量备份备份方式比较如何选择逻辑备份策略三、常见的备份方法1.物理冷备2.专用备份工具 mysqldump 或 mysqlhotcopy3.启用二进制日志进行增量备份4.第三方工具备份四、MySQL...
  • 使用Xtrabackup进行MySQL备份

    千次阅读 2021-06-03 01:03:13
    使用Xtrabackup进行MySQL备份 一、安装 1、简介 Xtrabackup是由percona提供的mysql数据库备份工具,据官方介绍,这也是世界上惟一一款开源的能够对innodb和xtradb数据库进行热备的工具。特点: (1)备份过程快速、...
  • GitLab基础:备份与恢复指南

    千次阅读 2020-08-20 05:10:03
    GitLab提供进行备份和恢复的方式,整体来说,备份的过程会创建包含数据库、所有仓库和附件的归档文件。无论是CE版本还是EE版本,GitLab恢复数据的时候都需要满足版本一致的前提,即进行恢复的GitLab的版本和备份数据...
  • MySQL 增量备份与恢复

    千次阅读 2021-10-26 14:18:26
    目录引言一、MySQL 增量备份1. 增量备份特点2. 示例二、MySQL 增量恢复1. 增量恢复的场景2. 一般恢复2.1 丢失完全备份之后更改的数据的恢复2.2 引言 完全备份是把所有的数据内容进行备份备份数据中有大量的重复...
  • STM32F4提供4KB的备份SRAM,在开发程序时可以用于存储掉电不丢失的数据(需要RTC纽扣电池支持),特别是一些实时修改的,掉电不能丢失的数据,比如我用于存储雨量累计流量等实时变化的数据,定时存储到flash,实时...
  • Mysql备份——mysqldump

    千次阅读 2022-02-07 18:14:42
    Mysql备份——mysqldumpMysqldump备份流程一. mysqldump命令备份数据二. mysqldump常用操作示例三. 还原 MySQL备份内容 Mysqldump备份流程 mysqldump 备份出的文件就是 sql 文件,其核心就是对每个表执行 select ,...
  • MySQL 定时备份数据库(非常全)

    千次阅读 2021-11-16 17:50:45
    mysqldump命令备份数据 在MySQL中提供了命令行导出数据库数据以及文件的一种方便的工具mysqldump,我们可以通过命令行直接实现数据库内容的导出dump,首先我们简单了解一下mysqldump命令用法: #MySQLdump常用 ...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 1,333,372
精华内容 533,348
关键字:

备份

友情链接: smart.rar