Linux下定时自动备份远程主机mysql数据库并拷贝到其他主机

该文章详细介绍了如何在CentOS6.5环境下,通过脚本设置每日凌晨3点自动从远程主机A备份MySQL数据库到主机B,并进一步将备份文件传输到异地备份服务器C。整个过程涉及到mysqldump、SCP命令、SSH密钥对的配置以及使用cron任务进行定时执行。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

环境:

            操作系统CentOS6.5、mysql5.1

            主数据库服务器(A)、备数据库服务器(B)、异地备份服务器(C)

            主、备数据库服务器的mysql数据库完全一致,异地备份服务器用于存储备份文件。

实施方案:在主机B建立计划任务,每天凌晨3:00自动定时备份主机A的数据库到主机B,备份文件从主机B拷贝至主机C存储,再删除主机B的数据库备份文件。

实施步骤:

1)在主机B的目录 /usr/local/bin 下新建脚本文件dbbak.sh,实现功能逻辑:

#!/bin/bash
#这是一个简单的mysql数据库逻辑备份脚本
#1.定义数据库连接、目标库信息
MY_USER="这里是主机A的mysql数据库的用户"
MY_PASS="  这里是主机A的mysql数据库的密码 "
MY_HOST="192.168.1.X"     #这里是主机A的IP
MY_CONN="-u $MY_USER -p$MY_PASS -h $MY_HOST"
MY_DB1

