Mongodb, Mysql导出备份至ftp
前提是mongodb和mysql已经安装使用,先安装vsftp,配置完成后,在编写shell脚本,使用计划任务执行
1. 安装vsftp
1
2
| rpm -q vsftpd
yum -y install vsftpd
|
设置开机启动
启动vsftpd服务
增加新用户ftpuser,设置权限和密码
1
2
3
4
| useradd -d /home/ftpuser -s /sbin/nologin ftpuser
chown -R ftpuser /home/ftpuser
chmod 777 -R /home/ftpuser
passwd ftpuser
|
配置vsftp
1
| vi /etc/vsftpd/vsftpd.conf
|
内容删掉换成以下
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
| anonymous_enable=NO
local_enable=YES
write_enable=YES
local_umask=022
dirmessage_enable=YES
xferlog_enable=YES
connect_from_port_20=YES
xferlog_std_format=YES
chroot_list_enable=YES
chroot_list_file=/etc/vsftpd/chroot_list
listen=YES
pam_service_name=vsftpd
userlist_enable=YES
tcp_wrappers=YES
pasv_min_port=10000
pasv_max_port=10030
|
添加chroot_list文件
1
| vi /etc/vsftpd/chroot_list
|
内容ftpuser
重启服务service vsftpd restart
防火墙开放21端口
1
2
| service iptables stop
vi /etc/sysconfig/iptables
|
添加
1
| -A INPUT -m state --state NEW -m tcp -p tcp --dport 21 -j ACCEPT
|
重启防火墙服务
解决用户无法进入目录问题,终端执行:
1
| setsebool -P ftp_home_dir 1
|
然后重启FTP服务:
2. mongodb导出、压缩、上传脚本,删除过期文件
先定义好服务器、数据库、各目录、用户名、密码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
| #!/bin/bash
MONGO_HOST="127.0.0.1:27017"
MONGO_DB="mydbname"
MONGO_DUMP="/usr/local/mongo/bin/mongodump"
MONGO_BACKUP="/usr/local/mongo/backup"
NEW_TIMESTAMP=$(date +%F-%H%M)
OLD_TIMESTAMP=$(date -d '-5 days' "+%F-%H%M")
NEW_BACKUP_FILE="$MONGO_DB.$NEW_TIMESTAMP.tar.gz"
OLD_BACKUP_FILE="$MONGO_DB.$OLD_TIMESTAMP.tar.gz"
# 0.temp dir
if [ ! -d $MONGO_BACKUP/$MONGO_DB.$NEW_TIMESTAMP ]
then
mkdir $MONGO_BACKUP/$MONGO_DB.$NEW_TIMESTAMP
fi
# 1.mongodump then delete old dir and file
$MONGO_DUMP -h $MONGO_HOST -d $MONGO_DB -o $MONGO_BACKUP/$MONGO_DB.$NEW_TIMESTAMP
cd $MONGO_BACKUP/$MONGO_DB.$NEW_TIMESTAMP && tar -zcf $MONGO_BACKUP/$NEW_BACKUP_FILE */
rm -rf $MONGO_BACKUP/$MONGO_DB.$NEW_TIMESTAMP
rm -rf $MONGO_BACKUP/$OLD_BACKUP_FILE
# 2.upload new and delte old files
#!/bin/sh
FTP_HOST="192.168.100.119"
FTP_PORT="21"
FTP_USER="ftpuser"
FTP_PSWD="123456"
FTP_DIR="mongo-backup"
ftp -nv <<!
open $FTP_HOST $FTP_PORT
user $FTP_USER $FTP_PSWD
binary
prompt
cd $FTP_DIR
mdelete $OLD_BACKUP_FILE
lcd $MONGO_BACKUP
mput $NEW_BACKUP_FILE
close
bye
!
echo "============== $MONGO_DB backup ends at $NEW_TIMESTAMP =============="
|
3. mysql导出、压缩、上传脚本
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
| #! /bin/bash
MYSQL_HOST="192.168.100.119"
MYSQL_PORT='3306'
MYSQL_USER='myuser'
MYSQL_PSWD='mypass'
MYSQL_DB='mydbname'
MYSQL_DUMP="/usr/bin/mysqldump"
MYSQL_BACKUP="/usr/local/mysql/backup"
NEW_TIMESTAMP=$(date +%F-%H%M)
OLD_TIMESTAMP=$(date -d '-5 days' "+%F-%H%M")
GZIP="$(which gzip)"
# 1.mysql dump and delete old files
$MYSQL_DUMP -h $MYSQL_HOST -P $MYSQL_PORT -u $MYSQL_USER -p$MYSQL_PSWD $MYSQL_DB | $GZIP -9 > $MYSQL_BACKUP/$MYSQL_DB.$NEW_TIMESTAMP.gz
rm -rf $MYSQL_BACKUP/$MYSQL_DB.$OLD_TIMESTAMP.gz
echo "============== mysqldump ends at $NEW_TIMESTAMP =============="
# 2.upload new and delete old files
FTP_HOST="192.168.100.119"
FTP_PORT="21"
FTP_USER="ftpuser"
FTP_PSWD="123456"
FTP_DIR="mysql-backup"
ftp -nv <<!
open $FTP_HOST $FTP_PORT
user $FTP_USER $FTP_PSWD
binary
prompt
cd $FTP_DIR
lcd $MYSQL_BACKUP
mput $MYSQL_DB.$NEW_TIMESTAMP.gz
mdelete $MYSQL_DB.$OLD_TIMESTAMP.gz
close
bye
!
echo "============== mysql upload ends at $NEW_TIMESTAMP =============="
|
4. 添加计划任务
1
2
3
| crontab -e
#every day at 00m
00 * * * * /bin/bash /usr/local/mongo/cmd/mongo_backup.sh
|