|
昨天在群里看到一则招聘初级DBA公告,里面要求DBA要会使用物理备份xtrabackup工具,这个工具之前也使用过,但好久没用过了,今天特意再热身一下。
首先介绍一下这个xtrabackup工具,这个工具是percona公司(mysql数据库的分支)的产品。本次我使用yum安装,这个是安装文档(https://docs.percona.com/percona-xtrabackup/8.0/yum-repo.html#prerequisites),里面有很详细安装步骤。
Install from Percona YUM repository
The following procedure installs Percona XtraBackup 8.0.
Install the Percona yum repository by running the following command as the root user or with sudo:
$ sudo yum install \
https://repo.percona.com/yum/percona-release-latest.\
noarch.rpm
Example output
Enable the repository:
$ sudo percona-release enable pxb-80
Example output
Install Percona XtraBackup by running:
$ sudo yum install percona-xtrabackup-80
Example output
To decompress backups made using LZ4 or ZSTD compression algorithm, install the corresponding package:
Install the lz4 package
Install the zstd package
$ sudo yum install lz4
Verify the installation¶
Run Percona XtraBackup:
$ xtrabackup --version
If this command fails, the installation is incomplete or incorrect.
以下是我安装后版本提示
[root@localhost ~]# xtrabackup --version
2025-03-06T09:58:43.372969+08:00 0 [Note] [MY-011825] [Xtrabackup] recognized server arguments: --datadir=/var/lib/mysql
xtrabackup version 8.0.35-32 based on MySQL server 8.0.35 Linux (x86_64) (revision id: c339924a)
介绍一下我的操作环境,操作系统为OEL8,数据库安装是
Server version: 8.0.32-26 GreatSQL (GPL), Release 26, Revision a68b3034c3d。
现在开始做数据备份,备份的命令如下所示
xtrabackup -uroot -pGood@2019 --defaults-file=/etc/my.cnf --target-dir=/data/backup/xtrabackup
(defaults-file为数据库配置文件地址,target-dir为数据库备份目录),命令执行成功后,备份目录文件如下所示:
[root@localhost ~]# ll /data/backup/xtrabackup
total 70716
-rw-r-----. 1 root root 447 Mar 6 10:05 backup-my.cnf
-rw-r-----. 1 root root 157 Mar 6 10:05 binlog.000004
-rw-r-----. 1 root root 16 Mar 6 10:05 binlog.index
drwxr-x---. 2 root root 20 Mar 6 10:05 '#file_purge'
-rw-r-----. 1 root root 5760 Mar 6 10:05 ib_buffer_pool
-rw-r-----. 1 root root 12582912 Mar 6 10:05 ibdata1
drwxr-x---. 2 root root 38 Mar 6 10:05 menagerie
drwxr-x---. 2 root root 4096 Mar 6 10:05 mysql
-rw-r-----. 1 root root 26214400 Mar 6 10:05 mysql.ibd
drwxr-x---. 2 root root 8192 Mar 6 10:05 performance_schema
drwxr-x---. 2 root root 4096 Mar 6 10:05 sakila
drwxr-x---. 2 root root 28 Mar 6 10:05 sys
drwxr-x---. 2 root root 41 Mar 6 10:05 test
-rw-r-----. 1 root root 16777216 Mar 6 10:05 undo_001
-rw-r-----. 1 root root 16777216 Mar 6 10:05 undo_002
drwxr-x---. 2 root root 68 Mar 6 10:05 world
-rw-r-----. 1 root root 18 Mar 6 10:05 xtrabackup_binlog_info
-rw-r-----. 1 root root 134 Mar 6 10:05 xtrabackup_checkpoints
-rw-r-----. 1 root root 507 Mar 6 10:05 xtrabackup_info
-rw-r-----. 1 root root 2560 Mar 6 10:05 xtrabackup_logfile
-rw-r-----. 1 root root 39 Mar 6 10:05 xtrabackup_tablespaces
在进行数据库恢复时,有几个注意事项要特别强调一下:
1、数据库服务要关闭,不能在数据库运行时进行xtrabackup恢复操作。否则恢复后会导致数据库服务无法启动,在数据目录下找不到mysql.sock。笔者当时就盲目地踩过这个坑。
2、在恢复之前,要保证目标数据库数据目录是空的。
3、上面的数据库备份不能直接用于恢复,需要做prepare保证数据一致性。
4、同时要注意目标数据库数据目录的属主,属主要为mysql。命令如下所示chown mysql:mysql /var/lib/mysql,各位网友在进行数据恢复后,要注意数据目录的属主。否则可能导致数据恢复后,数据库服务不能启动起来。笔者在这里也踩过坑,当时不得不把错误信息发百度查询,最后把数据库数据目录的属主修改了才解决了数据库启动问题,各位网友要引起注意。
由于我是用RPM方式安装的MYSQL数据库,用systemctl stop mysqld停止数据库服务就可以了。同时要用删除目标数据库数据目录中的数据。
进行数据恢复准备,命令如下所示:
xtrabackup --prepare --target-dir=/data/backup/xtrabackup
最后进行正式的数据恢复:
xtrabackup --defaults-file=/etc/my.cnf --copy-back --target-dir=/data/backup/xtrabackup
以上命令会将备份的数据文件复制到目标数据库数据目录下面。
数据库还原后,注意要启动数据库服务。
xtrabackup工具是一个强大的数据库备份恢复软件,不仅能备份所有库,也可以备份单表、单库,大家可以探索使用一下。
合作电话:010-64087828
社区邮箱:greatsql@greatdb.com