Mysql的备份(下)

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
RDS MySQL Serverless 高可用系列,价值2615元额度,1个月
简介: Mysql的备份(下)

三、Xtrabackup工具


(1)Xtrabackup概述


Xtrabackup是由percona公司开发、用于Mysql数据库物理备份的备份工具,支持Mysql、oracle、percona Server、mariaDB数据库,是一个开源的数据库备份工具


使用Xtrabackup需要安装percona-toolkit-2.2.19-1.noarch.rpm和percona-xtrabackup-2.4.5-Linux-x86_64.tar.gz


在Xtrabackup软件包安装完成后,在bin目录下,一共有六个文件:


[root@rzy ~]# cd /usr/src/percona-xtrabackup-2.4.5-Linux-x86_64/
[root@rzy percona-xtrabackup-2.4.5-Linux-x86_64]# ll
总用量 4
drwxr-xr-x  2 root root  111 11月 25 2016 bin
drwxr-xr-x  3 root root   18 11月 25 2016 man
drwxr-xr-x 14 root root 4096 11月 25 2016 percona-xtrabackup-2.4-test
[root@rzy percona-xtrabackup-2.4.5-Linux-x86_64]# cd bin/
[root@rzy bin]# ll
总用量 225988
lrwxrwxrwx 1 root root        10 11月 25 2016 innobackupex -> xtrabackup
-rwxr-xr-x 1 root root   5179300 11月 25 2016 xbcloud
-rwxr-xr-x 1 root root      3020 11月 25 2016 xbcloud_osenv
-rwxr-xr-x 1 root root   5001985 11月 25 2016 xbcrypt  #加解密使用
-rwxr-xr-x 1 root root   5071619 11月 25 2016 xbstream #类似于tar
-rwxr-xr-x 1 root root 216142648 11月 25 2016 xtrabackup  

其中最主要的是innobackupex和Xtrabackup,innobackupex是一个perl脚本,Xtrabackup是C\C++编译的二进制


Xtrabackup是用来备份innoDB引擎的表的,不能备份非innoDB引擎的表,和mysqld server没有交互


可以看到innobackupex与Xtrabackup做了软连接,innobackupex脚本用来备份非innoDB引擎的表,但是可以调用Xtrabackup命令来备份innoDB引擎的表,还会发送命令与mysqld server进行交互,比如加读锁、获取位点等,简单的来说,innobackupex在Xtrabackup上做了一层封装,使之既能备份非innoDB表也可以调用Xtrabackup备份innoDB表


mysql的系统表使用的是MyISAM存储引擎,当我们备份系统表时一般都是通过innobackupex命令进行备份


(2)备份原理


  • Xtrabackup和innobackupex两个工具之间的交互和协调是通过文件的创建、删除来实现的,主要的文件有:


  1. Xtrabackup_suspended_1
  2. Xtrabackup_suspended_2
  3. Xtrabackup_log_copied


  • 交互的过程:


  1. innobackupex在启动Xtrabackup进程后,会一直等待Xtrabackup备份完innoDB文件。


  1. (而innobackupex如何知道Xtrabackup有没有备份完呢,其实在Xtrabackup备份完后会创建名叫Xtrabackup_suspended_2的文件,当innobackupex检测到这个文件被创建出来之后,就知道Xtrabackup已经备份完innoDB文件了)


  1. 在Xtrabackup备份完innoDB文件后,创建除了Xtrabackup_suspended_2文件,它会等待innobackupex把这个文件删除,才会继续往下执行操作


  1. innobackupex在检测到Xtrabackup_suspended_2被创建出来后就会继续往下执行操作


  1. innobackupex在备份完非innoDB表后,会删除Xtrabackup_suspended_2文件,接着等待Xtrabackup_log_copied创建


  1. Xtrabackup检测到Xtrabackup_suspended_2文件被删除后,会继续往下执行操作


(3)备份过程


(4)安装Xtrabackup


-实验环境


系统 主机名 mysql版本 使用的软件包
centos7.4 rzy Mysql-5.7.12 percona-toolkit-2.2.19-1.noarch.rpm percona-xtrabackup-2.4.5-Linux-x86_64.tar.gz


-实验步骤

