累....

自从几个月前某厂的VPS的硬盘突然炸了,导致博客的数据全没了。并不是没有备份的习惯,而是用的也是他们家提供的镜像备份。妥妥的,一炸,全炸了...
重建之后也没心思把过去的文章补回来了,一是现在看回头,那时候写文章都是自己刚开始学习的一些经历和笔记,都是一些解决小问题的片段,整理了一下自己记录下来而已。二是全靠记忆也真的会想不起那么多(有些东西学会了 ,变习惯了,专门想也想不起来了),目前补回了几个用到的找到别人写的文章转载过来作为记录了,重新自己写回那几个文章需时有点长。
好了...那就重新出发吧。反正当初目的也只是记录自己的笔记和自己拍的一下相片和视频。


对了...我说数据再也不会丢了!!已经采取了阿里云oss异地备份,作为第二重保险...这也能丢的话........不存在的!!

魔改BBR一键安装脚本 Debian/CentOS

安装
项目地址:https://github.com/nanqinlang-tcp/tcp_nanqinlang

系统要求:适用于Debian 7+、CentOS 6/7

1、这个是新手简装版本,只需 运行脚本第一项+重启+运行脚本第二项。一般用户只需使用此版本,并建议使用该版本。此版本不需要编译的过程,直接安装v4.10.2内核。

Debian 7+

fool

wget https://github.com/tcp-nanqinlang/general/releases/download/3.4.3.1/tcp_nanqinlang-fool-1.2.3.sh
bash tcp_nanqinlang-fool-1.2.3.sh
2、这个是进阶版本。提供自定义内核版本功能,只建议有用户自己指定安装的内核的版本需求的用户使用,例如你想安装v4.12.10版本的内核,就需要使用这个版本,且最高支持4.16内核。

Debian 7+

pro

wget https://github.com/tcp-nanqinlang/general/releases/download/3.4.5.1/tcp_nanqinlang-pro-3.4.5.1.sh
bash tcp_nanqinlang-pro-3.4.5.1.sh
3、这个是CentOS平台的版本,尚处于测试版,请勿在重要环境使用。

CentOS 6/7

only 64 bit

wget https://raw.githubusercontent.com/tcp-nanqinlang/general/master/General/CentOS/bash/tcp_nanqinlang-1.3.2.sh
bash tcp_nanqinlang-1.3.2.sh

安装时会出现四个选项供以选择
1、安装内核
选择第一个选项用于安装内核。在安装内核时,请注意区别:

Debian系统

下载内核安装包至/home/tcp_nanqinlang,脚本第二项运行完成后移除该文件夹。
系统中只会留下新安装的内核,原有的所有内核都会被移除。
对于pro版本,安装的内核版本由你指定,若不确定应输入哪个版本号,直接回车即可,会安装v4.10.10版本内核。
指定安装内核版本为v4.13.x时,会使用新版本内核适配的源码。
本魔改项目暂不支持v4.14及以上版本内核。
此命令执行完毕后,请根据脚本内提示确认内核是否已安装完毕。

CentOS系统

CentOS的脚本,套路和上面Debian的大致相当,主要在于以下区别:
不会询问安装版本号,直接安装内核版本v4.12.10。
内核安装完成后,系统中会装有linux-ml-4.12.10、linux-ml-devel-4.12.10、linux-ml-headers-4.12.10三个内核。
内核安装完成后,系统中依旧会留有旧版本的linux-x.xx.xx-ml内核,这些残留的内核,会在执行第二个选项 “安装并启用算法” 后被移除。
确认内核更换完成后,重启你的vps。

2、开启算法
重启开机后,再次运行该脚本,选择第二项: 安装并开启算法。
3、检查运行状态
选项三用于检查tcp_nanqinlang是否已被加载(installed)和启用(running)。

4、卸载BBR
不会删除已安装的内核,仅移除sysctl.conf中的相关设置项。然后重启机器后,魔改BBR才会停止运作。

注意事项
一定要在执行完成安装内核并重启vps后,才能执行安装并启用算法。
卸载命令不会改动内核。
若pro版本的编译过程报错,请留言。

教程来源:https://www.moerats.com/archives/382/

阿里云OSS 自动远程备份数据库和网站

前文后补

SDK 脚本
1.环境
OSS 的 Python SDK 需要用到 oss2 插件,所以我们先安装一下。
如果服务器上已经安装了 pip 工具,可直接执行如下命令安装 oss2 插件

pip install oss2

若没有,则复制以下命令行到服务器上执行安装:

cd /tmp
wget -O master.zip https://codeload.github.com/aliyun/aliyun-oss-python-sdk/zip/master --no-check-certificate
tar zxf master.zip
cd aliyun-oss-python-sdk-master && python setup.py install && echo "Oss2 install OK" || \
echo "Oss2 install failed"

如果没有安装tar,用zip代替

zip -o master.zip

2.备份脚本

# -*- coding: utf-8 -*-
from __future__ import print_function
import os, sys
import oss2
#
# 百分比显示回调函数
#
def percentage(consumed_bytes, total_bytes):
    if total_bytes:
        rate = int(100 * (float(consumed_bytes) / float(total_bytes)))
        print('\r{0}% '.format(rate), end=filePath)
        sys.stdout.flush()
 
