? ? ? ??对于存在多个应用的数据库服务器,备份工作可能会划分得比较细,需要针对不同的库和表、
不同的备份路径使用不同的验证用户等。
> 备份主机:IP地址为 172.16.16.220,通过机柜内网络连接目标主机。
> 数据库服务器:IP地址为172.16.16.22,MySQL服务监听的端口为3306。
> 备份内容:对MySQL服务器中的 studydb,coursedb库进行远程备份,每天凌晨2:30执行。
> 每个库备份为独立的.sql 文件,然后压缩为“.tar.gz”格式,文件名中嵌入执行备份时的日期和时刻。
? ? ? ? 为了顺利完成上述备份方案,首先需要做两个工作:其一:确保备份主机与数据库服务器之间保持连接畅通,不能有网络链路故障,防火墙封锁等阻碍;其二:MySQL服务必须允许从备份主键远程访问,且授权用户能够查询studydb、coursedb库
????????针对本案例的情况,可以创建一个专用的数据库备份账户 operator,允许从备份主机172.16.16.200连接到MySQL数据库,并授予对studydb、coursedb库的读取权限。使用逻辑备份工具 mysqldump时,需要对库设置SELECT 和LOCK TABLES 权限。
mysql> create database studydb;
mysql> create database coursedb;
mysql> grant select,lock tables on studydb.* to 'operator'@'localhost' identified by 'pwd123';
mysql> grant select,lock tables on coursedb.* to 'operator'@'localhost' identified by 'pwd123';
? ? ? ? 从备份主机中测试数据库访问、查询授权等是否有效,或者直接使用mysqldump备份工具进行测试。
[root@yang mysqlbackup]# mysqldump -u operator -p -h localhost --databases studydb > test.sql
Enter password:
????????在备份主机中,创建用来存放备份文件的目录(如/opt/qnzx_dbbak),并编写相应的备份脚本(如
qnzx_dbbak.sh), 确认能够成功执行备份。脚本代码中,对于目标主机的IP地址、用户名、密码、备份路径、文件名等信息,可能会在必要的时候变更。为了方便更新脚本,这些内容最好存放到固定
名称的变量中。(因为在命令行界面上使用密码可能不安全,所以-p不需要指定密码变量)
[root@yang ~]# mkdir -p /opt/qnzx_dbbak/
[root@yang ~]# vim qnzx_dbbak.sh
#!/bin/bash
# 这是一个简化的MySQL数据库逻辑备份脚本
# 1.定义数据库连接、目标库信息
MY_USER="operator"
MY_PASS="pwd123"
MY_HOST="localhost"
MY_CONN="-u $MY_USER -p -h $MY_HOST"
MY_DB1="studydb"
MY_DB2="coursedb"
# 2.定义备份目录、工具、时间、文件名主体
BF_DIR="/opt/qnzx_dbbak/"
BF_CMD="/usr/local/mysql/bin/mysqldump"
BF_TIME=`date +%Y%m%d-%H%M`
NAME_1="$MY_DB1-$BF_TIME"
NAME_2="$MY_DB2-$BF_TIME"
# 3.先导出为.sql脚本,然后进行压缩(打包后删除源文件)
cd $BF_DIR
$BF_CMD $MY_CONN --databases $MY_DB1 > $NAME_1.sql
$BF_CMD $MY_CONN --databases $MY_DB2 > $NAME_2.sql
/bin/tar zcf $NAME_1.tar.gz $NAME_1.sql --remove &> /dev/null
/bin/tar zcf $NAME_2.tar.gz $NAME_2.sql --remove &> /dev/null
[root@yang ~]# chmod +x qnzx_dbbak.sh //添加执行权限
[root@yang ~]# ./qnzx_dbbak.sh //手动执行备份脚本
[root@yang ~]# ll /opt/qnzx_dbbak/
总用量 8
-rw-r--r-- 1 root root 622 12月 18 16:20 coursedb-20231218-1620.tar.gz
-rw-r--r-- 1 root root 621 12月 18 16:20 studydb-20231218-1620.tar.gz
? ? ? ? 有了批量备份的Shell脚本以后,接下来可按照备份要求设置计划任务,以便自动、定期执行备
份操作。在crontab配置记录中,直接指定qnzx_dbbak.sh脚本程序的路径作为执行命令。
[root@yang ~]# mv qnzx_dbbak.sh /opt/qnzx_dbbak/
[root@yang ~]# crontab -e
30 16 * * * /opt/qnzx_dbbak/qnzx_dbbak.sh
[root@yang ~]# systemctl status crond //确保crond服务已运行
● crond.service - Command Scheduler
Loaded: loaded (/usr/lib/systemd/system/crond.service; enabled; vendor preset: enabled)
Active: active (running) since 一 2023-12-18 14:57:13 CST; 1h 31min ago
Main PID: 9294 (crond)
Tasks: 1
CGroup: /system.slice/crond.service
└─9294 /usr/sbin/crond -n
12月 18 14:57:13 yang systemd[1]: Started Command Scheduler.
12月 18 14:57:13 yang crond[9294]: (CRON) INFO (RANDOM_DELAY will be scaled with factor 40% if used.)
12月 18 14:57:13 yang crond[9294]: (CRON) INFO (running with inotify support)
可以看到在16:30分时进行了备份操作?
[root@yang ~]# ll /opt/qnzx_dbbak/
总用量 20
-rw-r--r-- 1 root root 622 12月 18 16:20 coursedb-20231218-1620.tar.gz
-rw-r--r-- 1 root root 126 12月 18 16:30 coursedb-20231218-1630.tar.gz
-rwxr-xr-x 1 root root 764 12月 18 16:20 qnzx_dbbak.sh
-rw-r--r-- 1 root root 621 12月 18 16:20 studydb-20231218-1620.tar.gz
-rw-r--r-- 1 root root 126 12月 18 16:30 studydb-20231218-1630.tar.gz