[root@rzy ~]# ll #上传两个软件包
总用量 225988
-rw-------. 1 root root     1264 1?. 12 18:27 anaconda-ks.cfg
-rw-r--r--  1 root root 70389425 5?. 11 14:35 boost_1_59_0.tar.bz2
-rw-r--r--  1 root root 50571897 5?. 11 14:30 mysql-5.7.12.tar.gz
-rw-r--r--  1 root root  1736921 5?. 22 17:21 percona-toolkit-2.2.19-1.noarch.rpm
-rw-r--r--  1 root root 82404945 5?. 22 17:21 percona-xtrabackup-2.4.5-Linux-x86_64.tar.gz
[root@rzy ~]# tar xf percona-xtrabackup-2.4.5-Linux-x86_64.tar.gz -C /usr/src/
[root@rzy ~]# cd /usr/src/percona-xtrabackup-2.4.5-Linux-x86_64/
[root@rzy percona-xtrabackup-2.4.5-Linux-x86_64]# cp bin/* /usr/bin/ #优化命令执行路径,和修改环境变量是一样的
[root@rzy percona-xtrabackup-2.4.5-Linux-x86_64]# cd 
[root@rzy ~]# mount /dev/cdrom /mnt/
mount: /dev/sr0 写保护,将以只读方式挂载
mount: /dev/sr0 已经挂载或 /mnt 忙
       /dev/sr0 已经挂载到 /mnt 上
[root@rzy ~]# yum -y install perl-DBI perl-DBD-MySQL perl-Time-HiRes perl-IO-Socket-SSL perl-TermReadKey.x86_64 perl-Digest-MD5 #安装依赖包
。。。。。。
完毕!
[root@rzy ~]# rpm -ivh percona-toolkit-2.2.19-1.noarch.rpm  #安装rpm包

使用Xtrabackup工具


  • 常用选项:



选项 作用
–host 指定主机
–user 指定用户名
–password 指定密码
–port 指定端口
–databases 指定数据库
–incremental 创建增量备份
–incremental-basedir 指定包含完全备份的目录
–incremental-dir 指定包含增量备份的目录
–apply-log 对备份进行预处理操作
–redo-only 不回滚未提交事务
–copy-back 恢复备份目录


一般情况下,在备份完成后,数据是不能立即用于恢复操作的,因为备份的数据可能会包含尚未提交的事务或已经提交但是没有同步至数据文件的事务,这导致了数据文件的数据不一致,而apply-log选项的作用正是通过回滚未提交的事务以及同步已经提交的事务至数据文件的方法,使得数据文件的数据重新保证了一致性


-完全备份

[root@rzy bin]# innobackupex --user=root --password=123123 /beifen/ #直接完全备份至/beifen目录
。。。。。。
210522 17:51:48 completed OK! #ok表示备份成功
[root@rzy bin]# ll /beifen/
总用量 0
drwxr-x--- 5 root root 193 5月  22 17:51 2021-05-22_17-51-45
[root@rzy bin]# ll /beifen/2021-05-22_17-51-45/ #从备份的目录可以看出,是物理备份
总用量 12336 
-rw-r----- 1 root root      425 5月  22 17:51 backup-my.cnf #备份使用到的配置选项信息文件
-rw-r----- 1 root root      352 5月  22 17:51 ib_buffer_pool
-rw-r----- 1 root root 12582912 5月  22 17:51 ibdata1
drwxr-x--- 2 root root     4096 5月  22 17:51 mysql
drwxr-x--- 2 root root     8192 5月  22 17:51 performance_schema
drwxr-x--- 2 root root     8192 5月  22 17:51 sys
-rw-r----- 1 root root      113 5月  22 17:51 xtrabackup_checkpoints #备份的类型、状态和LSN状态信息文件
-rw-r----- 1 root root      417 5月  22 17:51 xtrabackup_info #mysql服务器当前正在使用的二进制日志文件和此时二进制日志时间的位置信息文件
-rw-r----- 1 root root     2560 5月  22 17:51 xtrabackup_logfile #备份的日志文件 

-恢复

