DM8:达梦数据库dexp-DMP逻辑导出按用户模式定时自动备份数据库
环境介绍
- 在某些特殊情况无法使用全库备份,需要按用户备份部分重要的数据表,适合使用dexp逻辑备份
- 若实际配置文件路径,数据库安装路径与博文不符,只需修改dmp.sh脚本中的两处:
dm_conf.txt路径与/home/dmdba/dmdbms/bin 路径
1 编写脚本&配置文件
1.1编写shell脚本备份数据库
vi /home/dmdba/dmp.sh
#!/bin/bash
echo -e '\n\n\n'
time=$(date "+%Y-%m-%d-%H-%M-%S")
echo "开始时间是:"$time
#读取配置文件路径
exec < /home/dmdba/dmp_conf.txt
read dmp_conf
#读取用户名密码
#多个用户中间用空格分开
exec < $dmp_conf/dm_user.txt
read dm_userpwd
#读取ip:port
exec < $dmp_conf/ip_port.txt
read ip_port
#读取备份路径
exec < $dmp_conf/bak_path.txt
read bak_path
#创建备份路径
mkdir -p $bak_path/DATA$time
#linux 中定义一个数据的语法为
var_dm=("$dm_userpwd")
var_count=0
#数组的下标从0开始。
#for遍历
for i in ${var_dm[@]}; do
#获取用户名
dm_user=${i%/*}
echo 备份数据库名称: $dm_user
cd /home/dmdba/dmdbms/bin&&./dexp USERID=$i@$ip_port FILE=$bak_path/DATA$time/$dm_user.dmp LOG=$bak_path/DATA$time/$dm_user.log SCHEMAS=$dm_user CONSTRAINTS=N TABLESPACE=N GRANTS=N TRIGGERS=N COMPRESS=Y >> /dev/null
#过滤不要导出的表
#EXCLUDE=TABLES:A
#打印日志
cat $bak_path/DATA$time/$dm_user.log |grep SCHEMA
cat $bak_path/DATA$time/$dm_user.log |grep 警告
#计数器
var_count=$[$var_count+1]
done
#任务执行完成
echo "------------------------------------------------"
echo "共 "$var_count" 个 数据库用户备份完成"
echo "------------------------------------------------"
echo "开始时间是:"$time
time2=$(date "+%Y-%m-%d-%H-%M-%S")
echo "结束时间是:"$time2
echo -e '\n\n\n'
1.2 编写dm_conf 配置文件
vi /home/dmdba/dm_conf.txt
/home/dmdba/dmp_conf
1.3 编写用户名密码配置文件(用空格分隔多个用户,不能换行)
vi /home/dmdba/dmp_conf/dm_user.txt
SYSDBA/SYSDBASYSDBA DM/SYSDBASYSDBA
1.4 编写ip:port 配置文件
vi /home/dmdba/dmp_conf/ip_port.txt
192.168.248.19:5236
1.5 编写bak_path备份路径配置文件
vi /home/dmdba/dmp_conf/bak_path.txt
/home/dmdba/backup
2 编写linux 定时任务
- 每晚23点 20分开始备份
- 定时任务配置介绍- -点我
#每晚23点 20 分开始执行
[root@localhost backup]$ crontab -e
20 23 * * * cd /home/dmdba;./dmp.sh >> /home/dmdba/dmp.log
[root@localhost backup]$
- 定时任务时间介绍
1.用数值表示 时间信息
00 02 * * * cmd 命令
2.利用特殊符号表示时间信息
* * * * * cmd 命令
/分钟 /小时 /天 /月 /周
=========================================
PS:定时任务最短执行的周期为 每分钟
*/5 */ 6 */3 */1 */2
每隔5分钟 每隔6小时 每隔3日 每隔1月 每隔2周
=========================================
其它 写法:
01-05 02 * * * 每2日的01、02、03、04、05 执行一遍
指定不连续的时间范围:
00 14,20 * * * * 每天14点,20点执行一次
3 执行dmp.sh 脚本输出的日志
[root@localhost backup]$ /home/dmdba/dmp.sh
开始时间是:2022-08-25-18-19-35
备份数据库名称: SYSDBA
成功导出 第1 个SCHEMA :SYSDBA
共导出 1 个SCHEMA
成功终止导出, 没有出现警告
备份数据库名称: DM
成功导出 第1 个SCHEMA :DM
共导出 1 个SCHEMA
成功终止导出, 没有出现警告
------------------------------------------------
共 2 个 数据库用户备份完成
------------------------------------------------
开始时间是:2022-08-25-18-19-35
结束时间是:2022-08-25-18-19-36
[root@localhost backup]$
4 dmp 命令参数介绍
USERID:用户名/MiMa@IP:端口 如果MiMa带特殊字符,双引号外边加一层单引号 '"abc@)16"'
FILE:导出路径
LOG:导出日志
OWNER:导出用户拥有权限的所有数据库对象
SCHEMAS:以哪个模式导出
TRIGGERS:触发器 Y=导出,N=不导出
GRANTS:权限 Y=导出,N=不导出
CONSTRAINTS:约束 Y=导出,N=不导出
TABLESPACE:表空间 默认不导
COMPRESS:压缩导出 Y=压缩,N=不压缩
TABLE_EXISTS_ACTION=TRUNCATE:表如果存在,就删除
REMAP_SCHEMA:源模式:目标模式(假如以A模式导出来的dmp文件,要导入到B模式里,需要用到这个参数)
FAST_LOAD=Y 使用快速装载
EXCLUDE= TABLES:A 不导出的表A