文章目录
一、MySQL数据备份
Linux环境:Ubuntu 20.04.6,MySQL版本:8.2,在服务器端操作
1. MySQL客户端
mkdir -p /home/backup/mysql && cd /home/backup/mysql
mkdir day && mkdir week
sudo apt install mysql-client-core-8.0 # 备份需要
sudo apt install mysql-server-core-8.0 # 日志还原需要
- 查询MySQL版本信息
mysqladmin -h127.0.0.1 -P3306 -uroot -p123456 version
- 登录、查询log_bin是否开启(ON)、查询当前使用日志
mysql -h127.0.0.1 -P3306 -uroot -p123456
mysql> show variables like 'log_bin';
mysql> show master status;
2. 数据增量备份
- backup.sh
#!/bin/bash
backupDir=/home/backup/mysql/day # 增量备份目录
backupLogFile=$backupDir/backup.log # 增量备份日志
mysqlDir=/home/mysql/data # mysql-bin.*日志存放目录
binFile=/home/mysql/data/mysql-bin.index # mysql-bin.index位置
mysqladmin -h127.0.0.1 -P3306 -uroot -p123456 flush-logs
echo `` >> $backupLogFile
echo `date +"%Y-%m-%d %H:%M:%S"` backup >> $backupLogFile
count=`wc -l $binFile |awk '{print $1}'`
num=0
for file in `cat $binFile`
do
base=`basename $file`
num=`expr $num + 1`
if [ $num -ne $count ] && (! test -e $backupDir/$base)
then
cp $mysqlDir/$base $backupDir
echo $base >> $backupLogFile
fi
done
3. 数据增量还原
- 数据库客户端操作
mysql> flush logs; # 刷新日志
mysql> show binlog events in 'mysql-bin.000023'; # 分析需要还原的日志数据
- Shell环境操作
mysqlbinlog --stop-position=509 mysql-bin.000023 | mysql -h127.0.0.1 -P3306 -uroot -p123456
- 参数说明
--start-position= 起始pos点
--stop-position= 结束pos点
--start-datetime= 起始时间点
--stop-datetime= 结束时间点
-d 指定数据库
4. 数据全量备份
- backupAll.sh
#!/bin/bash
backupDir=/home/backup/mysql/week # 备份目录
backupLogFile=$backupDir/backup.log # 备份日志
dbName=manage # 需要备份的数据库
day=3 # 保留几天的备份
mysqldump -h127.0.0.1 -P3306 -uroot -p123456 --single-transaction $dbName|gzip > $backupDir/$dbName-`date +%Y%m%d%H%M%S`.sql.gz
echo `` >> $backupLogFile
echo "backup $dbName-`date +%Y%m%d%H%M%S`.sql.gz" >> $backupLogFile
find $backupDir -type f -name "$dbName-*" -mtime +$day -exec rm {} \;
5. 数据全量还原
- Shell环境操作
gzip -d 数据库名-20231211121350.sql.gz
mysql -h127.0.0.1 -P3306 -uroot -p123456
mysql> drop database 数据库名;
mysql> create database 数据库名;
mysql> use 数据库名;
mysql> source 数据库名-20231211121350.sql;
二、Minio数据备份
Linux环境:Ubuntu 20.04.6,Minio版本:2023-12-13T23-28-55Z,在服务器端操作
1. Minio客户端
mkdir -p /home/backup/minio && cd /home/backup/minio && mkdir day
wget https://dl.min.io/client/mc/release/linux-amd64/mc
chmod +x mc
- 设置别名、查询桶
./mc alias set minio_backup http://127.0.0.1:9000 admin 123456
./mc ls minio_backup
2. 数据备份
- backup.sh
#!/bin/bash
backupDir=/home/backup/minio/day # 备份目录
backupLogFile=$backupDir/backup.log # 备份日志
bucket=test # 存储桶名称
directory= # 存储桶中的目录, 例如 $(date +%Y%m), 空为桶
day=3 # 保留几天的备份
backupFile=$bucket$directory-$(date +%Y%m%d%H%M%S).tar.gz # 备份文件名
mkdir $backupDir/tmp
/home/backup/minio/mc alias set minio_backup http://127.0.0.1:9000 admin 123456
/home/backup/minio/mc cp --recursive minio_backup/$bucket/$directory $backupDir/tmp
cd $backupDir/tmp
tar -zcf $backupDir/$backupFile *
rm -rf $backupDir/tmp
echo `` >> $backupLogFile
echo "backup $backupFile" >> $backupLogFile
find $backupDir -type f -name "$bucket$directory-*" -mtime +$day -exec rm {} \;
3. 数据还原
tar -xzvf 备份文件.tar.gz -C 数据文件夹
/home/backup/minio/mc cp --recursive 数据文件夹 minio_backup/桶或目录
三、其他参考
1. 设置定时备份
- /etc/crontab
0 1 * * * root bash /home/backup/minio/backup.sh # 每天1点执行
0 2 * * * root bash /home/backup/mysql/backup.sh # 每天2点执行
0 3 ** 1 root bash /home/backup/mysql/backupAll.sh # 每周一3点执行
0 4 * * * root bash /home/backup/copyData.sh # 每天4点执行
- 使crontab生效
crontab /etc/crontab
2. 数据拷贝到其他服务器
- 安装expect, 自动输入密码
sudo apt install expect
- copyData.sh
#!/usr/bin/expect
# 只传输变化部分、支持断点续传、同步服务器都需要安装rsync
set timeout -1
spawn rsync -auxvLP -e "ssh -p 22" /home/backup root@192.168.6.213:/home/
expect "*password*"
send "密码\r"
expect eof
- 执行
expect copyData.sh
3. MySQL其他语句
show variables like 'long_query_time'; # 慢查询时间阈值
show variables like '%slow_query_log%'; # 慢查询是否开启
show global status like '%Slow_queries%' # 查询慢查询记录条数
# 记录集最多的10个SQL
mysqldumpslow -s r -t 10 /home/mysql/data/0be775e9b5ed-slow.log | more
# 访问次数最多的10个SQL
mysqldumpslow -s c -t 10 /home/mysql/data/0be775e9b5ed-slow.log | more
# 时间排序的前10个SQL
mysqldumpslow -s t -t 10 /home/mysql/data/0be775e9b5ed-slow.log | more