基于xtrabackup实现数据备份还原——高效的数据备份还原工具
admin
2023-05-02 21:43:50
0次

准备一个干净的备份目录;

[root@mysql ~]$ll /backups/
total 0

MariaDB [(none)]> show binary logs;
+------------------+-----------+
| Log_name         | File_size |
+------------------+-----------+
| mysql-bin.000001 |     30331 |
| mysql-bin.000002 |   1038814 |
| mysql-bin.000003 |      7698 |
| mysql-bin.000004 |       442 |
| mysql-bin.000005 |       423 |
+------------------+-----------+
5 rows in set (0.00 sec)


数据备份:

默认就是以root用户的身份进行的备份;
[root@mysql ~]$innobackupex --user=root /backups/

[root@mysql ~]$ll /backups/
total 0
drwxr-x--- 6 root root 217 Feb 25 14:14 2018-02-25_14-14-07
[root@mysql ~]$ll /backups/2018-02-25_14-14-07/
total 18460
-rw-r----- 1 root root      417 Feb 25 14:14 backup-my.cnf
drwxr-x--- 2 root root      272 Feb 25 14:14 hellodb
-rw-r----- 1 root root 18874368 Feb 25 14:14 ibdata1
drwxr-x--- 2 root root     4096 Feb 25 14:14 mysql
drwxr-x--- 2 root root     4096 Feb 25 14:14 performance_schema
drwxr-x--- 2 root root       20 Feb 25 14:14 test
-rw-r----- 1 root root       21 Feb 25 14:14 xtrabackup_binlog_info
-rw-r----- 1 root root      113 Feb 25 14:14 xtrabackup_checkpoints
-rw-r----- 1 root root      454 Feb 25 14:14 xtrabackup_info
-rw-r----- 1 root root     2560 Feb 25 14:14 xtrabackup_logfile


[root@mysql ~]$cd /backups/2018-02-25_14-14-07/
[root@mysql 2018-02-25_14-14-07]$ls
backup-my.cnf  ibdata1  performance_schema  xtrabackup_binlog_info  xtrabackup_info
hellodb        mysql    test                xtrabackup_checkpoints  xtrabackup_logfile
[root@mysql 2018-02-25_14-14-07]$


# lsn是日志序列号,在磁盘上保存了数据库的所有数据;文件很大,分成很多的小块存储在了磁盘上;
每个数据块的小块都有所谓的lsn号;如从100-200,如果将100这个数据块中的数据做了修改,那么他的LSN会加1,即
变为了201;所以根据LSN的大小,可以判断数据块中的数据是否备份过;

这里是全备份,所以就是将所有的LSN对应的数据块的数据都进行了备份。
    [root@mysql 2018-02-25_14-14-07]$less xtrabackup_checkpoints 
    backup_type = full-backuped
    from_lsn = 0
    to_lsn = 1640915
    last_lsn = 1640915
    compact = 0
    recover_binlog_info = 0


尽管表面来看是拷贝的文件,但是底层实际拷贝的是数据块,所有效率很高。

这个文件中显示的是全备份备份到二进制文件的哪个位置;
[root@mysql 2018-02-25_14-14-07]$cat xtrabackup_binlog_info 
mysql-bin.000005    423


[root@mysql 2018-02-25_14-14-07]$file xtrabackup_logfile 
xtrabackup_logfile: data




还原数据到一个新的MySQL主机上

找一个干净的主机,将在27.7主机上备份的数据在27.17上实现还原;
[root@mysql17 ~]$vim /etc/my.cnf
[mysqld]
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock
# Disabling symbolic-links is recommended to prevent assorted security risks
symbolic-links=0
log_bin
innodb_file_per_table


[root@mysql17 ~]$yum install percona-xtrabackup-24-2.4.9-1.el7.x86_64.rpm 
[root@mysql backups]$scp -rp /backups/2018-02-25_14-14-07/ 192.168.27.17:/app/

[root@mysql17 ~]$ls /app/
2018-02-25_14-14-07




数据库的整理操作:
    包括将不完整的事务进行回滚;因为备份的时间点极有可能被一个事务横跨;

