Percona XtraBackup是世界上唯一一款开源的免费MySQL热备份软件,可以为InnoDB和XtraDB数据库执行非阻塞备份。
使用Percona XtraBackup,可以获得以下好处:

  • 快速可靠地完成备份
  • 备份期间不间断的事务处理
  • 节省磁盘空间和网络带宽
  • 自动备份验证
  • 由于恢复时间更快,正常运行时间更长
    Percona XtraBackup对所有版本的Percona Server for MySQL和MySQL进行MySQL热备份。它执行流式、压缩和增量MySQL备份。

注意:
随着Percona XtraBackup 8.0的推出,Percona XtraBackup 2.4将继续支持MySQL和Percona Server 5.6和5.7数据库。由于新的MySQL重做日志和数据字典格式,Percona XtraBackup 8.0.x版本将只与MySQL8.0.x和即将推出的用于MySQL8.0.x的Percona服务器兼容。对于MySQL8.0版本,必须安装对应小版本的xtrabackup才可以使用,不然会报错版本不支持问题。
比如我的MySQL版本

1.安装xtrabackup

#安装地址,可以在下面的地址找到符合自己MySQL版本的包进行下载,这里我已经自己的8.0.28版本进行下载
最新版本8.0.29没出来,随便下一个8.0以上的版本。
https://www.percona.com/downloads/Percona-XtraBackup-LATEST/wget https://downloads.percona.com/downloads/Percona-XtraBackup-LATEST/Percona-XtraBackup-8.0.28-21/binary/redhat/8/x86_64/percona-xtrabackup-80-8.0.28-21.1.el8.x86_64.rpmyum install percona-xtrabackup-80-8.0.28-21.1.el8.x86_64.rpm

2.安装成功后查看一下是否完成及其版本

xtrabackup -v

3.设置数据库用于备份账户

mysql> CREATE USER 'bkpuser'@'localhost' IDENTIFIED BY '123456';
mysql> GRANT RELOAD, LOCK TABLES, PROCESS, REPLICATION CLIENT ON *.* TO 'bkpuser'@'localhost';
mysql> GRANT  SELECT  ON  performance_schema.log_status  TO  'bkpuser' @ 'localhost' ;
mysql > GRANT  SELECT  ON  performance_schema.keyring_component_status  TO  bkpuser @ 'localhost'
mysql> FLUSH PRIVILEGES;

这里遇到密码设置严格程度问题我们现在mysql设置密码的策略改一下

mysql密码复杂度策略的插件,默认位置:/usr/local/mysql8/lib/plugin/validate_password.so

插件名字叫 validate_password,如果没有安装

mysql>>INSTALL PLUGIN validate_password SONAME 'validate_password.so';

在/etc/my.cnf加上配置,并重启mysql

[mysqld]plugin-load=validate_password.sovalidate_password_policy=0validate-password=FORCE_PLUS_PERMANENT

查看:

show variables like 'validate%';

validate_password_check_user_name : 默认关闭,设置为ON时可以将密码设置成当前用户名
validate_password_dictionary_file : 检查密码的字典文件的路径名
validate_password_length : 默认为8,限制密码长度的最小字符数
validate_password_mixed_case_count : 默认值为1,限制小写字符和大写字符个数
validate_password_number_count : 默认值为1,限制数字的个数
validate_password_policy : 默认值为1, 密码强度等级 [LOW:0| MEDIUM:1 | STRONG:2]
validate_password_special_char_count : 默认值为1,限制特殊字符个数
validate_password_policy
0/LOW:只检查长度。
1/MEDIUM:检查长度、数字、大小写、特殊字符。
2/STRONG:检查长度、数字、大小写、特殊字符字典文件。

设置密码强度等级

set global validate_password_policy=0;
set global validate_password_length=1;

现在设置简单密码就成功了

创建备份用户

# 命令 --user=用户 --password="密码" 备份位置
innobackupex --user=bkpuser --password="123456" /xtrabackup/full

Sysbench造数据

mysql> create database sbtest;
//使用sysbench造数
Shell> sysbench /usr/share/sysbench/oltp_read_write.lua --mysql-host=192.16.30.31 --mysql-port=3306 --mysql-user='root' --mysql-password='123456' --mysql-db='sbtest' --tables=1 --table-size=5000 --threads=20 prepare
//检查
MySQL [sbtest]> select count(*) from sbtest.sbtest1;
+----------+
| count(*) |
+----------+
| 5000 |
+----------+
1 row in set (0.00 sec)

