本期将为大家分享“Windows/Linux环境挂载 NFS 远程目录备份数据库必备技能” 。数据库备份是一件非常重要的事情,为了实现数据库异机备份,很多时候我们会采用NFS远程挂载目录来备份数据库,例如:Oracle、MySQL、达梦数据库等备份。
关键词:NFS、挂载NFS目录、Oracle备份
一、NFS服务端配置
NFS是Network File System的缩写,是一种分布式文件系统协议,用于在计算机网络上共享文件。它允许客户端计算机通过网络远程访问和处理远程服务器上的文件和目录。下面介绍下nfs服务端配置步骤。
1、安装NFS软件包
--安装nfs-utils软件包
yum -y install nfs-utils
--查看nfs软件包
rpm -qa | grep nfs
--查看nfs-utils软件包的配置文件
rpm -qc nfs-utils
--启动nfs和设置开机启动
systemctl start nfs
systemctl enable nfs
2、在NFS服务器上建立用于NFS文件共享的目录,并设置足够的权限确保其他人也有写入权限。
--创建目录
mkdir dbywzdbackup
--赋予权限
chmod 777 dbywzdbackup
--查看目录权限
ls -ld dbywzdbackup
--# 写入一个文本文件
echo 'This is a nfs shared folder for ywzd database.' > dbywzdbackup/README
3、NFS服务程序的配置文件为/etc/exports,默认情况下里面没有任何内容,我们可以通过“rpm -qf”命令查看一下该配置文件是由哪个软件包安装提供的。
--查看到/etc/exports文件由哪个软件包提供
ls -l etc/exports
rpm -qf etc/exports
--查看setup软件包信息
rpm -qi setup
4、按照“共享目录的路径 允许访问的NFS客户端(共享权限参数)”的格式,定义要共享的目录与相应的权限。编辑"/etc/exports”配置文件。
vim etc/exports
/dbywzdbackup 192.168.6.0/24(rw,sync,root_squash)
在NFS服务的配置文件中匹配IP地址有三种方法——第一种是直接写*号,代表任何主机都可以访问;第二种则是实验中采用的192.168.6.*通配格式,代表来自192.168.6.0/24网段的主机;第三种则是直接写对方的IP地址,如192.168.10.20,代表仅允许某个主机进行访问。
6、启用NFS服务程序。由于在使用NFS服务进行文件共享之前,需要使用RPC(Remote Procedure Call,远程过程调用)服务将NFS服务器的IP地址和端口号等信息发送给客户端。因此,在启动NFS服务之前,还需要顺带重启并启用rpcbind服务程序,并将这两个服务一并加入开机启动项中。
systemctl restart rpcbind.service
systemctl enable rpcbind.service
systemctl enable --now nfs-server.service
7、如果有开启防火墙,防火墙放行NFS共享相关的服务。
firewall-cmd --add-service=nfs --permanent
firewall-cmd --add-service=rpc-bind --permanent
firewall-cmd --add-service=mountd --permanent
firewall-cmd --reload
以上步骤完成nfs服务端的配置!
二、Linux服务端配置
1、先使用showmount命令查询NFS服务器的远程共享信息。
--查找showmount命令是由哪个软件包提供的
yum provides showmount
--安装nfs-utils软件包
yum -y install nfs-utils
--显示nfs服务器的共享列表
showmount -e 192.168.6.40
2、在NFS客户端创建一个挂载目录。使用mount命令并结合-t参数,指定要挂载的文件系统的类型,并在命令后面写上服务器的IP地址、服务器上的共享目录以及要挂载到本地系统(即客户端)的目录
mkdir newstart
mount -t nfs -o rw,bg,hard,nointr,rsize=32768,wsize=32768,nolock,proto=tcp,actimeo=0,vers=3,timeo=600 192.168.6.40:/dbywzdbackup newstart
# df -Th
Filesystem Type Size Used Avail Use% Mounted on
nfs 192.168.6.40:/dbywzdbackup nfs4 500G 20M 499G 1% newstart
3、挂载成功后就应该能够顺利地看到在执行前面的操作时写入的文件内容了。如果希望NFS文件共享服务能一直有效,则需要将其写入到fstab文件中:
cat nfsfile/README
--方法一
cat etc/rc.local
mount -t nfs -o rw,bg,hard,nointr,rsize=32768,wsize=32768,nolock,proto=tcp,actimeo=0,vers=3,timeo=600 192.168.6.40:/dbywzdbackup newstart
chmod -X etc/rc.d/rc.local
--方法二
# vim /etc/fstab
192.168.6.40:/dbywzdbackup newstart nfs defaults 0 0 # 添加这一行
# mount -a
以上步骤实现NFS目录挂载。
三、Linux环境下Oracle rman定时备份配置
1、oracle用户,在/newstart目录下创建子目录,用于存放脚本和日志。
cd newstart
mkdir scripts log
2、在oracle用户下,创建rman脚本并授权。该脚本可以让多个实例和多个级别类型的备份共用一个脚本,可实现顺序压缩备份。
cd newstart/scripts
vi rman_level.sh
可以设置多个实例名称,以空格隔开:ORACLE_SIDS="orcl2"
可以设置备份文件的存放子目录,多个目录可用空格隔开:DIR_NAME="ORCL"
设置实例的ORACLE_HOME路径:ORACLE_HOME=/u01/app/oracle/product/10.2.0/db_1
chmod +x rman_level.sh
rman_level.sh脚本内容如下:
PATH=$PATH:$HOME/bin
CUSER=`id |cut -d"(" -f2 | cut -d ")" -f1`
LEVEL=${1}
if [ "$LEVEL" = "0" ]
then
BACKUPLEVEL=FULL
elif [ "$LEVEL" = "1" ]
then
BACKUPLEVEL=INCR
else
BACKUPLEVEL=ARCH
fi
CMD_STR1="
sql 'alter system archive log current ' ;
backup filesperset 2 incremental level=${1} as compressed backupset database format '/newstart/%d/%d_${BACKUPLEVEL}_%I_%T_%s' tag = 'LEVEL${1}' ;
"
if [ "$LEVEL" = "2" ]
then
CMD_STR1=""
fi
RMAN_LOG_FILE=/newstart/log/level${1}_rman.out
if [ ! -f "$RMAN_LOG_FILE" ]
then
touch "$RMAN_LOG_FILE"
chmod 666 $RMAN_LOG_FILE
fi
ORACLE_SIDS="orcl2"
for x in $ORACLE_SIDS
do
ORACLE_SID=$x
export ORACLE_SID
DIR_NAME="ORCL"
for d in $DIR_NAME
do
ORACLE_ID=$d
myPath="/newstart/$ORACLE_ID"
if [ ! -d "$myPath" ]
then
mkdir "$myPath"
chown -R oracle:oinstall "$myPath"
fi
done
echo >> $RMAN_LOG_FILE
chmod 666 $RMAN_LOG_FILE
echo Script $0 >> $RMAN_LOG_FILE
echo ==== started on `date` ==== >> $RMAN_LOG_FILE
echo >> $RMAN_LOG_FILE
ORACLE_HOME=/u01/app/oracle/product/10.2.0/db_1
export ORACLE_HOME
ORACLE_USER=oracle
RMAN=$ORACLE_HOME/bin/rman
CMD_STR="
ORACLE_HOME=$ORACLE_HOME
export ORACLE_HOME
ORACLE_SID=$ORACLE_SID
export ORACLE_SID
$RMAN target nocatalog msglog $RMAN_LOG_FILE append