<think>我们根据用户需求,需要配置Linux下的MySQL定时备份任务。主要步骤包括: 1. 创建备份脚本(如backup.sh) 2. 赋予脚本执行权限 3. 使用crontab设置定时任务 参考多个引用,我们可以综合一个比较完善的备份脚本,设置定时任务。 步骤1:创建备份脚本 我们可以参考引用[1][3][4][5]中的脚本,结合用户需求,创建一个脚本。注意以下几点: - 指定备份目录 - 设置MySQL连接参数(用户名、密码、socket等) - 可以备份多个数据库(如引用[1])或单个数据库(如引用[4]) - 添加日期时间到备份文件名 - 可选的压缩和删除旧备份功能(如引用[3]) 这里我们创建一个支持多个数据库备份压缩备份文件的脚本。 假设我们在/home目录下创建backup.sh,内容如下: ```bash #!/bin/bash # MySQL连接参数 MYSQL_USER="root" # 替换为你的MySQL用户名 MYSQL_PASSWORD="your_password" # 替换为你的MySQL密码 MYSQL_SOCKET="/var/run/mysqld/mysqld.sock" # 根据你的MySQL配置修改,如果不使用socket连接可以去掉相关参数 # 备份目录 BACKUP_DIR="/data/backups/mysql" # 需要备份数据库列表,多个数据库用空格分隔 DATABASES=("database1" "database2") # 当前日期时间,用于文件名 CURRENT_DATETIME=$(date +%Y%m%d%H%M%S) # 创建备份目录(如果不存在) mkdir -p $BACKUP_DIR echo "开始备份,时间: $CURRENT_DATETIME" # 循环备份每个数据库 for DB_NAME in "${DATABASES[@]}" do # 定义备份文件名(包含路径) BACKUP_FILE="$BACKUP_DIR/${DB_NAME}_${CURRENT_DATETIME}.sql" # 使用mysqldump备份数据库 # 注意:如果不需要指定socket,可以去掉--socket参数 mysqldump -u$MYSQL_USER -p$MYSQL_PASSWORD --socket=$MYSQL_SOCKET --single-transaction --routines --triggers --events $DB_NAME > $BACKUP_FILE # 检查备份是否成功 if [ $? -eq 0 ]; then echo "数据库 $DB_NAME 备份成功: $BACKUP_FILE" # 压缩备份文件(可选) gzip $BACKUP_FILE echo "已压缩备份文件: $BACKUP_FILE.gz" else echo "数据库 $DB_NAME 备份失败" fi done # 删除旧备份(例如保留7天) # 查找备份目录下7天以前(按天计算)的备份文件删除 find $BACKUP_DIR -type f -name "*.sql.gz" -mtime +7 -exec rm -f {} \; echo "备份完成" ``` 注意:请根据实际情况修改以下参数: - MYSQL_USER, MYSQL_PASSWORD: 数据库用户名和密码 - MYSQL_SOCKET: 如果MySQL是通过TCP连接,可以去掉--socket参数,或者使用-h指定主机 - BACKUP_DIR: 备份存放目录 - DATABASES: 需要备份数据库名称数组 步骤2:赋予脚本执行权限 在终端执行: ```bash chmod +x /home/backup.sh ``` 步骤3:设置定时任务 使用crontab设置定时任务,比如每天凌晨1点执行备份(参考引用[2])。 编辑当前用户的crontab: ```bash crontab -e ``` 在打开的文件中添加一行(注意脚本路径): ``` 0 1 * * * /home/backup.sh > /home/backup.log 2>&1 ``` 这表示每天凌晨1点执行备份将输出(包括错误输出)重定向到/home/backup.log文件中。 保存退出。 步骤4:检查定时任务 使用命令查看定时任务列表: ```bash crontab -l ``` 安全建议: 1. 备份脚本中包含了数据库密码,因此要确保备份目录和脚本文件只有授权用户可访问(例如设置700权限)。 2. 可以考虑使用专用备份用户(如引用[5]),赋予最小权限(SELECT, LOCK TABLES, SHOW VIEW等)。 引用[5]中提供了创建备份用户的SQL语句: ```sql CREATE USER 'mysqldump'@'localhost' IDENTIFIED BY 'strong_password'; GRANT SELECT, LOCK TABLES, SHOW VIEW, PROCESS ON *.* TO 'mysqldump'@'localhost'; FLUSH PRIVILEGES; ``` 然后在脚本中使用这个专用用户进行备份。 这样,我们就配置好了Linux定时自动备份MySQL数据库的任务。 相关问题: 1. 如何验证MySQL备份文件的有效性? 2. 除了mysqldump,还有哪些MySQL备份方式? 3. 如何将备份文件自动上传到远程服务器或云存储?</think>### Linux下配置MySQL数据库定时自动备份教程 #### 步骤1:创建备份脚本 在服务器上创建备份脚本(如`/home/backup.sh`),内容如下: ```bash #!/bin/bash # MySQL连接配置 MYSQL_USER="backup_user" # 替换为备份专用用户 MYSQL_PASSWORD="your_password" # 替换为实际密码 MYSQL_SOCKET="/var/run/mysqld/mysqld.sock" # 根据实际路径修改 # 备份目录配置 BACKUP_DIR="/data/mysql_backups" DATE=$(date +%Y%m%d%H%M) # 格式:年月日时分 DATABASES=("db1" "db2") # 需要备份数据库列表 # 创建备份目录 mkdir -p $BACKUP_DIR echo "★ 备份开始 [$DATE] ★" for DB in ${DATABASES[@]}; do BACKUP_FILE="$BACKUP_DIR/${DB}_${DATE}.sql.gz" mysqldump -u$MYSQL_USER -p$MYSQL_PASSWORD --socket=$MYSQL_SOCKET \ --single-transaction --routines --triggers $DB | gzip > $BACKUP_FILE echo "数据库 $DB → $BACKUP_FILE" done # 删除7天前的旧备份 find $BACKUP_DIR -name "*.sql.gz" -mtime +7 -exec rm -f {} \; echo "★ 备份完成 ★" ``` > **关键参数说明**: > - `--single-transaction`:保证备份一致性 > - `--routines --triggers`:备份存储过程和触发器 > - `gzip`:压缩备份文件节省空间 > - `-mtime +7`:自动清理7天前的旧备份[^3][^5] #### 步骤2:配置备份专用用户(推荐) ```sql -- 创建专用备份用户 CREATE USER 'backup_user'@'localhost' IDENTIFIED BY 'your_password'; GRANT SELECT, LOCK TABLES, SHOW VIEW, PROCESS ON *.* TO 'backup_user'@'localhost'; FLUSH PRIVILEGES; ``` > **权限说明**:仅授予备份所需的最小权限[^5] #### 步骤3:设置脚本权限 ```bash chmod +x /home/backup.sh # 添加执行权限 chmod 700 /home/backup.sh # 限制访问权限 ``` #### 步骤4:配置定时任务 1. 编辑crontab: ```bash crontab -e ``` 2. 添加定时任务(每天凌晨2点执行): ```bash 0 2 * * * /home/backup.sh >> /var/log/mysql_backup.log 2>&1 ``` 3. 查看任务列表: ```bash crontab -l # 应显示添加的任务[^2] ``` #### 步骤5:验证备份 1. 手动测试脚本: ```bash /home/backup.sh ``` 2. 检查备份文件: ```bash ls -lh /data/mysql_backups/ # 输出示例:-rw-r--r-- 1 root root 15M Sep 1 02:00 db1_202309010200.sql.gz ``` ### 常见问题排查 1. **权限错误**: ```bash chown -R mysql:mysql /data/mysql_backups # 确保MySQL用户有写权限 ``` 2. **Socket路径错误**: ```bash find / -name mysql.sock # 查找正确的socket路径 ``` 3. **备份文件为空**: - 检查用户密码是否正确 - 验证`mysqldump`命令能否手动执行 ### 备份策略优化建议 1. **异地备份**:使用`rsync`或`scp`同步到远程服务器 2. **增量备份**:结合`binlog`实现增量备份 3. **通知机制**:添加邮件通知脚本执行结果
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值