[root@rzy ~]# innobackupex --apply-log /beifen/2021-05-22_17-51-45/ #先对备份进行预处理,使数据一致
。。。。。。
210522 18:19:01 completed OK! 
[root@rzy ~]# rm -rf /usr/local/mysql/data/* #删除mysql文件
[root@rzy ~]# innobackupex --copy-back /beifen/2021-05-22_17-51-45/ #进行恢复
。。。。。。
210522 18:19:53 completed OK!
[root@rzy ~]# chown -R mysql:mysql /usr/local/mysql/data/ #增加属主和属组
[root@rzy ~]# ll /usr/local/mysql/data/ #查看是否已经恢复
总用量 122916
-rw-r----- 1 mysql mysql      352 5月  22 18:19 ib_buffer_pool
-rw-r----- 1 mysql mysql 12582912 5月  22 18:19 ibdata1
-rw-r----- 1 mysql mysql 50331648 5月  22 18:19 ib_logfile0
-rw-r----- 1 mysql mysql 50331648 5月  22 18:19 ib_logfile1
-rw-r----- 1 mysql mysql 12582912 5月  22 18:19 ibtmp1
drwxr-x--- 2 mysql mysql     4096 5月  22 18:19 mysql
drwxr-x--- 2 mysql mysql     8192 5月  22 18:19 performance_schema
drwxr-x--- 2 mysql mysql     8192 5月  22 18:19 sys
-rw-r----- 1 mysql mysql      417 5月  22 18:19 xtrabackup_info
[root@rzy ~]# mysql -u root -p123123 -e "show databases;" #进入mysql查看是否可以正常操作
mysql: [Warning] Using a password on the command line interface can be insecure.
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
| sys                |
+--------------------+
——————————————————————————————————————————————————————————
恢复三部曲
1.先把备份进行预操作,使数据一致
2.恢复备份至mysql
3.增加属主和属组
——————————————————————————————————————————————————————————

-增量备份

[root@rzy ~]# mysql -u root -p123123 #进入mysql创建表
mysql: [Warning] Using a password on the command line interface can be insecure.
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 4
Server version: 5.7.12 Source distribution
Copyright (c) 2000, 2016, Oracle and/or its affiliates. All rights reserved.
Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
mysql> create database aaa;
Query OK, 1 row affected (0.00 sec)
mysql> use aaa;
Database changed
mysql> create table aaa(id int);
Query OK, 0 rows affected (0.13 sec)
mysql> insert into aaa values(1);
Query OK, 1 row affected (0.07 sec)
mysql> insert into aaa values(2);
Query OK, 1 row affected (0.00 sec)
mysql> insert into aaa values(3);
Query OK, 1 row affected (0.00 sec)
mysql> exit
Bye
[root@rzy ~]# innobackupex --user=root --password=123123 --incremental /beifen/ --incremental-basedir=/beifen/2021-05-22_17-51-45/ #进行增量备份要记得使用--incremental-basedir=指定完全备份
。。。。。。
210522 18:31:39 completed OK!
[root@rzy ~]# ll /beifen/
总用量 0
drwxr-x--- 5 root root 245 5月  22 18:19 2021-05-22_17-51-45 #完全备份
drwxr-x--- 6 root root 230 5月  22 18:31 2021-05-22_18-31-36 #增量备份
[root@rzy 2021-05-22_18-31-36]# cat xtrabackup_checkpoints  #查看增量备份的xtrabackup_checkpoints文件
backup_type = incremental #备份类型为增量备份
from_lsn = 2522130 #lsn从2522130开始
to_lsn = 2522673   #lsn到2522673结束
last_lsn = 2522673
compact = 0
recover_binlog_info = 0
[root@rzy 2021-05-22_18-31-36]# cat /beifen/2021-05-22_17-51-45/xtrabackup_checkpoints  #查看完全备份的
backup_type = full-prepared #备份类型为完全备份
from_lsn = 0 #lsn从0开始
to_lsn = 2522130  #lsn从255130结束
last_lsn = 2522139
compact = 0
recover_binlog_info = 0

-恢复增量备份

