目录
一、前言
此处假设有两台服务器,A服务器上安装了mysql服务,B服务器则为异地服务器。
目的:将A服务器上的mysql数据,异地备份到B服务器上存储。
注:下述所有操作都是在B服务器
上执行
二、安装mysql
安装mysql8客户端
bash
[root@VM-4-12-centos ~]# sudo rpm -Uvh http://dev.mysql.com/get/mysql80-community-release-el7-8.noarch.rpm
[root@VM-4-12-centos ~]# sudo yum install mysql-community-client --nogpgcheck -y
[root@VM-4-12-centos ~]# mysqldump --version
mysqldump Ver 8.0.40 for Linux on x86_64 (MySQL Community Server - GPL)
测试备份数据
bash
[root@VM-4-12-centos ~] mkdir -p /data/mysql_bak && cd /data/mysql_bak
[root@VM-4-12-centos mysql_bak] mysqldump -h ip地址 -P 端口号 -u 用户名 -p密码 --databases 备份数据库名 > ./backup.sql
-h A服务器的IP地址
:指定MySQL服务器的位置,即A服务器的IP地址。
-P 端口号
:指定MySQL服务器的连接端口号。
-u MySQL用户名
:指定用于连接MySQL的用户名。
-pMySQL密码
:指定该用户的密码。为了安全起见,通常不建议直接在命令行中写明密码,而是运行命令后手动输入密码。
--databases 需要备份的数据库名
:指定要备份的数据库名称。如果你要备份所有数据库,可以使用--all-databases
代替。
> /路径/到/保存/备份文件.sql
:指定备份文件的保存位置及文件名。
三、编写shell脚本
bash
[root@VM-4-12-centos mysql_bak] vim backup.sh
[root@VM-4-12-centos mysql_bak] chmod +x backup.sh
[root@VM-4-12-centos mysql_bak] sh backup.sh
backup.sh内容
bash
#!/bin/bash
# 数据库连接信息
host="ip地址"
port="端口号"
name="用户名"
password="用户密码"
database="数据库名"
# 备份信息
backup_dir="/data/mysql_bak/$database"
backup_time=$(date +"%F_%H-%M-%S")
backup_name="${backup_dir}/${backup_time}"
# 执行备份
echo "【开始备份】数据库:${database},位置:${backup_name}.sql"
mkdir -p "$backup_dir"
/usr/bin/mysqldump -h $host -P $port -u $name -p$password --databases $database > ${backup_name}.sql 2>/dev/null
if [ $? -eq 0 ]; then
echo "【备份完成】数据库:${database},位置:${backup_name}.sql"
else
echo "【备份失败】数据库:${database}"
exit 1
fi
# 压缩备份文件
echo "【开始压缩】源文件:${backup_name}.sql"
/usr/bin/tar zcf ${backup_name}.tar.gz ${backup_name}.sql --remove &> /dev/null
if [ $? -eq 0 ]; then
echo "【压缩完成】文件:${backup_name}.tar.gz"
else
echo "【压缩失败】文件:${backup_name}.sql"
exit 1
fi
# 删除30天以前的备份
find "${backup_dir}" -type f -name "*.tar.gz" -mtime +30 -exec rm -f {} \;
echo "执行完成~"
四、定时任务
设置为每天凌晨3点30分执行一次备份
添加定时任务
bash
[root@VM-4-12-centos mysql_bak]# crontab -e
# 追加如下内容
30 3 * * * /data/mysql_bak/backup.sh
bash
# 查看定时任务列表
[root@VM-4-12-centos mysql_bak]# crontab -l
30 3 * * * /data/mysql_bak/backup.sh
# 查看定时任务日志
[root@VM-4-12-centos mysql_bak]# tail -f /var/log/cron
# 重启crond服务使定时任务生效
[root@VM-4-12-centos mysql_bak]# systemctl restart crond