Prefácio:
ambiente de desenvolvimento
Servidor: centos 7 (Tencent Cloud Lightweight Server)
Banco de dados: mysql 5.7
1. O que é crond?
crond é um processo daemon usado no linux para executar periodicamente determinadas tarefas ou aguardar o processamento de determinados eventos. É semelhante às tarefas agendadas no Windows. Após a instalação do sistema operacional, esta ferramenta de serviço será instalada por padrão e iniciará automaticamente O processo crond, o processo crond verifica regularmente se há uma tarefa a ser executada a cada minuto e, se houver uma tarefa a ser executada, a tarefa é executada automaticamente.
2. Use as etapas
1. crond comandos comumente usados
- Detectar se o serviço crond está instalado no sistema
- descrição do comando do serviço crond
- service crond start //Inicia o serviço
- crond stop do serviço //Fecha o serviço
- service crond restart //reinicie o serviço
- service crond reload //Recarrega configuração
- status crond do serviço //Ver status do serviço crontab
- crontab -e #Editar tarefa de tempo crontab
- crontab -l #Consulta tarefas do crontab
- crontab -r #Excluir todas as tarefas do crontab do usuário atual
- systemctl status crond.service #Ver o status do serviço do sistema crond
1.1 Inicie o serviço
início do crond do serviço
1.2 Adicionar tarefa
crontab -e
1.3 Verifique se a tarefa foi adicionada com sucesso
crontab -l
2. formato de tarefa agendada do crond
No arquivo crontab criado pelo usuário, cada linha representa uma tarefa e cada campo em cada linha representa uma configuração. Seu formato é dividido em seis campos. As primeiras cinco seções são seções de configuração de tempo e a sexta seção é o segmento de comando para ser executado, o formato é o seguinte:
00 | 02 | * | * | * | /back.sh |
minuto | hora | dia | mês | semana | comando |
#定时脚本 下面的意思就是 每天的凌晨2点执行一次脚本 (根据自己的需求执行脚本)
00 02 * * * /usr/local/mysql/mysqlzip/back.sh
em:
- minuto: Indica o minuto, que pode ser qualquer número inteiro de 0 a 59.
- hora: Indica a hora, que pode ser qualquer número inteiro de 0 a 23.
- day: Indica a data, que pode ser qualquer número inteiro de 1 a 31.
- mês: Indica o mês, que pode ser qualquer número inteiro de 1 a 12.
- semana: Indica o dia da semana, que pode ser qualquer número inteiro de 0 a 7, onde 0 ou 7 representa o domingo.
- comando: O comando a ser executado, que pode ser um comando do sistema ou um arquivo de script escrito por você.
Nota: O caminho do script deve ser o caminho completo do script (full path: o caminho obtido através do comando pwd)
3. Escreva roteiros
- Modificação 1: nome de usuário do banco de dados
- Modificação 2: senha do banco de dados
- Modificação 3: nome do banco de dados
- Modificação 4: Local de armazenamento dos arquivos de backup
- Modificação 5: O endereço do arquivo mysqldump (você pode usar whereis mysqldump para consultar a localização do mysqldump)
- Modificação 6: Mais de 7 arquivos excluem os arquivos de backup mais antigos e mudam de acordo com suas necessidades reais; o objetivo de adicionar é evitar que muitos backups ocupem muito espaço de armazenamento.
#!/bin/bash
echo '##########################################'
echo '###### The database is automatically backed up at 01:00 am every day ######'
echo '##########################################'
# Setting environment variables
DATE=$(date +%Y_%m_%d_%H_%M_%S)
# $(date +%Y%m%d)
# 数据库用户名
USERNAME=修改1
# 密码
PASSWORD=修改2
# 要备份的数据库
DB=修改3
# Docker容器ID
#DOCKERID=********
# ubuntu 系统非 root 用户,要将备份产生的文件放到 xxx 用户所在的目录下,否则必须使用 sudo 输入管理员密码执行此脚本。
# Linux服务器上备份文件目录 修改4
DIR=/usr/local/mysql/mysqlzip
echo 'Get system date: ' $DATE
if [ ! -d "$DIR" ]; then
mkdir $DIR
fi
cd $DIR
echo 'backup started...' $(date "+%Y-%m-%d %H:%M:%S")
# 使用docker进入mysql容器,执行mysqldump备份数据库文件
# docker exec -it 容器名称 mysqldump -u用户名 -p密码 要备份的数据库名称 | gzip > 要打包到的文件名称
#docker exec $DOCKERID /usr/bin/mysqldump -u $USERNAME --password=$PASSWORD $DB | gzip > $DIR/$DB_$DATE.sql.gz
# 备份 直接安装在 linux 系统中的数据库 修改5
/usr/local/mysql/bin/mysqldump -u$USERNAME -p$PASSWORD $DB | gzip > $DIR/$DB_$DATE.sql.gz
# just backup the latest 7 days
#保留最近文件数7,删除其它多余的文件 修改6 (也可以去掉 主要为了防止备份太多占用太多存储)
ReservedNum=7
date=$(date "+%Y%m%d-%H%M%S")
FileNum=$(ls -l $DIR|grep ^- |wc -l)
while(( $FileNum > $ReservedNum))
do
OldFile=$(ls -rt $DIR| head -1)
echo $date "Delete File:"$OldFile
rm -rf $DIR/$OldFile
let "FileNum--"
done
echo 'backup completed!' $(date "+%Y-%m-%d %H:%M:%S")
3.1 Detectar e executar o script sh recém-escrito
conceder permissões, executar
chmod 777 back.sh
Em seguida, teste o script sh de execução
./back.sh
Resumir
Com crontab, não há necessidade de se preocupar em esquecer de fazer backup do banco de dados.