全量备份

 Shell> xtrabackup --defaults-file=/data1/mysqldata/my.cnf --socket=/data1/mysqldata/data/mysql.sock --user=root --password=123456 --port=3306 --backup --target-dir=/data1/xtrabackup/full/输出信息:210913 14:07:01 Finished backing up non-InnoDB tables and files210913 14:07:01 Executing FLUSH NO_WRITE_TO_BINLOG BINARY LOGS210913 14:07:01 Selecting LSN and binary log position from p_s.log_status210913 14:07:01 [00] Copying /data1/mysqldata/log/binlog.000004 to /data1/xtrabackup/full/binlog.000004 up to position 196210913 14:07:01 [00]...done210913 14:07:01 [00] Writing /data1/xtrabackup/full/binlog.index210913 14:07:01 [00]...done210913 14:07:01 [00] Writing /data1/xtrabackup/full/xtrabackup_binlog_info210913 14:07:01 [00]...done210913 14:07:01 Executing FLUSH NO_WRITE_TO_BINLOG ENGINE LOGS...xtrabackup: The latest check point (for incremental): '19442549'xtrabackup: Stopping log copying thread at LSN 19442549.Starting to parse redo log at lsn = 19442226210913 14:07:01 Executing UNLOCK INSTANCE210913 14:07:01 All tables unlocked210913 14:07:01 [00] Copying ib_buffer_pool to /data1/xtrabackup/full/ib_buffer_pool210913 14:07:01 [00]...done210913 14:07:01 Backup created in directory '/data1/xtrabackup/full/'MySQL binlog position: filename 'binlog.000004', position '196', GTID of the last change '8950f324-1441-11ec-b9b5-080027193a00:1-15'210913 14:07:01 [00] Writing /data1/xtrabackup/full/backup-my.cnf210913 14:07:01 [00]...done210913 14:07:01 [00] Writing /data1/xtrabackup/full/xtrabackup_info210913 14:07:01 [00]...donextrabackup: Transaction log of lsn (19442549) to (19442559) was copied.210913 14:07:02 completed OK!

全量恢复

准备工作,由于使用--backup备份数据文件时时间点时不一致的(备份增量redo日志线程会实时监听增量数据),因为程序在不同的时间点复制,并且再复制过程中可能会被更改,如果使用innodb直接尝试启动这些数据文件,innodb将检测损坏并停止运行,所以需要使用--prepare将将备份文件进行崩溃恢复,来使用这些复制文件

Shell>xtrabackup --prepare --target-dir=/data1/xtrabackup/full

// 拷贝数据 注意:需要将源目录进行备份,且恢复目录要为空

Shell> xtrabackup --copy-back --target-dir=/data1/xtrabackup/full

// 修改目录属性启动数据库

 Shell> chown -R mysql:mysql /data/mysqldata/data Shell> chmod -R 755 /data/mysqldata/data

// 启动数据库

Shell> /data1/mysql/bin/mysqld --defaults-file=/data1/mysqldata/my.cnf --user=mysql &

// 检测

MySQL> select count(*) from sbtest.sbtest1;

 增量备份

增量备份需要在全量备份的基础上进行,每个innodb页面都包含一个日志序列号LSN。该LSN是整个数据库系统的版本号。每个页面的LSN显示最近更改的时间。增量备份时会将上一次全量备份的LSN或上一次增量备份的LSN和当前页面的LSN进行对比,通过两种算法继续查找。

第一种就是读取所有的数据页面直接检查页面LSN(适用所有版本MySQL),第二种就是在服务器上启用”更改页面跟踪“功能,该功能会在页面更改时进行记录,将信息保存下来,xtrbackup做增量备份时回去读取该信息,从而节省资源(该查找方法适用于percona server for MySQL)

全量备份

Shell> xtrabackup --defaults-file=/data1/mysqldata/my.cnf --socket=/data1/mysqldata/data/mysql.sock --user=root --password=123456 --port=3306 --backup --target-dir=/data1/xtrabackup/full/

应用中继日志

Shell> xtrabackup --prepare --apply-log-only --target-dir=/data1/xtrabackup/full登录

输出:

InnoDB: Shutdown completed; log sequence number 1626007
161011 12:41:04 completed OK!

增量备份:查看全量备份目录的xtrbackup_checkpoints

 Shell>  cat xtrabackup_checkpoints backup_type = full-prepared //备份类型from_lsn = 0 //开始LSNto_lsn = 22254648//备份结束时LSNlast_lsn = 22254648   //上一个LSN号lushed_lsn = 22254648//当前flush的LSN号

增量备份命令

Shell> xtrabackup --defaults-file=/data1/mysqldata/my.cnf --socket=/data1/mysqldata/data/mysql.sock --user=root --password=123456 --port=3306 --backup --target-dir=/data1/xtrabackup/inc1 --incremental-basedir=/data1/xtrabackup/full

