美文网首页
生产环境使用xtrabackup备份MySQL

生产环境使用xtrabackup备份MySQL

作者: frankie_cheung | 来源:发表于2020-12-03 20:45 被阅读0次
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加密后的。


    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:记得查看错误日志,假如没有报错 那基本就是可以使用。

相关文章

网友评论

      本文标题:生产环境使用xtrabackup备份MySQL

      本文链接:https://www.haomeiwen.com/subject/efuniktx.html