专题推荐
专题推荐

Linux VPS每日自动异地备份网站数据与数据库到异地ftp空间

2020-02-15 14:26 分类:VPS教程 阅读(次阅读) 标签:,

Linux VPS每日备份网站数据与数据库上传到ftp空间.

如果你使用的是宝塔面板,那么你可以试试:  Linux VPS宝塔面板每日自动异地备份网站数据到又拍云

如果你没有异地的ftp,你可以用我下面的办法去又拍云申请一个免费的空间:(因为又拍云联盟每月赠送10GB流量,大多数网站备份都够用了.)

本Linux VPS自动备份规则的优点:

1.每日自动备份,一次设置 只有你不换服务器,Linux VPS自动备份脚本一直会生效.
2.备份空间免费,感谢又拍云大佬^_^
3.备份文件自动加密处理了,你无需担心泄露

步骤一:去又拍云注册一个账号.

如果没有,点击我的推荐码注册一个.  [点击前往又拍云]

你可以点击网站底部的又拍云联盟(就是在你的网站底部加个又拍云的logo与链接),这个审核需要时间,你可以先充个1元钱 或者10元钱试试.

你可以点击网站底部的又拍云联盟

步骤二:登录又拍云账号,创建一个云存储.

步骤三:登录又拍云账号,创建一个云存储

注意事项: 这个又拍云云存储的服务名称可以自定义,看个人喜好;

这个又拍云云存储的服务名称可以自定义,看个人喜好

步骤三:在创建云存储的页面下方同时创建一个操作员账号(类似ftp账号);

注意: 这个云存储的操作名请不要泄露.

这个又拍云操作员密码自己保存一下,等会会用到;

在创建云存储的页面下方同时创建一个操作员账号(类似ftp账号)

Linux VPS每日异地备份网站数据与数据库上传到异地ftp空间代码如下,复制以下脚本保存到/root/backup.sh

这个版本的Linux VPS自动备份脚本是我自己写的,有以下几个优点:

优点1: 是基于ZIP压缩,目前网上的我找的都是tar打包,压缩率太低.浪费流量.

优点2: 本备份脚本自带ZIP加密功能(需要自己设置脚本内的密码 我注释了位置)

Linux VPS自动备份脚本下载地址

#!/bin/bash
#你要修改的地方从这里开始
MYSQL_USER=root          #mysql用户名 [需要root账号用户名,不是也行]
MYSQL_PASS=abc           #mysql密码   [左侧=后面只是示范需要修改]
FTP_IP=123.123.123.123   #远程ftp地址   [左侧=后面只是示范需要修改]
FTP_USER=abc             #远程ftp用户名 [左侧=后面只是示范需要修改]
FTP_PASS=abc             #远程ftp密码 [左侧=后面只是示范需要修改]
FTP_backup=/www/         #远程ftp上存放备份文件的目录,需要先在FTP上面建好 [左侧=后面只是示范需要修改]
WEB_DATA=/home/www/      #本地要备份的网站数据目录 [左侧=后面只是示范需要修改]
#你要修改的地方从这里结束
 
if [ ! -f /usr/bin/ftp ]; then
    yum install ftp -y
fi
if [ ! -f /usr/bin/zip ]; then
    yum install zip -y
fi
if [ ! -d /home/backup ]; then
    mkdir /home/backup
fi
  
#定义备份文件的名字
#可以将Data换为你的IP地址 方便多个服务器识别(不过不懂的话别修改名称,要修改3处)
DataBakName=Data_$(date +"%Y%m%d").tar.gz
#定义30天之前的备份为旧备份文件  可以修改数字
OldData=Data_$(date -d -30day +"%Y%m%d").tar.gz
 
#删除本地30天前的数据 (可以按需求自行修改)
rm -rf /home/backup/Data_$(date -d -30day +"%Y%m%d").tar.gz
cd /home/backup
  
#导出数据库,一个数据库一个压缩文件
#/usr/local/mysql-5.5/bin/mysql 与 /usr/local/mysql-5.5/bin/mysqldump 需要改为你数据库的mysql与mysqldump准确地址 
for db in `/usr/local/mysql-5.6/bin/mysql -u$MYSQL_USER -p$MYSQL_PASS -B -N -e 'SHOW DATABASES' | xargs`; do
    (/usr/local/mysql-5.6/bin/mysqldump -u$MYSQL_USER -p$MYSQL_PASS ${db} -q --skip-lock-tables | gzip -9 - > ${db}.sql.gz;
    echo dumped /home/backup/${db}.sql.gz)    
done
 
#将导出的数据库和网站目录压缩为一个文件
# VPS#YI 是密码,需要自行修改
zip -rP VPS#YI /home/backup/$DataBakName $WEB_DATA /home/backup/*.sql.gz
 