# 脚本需要传入5个参数
if ( len(sys.argv) > 5 ):
    AccessKeyId     = sys.argv[1]
    AccessKeySecret = sys.argv[2]
    Endpoint        = sys.argv[3] 
    Bucket          = sys.argv[4]
    filePath = sys.argv[5]
    fileName = filePath.split("/")[-1]
 
else:
    print("Example: %s AccessKeyId AccessKeySecret Endpoint Bucket /data/backup.zip" % sys.argv[0])
    exit()
 
# OSS认证并开始上传
auth = oss2.Auth(AccessKeyId , AccessKeySecret)
bucket = oss2.Bucket(auth,  Endpoint, Bucket)
oss2.resumable_upload(bucket, fileName, filePath, progress_callback=percentage)
print('\rUpload %s to OSS Success!' % filePath)

使用方法:将上述代码保存为 oss.upload.py,并上传到服务器
有了上传脚本,结合七天循环备份脚本,实现循环备份到 OSS。
3.脚本

#!/bin/sh
###################################################################
#  Web Backup version 1.0.3 Author: Jager <ge@zhangge.net>        #
# For more information please visit https://zhangge.net/5111.html #
#-----------------------------------------------------------------#
#  Copyright ©2016 zhangge.net. All rights reserved.              #
###################################################################

test -f /etc/profile && . /etc/profile >/dev/null 2>&1
baseDir=$(cd $(dirname $0) && pwd)
zip --version >/dev/null || yum install -y zip
ZIP=$(which zip)
TODAY=`date +%u`
PYTHON=$(which python)
MYSQLDUMP=$(which mysqldump)

# 新增的OSS上传文件函数,请按照实际情况修改参数!
uploadToOSS()
{
    $PYTHON $baseDir/oss.upload.py 认证KEY 认证密钥 oss-cn-qingdao-internal.aliyuncs.com Bucket名称 $1
}

printHelp()
{
clear
printf '
=====================================Help infomation=========================================
1. Use For Backup database:
The $1 must be [db]
    $2: [domain]
    $3: [dbname]
    $4: [mysqluser]
    $5: [mysqlpassword]
    $6: [back_path]

For example:./backup.sh db zhangge.net zhangge_db zhangge 123456 /home/wwwbackup/zhangge.net

2. Use For Backup webfile:
The $1 must be [\file]:
    $2: [domain]
    $3: [site_path]
    $4: [back_path]

For example:./backup.sh file zhangge.net /home/wwwroot/zhangge.net /home/wwwbackup/zhangge.net
=====================================End of Hlep==============================================

'
exit 0
}

backupDB()
{
    domain=$1
    dbname=$2
    mysqluser=$3
    mysqlpd=$4
    back_path=$5
    test -d $back_path || (mkdir -p $back_path || echo "$back_path not found! Please CheckOut Or feedback to zhangge.net..." && exit 2)
    cd $back_path
    $MYSQLDUMP -u$mysqluser -p$mysqlpd $dbname --skip-lock-tables --default-character-set=binary >$back_path/$domain\_db_$TODAY\.sql
    test -f $back_path/$domain\_db_$TODAY\.sql || (echo "MysqlDump failed! Please CheckOut Or feedback to zhangge.net..." && exit 2)
    $ZIP -Pmypassword -m $back_path/$domain\_db_$TODAY\.zip $domain\_db_$TODAY\.sql && \
    uploadToOSS $back_path/$domain\_db_$TODAY\.zip
}

backupFile()
{
    domain=$1
    site_path=$2
    back_path=$3
    test -d $site_path || (echo "$site_path not found! Please CheckOut Or feedback to zhangge.net..." && exit 2)
    test -d $back_path || (mkdir -p $back_path || echo "$back_path not found! Please CheckOut Or feedback to zhangge.net..." && exit 2)
    test -f $back_path/$domain\_$TODAY\.zip && rm -f $back_path/$domain\_$TODAY\.zip
    $ZIP -Pmypassword -9r $back_path/$domain\_$TODAY\.zip $site_path && \
    uploadToOSS $back_path/$domain\_$TODAY\.zip    
}

while [ $1 ]; do
    case $1 in
        '--db' | 'db' )
        backupDB $2 $3 $4 $5 $6
        exit
        ;;
        '--file' | 'file' )
        backupFile $2 $3 $4
        exit  
        ;;
        * )
        printHelp
        exit
        ;;
    esac
done
printHelp

使用方法:
将上述代码作如下修改:
I、根据实际情况修改上述代码中的 OSS 上传函数代码,比如密钥对和 Bucket 名称(参考前文)
II、替换代码中的 mypassword 为自己设置的压缩包密码,不修改的话压缩文件解压密码为 mypassword
然后,将代码保存为 backup.sh,上传到服务器(建议存放到和前文 python 脚本的相同目录),比如 /data/backup.sh

4.添加定时任务

#编辑crontab
[root@AlyServer ~]# crontab -e

#然后添加如下内容:

#备份数据库(参数依次为:db、域名、数据库名称、数据库用户名、对应密码、备份路径)
10 3 * * * bash /data/backup.sh db zhangge.net zhangge root 123456 /home/wwwbackup/zhangge.net >/dev/null 2>&1

#备份网站文件(参数依次为:file、域名、网站根目录、备份路径)
15 3 * * * bash /data/backup.sh file zhangge.net /home/wwwroot/zhangge.net /home/wwwbackup/zhangge.net >/dev/null 2>&1

#按下键盘esc,输入 :wq 保存crontab即可

资料来源:https://zhangge.net/5111.html