Windows/Linux环境挂载NFS远程目录备份数据库

感谢您关注“数据库运维之道”公众号,分享数据库运维技术!

本期将为大家分享“挂载 NFS 远程目录备份数据库必备技能” 。数据库备份是一件非常重要的事情,为了实现数据库异机备份,很多时候我们会采用NFS远程挂载目录来备份数据库,例如:Oracle、MySQL、达梦数据库等备份。

关键词:NFS、挂载NFS目录、

一、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客户端(共享权限参数)”的格式,定义要共享的目录与相应的权限。

例如,如果想要把/dbywzdbackup目录共享给192.168.6.0/24网段内的所有主机,让这些主机都拥有读写权限。在将数据写入到NFS服务器的硬盘中后才会结束操作,最大限度保证数据不丢失,以及把来访客户端root管理员映射为本地的匿名用户等,则可以按照下面命令中的格式,将下表中的参数写到NFS服务程序的配置文件中。

用于配置NFS服务程序配置文件的参数:ro-只读;rw-读写;root_squash-当NFS客户端以root管理员访问时,映射为NFS服务器的匿名用户;no_root_squash-当NFS客户端以root管理员访问时,映射为NFS服务器的root管理员;sync-同时将数据写入到内存与硬盘中,保证不丢失数据。

5、编辑"/etc/exports”配置文件,注意:NFS客户端地址与权限之间没有空格。

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 << EOF
ALLOCATE CHANNEL FOR MAINTENANCE type disk;
crosscheck backup device type disk;
crosscheck archivelog all;
report obsolete;
delete noprompt expired backup;
delete noprompt obsolete device  type  disk;
release channel;

RUN {
ALLOCATE CHANNEL ch00 TYPE disk;
ALLOCATE CHANNEL ch01 TYPE disk;
ALLOCATE CHANNEL ch02 TYPE disk;
ALLOCATE CHANNEL ch03 TYPE disk;
$CMD_STR1
sql 'alter system archive log current' ;
backup as compressed  backupset archivelog all format '/newstart/%d/%d_arch_%I_%T_%s' skip inaccessible delete input;
backup current controlfile format '/newstart/%d/%d_CONT_%I_%T_%s.ctl'; 
backup spfile format '/newstart/%d/spfile_%d_%I_%T_%s.ora';
RELEASE CHANNEL ch00;
RELEASE CHANNEL ch01;
RELEASE CHANNEL ch02;
RELEASE CHANNEL ch03;
}
EOF
"

# Initiate the command string
#echo $CMD_STR   >> $RMAN_LOG_FILE
if [ "$CUSER" = "root" ]
then
    su - $ORACLE_USER -c "$CMD_STR" >> $RMAN_LOG_FILE
    RSTAT=$?
else
    sh -c "$CMD_STR" >> $RMAN_LOG_FILE
    RSTAT=$?
fi
 
#echo "$CMD_STR" >> $RMAN_LOG_FILE

# ---------------------------------------------------------------------------
# Log the completion of this script.
# ---------------------------------------------------------------------------
 
if [ "$RSTAT" = "0" ]
then
    LOGMSG="ended successfully"
else
    LOGMSG="ended in error"
fi
 
echo >> $RMAN_LOG_FILE
echo Script $0 >> $RMAN_LOG_FILE
echo ==== $LOGMSG on `date` ==== >> $RMAN_LOG_FILE
echo >> $RMAN_LOG_FILE

done 
exit $RSTAT

3、在oracle用户下,配置定时任务。参数0表示0级备份,1表示1级增量备份,2表示只做归档备份。每周六进行一次全备,周日至周五实现增量备份,每天中午归档备份。

crontab -e
30 23 * * 6 /newstart/scripts/rman_level.sh 0
30 23 * * 0-5 /newstart/scripts/rman_level.sh 1
15 12 * * * /newstart/scripts/rman_level.sh 2

