mysqldump备份数据库脚本编写

本文介绍了如何通过mysqldump备份MySQL数据库,包括执行备份命令、将备份文件从远程服务器传输到本地,以及编写一个shell脚本自动化这个过程。脚本中涉及到了SSH私钥、数据库用户信息和文件传输操作。

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

需求背景

为了防止mysql数据因为各种意外情况导致数据丢失,定期对数据库做个备份还是非常有必要的。本文记录一下mysql的备份过程以及通过AI聊天助手写出一个备份数据库的shell脚本。

备份步骤

通过mysqldump -uroot -p[数据库密码] [数据库名称] > [sql文件保存地址], 前提是要已经安装好mysqldump这个命令。
导出的sql文件包含了该数据库的所有表结构和表里的数据。

1. 执行mysqldump命令

我这里是登录远程服务器执行,也可以在本地执行,加上-h[服务器ip地址]就行,我由于本地电脑没有mysqldump,就直接登录服务器执行了

mysqldump -uroot -p123456 myblog > /data/bak/mysql/myblog_bak_20231107.sql
2. 将导出的sql文件传回本地,

为了防止服务器文件丢失,最好将sql文件传回来。在本地电脑执行以下命令

scp -i ${ssh_key} ${user}@${remote_ip}:/data/bak/mysql/nblog_bak_${date}.sql ${local_backup_dir}

其中scp命令专门用于与远程服务器传输文件,格式如下

scp [待传输的文件地址] [需要传输至的目的地]

# 例如,将远程服务器的/data/files/abc.txt文件传输回本地的/Users/apple/Documents/文件夹
scp root@xxx.xx.xx.xxx:/data/files/abc.txt /Users/apple/Documents/

# 将本地的/Users/apple/Documents/a.png文件传输至远程服务器的/data/tmp/文件夹
scp /Users/apple/Documents/a.png root@xxx.xx.xx.xxx:/data/tmp/

# 上述操作均需要输入远程服务器的登录密码,如果想使用rsa私钥的话,可以加上-i [id_rsa文件地址]
scp -i ~/.ssh/aliyun/id_rsa Users/apple/Documents/a.png root@xxx.xx.xx.xxx:/data/tmp/

# 如果要传输文件夹,加上-r即可
scp -r -i ~/.ssh/aliyun/id_rsa /Users/apple/Documents/testdir/ root@xxx.xx.xx.xxx:/data/tmp/

到此为至,数据库文件已经安全地备份到我们自己的电脑上了。接下去如果某天服务器直接没了,想要恢复数据库,继续看下面步骤

3. 恢复数据库
#登录正常的mysql的服务器,执行以下命令
mysql -uroot -p123456 myblog < /data/bak/mysql/myblog_bak_20231107.sql

这样就恢复好了

写成shell脚本

为了方便每次备份的时候可以直接点一下执行按钮就自动备份好,写一个shell脚本是很有必要的。由于不太熟悉shell脚本,让AI聊天助手帮我写一下吧,下面是脚本。

提示:下面的各种变量自行替换···

#!/bin/bash

# 远程服务器IP地址
remote_ip="xxx.xx.xx.xxx"
# SSH私钥路径
ssh_key="/Users/apple/.ssh/aliyun/id_rsa"
#服务器登录用户名
user="serveruser"
# 远程服务器数据库用户名和密码
db_user="dbuser"
db_password="12345678"
# 本地保存备份文件的文件夹路径
local_backup_dir="/Users/apple/Documents/bak/mysql/"
# 当前日期(用于sql文件名生成)
date=$(date +"%Y%m%d")
echo "连接远程服务器 ${remote_ip} ..."
ssh -i ${ssh_key} ${user}@${remote_ip} <<EOF
echo "开始导出数据库 ..."
mysqldump -u ${db_user} -p${db_password} myblog > /data/bak/mysql/myblog_bak_${date}.sql
if [ $? -ne 0 ]; then
    echo "数据库导出失败"
    exit 1
else
    echo "数据库导出成功"
fi
EOF
# 判断数据库是否导出成功
if [ $? -ne 0 ]; then
    echo "数据库导出失败,文件传输操作已终止"
    exit 1
fi
echo "开始传输文件 ..."
scp -i ${ssh_key} ${user}@${remote_ip}:/data/bak/mysql/nblog_bak_${date}.sql ${local_backup_dir}
if [ $? -ne 0 ]; then
    echo "文件传输失败"
    exit 1
else
    echo "文件传输成功"
fi

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值