Linux VPS/服务器 网站及数据库自动本地备份并FTP上传备份脚本

准备工作:

需要提前在VPS安装好lftp,lftp功能上比较强大,CentOS直接执行:yum install lftp,Debian执行:apt-get install lftp

需要在VPS上创建/home/backup/ 目录,在FTP上创建backup目录。

如果VPS上数据库不多的话使用Godaddy的免费空间就可以(10GB空间,300GB流量),只要注册个域名就免费送。

下面将备份脚本进行部分注释:
#!/bin/bash
#Funciont: Backup website and mysql database
#Author: licess
#Website: http://lnmp.org
#IMPORTANT!!!Please Setting the following Values!

######~Set Directory you want to backup~######将下面的目录修改成自己要备份的目录,一般按我的都是在/home/wwwroot/下面所有直接写了需要备份的目录。可以继续再加:Backup_Dir5=你的目录 ,Backup_Dir后面的数字依次递增。如果不足4个,直接删除不需要的就可以,同时修改下面tar zcf 部分。

Backup_Dir1=vpser.net
Backup_Dir2=lnmp.org
Backup_Dir3=licess.org
Backup_Dir4=jungehost.com

######~Set MySQL UserName and password~######设置MySQL的用户名和密码,最好是root,其他用户可能因为权限问题无法导出部分数据库。
MYSQL_UserName=root
MYSQL_PassWord=yourmysqlrootpassword

######~Set MySQL Database you want to backup~######设置要部分的数据库,可以继续再加:Backup_Database_Name5=数据库名,Backup_Database_Name后面的数字依次递增。
Backup_Database_Name1=vpser
Backup_Database_Name2=licess
Backup_Database_Name3=junge
Backup_Database_Name4=vpserorg

######~Set FTP Information~######设置用来存放备份数据的FTP信息
FTP_HostName=184.168.192.43 //FTP服务器的IP或者域名
FTP_UserName=vpsernet //FTP服务器用户名
FTP_PassWord=yourftppassword //FTP服务器用户对应的密码
FTP_BackupDir=backup //备份到FTP上的目录,需要提前创建好。

#Values Setting END!

TodayWWWBackup=www-*-$(date +”%Y%m%d”).tar.gz
TodayDBBackup=db-*-$(date +”%Y%m%d”).sql
OldWWWBackup=www-*-$(date -d -3day +”%Y%m%d”).tar.gz
OldDBBackup=db-*-$(date -d -3day +”%Y%m%d”).sql

tar zcf /home/backup/www-$Backup_Dir1-$(date +”%Y%m%d”).tar.gz -C /home/wwwroot/ $Backup_Dir1 –exclude=soft
tar zcf /home/backup/www-$Backup_Dir2-$(date +”%Y%m%d”).tar.gz -C /home/wwwroot/ $Backup_Dir2
tar zcf /home/backup/www-$Backup_Dir3-$(date +”%Y%m%d”).tar.gz -C /home/wwwroot/ $Backup_Dir3 –exclude=test
tar zcf /home/backup/www-$Backup_Dir4-$(date +”%Y%m%d”).tar.gz -C /home/wwwroot/ $Backup_Dir4

###上面为备份网站文件数据,因为我的网站比较零散,而且网站目录下面有些目录属于临时目录并不需要备份,所以可以在上面加上–exclude=不备份的目录。如果在前面加了Backup_Dir5=yourdir,则再加tar zcf /home/backup/www-$Backup_Dir5-$(date +”%Y%m%d”).tar.gz -C
/home/wwwroot/ $Backup_Dir5 。如果多余则删除多余行。

/usr/local/mysql/bin/mysqldump -u$MYSQL_UserName -p$MYSQL_PassWord $Backup_Database_Name1 > /home/backup/db-$Backup_Database_Name1-$(date +”%Y%m%d”).sql
/usr/local/mysql/bin/mysqldump -u$MYSQL_UserName -p$MYSQL_PassWord $Backup_Database_Name2 > /home/backup/db-$Backup_Database_Name2-$(date +”%Y%m%d”).sql
/usr/local/mysql/bin/mysqldump -u$MYSQL_UserName -p$MYSQL_PassWord $Backup_Database_Name3 > /home/backup/db-$Backup_Database_Name3-$(date +”%Y%m%d”).sql
/usr/local/mysql/bin/mysqldump -u$MYSQL_UserName -p$MYSQL_PassWord $Backup_Database_Name4 > /home/backup/db-$Backup_Database_Name4-$(date +”%Y%m%d”).sql

