xtrabackup 备份mysql_生产环境使用xtrabackup备份MySQL

本文介绍了如何在生产环境中使用xtrabackup进行MySQL全量备份和在线数据导出,包括备份脚本的编写、参数解释以及恢复流程。脚本涉及到了密码加密、并发备份、时间戳命名、文件压缩和自动清理旧备份等功能。同时,文中详细说明了如何利用备份文件恢复数据,包括解压、准备数据、拷贝数据和设置GTID以启动从库。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.前提条件

需要机器上有如下二进制文件:

xbstream

xtrabackup

qpress

并且加入到环境变量

本文章解决的问题:

1.需要定时全量备份数据库

2.需要在线把主库的数据导出来,做一个从库。

2.备份脚本

#!/bin/sh

passwd=$(printf "%s" MTIzNDU2YQ== | base64 -d)

date_dir=`date +%Y%m%d`

echo "---------------------------`date`------------begin----"

xtrabackup --default-files=/etc/my.cnf --safe-slave-backup --slave_info --parallel=4 --user='root' --password=$passwd --datadir=/data02/mysql_data --socket=/data02/mysql/tmp/mysql.sock --backup --stream=xbstream --compress --compress-threads=2 > /data02/backup/backup_data/$date_dir.stream

echo "---------------------------`date`-------------end---"

find /data02/backup/backup_data -type f -mtime +7 -exec rm {} \;

3.脚本解释

passwd 由于安全,不可以出现明文密码,所以写成base64加密后的。

a09387d70c2e

image.png

date_dir 备份的时间,方便按照时间来查看备份文件

--default-files 使用的my.cnf配置文件

--slave-info:该选项表示对slave进行备份的时候使用,打印出master的名字和binlogpos,同样将这些信息以change master的命令写入xtrabackup_slave_info文件。可以通过基于这份备份启动一个从库。

--safe-slave-backup:该选项表示为保证一致性复制状态,这个选项停止SQL线程并且等到show status中的slave_open_temp_tables为0的时候开始备份,如果没有打开临时表,bakcup会立刻开始,否则SQL线程启动或者关闭知道没有打开的临时表。如果slave_open_temp_tables在--safe-slave-backup-timeount(默认300秒)秒之后不为0,从库sql线程会在备份完成的时候重启。

--parallel 并发备份

--user备份用户

最好创建一个专门备份的用户,避免使用高权限的root

mysql> CREATE USER 'bkpuser'@'localhost' IDENTIFIED BY 's3cret';

mysql> GRANT RELOAD, LOCK TABLES, PROCESS, REPLICATION CLIENT ON *.* TO

'bkpuser'@'localhost';

mysql> FLUSH PRIVILEGES;

--datadir 数据库的目录

--socket 本地localhost连接的socket文件位置

--backup 代表是在备份

--stream=xbstream 流式备份

--compress --compress-threads=2 压缩备份,2个线程压缩

find /data02/backup/backup_data -type f -mtime +7 -exec rm {} ;找到文件时间在七天前的,并删除掉,保证全量备份只保留7天。

4.恢复文件

恢复需要如下步骤:

停止MySQL进程

删除MySQL数据文件目录(生产环境最好是mv到其他目录,当然要保证磁盘空间要够。例如你的数据库目录叫mysql_data 可以为:mv mysql_data mysql_data_bak ,),共享表空间,数据表空间,undo log ,redo log, binlog, relay log(假如是从库)

开始进行解压备份的文件,上述例子备份的文件名为20201203.qpress

xbstream解压

xbstream -x < 20201203.stream -C /data01/backup/data

解压到指定目录

decompress 解压

xtrabackup --decompress --parallel=10 --remove-original --target-dir=/data01/backup/data

prepare 准备数据(回放redo log)

xtrabackup --prepare --use-memory=2GB --target-dir=/data01/backup/data

把数据拷贝到数据库数据目录

xtrabackup --default-files=/data01/mysql/etc/3306/my.cnf --copy-back --target-dir=/data01/backup/data --datadir=/data01/mysql/data/3306

用户及用户组:一般都会使用mysql用户来执行mysql的进程,chown -R mysql:mysql /data01/mysql/data/3306

假如是备份的文件是要做一个从库,则需要如下操作:

在备份的目录找到如下文件:

cat xtrabackup_binlog_info

里面会有GITD(一般生产现在都修改为GTID复制的模式了)

启动数据库后,进去修改为GTID_PURGED为上面cat到的GITD

reset master

set global GTID_PURGED='fhhsh-sgs726464-bdgajdgdg4:1-101'

change master to ...............

这一步非常重要!!

因为这个是告诉数据库从那个GITD开始进行复制。

启动MySQL:记得查看错误日志,假如没有报错 那基本就是可以使用。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值