输出信息:

210913 14:18:07 Finished backing up non-InnoDB tables and files210913 14:18:07 Executing FLUSH NO_WRITE_TO_BINLOG BINARY LOGS210913 14:18:07 Selecting LSN and binary log position from p_s.log_status210913 14:18:07 [00] Copying /data1/mysqldata/log/binlog.000005 to /data1/xtrabackup/inc1/binlog.000005 up to position 196210913 14:18:07 [00]...done210913 14:18:07 [00] Writing /data1/xtrabackup/inc1/binlog.index210913 14:18:07 [00]...done210913 14:18:07 [00] Writing /data1/xtrabackup/inc1/xtrabackup_binlog_info210913 14:18:07 [00]...done210913 14:18:07 Executing FLUSH NO_WRITE_TO_BINLOG ENGINE LOGS...xtrabackup: The latest check point (for incremental): '20799610'xtrabackup: Stopping log copying thread at LSN 20804588.Starting to parse redo log at lsn = 20799534210913 14:18:07 >> log scanned up to (20804598)210913 14:18:08 Executing UNLOCK INSTANCE210913 14:18:08 All tables unlocked210913 14:18:08 [00] Copying ib_buffer_pool to /data1/xtrabackup/inc1/ib_buffer_pool210913 14:18:08 [00]...done210913 14:18:08 Backup created in directory '/data1/xtrabackup/inc1/'MySQL binlog position: filename 'binlog.000005', position '196', GTID of the last change '8950f324-1441-11ec-b9b5-080027193a00:1-20'210913 14:18:08 [00] Writing /data1/xtrabackup/inc1/backup-my.cnf210913 14:18:08 [00]...done210913 14:18:08 [00] Writing /data1/xtrabackup/inc1/xtrabackup_info210913 14:18:08 [00]...donextrabackup: Transaction log of lsn (20799610) to (20804624) was copied.210913 14:18:09 completed OK!//检查当前checkpoints点Shell>  cat xtrabackup_checkpoints backup_type = incrementalfrom_lsn = 22254648to_lsn = 33288485last_lsn = 33299549flushed_lsn = 33288485

From_lsn是备份的起始LSN,对于增量,他必须与前一个备份检查点to_lsn相同

应用中继日志

--prepare增量备份恢复时与全量备份不同,在全量备份时执行--prepare为了保证数据库一致,针对数据文件从日志文件重放已提交的事务,以及回滚未提交的事务。在增量时,必须跳过未提交事务的回滚,因为备份时未提交的事务可能正在进行中,很可能在下一次增量备份中提交,所以需要使用--apply-log-only选项来防止回滚阶段。

将第一个增量备份应用到全量备份中(增量文件将会应用到/data1/xtrbackup/full中)

shell> xtrabackup --prepare --apply-log-only --target-dir=/data1/xtrabackup/full  --incremental-dir=/data1/xtrabackup/inc1

输出信息:

incremental backup from 1626007 is enabled.
xtrabackup: cd to /data/backups/base
xtrabackup: This target seems to be already prepared with --apply-log-only.
xtrabackup: xtrabackup_logfile detected: size=2097152, start_lsn=(4124244)
...
xtrabackup: page size for /tmp/backups/inc1/ibdata1.delta is 16384 bytes
Applying /tmp/backups/inc1/ibdata1.delta to ./ibdata1...
...
161011 12:45:56 completed OK!

注意:全量备份中的to_LSN号和增量备份中的checkpoints的to_lsn号相同 如果做多次增量备份时,需要在每次做完增量备份后使用--prepare --apply-log-only将增量部分合并到全量备份中,否则会报lsn冲突

xtrabackup: This target seems to be already prepared with --apply-log-only.
xtrabackup: error: This incremental backup seems not to be proper for the target.
xtrabackup:  Check 'to_lsn' of the target and 'from_lsn' of the incremental.

增量恢复

Shell> xtrabackup --prepare --target-dir=/data1/xtrabackup/full
// 拷回数据:
Shell> xtrabackup --defaults-file=/data1/mysqldata/my.cnf  --copy-back --target-dir=/data1/xtrabackup/full
// 修改数据目录的权限和属性:
Shell> chown -R mysql:mysql /data1/mysqldata1
Shell> chmod -R 755 /data1/mysqldata1 启动数据库
Shell>/data1/mysql/bin/mysqld --defaults-file=/data1/mysqldata/my.cnf --user=mysql &
// 检测
MySQL> select count(*) from sbtest.sbtest1;

