数据库备份之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版本
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
yum localinstall percona-xtrabackup-24-2.4.4-1.el7.x86_64.rpm
配置定时备份
- 将xtrabackup.sh上次至服务器
/www/backup/xtrabackup.sh
#!/bin/bash
timestamp=$(date +%Y%m%d_%H%M%S)
rm -rf /www/backup/xtrabackup_data/
mkdir -p /www/backup/xtrabackup_data
xtrabackup --backup --user=root --port=3306 --password=123456 --target-dir=/www/backup/xtrabackup_data &>> /www/wwwlogs/xtrabackup.log
mkdir -p /www/backup/xtrabackup_data_history
zip -r /www/backup/xtrabackup_data_history/xtrabackup_data_$timestamp.zip /www/backup/xtrabackup_data
echo " backup file output====> /www/backup/xtrabackup_data_history/xtrabackup_data_$timestamp.zip"
- 使用Linux 的 Crontab 配置 每天凌晨1点 运行
/www/backup/xtrabackup.sh
使用 xtrabackup 备份的文件进行恢复
- 解压备份文件
首先,需要解压Xtrabackup备份文件。通常,备份文件是.tar或.tar.gz格式的归档文件。您可以使用tar命令解压缩备份文件:
$ tar -xvf backup.tar.gz
- 停止MySQL服务
在恢复备份之前,需要停止MySQL服务器。可以使用以下命令停止MySQL服务器:
$ sudo service mysql stop
- 准备备份文件
在解压缩备份文件后,需要使用innobackupex工具进行备份文件的准备。该工具会将备份文件的所有InnoDB表空间还原到指定的目录。可以使用以下命令准备备份文件:
$ innobackupex --apply-log /path/to/backup/directory
- 恢复备份
一旦备份文件准备好,可以使用innobackupex工具将备份还原到MySQL服务器中。可以使用以下命令恢复备份:
$ innobackupex --copy-back /path/to/backup/directory
- 更改文件权限
在备份还原完成后,需要更改数据目录的权限,以便MySQL服务器可以访问它。可以使用以下命令更改目录权限:
$ sudo chown -R mysql:mysql /var/lib/mysql
- 启动MySQL服务
最后,需要启动MySQL服务器并验证是否已成功还原备份。可以使用以下命令启动MySQL服务器:
$ sudo service mysql start
FAQ
问题: _resource_request_log占用磁盘太大
问题Fix:
1. 数据清理: 定时任务清理 _resource_request_log历史数据
2. 减少新增数据: jianghuConfig: { ignoreListOfResourceRequestLog: [
'allPage.getConstantList', 'allPage.httpUploadByStream', 'allPage.httpUploadByBase64', 'allPage.httpDownloadByBase64',
'socket.disconnect', 'socket.connect', 'index.pingRecord', 'chat.getGroupInfo',
'allPage.getUserGroupRoleList', 'allPage.userInfo', 'chat.getMessageHistory'
]}
3. 优化表空间: 将`optimize table _resource_request_log;` 添加到 定时任务中