关于mysql:Percona-XtraBackup-8026使用说明

42次阅读

共计 10548 个字符,预计需要花费 27 分钟才能阅读完成。

欢送来到 GreatSQL 社区分享的 MySQL 技术文章,如有疑难或想学习的内容,能够在下方评论区留言,看到后会进行解答

    1. Percona XtraBackup 个性阐明
    1. Percona Xtrabackup 备份复原权限限度
    1. 创立备份用户、配置参数及数据筹备
    1. 全量备份与复原
    1. 增量备份
    1. 压缩备份
    1. 流备份

1. Percona XtraBackup 个性阐明

1)Percona Xtrabackup 8.0.26 新增反对 MyRocks 存储引擎,不反对 TokuDB 引擎

2)Percona Xtrabackup 8.0.26 不反对低于 MySQL 8.0 的备份(因为 MySQL 8.0 在数据字典、redo log 中和之前版本不兼容)

3)Percona Xtrabackup 8.0.26 目前 X86 版本能够从官网下载,ARM 版本须要手动编译

4)备份文件必须是空的,没有任何文件

2. Percona Xtrabackup 备份复原权限限度

1)备份门路须要有可读写权限

2)reload 和 Lock Tables(指定 –no-locak 选项除外),因为备份前须要执行 FLUSH TABLES WITH READ LOCK 和 FLUSH ENGINE LOGS

3)Backup_admin 权限, 因为备份时须要查问 performance_schema.log_status 表并运行 LOCK INSTANCE FOR BACKUP, LOCK BINLOG FOR BACKUP, or LOCK TABLES FOR BACKUP

4)Replication client 权限。备份时为了读取二进制日志文件

5)Create tablespace 权限。复原表时须要创立表

6)Process 权限。备份时须要运行 show engine innodb status 命令

7)Super 权限。为了在复制环境中启动 / 进行复制线程

8)Create 权限。为了创立 percona_schema.xtrbackup_history 表

9)Alter 权限。为了更新 percona_schema.xtrbackup_history 表

10)Insert 权限。为了将历史记录插入到 percona_schema.xtrbackup_history 表

11)Select 权限。为了查问历史数据

3. 创立备份用户、配置参数及数据筹备

    // 创立用户
    mysql > CREATE  USER  'bkpuser' @ 'localhost'  IDENTIFIED  BY  's3cr%T' ; 
    mysql > GRANT BACKUP_ADMIN,PROCESS,RELOAD,LOCK  TABLES,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 ;

配置参数,Xtrbackup 在备份时会读取 MySQL 的 my.cnf 配置文件中 [mysqld] 和[xtrabackup]局部,所以咱们能够在配置文件中设置备份的目录[xtrabackup],target_dir = /data/backups/mysql

留神:如果 my.cnf 配置文件中有 –set-variable=<variable>=<value>,xtrabackup 不辨认,须要应用 –veriable=value 代替 版本检测,Percona xtrabackup 8.0.21 增加了 –no-server-version-check 参数,会将备份源版本和 Percona Xtrabackup 版本比照

源零碎和 PXB 版本一样,备份持续 源零碎低于 PXB 版本,备份持续 源零碎大于 PXB 版本,且参数未被笼罩,进行备份并返回谬误 源零碎大于 PXB 版本,参数被笼罩,备份持续

Shell> xtrabackup --backup --no-server-version-check --target-dir = $mysql /backup1

笼罩参数时,可能会产生备份失败、创立损坏的备份、备份胜利

3.1 Sysbench 造数据

mysql> create database sbtest;
// 应用 sysbench 造数
Shell> sysbench /usr/share/sysbench/oltp_read_write.lua --mysql-host=172.16.50.161 --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)

4. 全量备份与复原

4.1 全量备份

    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 files
    210913 14:07:01 Executing FLUSH NO_WRITE_TO_BINLOG BINARY LOGS
    210913 14:07:01 Selecting LSN and binary log position from p_s.log_status
    210913 14:07:01 [00] Copying /data1/mysqldata/log/binlog.000004 to /data1/xtrabackup/full/binlog.000004 up to position 196
    210913 14:07:01 [00]...done
    210913 14:07:01 [00] Writing /data1/xtrabackup/full/binlog.index
    210913 14:07:01 [00]...done
    210913 14:07:01 [00] Writing /data1/xtrabackup/full/xtrabackup_binlog_info
    210913 14:07:01 [00]...done
    210913 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 = 19442226
    
    210913 14:07:01 Executing UNLOCK INSTANCE
    210913 14:07:01 All tables unlocked
    210913 14:07:01 [00] Copying ib_buffer_pool to /data1/xtrabackup/full/ib_buffer_pool
    210913 14:07:01 [00]...done
    210913 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.cnf
    210913 14:07:01 [00]...done
    210913 14:07:01 [00] Writing /data1/xtrabackup/full/xtrabackup_info
    210913 14:07:01 [00]...done
    xtrabackup: Transaction log of lsn (19442549) to (19442559) was copied.
    210913 14:07:02 completed OK!

4.2 全量复原

筹备工作, 因为应用 –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;

5. 增量备份

