有人找我要备份脚本,我就只好丢出我的啦! 在这边先感谢猫言猫语的作者~ 我是参考他写的自动备份网站档案和数据库上传到FTP空间,再另外修改成用WinRAR来压缩的方式做备份,因为一般普通人比较认识WinRAR,而且我之前写的只适用区网 🤖🤓🤖
用VPS的人一样可以参考这个档案,只要建立好备份档位置以及脚本加权限就可以了。
*********更新历史*********
2010/10/01 – 首次发表
2010/10/09 – 因为有人搞不懂怎用在cPanel上面,而且要简单易懂… 🤔 还好看到猫有写新的文章,不然真想揍人。总之,08回来没吃到西堤你丢灾 😒👊💪
2010/10/25 – 添加自动修复数据库语法
2014/08/27 – 修改信件寄出语法
2019/10/02 – 添加自动修复 MariaDB 数据库语法
2019/11/01 – 新增Dropbox Uploader的自动备份脚本
mkd /public_html/backup
脚本来了~ 🤓 登入FTP后先在public_html目录底下建立一个备份用的资料夹,然后在backup资料夹底下建立脚本WebDBtoFTP.sh,内容如下
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 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 |
#!/bin/bash ############### 你要修改的地方从这里开始 ############### MYSQL_USER="MySQL使用者名称" # MySQL使用者名称 MYSQL_PASS="MySQL密码" # MySQL密码 HOSTNAME="要备份的网站名称" # 要备份的网站名称 WEB_DATA="要备份的网站位置" # 要备份的网站位置 BACKUP_DIR="要备份的网站位置" # 本机存放备份档的位置 FTP_IP="FTP地址" # FTP地址 FTP_USER="FTP使用者名称" # FTP使用者名称 FTP_PASS="FTP密码" # FTP密码 FTP_BACKUP="FTP上存放备份档案的位置" # FTP上存放备份档案的位置 ############### 你要修改的地方从这里结束 ############### MYSQL_PATH=mysql # MySQL程式路径,可用whereis mysql指令查询 MYSQLDUMP=mysqldump # MySQLDUMP程式路径,可用whereis mysqldump指令查询 MYSQLCHECK=mysqlcheck # MySQLCHECK程式路径,可用whereis mysqlcheck指令查询 # 定义数据库的名字和旧数据库的名字 DBName=$HOSTNAME-MySQL_$(date +"%Y%m%d").tar.gz OldDB=$HOSTNAME-MySQL_$(date -d -3day +"%Y%m%d").tar.gz # 定义网站资料的名字和旧网站资料的名字 WebName=$HOSTNAME-Web_$(date +%Y%m%d).tar.gz OldWeb=$HOSTNAME-Web_$(date -d -3day +"%Y%m%d").tar.gz ################################################## ### 删除本地端3天前的资料 echo "==================================================" echo "Backup databases and web started" find "$BACKUP_DIR" -mtime +3 -type d -exec rm -rf {} \; rm -f $BACKUP_DIR/$HOSTNAME-MySQL_$(date -d -3day +"%Y%m%d").tar.gz rm -f $BACKUP_DIR/$HOSTNAME-Web_$(date -d -3day +"%Y%m%d").tar.gz ### 建立备份资料夹 echo "==================================================" echo "To create a new directory, set filename based on the date" mkdir -p $BACKUP_DIR cd $BACKUP_DIR # 最佳化并自动修复数据库 echo "==================================================" echo "Check the databases with optimize tables, auto repair" $MYSQLCHECK -u $MYSQL_USER -p$MYSQL_PASS -oA --auto-repair > /dev/null 2>&1 # 输出数据库,如果使用ROOT帐号会输出成一个数据库一个SQL档 echo "==================================================" echo "To dump each database in a separate file" for db in `$MYSQL_PATH -u $MYSQL_USER -p$MYSQL_PASS -B -N -e 'SHOW DATABASES' | xargs`; do ($MYSQLDUMP -u $MYSQL_USER -p$MYSQL_PASS --default-character-set=utf8mb4 --single-transaction --skip-lock-tables ${db} > ${db}.sql) done # 压缩所有数据库为一个压缩档并删除所有的SQL档 echo "==================================================" echo "Compressing datebase files" rm -f information_schema.sql mysql.sql performance_schema.sql tar zcfP $BACKUP_DIR/$DBName $BACKUP_DIR/*.sql rm -f $BACKUP_DIR/*.sql #压缩网站资料 echo "Compressing website files" tar zcfP $BACKUP_DIR/$WebName $WEB_DATA --exclude=wp-content/cache --exclude=wp-content/akeebabackupwp --exclude=wp-content/updraft # 上传到FTP空间并删除FTP空间过期的资料 echo "==================================================" echo "Send files via FTP" ftp -v -n $FTP_IP << END user $FTP_USER $FTP_PASS type binary lcd $BACKUP_DIR cd $FTP_BACKUP delete $OldDB delete $OldWeb put $DBName put $WebName bye END echo "==================================================" echo "Web and Database backup successfully completed!" echo "==================================================" # ring a bell printf '\007' |
chmod 700 /public_html/backup/WebDBtoFTP.sh
储存好在FTP直接设定权限,最后在去cPanel控制台那边的Cron Jobs设定
/home/使用者名称/public_html/backup/WebDBtoFTP.sh
或是手动增加每天的凌晨1点15分执行备份的排程
sudo crontab -e
15 1 * * * sh /public_html/backup/WebDBtoFTP.sh
### 另外一个这是只备份MySQL数据库到信箱的脚本 ~ DBtoMail.sh
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 |
#!/bin/bash ############### 你要修改的地方从这里开始 ############### MYSQL_PATH=mysql # MySQL程式路径,cPanel或安装时没指定位置的不用修改 MYSQLDUMP=mysqldump # MySQLDUMP程式路径,cPanel或安装时没指定位置的不用修改 MYSQLCHECK=mysqlcheck # MySQLCHECK程式路径,cPanel或安装时没指定位置的不用修改 MYSQL_USER=root # MySQL使用者名称 MYSQL_PASS=MySQL密码 # MySQL密码 MAIL_TO=qoo@gmail.com # 数据库发送到的邮箱 HOSTNAME=qoo.com # 主机名称 BACKUP_DIR=/public_html/backup # 备份档位置 ############### 你要修改的地方从这里结束 ############### # 定义数据库的名字和旧数据库的名字 DBName=$HOSTNAME-DB_$(date +"%Y%m%d").tar.gz # 删除本地7天前的资料 cd $BACKUP_DIR rm -f $BACKUP_DIR/$HOSTNAME-DB_$(date -d -7day +"%Y%m%d").tar.gz # 最佳化并自动修复数据库 $MYSQLCHECK -u $MYSQL_USER -p$MYSQL_PASS -oA --auto-repair > /dev/null 2>&1 # 输出数据库,如果使用ROOT帐号会输出成一个数据库一个SQL档 for db in `$MYSQL_PATH -u $MYSQL_USER -p$MYSQL_PASS -B -N -e 'SHOW DATABASES' | xargs`; do ($MYSQLDUMP -u $MYSQL_USER -p$MYSQL_PASS --default-character-set=utf8mb4 --single-transaction --skip-lock-tables ${db} > ${db}.sql) done # 压缩所有数据库为一个压缩档 rm -f information_schema.sql mysql.sql performance_schema.sql tar zcfP $BACKUP_DIR/$DBName $BACKUP_DIR/*.sql rm -f $BACKUP_DIR/*.sql # 附件方式寄送数据库压缩档到信箱,如压缩档超过25MB请勿使用gmail信箱,Yahoo很会掉信也别用 echo "DBBACKUP" | mutt -s "$DBName" -a $BACKUP_DIR/$DBName $MAIL_TO |
这边解释一下
/usr/local/mysql/bin/mysqldump -uroot -p123456 --databases db1 db2 db3 > /home/backup/databackup.sql
这是猫的方式,会把全部的数据库导在一个sql档里面,可能会对龟毛如我的人不方便判别,所以我修改成上面那样按照数据库名称导出数据库再用最高压缩成一个压缩档。