#删除本地已导出的数据库
rm -rf /home/backup/*.sql.gz
  
#上传到FTP空间,删除FTP空间30天前的旧备份文件
ftp -v -n $FTP_IP << END
user $FTP_USER $FTP_PASS
type binary
cd $FTP_backup
delete $OldData
put $DataBakName
bye
END

下面贴一个tar打包的备份脚本,不加密的,请自行选择一个.

配置好后都可以用,我用了好几年了.

#!/bin/bash
#你要修改的地方从这里开始
MYSQL_USER=         #mysql用户名
MYSQL_PASS=         #mysql密码
FTP_IP=             #远程ftp地址
FTP_USER=           #远程ftp用户名
FTP_PASS=           #远程ftp密码
FTP_backup=         #远程ftp上存放备份文件的目录,需要先在FTP上面建好
WEB_DATA=           #本地要备份的网站数据目录
#你要修改的地方从这里结束
#检查ftp是否存在 /home/backup是否存在,没有就自动创建
if [ ! -f /usr/bin/ftp ]; then
    yum install ftp -y
fi
if [ ! -d /home/backup ]; then
    mkdir /home/backup
fi
  
#定义备份文件的名字
DataBakName=Data_$(date +"%Y%m%d").tar.gz
OldData=Data_$(date -d -5day +"%Y%m%d").tar.gz
 
#删除本地3天前的数据 (可以按需求自行修改)
rm -rf /home/backup/Data_$(date -d -3day +"%Y%m%d").tar.gz
cd /home/backup
  
#导出数据库,一个数据库一个压缩文件
#/usr/local/mysql-5.6/bin/mysql 与 /usr/local/mysql-5.6/bin/mysqldump 需要改为你的准确mysql版本地址 
for db in `/usr/local/mysql-5.6/bin/mysql -u$MYSQL_USER -p$MYSQL_PASS -B -N -e 'SHOW DATABASES' | xargs`; do
    (/usr/local/mysql-5.6/bin/mysqldump -u$MYSQL_USER -p$MYSQL_PASS ${db} -q --skip-lock-tables | gzip -9 - > ${db}.sql.gz;
    echo dumped /home/backup/${db}.sql.gz)    
done
 
#将导出的数据库和网站目录压缩为一个文件
tar zcf /home/backup/$DataBakName $WEB_DATA /home/backup/*.sql.gz
 
#删除本地已导出的数据库
rm -rf /home/backup/*.sql.gz
  
#上传到FTP空间,删除FTP空间5天前的数据
ftp -v -n $FTP_IP << END
user $FTP_USER $FTP_PASS
type binary
cd $FTP_backup
delete $OldData
put $DataBakName
bye
END

先本地配置好然后上传到服务器的root目录后可以测试能否执行.

执行命令为在Linux服务器上输入:

chmod +x /root/backup.sh

上面的命令是赋予可执行权限,下面的命令是执行本命令

/bin/sh /root/backup.sh

执行命令试试,看看输出是否有错,也可以登录存放Linux VPS每日备份网站文件的ftp目录是否有文件.

如果不清楚你的mysqldump与mysql具体位置,使用如下命令查找:

[root@localhost ~]# find / -name mysqldump
/usr/local/mysql-generic-5.5/bin/mysqldump
/usr/local/mysql-5.6/bin/mysqldump
[root@localhost ~]# find / -name mysql

如果还是不行看看这篇文章:Linux vps备份数据库提示mysqldump :command not found解决办法

Linux VPS每日备份网站数据脚本可能会出现的问题一:

ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/tmp/mysql.sock' (2)

查看 /tmp/mysql.sock 这个文件是否存在.

我使用的是amh面板,他是mysql-5.6.sock  而不是mysql.sock 于是我将正确的socket文件位置,软链接到提示错误的socket文件路径位置,即可解决此问题:

ln -s /tmp/mysql-5.6.sock /tmp/mysql.sock

如果显示:

Warning: Using a password on the command line interface can be insecure.

不必理会,他的意思是命令行输入密码是不安全的.

如果还是解决不了,就试试修改“/etc/my.cnf”(目录可能不一样)配置文件,在配置文件中添加“[client]”选项和“[mysql]”选项,并使用这两个选项下的“socket”参数值,与“[mysqld]”选项下的“socket”参数值,指向的socket文件路径完全一致。

[mysqld]
datadir=/storage/db/mysql
socket=/storage/db/mysql/mysql.sock
 
[client]
default-character-set=utf8
socket=/storage/db/mysql/mysql.sock
 
[mysql]
default-character-set=utf8
socket=/storage/db/mysql/mysql.sock

设置每天凌晨6点左右自动执行备份命令,这时候网速较快,而且应该没人访问网站:

[root@xiangyang ~]# chmod +x /root/backup.sh
[root@xiangyang ~]# crontab -e
00 06 * * * /root/backup.sh
[root@xiangyang ~]# service crond restart
[root@xiangyang ~]# chkconfig --level 2345 crond on

如果觉得每天都备份消耗流量,你也可以设置每周1早上6点执行一次命令:

chmod +x /root/backup.sh 
crontab -e 
00 06 * * 1 /root/backup.sh 
service crond restart 
chkconfig --level 2345 crond on

chkconfig –level 2345 crond on 代表开机自动启动,防止重启后本设置失效.

chmod +x /root/backup.sh 的介绍请看: Linux常用命令:chmod命令修改文件或目录的权限

计划任务相关教程: Linux VPS中crontab定时计划任务系统命令教程
写教程很累,转载请注明出处,谢谢


本文地址: https://www.vpsyi.com/backup-sh.html