????????在一些复杂的Linux维护工作中,大量重复性的输入和交互操作不仅费时费力.而且容易出错. 而编写一个恰到好处的Shell脚本程序,可以批量处理,自动化地完成一系列维护任务,大大减轻管 理员的负担。
????????对于存在多个应用的数据库服务器,备份工作可能会划分得比较细,需要针对不同的库和表、 不同的备份路径使用不同的验证用户等,下面以远程备份“青鸟在线”平台的两个论坛数据库为例. 备份环境与需求如下所述。
>备份主机:IP地址为172.16.16.220.通过机柜内网络连接目标主机。
>数据库服务器:IP地址为172.16.16.22.MySQL服务监听的端口为3306。
>备份内容:对MySOL服务器中的studydb.coursedb库进行远程备份.每天凌晨2:30执行. 每个库备份为独立的.sql文件,然后压缩为“.tar.gz格式,文件名中嵌入执行备份时的日期和时刻。
???????? 为了顺利完成上述备份方案,首先需要做两个工作:其一,确保备份主机与数据库服务器之间 保持连接畅通,不能有网络链路故障、防火墙封锁等阻碍;其二,MySQL.服务必须允许从备份主机 远程访问,且授权用户能够查询studydb,coursedb库。
???????? 针对本案例的情况,可以创建一个专用的数据库备份账户operator,允许从备份主机 172.16.16.220连接到MySOL数据库,并授予对studydb.coursedb库的读取权限.使用逻辑备份工 具mysqldump时.需要对库设置SELECT和LOCK TABLES权限。
[root@lgcllc ~]# mysql -u root -p //用root账号登录
Enter password:
mysql> create database studydb;
Query OK, 1 row affected (0.00 sec)
mysql> create database coursedb;
Query OK, 1 row affected (0.00 sec)
mysql> GRANT select,lock tables ON studydb.* TO 'operator'@'172.16.16.220' IDENTIFIED BY 'pwd123';
mysql> GRANT select,lock tables ON coursedb.* TO 'operator'@'172.16.16.220' IDENTIFIED BY 'pwd123';
????????从备份主机中测试数据库访问,查询授权等是否有效,或者直接使用mysqldump备份工具进行 测试。
[root@lgcllc ~]# mysqldump -u operator -ppwd123 -h 172.16.16.22 --databases studydb > test.sql
[root@lgcllc ~]# ls -lh test.sql
-rw-r--r--. 1 root root 0 12月 19 00:11 test.sql
????????在备份主机中,创建用来存放备份文件的目录(如/opt/qnzx_dbbak).并编写相应的备份脚本(如 qnzx_dbbek.sh).确认能够成功执行备份。脚本代码中,对于目标主机的P地址,用户名、密码、备 份路径、文件名等信息,可能会在必要的时候变更,为了方便更新脚本,这些内容最好存放到固定 名称的变量中。
[root@lgcllc ~]# mkdir -p /opt/qnzx_dbbak/ //创建备份目录
[root@lgcllc ~]# vim qnzx_dbbak.sh //编写下列内容
#!/bin/bash
#这是一个简化的MySQL数据库逻辑备份脚本
#1. 定义数据库连接、目标库信息
MY_USER="operator"
MY_PASS="pwd123"
MY_HOST="172.16.16.220"
MY_CONN="-u $MY_USER -p $MY_PASS -h $MY_HOST"
MY_DB1="studydb"
MY_DB2="coursedb"
#2. 定义备份目录、工具、时间、文件名主体
BF_DIR="/opt/qnzx_dbbak/"
BF_CMD="/usr/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_CMB $MY_CONN --databases $MY_DB1 > $NAME_1.sql
$BF_CMB $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@lgcllc ~]# chmod +x qnzx_dbbak.sh //添加执行权限
[root@lgcllc ~]# ./qnzx_dbbak.sh //手动执行备份脚本
[root@lgcllc ~]# ls -lh /opt/qnzx_dbbak/*.gz //确认备份结果
????????当需要备份的数据库发生变化时,只要修改脚本中的相关变量即可,从而使备份脚本具有可重 用,可移植使用的特点,减少了大量重复编码的工作量。