- shell备份docker中的数据库
- docker exec
- crontab 系统定时任务
- crontab参数说明
- 特殊符号
- 实例说明
-
shell备份docker中的数据库
#!/bin/bash
echo "开始备份"
#定义当前时间
now=$(date "+%Y%m%d %H:%M:%S")
#now=date +%Y%m%d %H:%M:%S
backup_dir="/mydata/back_up"
#通过名称查找容器Id
mysql=`docker ps -aqf "name=mysql"`
echo $mysql
docker exec -i ${mysql} bash<<'EOF'
#mysqldump导出表结构和数据
if [ ! -d "/backup" ]; then
mkdir -p /backup
fi
if [ -f "/backup/db.sql" ]; then
rm -rf /backup/db.sql
fi
#mysqldum --single-transaction -uroot --password=*** --all-databases > /backup/db.sql
mysqldump --single-transaction -uroot --password=*** --hex-blob --databases wqsw > /backup/db.sql
echo '成功制作备份sql'
if [ $? -ne 0 ]; then
echo 'mysqldump运行失败'
exit
EOF
fi
exit
EOF
#将容器内sql文件导出到服务器
if [ ! -d "${backup_dir}" ]; then
mkdir -p "${backup_dir}"
fi
docker cp ${mysql}:/backup/db.sql ${backup_dir}/db_${now}.sql
if [ $? -ne 0 ]; then
echo 'docker cp文件失败'
exit
fi
echo '完成备份数据'
-
docker exec 使用方式
docker exec --help
Options:
-d, --detach Detached mode: run command in the background
--detach-keys string Override the key sequence for detaching a
container
-e, --env list Set environment variables
--env-file list Read in a file of environment variables
-i, --interactive Keep STDIN open even if not attached
--privileged Give extended privileges to the command
-t, --tty Allocate a pseudo-TTY
-u, --user string Username or UID (format:
<name|uid>[:<group|gid>])
-w, --workdir string Working directory inside the container
docker exec选项列表:
名称 默认 描述
--detach, -d 后台运行模式,在后台执行命令相关命令
--detach-keys 覆盖容器后台运行的一些参数信息
--env, -e 设置环境变量
--interactive, -i 展示容器输入信息STDIN
--privileged 为命令提供一些扩展权限
--tty, -t 命令行交互模式
--user, -u 设置用户名(format: <name|uid>[:<group|gid>])
--workdir, -w 指定容器内的目录
-
crontab 系统定时任务
systemctl restart crond
systemctl status crond
crontab -e
选项 | 功能 |
-e | 编辑 crontab 定时任务 |
-l | 查询 crontab 任务 |
-r | 删除当前用户所有的 crontab 任务 |
#每一份执行dump.sh 脚本
*/1 * * * * /mydata/dump.sh
项目 | 含义 | 范围 |
第一个“*” | 一小时当中的第几分钟 | 0-59 |
第二个“*” | 一天当中的第几小时 | 0-23 |
第三个“*” | 一个月当中的第几天 | 1-31 |
第四个“*” | 一年当中的第几月 | 1-12 |
第五个“*” | 一周当中的星期几 | 0-7 ( 0 和 7 都 代 表 星 期 日) |
特殊符号
特殊符号 | 含义 |
* | 代表任何时间。比如第一个“*”就代表一小时中每分钟 都执行一次的意思。 |
, | 代表不连续的时间。比如“0 8,12,16 * * * 命令”,就代表 在每天的 8 点 0 分,12 点 0 分,16 点 0 分都执行一次命令 |
- | 代表连续的时间范围。比如“0 5 * * 1-6 命令”,代表在 周一到周六的凌晨 5 点 0 分执行命令 |
*/n | 代表每隔多久执行一次。比如“*/10 * * * * 命令”,代 表每隔 10 分钟就执行一遍命令 |
实例说明
时间 | 含义 |
45 22 * * * | 每天 22 点 45 分执行 |
0 17 * * 1 | 每周 1 的 17 点 0 分执行 |
0 5 1,15 * * | 每月 1 号和 15 号的凌晨 5 点 0 分执行 |
40 4 * * 1-5 | 每周一到周五的凌晨 4 点 40 分执行命 |
*/10 4 * * * 0 0 1,15 * 1 | 每天的凌晨 4 点,每隔 10 分钟执行一次命令 每月 1 号和 15 号,每周 1 的 0 点 0 分都会执行命令 |
备注:星期几和几号最好不要同时出现,因为他们定义的都 是天。非常容易让管理员混乱。