数据库备份之Xtrabackup

为什么要进行数据库备份

数据库数据备份对于数据库的安全性可用性可恢复性都非常重要,是数据库管理工作中不可或缺的一部分。定期备份数据库,可以保障数据库数据的安全性和可用性,并能够在数据库系统出现故障时,快速恢复数据,减少数据丢失的损失

XtraBackUp是啥

xtrabackup是Percona公司CTO Vadim参与开发的一款基于InnoDB的在线热备工具,具有开源,免费,支持在线热备,备份恢复速度快,占用磁盘空间小等特点,并且支持不同情况下的多种备份形式。

xtrabackup包含两个主要的工具,即xtrabackup和innobackupex:

  • xtrabackup只能备份innodb和xtradb两种引擎的表,而不能备份myisam引擎的表
  • innobackupex是一个封装了xtrabackup的Perl脚本,支持同时备份innodb和myisam,但在对myisam备份时需要加一个全局的读锁。还有就是myisam不支持增量备份

XtraBackUp安装

mysql5.7 要用 2.4版本

安装教程

  1. wget https://www.percona.com/downloads/XtraBackup/Percona-XtraBackup-2.4.4/binary/redhat/7/x86_64/percona-xtrabackup-24-2.4.4-1.el7.x86_64.rpm
  2. yum localinstall percona-xtrabackup-24-2.4.4-1.el7.x86_64.rpm

配置定时备份

  1. xtrabackup.sh上次至服务器/www/backup/xtrabackup.sh
    1. #!/bin/bash
    2. timestamp=$(date +%Y%m%d_%H%M%S)
    3. rm -rf /www/backup/xtrabackup_data/
    4. mkdir -p /www/backup/xtrabackup_data
    5. xtrabackup --backup --user=root --port=3306 --password=123456 --target-dir=/www/backup/xtrabackup_data &>> /www/wwwlogs/xtrabackup.log
    6. mkdir -p /www/backup/xtrabackup_data_history
    7. zip -r /www/backup/xtrabackup_data_history/xtrabackup_data_$timestamp.zip /www/backup/xtrabackup_data
    8. echo " backup file output====> /www/backup/xtrabackup_data_history/xtrabackup_data_$timestamp.zip"
  2. 使用Linux 的 Crontab 配置 每天凌晨1点 运行/www/backup/xtrabackup.sh

使用 xtrabackup 备份的文件进行恢复

  1. 解压备份文件
    首先,需要解压Xtrabackup备份文件。通常,备份文件是.tar或.tar.gz格式的归档文件。您可以使用tar命令解压缩备份文件:
  1. $ tar -xvf backup.tar.gz
  1. 停止MySQL服务
    在恢复备份之前,需要停止MySQL服务器。可以使用以下命令停止MySQL服务器:
  1. $ sudo service mysql stop
  1. 准备备份文件
    在解压缩备份文件后,需要使用innobackupex工具进行备份文件的准备。该工具会将备份文件的所有InnoDB表空间还原到指定的目录。可以使用以下命令准备备份文件:
  1. $ innobackupex --apply-log /path/to/backup/directory
  1. 恢复备份
    一旦备份文件准备好,可以使用innobackupex工具将备份还原到MySQL服务器中。可以使用以下命令恢复备份:
  1. $ innobackupex --copy-back /path/to/backup/directory
  1. 更改文件权限
    在备份还原完成后,需要更改数据目录的权限,以便MySQL服务器可以访问它。可以使用以下命令更改目录权限:
  1. $ sudo chown -R mysql:mysql /var/lib/mysql
  1. 启动MySQL服务
    最后,需要启动MySQL服务器并验证是否已成功还原备份。可以使用以下命令启动MySQL服务器:
  1. $ sudo service mysql start

FAQ

问题: _resource_request_log占用磁盘太大
问题Fix:

  1. 1. 数据清理: 定时任务清理 _resource_request_log历史数据
  2. 2. 减少新增数据: jianghuConfig: { ignoreListOfResourceRequestLog: [
  3. 'allPage.getConstantList', 'allPage.httpUploadByStream', 'allPage.httpUploadByBase64', 'allPage.httpDownloadByBase64',
  4. 'socket.disconnect', 'socket.connect', 'index.pingRecord', 'chat.getGroupInfo',
  5. 'allPage.getUserGroupRoleList', 'allPage.userInfo', 'chat.getMessageHistory'
  6. ]}
  7. 3. 优化表空间: 将`optimize table _resource_request_log;` 添加到 定时任务中