[root@rzy 2021-05-22_18-31-36]# innobackupex --apply-log --redo-only /beifen/2021-05-22_17-51-45/ #先把完全备份的数据保持一致性
。。。。。。
210522 18:40:17 completed OK!
[root@rzy 2021-05-22_18-31-36]# innobackupex --apply-log --redo-only /beifen/2021-05-22_17-51-45/ --incremental-dir=/beifen/2021-05-22_18-31-36/ #把增量备份和全局备份的数据目录合并--incremental-dir=指定增量备份目录
。。。。。。
210522 18:41:24 completed OK!
[root@rzy 2021-05-22_18-31-36]# cat /beifen/2021-05-22_17-51-45/xtrabackup_checkpoints  #查看合并后的完全备份的数据目录的xtrabackup_checkpoints文件的lsn是否增加到了增量备份的数字
backup_type = log-applied
from_lsn = 0
to_lsn = 2522673 #发现lsn结束的数字和上面的增量备份的数字一致了
last_lsn = 2522673
compact = 0
recover_binlog_info = 0
[root@rzy 2021-05-22_18-31-36]# innobackupex --copy-back /beifen/2021-05-22_17-51-45/ #恢复数据
。。。。。。
210522 18:42:43 completed OK!
[root@rzy 2021-05-22_18-31-36]# chown -R mysql:mysql /usr/local/mysql/data/ #修改属主和属组
[root@rzy 2021-05-22_18-31-36]# mysql -u root -p123123 -e "show databases;" #确认mysql可以正常使用
mysql: [Warning] Using a password on the command line interface can be insecure.
+--------------------+
| Database           |
+--------------------+
| information_schema |
| aaa                |
| mysql              |
| performance_schema |
| sys                |
+--------------------+


-使用Xtrabackup的总结


  • 增量备份需要使用参数–incremental指定需要备份到那个目录,在恢复增量备份和完全备份时,要使用–incremental-dir参数指定增量备份目录和完全备份目录合并
  • 进行数据备份恢复时,要先使用参数–apply-log和redo-only使数据目录的数据保持一致
  • 如果有多个增量备份,要把增量备份逐一和完全备份进行合并,可以查看完全备份的lsn值是否达到最近一次的增量备份的lsn值
相关实践学习
如何在云端创建MySQL数据库
开始实验后,系统会自动创建一台自建MySQL的 源数据库 ECS 实例和一台 目标数据库 RDS。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助     相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
目录
相关文章
|
2月前
|
存储 关系型数据库 MySQL
mysql数据库备份与恢复
MySQL数据库的备份与恢复是确保数据安全性和业务连续性的关键操作。
75 4
|
7天前
|
关系型数据库 MySQL Linux
Linux环境下MySQL数据库自动定时备份实践
数据库备份是确保数据安全的重要措施。在Linux环境下,实现MySQL数据库的自动定时备份可以通过多种方式完成。本文将介绍如何使用`cron`定时任务和`mysqldump`工具来实现MySQL数据库的每日自动备份。
23 3
|
7天前
|
监控 关系型数据库 MySQL
Linux环境下MySQL数据库自动定时备份策略
在Linux环境下,MySQL数据库的自动定时备份是确保数据安全和可靠性的重要措施。通过设置定时任务,我们可以每天自动执行数据库备份,从而减少人为错误和提高数据恢复的效率。本文将详细介绍如何在Linux下实现MySQL数据库的自动定时备份。
20 3
|
5月前
|
存储 SQL 关系型数据库
|
1月前
|
安全 关系型数据库 MySQL
MySQL用户备份
【10月更文挑战第2天】MySQL用户备份
53 3
|
1月前
|
存储 关系型数据库 MySQL
MySQL如何备份?
【10月更文挑战第2天】MySQL如何备份?
88 3
|
3月前
|
SQL 关系型数据库 MySQL
在Linux中,如何备份和恢复MySQL数据库?
在Linux中,如何备份和恢复MySQL数据库?
|
3月前
|
SQL 数据可视化 关系型数据库
MySQL 备份可视化巡检系统
MySQL 备份可视化巡检系统
|
3月前
|
SQL 存储 关系型数据库
MySQL备份:mydumper 备份恢复工具生产实战
MySQL备份:mydumper 备份恢复工具生产实战
|
3月前
|
安全 关系型数据库 MySQL
揭秘MySQL海量数据迁移终极秘籍:从逻辑备份到物理复制,解锁大数据迁移的高效与安全之道
【8月更文挑战第2天】MySQL数据量很大的数据库迁移最优方案
648 17