全备+增备恢复完成

xtrabackup 实现mysql的全量备份与增量备份相关推荐

  1. solr mysql 增量索引_solr中实现MySQL数据全量索引和增量索引

    紧接上篇ansj分词整合后,开始需要做索引.索引分增量和全量,可以直接连接数据库去做,也可以通过程序去做,以下实现连接数据库去做,相对来说比较简单. 1.修改multicore/new_core/co ...

  2. mysqldump全量恢复_【MySQL】全量+增量的备份/恢复

    生产环境中,有时需要做MySQL的备份和恢复工作.因MySQL是在运行过程中的,做全量备份需要时间,全量备份完成后又有数据变动,此时需要增量备份辅助.如果想恢复数据到一个空库(例如数据迁移或者上云等更 ...

  3. mysql全量备份、增量备份实现方法

    mysql全量备份.增量备份.开启mysql的logbin日志功能.在/etc/my.cnf文件中加入以下代码: ? 1 2 3 4 5 6 7 [mysqld] log-bin = "/h ...

  4. mysql 数据增量备份_MySQL数据库之mysql全量备份、增量备份实现方法

    本文主要向大家介绍了MySQL数据库之mysql全量备份.增量备份实现方法 ,通过具体的内容向大家展现,希望对大家学习MySQL数据库有所帮助. mysql全量备份.增量备份.开启mysql的logb ...

  5. 企业级MySQL数据库备份方案:增量备份、全量备份、逻辑备份

    一份好的备份方案无非包括以下几点: 为什么需要备份? 备份的方式有哪些? 某几种备份方式的区别在哪? 备份实战操作概述 恢复实战操作概述 其它备注信息 那么,此文将从以上几个角度,结合一些实际的实战经 ...

  6. mysql binlog增量备份脚本_实现mysqlldump+binlog日志全量备份和增量备份脚本

    实现mysqlldump+binlog日志全量备份和增量备份脚本 #!/bin/bash ####################################################### ...

  7. centos7下mysql定时全量备份、增量备份实现方法

    最近学习的数据库自动定时备份的方法,从网上看的很多资料,大部分文章都是用的脚本之家的那个模板(原代码地址:https://www.jb51.net/article/99938.htm),但是都没有很详 ...

  8. MySQL数据库全量、增量备份与恢复

    MySQL数据库全量.增量备份与恢复 数据库备份的重要性 在生产的环境中,数据的安全性是至关重要的,任何数据的丢失都可能产生严重的后果. 造成数据丢失的原因 程序错误 人为商店 计算机失败 磁盘失败 ...

  9. mysql常见增量恢复方式_MySQL 全备份与增量备份 全恢复与增量恢复

    一,全备份 与 全恢复 1.vim /root/db_backup/mysqldump_mraz.php,内容如下: date_default_timezone_set("PRC" ...

最新文章

  1. 为什么阿里强制 boolean 类型变量不能使用 is 开头?
  2. LeetCode Wiggle Sort II(快排)
  3. git :设置 object-c 的忽略文件
  4. 高效缓存Memcached 集成使用说明
  5. 3dmax挤出制作窗花_「教程」3DMAX制作藤编家具模型,超实用教程,收藏备用
  6. BZOJ3324 : [Scoi2013]火柴棍数字
  7. 窥探JAVA WEB
  8. python分词工具
  9. 大楼通信综合布线系统_综合布线系统设计方案时需要注意的事项
  10. U盘文件系统格式快速转换
  11. 交叉线和直通线的区别和用途
  12. 怎样写Robots文件?
  13. python 读bin文件_Python学习 | Python 读写文件-bin文件打开
  14. vue 、前端rsa加密遇到的问题,message too long for RSA
  15. 注册公司流程和费用(2016版)
  16. CLRS 17.4动态表
  17. AndroidQ 锁屏密码验证流程之GateKeeper解析
  18. nginx教程(一)--nginx是什么?能干什么?
  19. 台式计算机2017排行分析,CPU天梯图2017年11月最新版 台式电脑处理器天梯排行榜...
  20. bugkuctf——你必须让他停下

热门文章

  1. 边缘风行视频采集软件V1.0
  2. heic图片如何在电脑上直接打开查看使用
  3. 开源GPU显存虚拟化项目,你的2080Ti还能救一下
  4. 利用Eclipse-Python简单爬取京东商城书籍信息进行可视化
  5. javascript基础06
  6. Mysql数据库基础及高阶
  7. 使图片充满整个ImageView的方法
  8. 【解读】山香科技:互联网从软件革命到移动革命
  9. 移动端图片变模糊问题
  10. 进店率、提袋率、客单价