数据库日常学习案例20240117-mysql8.0 XTBACKUP备份与恢复创建slave

本文详细介绍了PerconaXtraBackup的工作原理,包括其支持的特性如热备份、InnoDB数据文件复制、REDO日志的作用以及如何进行全量和增量备份。文章还展示了备份过程中的注意事项和常见问题解决方法。
摘要由CSDN通过智能技术生成

1 Percona XtraBackup的工作原理:

xtrabackup特性:
        1、支持热备份
        2、支持对InnoDB、MyISAM,xtradb存储引擎的备份
        3、备份过程快速、可靠
        4、备份过程不会打断正在执行的事务
        5、能够基于压缩等功能节约磁盘空间和流量
        6、自动实现备份检验
        7、还原速度快

1.XtraBackup复制InnoDB数据文件,这会导致内部不一致的数据,但是它会对文件执行崩溃恢复,以使其再次成为一个一致的可用数据库

2.这样做的可行性是因为InnoDB维护一个REDO日志,也称为事务日志。REDO日志包含了InnoDB数据每次更改的记录。当InnoDB启动时,REDO日志会检查数据文件和事务日志,并执行两个步骤。它将已提交的事务日志条目应用于数据文件,并对任何修改了数据但未提交的事务执行undo操作

3.Percona XtraBackup会在启动时记住日志序列号(LSN),然后复制数据文件。这需要一些时间来完成,如果文件正在改变,那么它会在不同的时间点反映数据库的状态。同时,Percona XtraBackup运行一个后台进程,用于监视事务日志文件,并从中复制更改。

Percona XtraBackup需要持续这样做,因为事务日志是以循环方式写入的,并且可以在一段时间后重新使用。

Percona XtraBackup开始执行后,需要复制每次数据文件更改对应的事务日志记录。

2 安装xtrabackup

Software Downloads - Percona

解压安装包 :

tar -xvf percona-xtrabackup-8.0.33-28-Linux-x86_64.glibc2.17.tar.gz

mv percona-xtrabackup-8.0.33-28-Linux-x86_64 xtrabackup

3 使用xtrabackup备份

此时的全量备份可以用于数据恢复,

因为未提交的事务会在启动时被 MySQL 处理。

首先对全量备份应用日志,以作为增量的基础:

/data/xtrabackup/bin/xtrabackup --defaults-file=/etc/my.cnf --host=localhost --user=root --password=mysql --port=3306 --socket=/data/mysql8/mysql.sock --backup --target-dir=/data/xbackup/

使用 XtraBackup 进行增量备份(仅仅备份自上次备份后变更的数据),并使用备份数据进行恢复。

增量备份原理:
1)每个 InnoDB Page 都包含 LSN,LSN 是整个数据库的系统版本号,每个 InnoDB Page 的 LSN 都展示 InnoDB Page 是如何变化的
2)在增量备份时,对比 InnoDB Page 的 LSN 与 全量备份的 LSN,如果 InnoDB Page 的 LSN 较新,则复制该 InnoDB Page
3)更进一步,如果你知道 LSN,则无需基础的全量备份,可以使用 –incremental-lsn 直接指定(但是恢复的时候依旧需要基础的全量备份

注意事项:
1)该增量备份只能针对 MySQL 实例,而不能针对特定数据库或者特定数据表;

3.创建增量备份


3.1 创建全量备份

增量备份是在全量备份的基础之上,因此需要先创建全量备份:

[root@lys-mysql full]#  xtrabackup    --host=10.6.8.238 --user=user0001 --password=User0001! --port=3306 --databases="db01" --backup --target-dir=/data/backups/full  --no-server-version-check

查看 xtrabackup_checkpoints 文件可以获取 LSN 相关信息。

[root@lys-mysql full]# cat xtrabackup_checkpoints
backup_type = full-backuped
from_lsn = 0
to_lsn = 18611669
last_lsn = 18611669
flushed_lsn = 18611669

3.2 创建增量备份

