以mysql为例。
######1.备份网站数据库
```bash
mysqldump -root(数据库用户名) -pwd(数据库密码) --default-character-set=utf8 dev(数据库名) > dev_bak.sql(保存的数据库文件格式)
```
可以写成`sh`文件
```bash
#Funciont: Backup website and mysql database
#IMPORTANT!!!Please Setting the following Values!
######~Set MySQL UserName and password~######
MYSQL_UserName=root
MYSQL_PassWord=xxxx
######~Set MySQL Database you want to backup~######
Backup_Database_Name=ghost-blog
#####~Set date
RQ=`date +%Y%m%d`
#Values Setting END!
/usr/bin/mysqldump -u$MYSQL_UserName -p$MYSQL_PassWord $Backup_Database_Name|gzip > /opt/backup/db_$Backup_Database_Name-$RQ.gz
```
或者
```bash
/usr/bin/mysqldump --defaults-extra-file=/etc/my.cnf ghost-blog-new | gzip > /opt/backup/db_ghost-blog-new-$(date +%Y%m%d_%H%M%S).sql.gz
```
后者需要在 `/etc/my.cnf` 文件中: `[client]` 部分添加脚本(指定用户、密码):
```bash
host=localhost
user=数据库用户
password='数据库密码'
```
######2.还原备份的数据库
```bash
mysql -root -pwd dev < dev_bak.sql
```
######3.设置定时备份
打开`crontab -e`
```bash
0 3 * * * /opt/sherlock/bin/backup_db.sh
```
添加上面的定时脚本,每天凌晨3点进行执行备份。我们可以先执行脚本看看是否可以正常进行,如果可以正常进行在设置定时。如果我们的网站数据不大,更新频率不是太多,我们手工备份也可以,没有必要每天的都备份。
设置/修改完之后记得重启下 `crond` 服务
```bash
service crond restart
```
加入开机启动
```bash
echo "service crond restart" >> /etc/rc.d/rc.local
```
######4.`crontab`命令详解
1).命令格式:
```bash
crontab [-u user] file
crontab [-u user] [ -e | -l | -r ]
```
2).命令功能:
通过`crontab` 命令,我们可以在固定的间隔时间执行指定的系统指令或 `shell script`脚本。时间间隔的单位可以是分钟、小时、日、月、周及以上的任意组合。这个命令非常设合周期性的日志分析或数据备份等工作。
3).命令参数:
-u user:用来设定某个用户的crontab服务,例如,“-u ixdba”表示设定ixdba用户的crontab服务,此参数一般有root用户来运行。
file:file是命令文件的名字,表示将file做为crontab的任务列表文件并载入crontab。如果在命令行中没有指定这个文件,crontab命令将接受标准输入(键盘)上键入的命令,并将它们载入crontab。
-e:编辑某个用户的crontab文件内容。如果不指定用户,则表示编辑当前用户的crontab文件。
-l:显示某个用户的crontab文件内容,如果不指定用户,则表示显示当前用户的crontab文件内容。
-r:从/var/spool/cron目录中删除某个用户的crontab文件,如果不指定用户,则默认删除当前用户的crontab文件。
-i:在删除用户的crontab文件时给确认提示。
4). 列出crontab文件
```bash
$ crontab -l
```
可以使用这种方法在`$HOME`目录中对`crontab`文件做一备份:
```bash
$ crontab -l > $HOME/mycron
```
这样,一旦不小心误删了`crontab`文件,可以迅速恢复。
5). 编辑crontab文件
```bash
$ crontab -e
```
6).使用实例
实例1:每1分钟执行一次command
```bash
* * * * * command
```
实例2:每小时的第3和第15分钟执行
```bash
3,15 * * * * command
```
实例3:在上午8点到11点的第3和第15分钟执行
```bash
3,15 8-11 * * * command
```
实例4:每隔两天的上午8点到11点的第3和第15分钟执行
```bash
3,15 8-11 */2 * * command
```
实例5:每个星期一的上午8点到11点的第3和第15分钟执行
```bash
3,15 8-11 * * 1 command
```
实例6:每晚的21:30重启smb
```bash
30 21 * * * /etc/init.d/smb restart
```
实例7:每月1、10、22日的4 : 45重启smb
```bash
45 4 1,10,22 * * /etc/init.d/smb restart
```
实例8:每周六、周日的1 : 10重启smb
```bash
10 1 * * 6,0 /etc/init.d/smb restart
```
实例9:每天18 : 00至23 : 00之间每隔30分钟重启smb
```bash
0,30 18-23 * * * /etc/init.d/smb restart
```
实例10:每星期六的晚上11 : 00 pm重启smb
```bash
0 23 * * 6 /etc/init.d/smb restart
```
实例11:每一小时重启smb
```bash
* */1 * * * /etc/init.d/smb restart
```
实例12:晚上11点到早上7点之间,每隔一小时重启smb
```bash
* 23-7/1 * * * /etc/init.d/smb restart
```
实例13:每月的4号与每周一到周三的11点重启smb
```bash
0 11 4 * mon-wed /etc/init.d/smb restart
```
实例14:一月一号的4点重启smb
```bash
0 4 1 jan * /etc/init.d/smb restart
```
实例15:每小时执行/etc/cron.hourly目录内的脚本
```bash
01 * * * * root run-parts /etc/cron.hourly
```
说明:
`run-parts`这个参数了,如果去掉这个参数的话,后面就可以写要运行的某个脚本名,而不是目录名了
定时备份mysql数据库