4、备份检查脚本,通过sql语句检查每次的备份情况(备份类型、备份状态、备份时间、文件大小、压缩比)。

检查备份脚本
cd /newstart/scripts
vi check_backup.sh
chmod +x check_backup.sh

$ sh check_backup.sh 
ora_pmon_orcl1
export ORACLE_SID=orcl1
INPUT_TYPE STATUS             START_TIME       END_TIME           INPUT_BYTE OUTPUT_BYT TIME_TAKEN COMPRESSION_RATIO
---------- ------------------------- -------------------- -------------------- ---------- ---------- ---------- -----------------
DB INCR    RUNNING             2024-04-05 16:34:53  2024-04-05 17:00:23     165.24G     36.97G  00:25:30           4.46928092
ARCHIVELOG COMPLETED WITH WARNINGS   2024-04-05 16:31:01  2024-04-05 16:31:20      67.22M     65.95M  00:00:19           1.01929456
ARCHIVELOG COMPLETED WITH WARNINGS   2024-04-05 16:27:32  2024-04-05 16:28:41       2.42G    860.42M  00:01:09           2.87637185

检查脚本check_backup.sh的本文内容如下:
#!/bin/bash
source /home/oracle/.bash_profile
ps -ef|grep ora_|grep pmon|awk '{print$8}'
for inst_id in `ps -ef|grep ora_|grep pmon|awk '{print$8}'|sed -e 's/ora_pmon_//'|grep -v "sed"`
do
echo "export ORACLE_SID=$inst_id"
export ORACLE_SID=$inst_id
sqlplus -s / as sysdba <<-EOF
set pagesize 999
set linesize 1000
col input_type for a10
col status for a25
col time_taken_display for a10
col input_bytes_display for a10
col output_bytes_display for a10
col start_time for a20
col end_time for a20
select input_type,status,
 to_char(start_time,'yyyy-mm-dd hh24:mi:ss') start_time,
 to_char(end_time,'yyyy-mm-dd hh24:mi:ss') end_time,
 input_bytes_display,
 output_bytes_display,
 time_taken_display,
 compression_ratio
from v\$rman_backup_job_details
order by 3 desc;
EOF
done

以上步骤完成Oracle备份脚本配置。其他类型数据库备份不再举例。

四、在Windows NFS客户端上挂载NFS共享

1、启用windows  NFS客户端,windows10后的专业版和服务器版本内置有NFS客户端。控制面板\程序\程序和功能\启用或关闭windows功能中启用NFS客户端。

2、开始菜单中打开cmd窗口,使用和linux一样的mount命令进行挂载。

showmount -e 192.168.6.40
mount \\192.168.6.40\dbywzdbackup z:

如果挂载成功,命令将不会返回错误消息,然后盘符会多了一个E盘。

取消挂载命令
umount E:

通过以上配置,Linux服务器上的NFS共享能够在Windows NFS客户端中进行挂载并访问。如果想实现开机自动挂载,可以考虑用winodws的计划任务来帮助实现。

五、Windows环境下Oracle rman定时备份配置

1、进入到挂载目录盘,创建backup目录,接着创建全量备份文件ywzd_rman_level0.bat。

set ORACLE_SID=ywzd
rman target / nocatalog  CMDFILE 'E:\backup\ywzd\ywzd_rman_level0.txt' LOG 'E:\backup\ywzd\ywzd_rman_level0_%DATE:~0,4%%DATE:~5,2%%DATE:~8,2%".log'

2、创建ywzd_rman_level0.txt文件,用于存放rman备份脚本。

run{
allocate channel c1 device type disk;
backup as compressed backupset filesperset 6 incremental level 0 database format 'E:\backup\ywzd\ywzd_db_level0_%d_%T_%U.bak' 
plus archivelog delete all input format 'E:\backup\ywzd\ywzd_arch_%d_%T_%U.bak';
backup current controlfile format 'E:\backup\ywzd\ywzd_ctl_%d_%T_%U';
crosscheck backup;
report obsolete device type disk;
delete noprompt obsolete device type disk;
delete noprompt expired backup device type disk;
release channel c1;
}