[root@lys-mysql inc1]#  xtrabackup  --no-server-version-check  --backup --host=10.6.8.238 --user=user0001 --password=User0001! --port=3306 --databases="db01" --target-dir=/data/backups/inc1  --incremental-basedir=/data/backups/full
 

4.将备份文件目录打包传到目的机器

[root@localhost ]# cd /data

[root@localhost ]# tar -cvf xbackup.tar ./xbackup/

[root@localhost ]# scp xbackup.tar root@192.168.2.110:/data

1 解压文件。

5 停止目标mysql数据库。

6 备份原来mysql数据库的数据目录,(这里要是binlog日志不是放在data目录的话,需要将binlog日志要删除掉)

7.xtrabackup恢复

/opt/xtrabackup-8.0.7/bin/xtrabackup --defaults-file=/opt/mha/mysql8/conf/my.cnf --user=root --prepare --target-dir=/opt/mha/xbackup/

/opt/xtrabackup-8.0.7/bin/xtrabackup --defaults-file=/opt/mha/mysql8/conf/my.cnf --user=root --copy-back --target-dir=/opt/mha/xbackup/

4.2 应用首个增量备份准备

最后新的备份数据位于/data/backups/full 目录,即该目录数据已经被修改,不再是原先的全量备份。

注意事项,增量备份目录(/data/backups/inc1)只能使用一次,如果以后会再次使用,需要先将其备份。

[root@lys-mysql full]# xtrabackup  --no-server-version-check --prepare --apply-log-only --host=10.6.8.238 --user=user0001 --password=User0001! --port=3306 --databases="db01" --target-dir=/data/backups/full  --incremental-dir=/data/backups/inc1

5.修改目录属性启动数据库:

[root@localhost mysql8]# cd /opt/mha/mysql8

[root@localhost mysql8]# chown -R mysql:mysql ./data ##数据文件

[root@localhost mysql8]# chown -R mysql:mysql ./mysqllog ##binlog存储路径

[root@localhost mysql8]# su - mysql

[mysql@localhost ~]$ /opt/mha/mysql8/bin/mysqld_safe --defaults-file=/opt/mha/mysql8/conf/my.cnf --user=mysql &

8.配置从库

在从库上执行

/opt/mha/mysql8/bin/mysql -h localhost -uroot -pmysql -P13306 -S /opt/mha/mysql8/mysql.sock

重新指定通道属性 不需要进行reset slave了 。

change master to master_host='192.168.1.134',

master_port=13306,

master_user='repl',

master_password='mysql',

master_log_file='binlog.000006',

master_log_pos=195;

这里的master_log_file和master_log_post可以从xtrabackup_info的信息找到

[mysql@localhost data]$ more xtrabackup_info

uuid = 7b3c84a0-e021-11e9-8c80-525400c8dc1f

name =

tool_name = xtrabackup

tool_command = --defaults-file=/opt/mha/mysql8/conf/my.cnf --host=localhost --user=root --password=... --port=13306 --socket=/opt/mha/mysql8/mysql.sock --backup --target-dir=/opt/mha/xbackup/

tool_version = 8.0.7

ibbackup_version = 8.0.7

server_version = 8.0.17

start_time = 2019-09-26 13:49:56

end_time = 2019-09-26 13:50:01

lock_time = 0

binlog_pos = filename 'binlog.000006', position '195', GTID of the last change 'bd3f495f-cfb6-11e9-9e6f-525400c8dc1f:1-22'

innodb_from_lsn = 0

innodb_to_lsn = 19847436

partial = N

incremental = N

format = file

compressed = N

encrypted = N

7.启动从库

mysql> start slave;

遇到的问题:

报错信息:

error connecting to master 'repl@192.168.1.134:13306' - retry-time: 60 retries: 1 message: Authentication plugin 'caching_sha2_password' reported error: Authentication requires secure connection.

解决办法:

alter user 'repl'@'%' identified with mysql_native_password by 'mysql';

flush privileges;
 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值