[root@mysql17 ~]$innobackupex --apply-log /app/2018-02-25_14-14-07/
180225 01:53:05 completed OK!
确保要恢复的数据库的数据目录是空的;
[root@mysql17 ~]$ll /var/lib/mysql/
total 0
将整理过数据复制到数据库的数据目录;
这个过程就是复制数据,对于innodb引擎,他是基于块的方式实现的;对于myISAM引擎,
那么就是单个文件的复制;
[root@mysql17 ~]$innobackupex --copy-back /app/2018-02-25_14-14-07/
...
180225 01:56:10 completed OK!
[root@mysql17 ~]$ll /var/lib/mysql/
total 40976
drwxr-x--- 2 root root      272 Feb 25 01:56 hellodb
-rw-r----- 1 root root 18874368 Feb 25 01:56 ibdata1
-rw-r----- 1 root root  5242880 Feb 25 01:56 ib_logfile0
-rw-r----- 1 root root  5242880 Feb 25 01:56 ib_logfile1
-rw-r----- 1 root root 12582912 Feb 25 01:56 ibtmp1
drwxr-x--- 2 root root     4096 Feb 25 01:56 mysql
drwxr-x--- 2 root root     4096 Feb 25 01:56 performance_schema
drwxr-x--- 2 root root       20 Feb 25 01:56 test
-rw-r----- 1 root root       35 Feb 25 01:56 xtrabackup_binlog_pos_innodb
-rw-r----- 1 root root      454 Feb 25 01:56 xtrabackup_info
[root@mysql17 ~]$chown -R mysql.mysql /var/lib/mysql/
[root@mysql17 ~]$ll /var/lib/mysql/
total 40976
drwxr-x--- 2 mysql mysql      272 Feb 25 01:56 hellodb
-rw-r----- 1 mysql mysql 18874368 Feb 25 01:56 ibdata1
-rw-r----- 1 mysql mysql  5242880 Feb 25 01:56 ib_logfile0
-rw-r----- 1 mysql mysql  5242880 Feb 25 01:56 ib_logfile1
-rw-r----- 1 mysql mysql 12582912 Feb 25 01:56 ibtmp1
drwxr-x--- 2 mysql mysql     4096 Feb 25 01:56 mysql
drwxr-x--- 2 mysql mysql     4096 Feb 25 01:56 performance_schema
drwxr-x--- 2 mysql mysql       20 Feb 25 01:56 test
-rw-r----- 1 mysql mysql       35 Feb 25 01:56 xtrabackup_binlog_pos_innodb
-rw-r----- 1 mysql mysql      454 Feb 25 01:56 xtrabackup_info
[root@mysql17 ~]$ll /var/lib/mysql/ -d
drwxr-xr-x 6 mysql mysql 198 Feb 25 01:56 /var/lib/mysql/
[root@mysql17 ~]$systemctl start mariadb
MariaDB [(none)]> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| hellodb            |
| mysql              |
| performance_schema |
| test               |
+--------------------+
5 rows in set (0.00 sec)
MariaDB [(none)]> 
MariaDB [(none)]> show master logs;
+--------------------+-----------+
| Log_name           | File_size |
+--------------------+-----------+
| mariadb-bin.000001 |       245 |
+--------------------+-----------+
1 row in set (0.00 sec)
MariaDB [(none)]> select * from hellodb.students;
Empty set (0.00 sec)

以上就是使用xtrabackup实现将一个主机的数据全备份后还原到一个远程的新的主机的过程。


相关内容

热门资讯

空调连续工作多久需要停机休息 空调连续工作的时间取决于多个因素,包括空调的型号、功率、使用环境和维护情况等。一般来说,空调可以连续...
空调哪个符号是除湿的 空调除湿功能通常用一个水滴形状的符号表示。不同品牌和型号的空调遥控器可能会有所差异,但一般来说,除湿...
格力空调多长时间加一次氟利昂 1、一般情况下,空调对氟利昂的使用量是非常小的,所以在空调使用了四年左右的时候再考虑加也没问题。2、...
空调用多长时间需要加氟一次 一般情况下是五年。当出现以下这几种情况时,空调才需要加氟。1、空调的室内机和室外机各有两个接口,当接...
格调生活·C标思享荟:卡萨帝在... 9月12日的郑州龙湖金融岛,夜风轻拂,灯光璀璨。“C标时刻共传奇——卡萨帝思享荟暨20周年品牌盛典郑...
品牌价值破千亿、高端份额持续领... 9月12日,“C标时刻共传奇——卡萨帝思享荟暨20周年品牌盛典郑州站”在郑州龙湖金融岛举办。2026...
空调主板坏了修800还是换新的 空调主板坏了是修还是换新,需要考虑多个因素,以下是一些建议:1. 维修成本:如果维修费用较低,比如 ...
空调开多久需要休息多长时间 问题:空调开多久需要休息多长时间回答:1、在使用空调的过程中,一般空调开7~8个小时左右需要休息2~...
中央空调多长时间清洗一次 1、一般空调开机前清洗一次即可,空调开机中间时段再清洗一次,空调关机时清洗一次,这样比较合理。2、空...
中央空调氟利昂多久加一次 看空调制热和制冷程度,很多人的观点认为氟利昂必须一年放一次,其实这个观点是错误的,理解上面有点偏差,...