CentOS MySQL 备份
在CentOS上备份MySQL数据库是一个非常重要的任务,以确保数据的安全性和可恢复性,本文将详细介绍如何在CentOS上使用不同工具进行MySQL数据库的备份与恢复,包括逻辑备份和物理备份的方法。
准备工作
1、准备环境:确保两台centos7虚拟机配置好IP地址和主机名,并同步系统时间,关闭防火墙和SELinux以避免干扰。
2、安装MySQL数据库:在两台机器上分别安装MySQL数据库,例如版本8.0.17。
3、创建测试数据库:在主节点(master)上创建一个名为test_db
的数据库并添加一些数据。
逻辑备份与恢复
1、使用mysqldump工具
优点:支持热备份和增量备份,需要磁盘空间小。
缺点:业务影响大,停机时间长。
适用场景:当数据量较小且没有大量磁盘空间存储备份数据时。
2、全量备份:使用以下命令进行全量备份:
```bash
mysqldump uroot p test_db > /tmp/a.sql
```
将生成的SQL文件传输到备份节点(bak):
```bash
scp /tmp/a.sql root@192.168.29.138:/tmp/
```
3、恢复数据:在备份节点上创建相同的数据库并导入数据:
```sql
mysql> create database test_db;
mysql> use test_db;
mysql> source /tmp/a.sql
```
检查恢复情况:
```sql
mysql> select * from test;
```
物理备份与恢复
1、使用xtrabackup工具
优点:支持热备份和增量备份,业务影响小,停机时间短。
缺点:所需磁盘空间大。
适用场景:当数据量大且对业务影响要尽量小时。
2、安装xtrabackup:在主节点上安装xtrabackup工具:
```bash
yum install epel y
yum install xtrabackup y
```
3、全量备份:执行以下命令进行全量备份:
```bash
xtrabackup backup user='root' password='your_password' targetdir=/backup/full
```
将备份目录传输到备份节点:
```bash
scp r /backup/full/ root@192.168.29.138:/tmp/
```
4、恢复数据:在备份节点上清理datadir并恢复数据:
```bash
rm rf /var/lib/mysql/
xtrabackup copyback targetdir=/tmp/full/ datadir=/var/lib/mysql/
chown R mysql.mysql /var/lib/mysql
systemctl restart mysqld
```
检查恢复结果:
```sql
mysql> select * from test_db.test;
```
5、增量备份:在主节点上添加一些数据后,执行增量备份:
```bash
xtrabackup backup user='root' password='your_password' targetdir=/backup/inc1/ incrementalbasedir=/backup/full/
```
将增量备份目录传输到备份节点:
```bash
scp r /backup/inc1/ root@192.168.29.138:/tmp/
```
6、恢复增量备份:在备份节点上清理datadir并恢复全量备份:
```bash
xtrabackup prepare applylogonly targetdir=/tmp/full/
xtrabackup prepare targetdir=/tmp/full/ incrementaldir=/tmp/inc1/
xtrabackup copyback targetdir=/tmp/full/ datadir=/var/lib/mysql/
chown R mysql.mysql /var/lib/mysql
systemctl restart mysqld
```
检查恢复结果:
```sql
mysql> select * from test_db.test;
```
自动备份脚本编写
1、创建脚本:编写一个shell脚本来实现每日自动备份,创建一个名为backup.sh
的脚本:
```bash
#!/bin/bash
mkdir p /usr/local/mysqlDataBackup
MYSQL_USER="root"
MYSQL_PWD="your_password"
DATA="date +%F
"
DBname="test_db"
MYSQL_CMD="/usr/bin/mysqldump"
rm rf /usr/local/mysqlDataBackup/*_${DATA}.sql.gz
${MYSQL_CMD} u${MYSQL_USER} p${MYSQL_PWD} compact B ${DBname} | gzip > /usr/local/mysqlDataBackup/${DBname}_${DATA}.sql.gz
```
2、设置crontab:编辑crontab文件以每天凌晨1点执行备份脚本:
```bash
crontab e
0 1 * * * /path/to/backup.sh
```
3、验证脚本:确保脚本有执行权限并能够成功运行:
```bash
chmod +x /path/to/backup.sh
sh /path/to/backup.sh
ls /usr/local/mysqlDataBackup/
```
常见问题解答(FAQs)
问题1:如何选择合适的备份策略?
答:选择备份策略时应考虑数据量大小、业务停机时间和可用磁盘空间,如果数据量大且业务停机时间要求较短,建议使用xtrabackup进行物理备份;如果数据量小且磁盘空间有限,可以选择使用mysqldump进行逻辑备份。
问题2:如何确保备份数据的完整性和一致性?
答:为确保备份数据的完整性和一致性,可以定期进行全量备份和增量备份,开启二进制日志功能并进行实时监控,确保每次备份的数据都是最新的,对于重要数据,可以在备份后进行数据校验,以确保数据未被损坏或篡改。