3、创建增量备份文件ywzd_rman_level1.bat。

set ORACLE_SID=ywzd 
rman target / nocatalog  CMDFILE 'E:\backup\ywzd\ywzd_rman_level1.txt' LOG 'E:\backup\ywzd\ywzd_rman_level1_%DATE:~0,4%%DATE:~5,2%%DATE:~8,2%".log'

4、创建ywzd_rman_level1.txt文件,用于存放rman备份脚本。

run{
allocate channel c1 device type disk;
backup as compressed backupset filesperset 6 incremental level 1 database format 'E:\backup\ywzd\ywzd_db_level1_%d_%T_%U.bak'
plus archivelog delete all input format 'E:\backup\ywzd\ywzd_arch_%d_%T_%U.bak';
backup current controlfile format 'E:\backup\ywzd\ywzd_ctl_%d_%T_%U';
crosscheck backup;
report obsolete device type disk;
delete noprompt obsolete device type disk;
delete noprompt expired backup device type disk;
release channel c1;
}

5、创建归档备份文件ywzd_rman_arch.bat

set ORACLE_SID=lcncdbdg
rman target / nocatalog  CMDFILE 'E:\backup\ywzd\ywzd_rman_arch.txt' LOG 'E:\backup\ywzd\ywzd_rman_arch_%DATE:~0,4%%DATE:~5,2%%DATE:~8,2%".log'

6、创建ywzd_rman_arch.txt文件,用于存放rman备份脚本。

run{
allocate channel c1 device type disk;
backup archivelog all delete all input format 'E:\backup\ywzd\ywzd_arch_%d_%T_%U.bak';
backup current controlfile format 'E:\backup\ywzd\ywzd_ctl_%d_%T_%U';
release channel c1;
}

以上就是Window环境下的备份脚本。如果想实现定时备份,可以考虑用winodws的计划任务来帮助实现。

以上就是本期关于“挂载 NFS 远程目录备份数据库必备技能”分享。希望能给大家带来帮助!

欢迎关注“数据库运维之道”公众号,一起学习数据库技术!

  • 22
    点赞
  • 34
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
要在Linux挂载NFS共享目录,你可以按照以下步骤进行操作: 1. 首先,确保NFS服务器已经正确配置并且共享目录已经设置好。你可以使用命令`showmount -e <NFS服务器IP>`来查看NFS服务器上可用的共享目录。例如,`showmount -e 192.168.1.100`会显示可用的共享目录列表。 2. 在本地Linux机器上创建一个用于挂载目录。你可以使用命令`mkdir <本地目录路径>`来创建目录。例如,`mkdir /mnt/nfs`会在/mnt目录下创建一个名为nfs的子目录。 3. 使用`mount`命令来挂载NFS共享目录。命令的基本格式是`sudo mount -t nfs <NFS服务器IP>:<共享目录路径> <本地目录路径>`。例如,`sudo mount -t nfs 192.168.1.100:/nfs/test/common /mnt/nfs`会将NFS服务器上的/nfs/test/common目录挂载到本地的/mnt/nfs目录下。 4. 如果需要在每次启动时自动挂载NFS共享目录,可以将挂载信息添加到/etc/fstab文件中。打开/etc/fstab文件并在文件末尾添加一行类似于`<NFS服务器IP>:<共享目录路径> <本地目录路径> nfs defaults 0 0`的内容。保存文件后,下次启动时系统会自动挂载NFS共享目录。 请注意,挂载NFS共享目录需要确保网络连接正常,并且NFS服务器和本地Linux机器之间没有防火墙或防火墙已正确配置允许NFS流量通过。如果在挂载过程中遇到问题,可以根据错误信息进行排查,比如检查网络连接、防火墙设置等。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值