代码改变世界

Xtrabackup物理备份工具使用

  ndzj  阅读(229)  评论(1编辑  收藏  举报

1.备份工具特性对比

2.工作过程
Percona XtraBackup是基于InnoDB的崩溃恢复功能的,它复制InnoDB数据文件,这导致数据内部不一致;然后,它对文件执行崩溃恢复,使它们再次成为一致的、可用的数据库。 这是因为InnoDB维护一个重做日志,也称为事务日志。这包含了对InnoDB数据的每次更改的记录。当InnoDB启动时,它会检查数据文件和事务日志,并执行两个步骤。一是将提交的事务日志条目应用于数据文件,二是对修改了数据但没有提交的任何事务执行撤销操作。

Percona XtraBackup的工作原理是在启动时记住日志序列号(LSN),然后复制数据文件。这样做需要一些时间,所以如果文件正在更改,那么它们将反映数据库在不同时间点的状态。与此同时,Percona XtraBackup运行一个后台进程,该进程监视事务日志文件,并从其中复制所做的更改。Percona XtraBackup需要不断地复制变更的事务日志。 Percona XtraBackup会记录自开始执行以来对数据文件的每次更改的事务日志。

Percona XtraBackup在可用的地方使用备份锁作为FLUSH TABLES WITH的轻量级替代读锁。这个特性在Percona Server 5.6+中可用。MySQL 8.0允许通过lock instance FOR backup语句获取实例级的备份锁。

Percona xtrabbackup备份完所有InnoDB/XtraDB数据和日志后,才会对MyISAM和其他非InnoDB表进行锁操作。Percona XtraBackup使用自动复制非innodb数据以避免阻塞修改InnoDB表的DML操作。
开始复制MyISAM表。完成此操作后,将开始备份文件。它将备份.frm、. mrg、. myd、. myi、. arm、. arz、. csm、. csv、.sdi和.par文件。之后,xtrabackup将使用LOCK BINLOG FOR BACKUP来阻止所有可能改变二进制日志位置或通过SHOW MASTER/SLAVE STATUS 输出Exec_Master_Log_Pos或Exec_Gtid_Set的操作。然后xtrabackup将完成REDO日志文件的复制并获取二进制日志位置点。完成后,xtrabackup将解锁二进制日志和表。

大概流程如下:

 

3.下载安装percona-xtrabackup

wget https://downloads.percona.com/downloads/Percona-XtraBackup-LATEST/Percona-XtraBackup-8.0.30-23/binary/tarball/percona-xtrabackup-8.0.30-23-Linux-x86_64.glibc2.17.tar.gz

tar xvf percona-xtrabackup-8.0.30-23-Linux-x86_64.glibc2.17.tar.gz -C  /usr/local/

4.备份数据

/usr/local/percona-xtrabackup-8.0.30-23-Linux-x86_64.glibc2.17/bin/xtrabackup --user=root --password=123456 --port 3305 --backup --target-dir=./mysql8028_backup/

5.关闭目标实例,清空数据目录导入数据

cd /data/mysql_2/

rm -fr data/*

rm -fr logs/*

rm -fr tmp/*

time /usr/local/percona-xtrabackup-8.0.23-16-Linux-x86_64.glibc2.17/bin/xtrabackup --defaults-file=/data/mysql_2/my.cnf --copy-back --datadir=/data/mysql_2/data/ --target-dir=./mysql8028_backup/

6.改数据文件权限并启动实例

cd /data

chown -R mysql.mysql mysql_2/

/opt/mysql-8.0.28-el7-x86_64/bin/mysqld --defaults-file=/data/mysql_2/my.cnf &

/////////////////////////////////////////////////////

注意:如果是在现有实例的机器上新装另一个实例,在启动实例时请加一个跳过启动slave,不然它会自动去同步原来的复制链路,因为这个物理备份把复制链路也备份过来了。

如需要跳过启动slave请这样启动  /opt/mysql-8.0.28-el7-x86_64/bin/mysqld --defaults-file=/data/mysql_2/my.cnf --skip-slave-start &

172.16.13.77
/opt/mysql-8.0.28-el7-x86_64/bin/mysqld --defaults-file=/data/mysql_2/my.cnf --skip-slave-start &

reset replica all;
change master to master_host='172.16.13.150', master_port=3305,master_user='repl', master_password='repl123', master_auto_position = 1;

start replica;
show replica status\G

//////////////////////////////////////////////////////

编辑推荐:
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
阅读排行:
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 地球OL攻略 —— 某应届生求职总结
· 提示词工程——AI应用必不可少的技术
· Open-Sora 2.0 重磅开源!
· 周边上新:园子的第一款马克杯温暖上架
点击右上角即可分享
微信分享提示