备份数据库

1、定时备份脚本 /usr/local/mysql/bakmysql.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
#!/bin/bash
# Name:bakmysql.sh
# This is a ShellScript For Auto DB Backup and Delete old Backup

# Database info
DB_USER="root" #mysql login name
DB_PASS="123456" #password
DB_HOST="localhost" #db_address
DB_NAME="muycode" #db_name
DB_ZFBM="--default-character-set=utf8" #character
# DB_TABLE="exam_quest_bank" #table name

# Others vars
BIN_DIR="/usr/bin" #the mysql bin path
BCK_DIR="/home/mysql_backup" #the backup file directory
DATE=`date +%F`

#--skip-lock-tables zg backup
#$BIN_DIR/mysqldump -u $DB_USER -p$DB_PASS $DB_ZFBM $DB_NAME $DB_TABLE | gzip > $BCK_DIR/db_$DATE.sql.gz

#data beifen
#$BIN_DIR/mysqldump --opt -u$DB_USER -p$DB_PASS -h$DB_HOST $DB_ZFBM $DB_NAME | gzip > $BCK_DIR/db_$DATE.sql.gz

#sql back
$BIN_DIR/mysqldump --opt -u$DB_USER -p$DB_PASS -h$DB_HOST $DB_ZFBM $DB_NAME $DB_TABLE > $BCK_DIR/db_$DATE.sql

# delete history
find $BCK_DIR -name "db_*.sql" -type f -mtime +7 -exec rm {} \; > /dev/null 2>&1
#find $BCK_DIR -name "db_*.gz" -type f -mtime +3 -exec rm {} \; > /dev/null 2>&1

脚本说明

  • $BIN_DIR mysql 备份地址
  • $DB_USER 数据库用户名
  • $DB_PASS 数据库密码
  • $DB_HOST 数据库地址(IP 或者是 localhost 之类的)
  • $DB_ZFBM 字符集编码设置(这个很关键,解决导出文件中中文乱码)
  • $DB_NAME 数据库名称
  • $DB_TABLE 要备份的表名(如果只对单一表进行备份,可以加此字段,全库备份的可以省略掉)
  • $BCK_DIR/db_$DATE.sql 备份的地址和备份文件名称

2、脚本附加权限

1
chmod +x bakmysql.sh

3、验证脚本是否正确

如果脚本没问题,会在 /home/mysql_backup 生成备份文件。

1
./bakmysql.sh

4、定时删除备份数据库

1
find $BCK_DIR -name "db_*.sql" -type f -mtime +7 -exec rm {} \; > /dev/null 2>&1

脚本说明

  • -type f 表示查找普通类型的文件,f 表示普通文件。

  • -mtime +7 按照文件的更改时间来查找文件,+3 表示文件更改时间距现在 3 天以前;如果是 -mmin +5 表示文件更改时间距现在 5 分钟以前。

  • -exec rm {} \; 表示执行一段 shell 命令,exec 选项后面跟随着所要执行的命令或脚本,然后是一对儿{},一个空格和一个,最后是一个分号。

  • /dev/null 2>&1 把标准出错重定向到标准输出,然后扔到 /DEV/NULL 下面去。通俗的说,就是把所有标准输出和标准出错都扔到垃圾桶里面;其中的 & 表示让该命令在后台执行。

5、编辑定时任务列表

1
crontab -e
1
2
# 每天早上 4:00:00 执行
00 04 * * * /bin/sh /usr/local/mysql/bakmysql.sh

crontab 配置文件格式如下

1
分 时 日 月 周  命令

6、查看设置的定时任务是否成功

1
crontab -l

7、crontab 基本命令

1
2
3
4
5
6
7
8
9
10
11
12
13
14
# 重启
/bin/systemctl restart crond.service

# 开启
/bin/systemctl start crond.service

# 停止
/bin/systemctl stop crond.service

# 重载
/bin/systemctl reload crond.service

# 状态
/bin/systemctl status crond.service

备份 FastDFS

1、备份脚本/usr/local/mysql/bakstorage.sh

1
2
3
4
5
6
7
#!/bin/bash

DATE=`date +%F`
BCK_DIR="/home/fdfs_storage_backup"
# mkdir /home/fdfs_storage_backup/
zip -q -r $BCK_DIR/"$DATE.zip" /home/fdfs_storage
find $BCK_DIR -name "*.zip*" -type f -mtime +7 -exec rm {} \; > /dev/null 2>&1

2、脚本附加权限

1
chmod +x bakstorage.sh

3、验证脚本是否正确

如果脚本没问题,会在 /home/fdfs_storage_backup 生成备份文件。

1
./bakstorage.sh

4、添加定时任务同上步骤。

整机备份

目的备份所有的目录。以 root 权限在”/“目录执行备份命令。

1、备份命令,打包一个备份文件centos7_backup.tgz

1
# tar cvpzf centos7_backup.tgz / --exclude=/proc --exclude=/centos7_backup.tgz --exclude=/mnt --exclude=/sys

2、恢复命令,把备份文件拷贝到根分区, 然后执行命令。

警告:这会把你分区里所有文件替换成压缩文档里的文件!

1
# tar xvpfz centos7_backup.tgz -C /

3、重新创建你剔除的目录

1
2
3
# mkdir proc
# mkdir mnt
# mkdir sys

4、执行以下命令再重启

1
2
# restorecon -Rv /
# reboot