###上面为备份MySQL数据库,如果在前面加了Backup_Database_Name5=yourdatabasename,则再加/usr/local/mysql/bin/mysqldump -u$MYSQL_UserName -p$MYSQL_PassWord $Backup_Database_Name5 > /home/backup/db-$Backup_Database_Name5-$(date +”%Y%m%d”).sql 。如果多余则删除多余行。

rm $OldWWWBackup
rm $OldDBBackup
###删除3天前的备份###

cd /home/backup/

###下面为自动上传部分,不得不说lftp很强大,抛弃ftp吧####
lftp $FTP_HostName -u $FTP_UserName,$FTP_PassWord << EOF
cd $FTP_BackupDir
mrm $OldWWWBackup
mrm $OldDBBackup
mput $TodayWWWBackup
mput $TodayDBBackup
bye
EOF

脚本下载地址:http://soft.vpser.net/lnmp/backup.sh

将脚本放到/root/ 下面,按上面的注释修改脚本中的参数,并保存,如果不熟悉vi或者nano编辑器,可以用winscp,执行:chmod +x /root/backup.sh 为脚本添加执行权限,执行:crontab -e 添加定时执行

在crontab中加入:0 3 * * * /root/backup.sh

凌晨3点自动执行/root/bakcup.sh 脚本,备份vps上的数据并上传到FTP上。

原文:Linux VPS/服务器 网站及数据库自动本地备份并FTP上传备份脚本

Linux VPS下SSH常用命令

目录操作:
rm -rf mydir /*删除mydir目录*/
mkdir dirname /*创建名为dirname的目录*/
cd mydir /*进入mydir目录*/
cd – /*回上一级目录*/
cd .. /*回父目录,中间有空格*/
cd ~ /*回根目录*/
mv tools tool /*把tools目录改名为tool */
ln -s tool bac /*给tool目录创建名为bac的符号链接,最熟悉的应该就是FTP中www链接到public_html目录了*/
cp -a tool /home/vpser/www /*把tool目录下所有文件复制到www目录下 */

文件操作:
rm go.tar /* 删除go.tar文件 */
find mt.cgi /* 查找文件名为mt.cgi的文件 */
df –h /* 查看磁盘剩余空间,好像没这个必要,除非你太那个了 */

解压缩:
tar xvf wordpress.tar /* 解压tar格式的文件 */
tar -tvf myfile.tar /* 查看tar文件中包含的文件 */

tar cf toole.tar tool /* 把tool目录打包为toole.tar文件 */
tar cfz vpser.tar.gz tool /* 把tool目录打包且压缩为vpser.tar.gz文件,因为.tar文件几乎是没有压缩过的,MT的.tar.gz文件解压成.tar文件后差不多是10MB */

tar jcvf /var/bak/www.tar.bz2 /var/www/ /*创建.tar.bz2文件,压缩率高*/
tar xjf www.tar.bz2 /*解压tar.bz2格式*/

gzip -d ge.tar.gz /* 解压.tar.gz文件为.tar文件 */
unzip phpbb.zip /* 解压zip文件,windows下要压缩出一个.tar.gz格式的文件还是有点麻烦的 */

下载:
wget http://soft.vpser.net/web/nginx/nginx-0.8.0.tar.gz
/*下载远程服务器上的文件到自己的服务器,连上传都省了,服务器不是100M就是1000M的带宽,下载一个2-3兆的MT还不是几十秒的事 */
wget -c http://soft.vpser.net/web/nginx/nginx-0.8.0.tar.gz
/* 继续下载上次未下载完的文件 */

转载请注明出处:VPS侦探 http://www.vpser.net

进程管理:
ps -aux /*ps 进程状态查询命令*/

ps命令输出字段的含义:
[list]
[*]USER,进程所有者的用户名。
[*]PID,进程号,可以唯一标识该进程。
[*]%CPU,进程自最近一次刷新以来所占用的CPU时间和总时间的百分比。
[*]%MEM,进程使用内存的百分比。
[*]VSZ,进程使用的虚拟内存大小,以K为单位。
[*]RSS,进程占用的物理内存的总数量,以K为单位。
[*]TTY,进程相关的终端名。
[*]STAT,进程状态,用(R–运行或准备运行;S–睡眠状态;I–空闲;Z–冻结;D–不间断睡眠;W-进程没有驻留页;T停止或跟踪。)这些字母来表示。
[*]START,进程开始运行时间。
[*]TIME,进程使用的总CPU时间。
[*]COMMAND,被执行的命令行。
[/list]

