200字范文,内容丰富有趣,生活中的好帮手!
200字范文 > xtrabackup 实现mysql的全量备份与增量备份

xtrabackup 实现mysql的全量备份与增量备份

时间:2020-10-22 11:02:59

相关推荐

xtrabackup 实现mysql的全量备份与增量备份

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以上的版本。/downloads/Percona-XtraBackup-LATEST/wget /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/f加上配置,并重启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/f --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-f210913 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/f --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/f --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 1626007161011 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/f --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-f210913 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/basextrabackup: 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 bytesApplying /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/f --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/f --user=mysql &// 检测MySQL> select count(*) from sbtest.sbtest1;

全备+增备恢复完成

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。