网站备份操作

in linux with 0 comment

一直用的vps好好的,上面搭建了梯子,便于查阅一些疑难杂症。前两天听同事反馈说翻墙用不了了,于是ssh到vps检查问题,一时半会并未发现问题在哪,于是想着400多天没重启了,就先重启下的,谁知道一重启mysql服务就起不来了,查看报错信息,大概意思是mysql里面的host表不存在,启动失败,于是去datadir看了下,傻眼了,数据都没了。不知道是被黑了还是误删了,总之不管了,犹豫之前偷懒没有做备份,导致本站数据丢失了近一年半的文章,哎....心碎一地
果断放弃了之前的vps,重启购买了一台,重新搭建环境。一切部署完毕,这次要进行数据备份,以防万一。

1.数据库备份

以下是mysql备份脚本:

import os
from datetime import datetime as dt

DB_HOST='127.0.0.1'
MYSQL_DUMP_DIR='/data/backup/db'
DB_PASSWD='123456'

def data_dump():

    now_str = dt.now().strftime("%Y-%m-%d_%H%M%S")
    db_name = 'typecho'

    # cmd = "mysqldump %s>%s" % (db_name, os.path.join(MYSQL_DUMP_DIR, db_name + '_' + now_str + '.sql'))
    # don't need :-u root -p
    fname = os.path.join(MYSQL_DUMP_DIR, db_name + '_' + now_str + '.sql')
    cmd = "mysqldump -h %s -p%s -P 3306 " \
          "%s>%s" % (DB_HOST, DB_PASSWD, db_name, fname)

    print 'running:', cmd
    try:
        os.system(cmd)
    except Exception, e:
        print 'error: %s' % str(e)
    print 'end, generated file:', fname

data_dump()

执行脚本结果如下:

# python mysql_back.py    
running: mysqldump -h 127.0.0.1 -p123456 -P 3306 typecho>/data/backup/db/typecho_2018-02-28_144428.sql
end, generated file: /data/backup/db/typecho_2018-02-28_144428.sql

2.网站数据备份

#!/bin/bash

backupdir='/data/backup/webdata'
dbbak_dir='/data/backup/db'
webdir='/data/www/'

filename=build_`date +%y%m%d%H%M`.tar.gz

cd $webdir
tar -zcf $filename build

mv $filename $backupdir
echo "`date +%F` backup finished " >> /data/backup/bakup.log

find $backupdir -type f -mtime +15|xargs rm -f
find $dbbak_dir -type f -mtime +30|xargs rm -f

3.添加计划任务

[root@blog scripts]# crontab -l
1 2 * * * /bin/bash /data/scripts/back_web.sh
2 2 * * * /usr/bin/python /data/scripts/mysql_back.py

4.异地备份(rsync)
配置rsync守护进程

[root@blog scripts]# cat /etc/rsyncd.conf 
uid=root
gid=root
list = no
strict modes = false
max connections=3600
use chroot=no
log file=/var/log/rsyncd.log
pid file=/var/run/rsyncd.pid
lock file=/var/run/rsyncd.lock
ignore errors = yes
read only = yes


[DBBACK]
path = /data/backup
hosts allow = *    ##建议设置成你需要存放备份数据的IP

在异地服务器添加同步命令(配置计划任务自定义执行时间):

# cat rsync.sh
if [ `ps -ef|grep "HostIP::DBBACK"|grep -v grep|wc -l` -eq 0 ];then
nohup rsync -avP --exclude='.[a-zA-Z0-9]*' --port=19873 HostIP::DBBACK /home/databakup&
fi
Responses