ps -aux | grep nginx /*在所有进程中,查找nginx的进程*/
kill 1234 /*1234为进程ID,即ps -aux 中的PID*/
killall nginx /*killall 通过程序的名字,直接杀死所有进程,nginx为进程名*/

Vim操作:

移动类的:
h/j/k/l: 左/下/上/右 移一格
w : 向后词移动 (前面加数字移动多少个词)
b : 向前词移动 (前面加数字移动多少个词)
e : 向后移到词末
ge : 向前移到词末
$ <End> : 行末
0 <Home> : 行首
tx : 向右查找本行的x并移到那儿(大写时向左)
33G : 移到文件的第33行
gg : 文件首行
G : 文件尾行
33% : 文件的33%处
H/M/L : 屏幕的首/中/尾行
zt/zz/zb : 当前行移到屏幕的首/中/底部

跳转:
” : 回到跳转来的地方
CTRL-O : 跳到一个 “较老” 的地方
CTRL-I <Tab> : 则跳到一个 “较新” 的地方

查找:
/ : 向下查找(后加关键字)
? : 向上查找(后加关键字)
n : 下一条符合的记录

编辑:
i : 转换到插入模式
x : 删除当前字符
. : 重复最后一次的修改操作(同PS里ctrl+f执行滤镜)
u : 撤销操作
CTRL-R : 重做
p : 将删除的字符插入到当前位置(put)

退出保存:
:q : 退出
:q! : 不保存退出
ZZ : 保存后退出
:e! : 放弃修改重新编辑

原文:VPS侦探 – Linux VPS下SSH常用命令

通过SSH执行备份

以下将本机的文件备份到远程服务器server1

tar cvfz – /home | ssh server1 “cat > client-home.tar.gz”

也可以将压缩的存档文件直接写入到远程服务器的磁带驱动器

tar cvfz – /home | ssh server1 “cat > /dev/tape”

同步本地目录结构到另一台服务器
假设远程服务器的apache目录损坏,准备从本地服务器通过到远程服务器上:

cd /usr/local;tar zcf – apache/ | ssh server1 “cd /usr/local; mv apache apache.bak; tar zpxvf -“

将本地备份压缩包恢复到远程服务器
本地有备份的压缩包需要恢复到远程服务器(假设该文件包很大,本地没有空间可以 提供解压缩)

ssh server1 “cd /usr/local/data; tar zpvxf -” < really-big-archive.tgz

反向做也是可以的(在服务器上反向从客户端取文件)

ssh client1 “cat really-big-archive.tgz” | tar zpvxf –

备份远程服务器目录到本地成为压缩包 将服务器的/home/chroot目录备份到本地成为 chroot.tar.gz

ssh root@192.168.9.23 “cd /home; tar cfz – chroot” > chroot.tar.gz

使用dd命令进行远程备份
以下是通过dd命令通过ssh方式复制卷到另外一台服务器的卷

dd if=/dev/VGvms/LVwinxp | ssh 192.168.9.201 “dd of=/dev/VGvms/LVwinxp”

原文:http://goo.gl/sSJsL

mysqldump详解

mysqldump 命令位于 mysql/bin/ 目录中,现有环境有两台 mysql 服务器,一台 IP 为: 192.168.102.2 另一台 192.168.102.3
( 1 )完整备份 MySQL 的某个数据库

mysqldump –h hostname –u username –p password databasename > backupfile.sql

例如:将 192.168.102.2 服务器上的 book 数据库备份到 192.168.102.3

mysqldump -h 192.168.102.2 -u backup -p book >book.sql

( 2 )备份 MySQL 数据库为带删除表的格式
备份 MySQL 数据库为带删除表的格式,能够让该备份覆盖已有数据库而不需要手动删除原有数据库。 这样可以保证导回 MySQL 数据库的时候不会出错,因为每次导回的时候,都会首先检查表是否存在,存在就删除

例如:将 192.168.102.2 服务器上的 book 数据库备份到 192.168.102.3

mysqldump -–add-drop-table -h hostname –u username –p password databasename > backupfile.sql

例如:将 192.168.102.2 服务器上的 book 数据库备份到 192.168.102.3