增量备份须要在全量备份的根底上进行,每个 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 // 开始 LSN
    to_lsn = 22254648// 备份完结时 LSN
    last_lsn = 22254648   // 上一个 LSN 号
    flushed_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 files
    210913 14:18:07 Executing FLUSH NO_WRITE_TO_BINLOG BINARY LOGS
    210913 14:18:07 Selecting LSN and binary log position from p_s.log_status
    210913 14:18:07 [00] Copying /data1/mysqldata/log/binlog.000005 to /data1/xtrabackup/inc1/binlog.000005 up to position 196
    210913 14:18:07 [00]...done
    210913 14:18:07 [00] Writing /data1/xtrabackup/inc1/binlog.index
    210913 14:18:07 [00]...done
    210913 14:18:07 [00] Writing /data1/xtrabackup/inc1/xtrabackup_binlog_info
    210913 14:18:07 [00]...done
    210913 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 = 20799534
    210913 14:18:07 >> log scanned up to (20804598)
    
    210913 14:18:08 Executing UNLOCK INSTANCE
    210913 14:18:08 All tables unlocked
    210913 14:18:08 [00] Copying ib_buffer_pool to /data1/xtrabackup/inc1/ib_buffer_pool
    210913 14:18:08 [00]...done
    210913 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.cnf
    210913 14:18:08 [00]...done
    210913 14:18:08 [00] Writing /data1/xtrabackup/inc1/xtrabackup_info
    210913 14:18:08 [00]...done
    xtrabackup: Transaction log of lsn (20799610) to (20804624) was copied.
    210913 14:18:09 completed OK!
    // 查看以后 checkpoints 点
    Shell>  cat xtrabackup_checkpoints 
    backup_type = incremental
    from_lsn = 22254648
    to_lsn = 33288485
    last_lsn = 33299549
    flushed_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.

5.1 增量复原

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;

全备 + 增备复原实现

6. 压缩备份

咱们在备份时能够对备份文件进行压缩备份,应用 –compress 选项

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

因为 –compress 应用到了 qpress,所以须要装置 percona-release 包

Shell> suudo percona-release enable tools
Shell> sudo apt-get update
Shell> sudo apt-get install qpress

减少备份线程

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

输入如下信息:

...
170223 13:00:38 [01] Compressing ./test/sbtest1.frm to /tmp/compressed/test/sbtest1.frm.qp
170223 13:00:38 [01]...done
170223 13:00:38 [01] Compressing ./test/sbtest2.frm to /tmp/compressed/test/sbtest2.frm.qp
170223 13:00:38 [01]...done
...
170223 13:00:39 [00] Compressing xtrabackup_info
170223 13:00:39 [00]...done
xtrabackup: Transaction log of lsn (9291934) to (9291934) was copied.
170223 13:00:39 completed OK!

6.1 解压备份及复原

解压文件:

Shell> xtrabackup --decompress --target-dir=/data/compressed/
Shell> xtrabackup --prepare --target-dir=/data/compressed/
InnoDB: Starting shutdown...
InnoDB: Shutdown completed; log sequence number 9293846
170223 13:39:31 completed OK!

备份复原:

Shell> xtrabackup --copy-back --target-dir=/data/backups/

7. 流备份

应用流备份传输到名为 backup.xbstream

Shell> xtrabackup --backup --stream=xbstream --target-dir=./ > backup.xbstream

加密备份

Shell> xtrabackup –backup –stream=xbstream ./ > backup.xbstream gzip - | openssl des3 -salt -k“明码”> backup.xbstream.gz.des3

加压备份到当前目录

Shell> xbstream -x <  backup.xbstream

应用流备份形式到其余服务器上

Shell> xtrbackup --backup --stream=xbstream --target-dir=./ | ssh user@otherhost "xbstream -x"

限度备份工具的吞吐量为 10MB/ 秒

Shell> xtrabackup –backup –stream=xbstream ./ | pv -q -L10m ssh user@desthost“cat - > /data/backups/backup.xbstream”

Enjoy GreatSQL :)

文章举荐:

技术分享 | MGR 最佳实际(MGR Best Practice)
https://mp.weixin.qq.com/s/66…

技术分享 | 万里数据库 MGR Bug 修复之路
https://mp.weixin.qq.com/s/Ia…

Macos 零碎编译 percona 及局部函数在 Macos 零碎上运算差别
https://mp.weixin.qq.com/s/jA…

技术分享 | 利用 systemd 治理 MySQL 单机多实例
https://mp.weixin.qq.com/s/iJ…

产品 | GreatSQL,打造更好的 MGR 生态
https://mp.weixin.qq.com/s/By…

产品 | GreatSQL MGR 优化参考
https://mp.weixin.qq.com/s/5m…

对于 GreatSQL

GreatSQL 是由万里数据库保护的 MySQL 分支,专一于晋升 MGR 可靠性及性能,反对 InnoDB 并行查问个性,是实用于金融级利用的 MySQL 分支版本。

Gitee:
https://gitee.com/GreatSQL/Gr…

GitHub:
https://github.com/GreatSQL/G…

微信 &QQ 群:

可搜寻增加 GreatSQL 社区助手微信好友,发送验证信息“加群”退出 GreatSQL/MGR 交换微信群

QQ 群:533341697
微信小助手:wanlidbc

本文由博客一文多发平台 OpenWrite 公布!

正文完
 0