前言
异地服务器备份Mysql数据即Mysql的server端与备份服务器不是同一个。Mysql服务端安装在192.168.3.36中,现在需要在IP为192.168.209.129的服务器中使用mysqldump命令备份指定数据库数据;192.168.209.129没有装过Mysql客户端;
1.安装Mysql客户端
不安装Mysql客户端就使用不了mysqldump命令
Ubuntu/Debian:
sudo apt-get install mysql-client
2.创建用于备份数据的Mysql用户
#创建用户backupUser 密码 123456
CREATE USER backupUser IDENTIFIED BY '123456';
#把所有权限赋予backupUser
GRANT SELECT,PROCESS,REPLICATION SLAVE, REPLICATION CLIENT,SUPER ON *.* TO 'backupUser'@'%';
#刷新权限
flush privileges
3.创建数据备份脚本
创建脚本文件
touch mysql_backup.sh
脚本文件内容
#!/bin/bash
# MySQL数据库备份脚本# 配置参数
DB_USER="backupUser" # 数据库用户名(不建议直接写到备份脚本文件中)
DB_PASSWORD="123456" # 数据库密码(不建议直接写到备份脚本文件中)
# 要备份的数据库名(多个数据库用空格分隔)
DB_NAMES=("heima" "finereport")
DB_IP="192.168.3.36"
DB_PORT="3306"
BACKUP_DIR="/home/software/mysqlbackups/data" # 备份文件存储目录
BACKUP_LOG_DIR="/home/software/mysqlbackups/logs" # 备份日志存储目录
DATE=$(date +"%Y%m%d_%H%M%S") # 当前日期时间
DAYS_TO_KEEP=3 # 保留最近多少天的备份# 创建备份目录(如果不存在)
mkdir -p ${BACKUP_DIR}
# 创建备份日志目录(如果不存在)
mkdir -p ${BACKUP_LOG_DIR}for DB_NAME in "${DB_NAMES[@]}"
do# 备份文件名BACKUP_FILE="${BACKUP_DIR}/${DB_NAME}_${DATE}.sql"# 使用mysqldump备份数据库# 如果是多个数据库 这里备份 heima finereport这两个数据库。多个数据库间使用空格分隔# --single-transaction: 对 InnoDB 表进行一致性备份# --routines: 包含存储过程和函数# --events: 包含事件# --triggers: 包含触发器mysqldump -h${DB_IP} -P${DB_PORT} -u${DB_USER} -p${DB_PASSWORD} --single-transaction --routines --triggers --databases ${DB_NAME} > ${BACKUP_FILE}# 压缩备份文件(可选)gzip ${BACKUP_FILE}BACKUP_FILE="${BACKUP_FILE}.gz"# 检查备份是否成功(记录日志)if [ $? -eq 0 ]; thenecho "[${DATE}] 数据库备份成功: ${BACKUP_FILE}" >> ${BACKUP_LOG_DIR}/mysqldump.logelseecho "[${DATE}] 数据库备份失败!" >> ${BACKUP_LOG_DIR}/mysqldump.logfi# 删除旧备份(不管备份成功或失败都会执行删除以前备份旧数据)find ${BACKUP_DIR} -name "${DB_NAME}_*.sql.gz" -type f -mtime +${DAYS_TO_KEEP} -delete
done
4.为脚本文件赋予可执行权限
chmod 647 mysql_backup.sh
5.执行脚本文件查看效果
1.执行脚本
./mysql_backup.sh
2.查看备份执行日志
vim /home/software/mysqlbackups/logs/mysqldump.log
3.查看数据备份文件
库finereport备份文件
vim /home/software/mysqlbackups/data/finereport_20250722_145713.sql.gz
库heima备份文件
vim /home/software/mysqlbackups/data/heima_20250722_145713.sql.gz
至此定义的脚本文件已具备备份数据库的能力。现需要和Linux系统中自带的定时任务结合起来用于定时做数据库备份;
6.配置Cron定时任务
1.打开crontab编辑器
crontab -e
2.添加以下调度任务(二选一)
每分钟执行一次调度(用于测试调度是否生效)
# 用于测试调度是否生效(每分钟执行一次调度 进行数据库备份)
* * * * * /home/software/mysqlbackups/mysql_backup.sh
每天凌晨2点执行一次调度
# 每天凌晨2点执行一次调度
0 2 * * * /home/software/mysqlbackups/mysql_backup.sh
3.退出crontab编辑器
ctrl + x退出crontab编辑器,保存退出后调度自行生效;
4.验证调度是否生效
已配置Linux定时调度查看数据库备份日志是否间隔1分钟左右输出一次日志即可;
备份日志间隔1分钟左右输出一次
数据文件也是间隔1分钟左右生成一个
至此使用mysqldump命令定时备份数据库数据已完成,需要注意的是合理设置数据库备份时间因为在生产数据库中数据量都很大。在选择备份时一般选择到凌晨、数据库访问压力小的时间去做数据备份;