mysqldump –add-drop-table -h 192.168.102.2 -u backup -p book >book.sql

(3) 直接将 MySQL 数据库压缩备份

mysqldump –h hostname –u username –p password databasename | gzip > backupfile.sql.gz

例如:将 192.168.102.2 服务器上的 book 数据库压缩备份到 192.168.102.3 服务器

mysqldump -h 192.168.102.2 -u backup -p book | gzip >book.sql

( 4 )备份 MySQL 数据库某个 ( 些 ) 表

mysqldump –h hostname –u username –p password databasename specific_table1 specific_table2 > backupfile.sql

例如:将 192.168.102.2 服务器上的 backup 数据库中的 books 和 orders 表备份到 192.168.102.3 服务器
mysqldump -h 192.168.102.2 -u backup -p backup books orders>book.sql
( 6 )仅仅备份数据库结构

mysqldump –no-data –h hostname –u username –p password –d databasename1 databasename2 databasename3 >structurebackupfile.sql

例如:仅将 192.168.102.2 服务器上的 backup 数据库的表结构备份到 192.168.102.3 服务器

mysqldump –no-data -d backup -h 192.168.102.2 -u backup -p >book.sql

(7) 备份指定条件的数据
例如只想把服务器 192.168.102.2 上的数据库 test 中的表 test 中的 id>1 的内容备份,可以使用下面的命令:

mysqldump -h 192.168.102.2 -u backup -p test test –where “id>1”>test.sql

( 8 )还原 MySQL 数据库的命令

mysql –h hostname –u username –p password databasename < backupfile.sql

( 9 )还原压缩的 MySQL 数据库

gunzip < backupfile.sql.gz | mysql –u username –p password databasename

mysqldump 工具有大量的选项,部分选项如下:

–add-drop-table : 这个选项将会在每一个表的前面加上 DROP TABLE IF EXISTS 语句,这样可以保证导回 MySQL 数据库的时候不会出错,因为每次导回的时候,都会首先检查表是否存在,存在就删除

–add-locks : 这个选项会在 INSERT 语句中捆上一个 LOCK TABLE 和 UNLOCK TABLE 语句。这就防止在这些记录被再次导入数据库时其他用户对表进行的操作

-c or – complete_insert : 这个选项使得 mysqldump 命令给每一个产生 INSERT 语句加上列( field )的名字。当把数据导出导另外一个数据库时这个选项很有用。

–delayed-insert 在 INSERT 命令中加入 DELAY 选项

-F or -flush-logs 使用这个选项,在执行导出之前将会刷新 MySQL 服务器的 log.

-f or -force 使用这个选项,即使有错误发生,仍然继续导出

–full 这个选项把附加信息也加到 CREATE TABLE 的语句中

-l or -lock-tables 使用这个选项,导出表的时候服务器将会给表加锁。

-t or -no-create- info : 这个选项使的 mysqldump 命令不创建 CREATE TABLE 语句,这个选项在您只需要数据而不需要 DDL (数据库定义语句)时很方便。

-d or -no-data 这个选项使的 mysqldump 命令不创建 INSERT 语句。 在您只需要 DDL 语句时,可以使用这个选项

–opt 此选项将打开所有会提高文件导出速度和创造一个可以更快导入的文件的选项。

-q or -quick 这个选项使得 MySQL 不会把整个导出的内容读入内存再执行导出,而是在读到的时候就写入导文件中。

-T path or -tab = path 这个选项将会创建两个文件,一个文件包含 DDL 语句或者表创建语句,另一个文件包含数据。 DDL 文件被命名为 table_name.sql, 数据文件被命名为 table_name.txt. 路径名是存放这两个文件的目录。目录必须已经存在,并且命令的使用者有对文件的特权。

-w “WHERE Clause” or -where = “Where clause ” : 如前面所讲的,您可以使用这一选项来过筛选将要放到 导出文件的数据。

假定您需要为一个表单中要用到的帐号建立一个文件,经理要看今年( 2004 年)所有的订单( Orders ),它们并不对 DDL 感兴趣,并且需要文件有逗号分隔,因为这样就很容易导入到 Excel 中。 为了完成这个人物,您可以使用下面的句子:

bin/mysqldump – p – where “Order_Date >=’2000-01-01′” – tab = /home/mark – no-create-info – fields-terminated-by=, Meet_A_Geek Orders

原文转自:不详