备份MySQL数据库

23 0 0 0

本机备份脚本

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
#设置本机数据库登录信息 database='v_kun_dev' date_time=`date +%Y-%m-%d-%H-%M` #保存目录中的文件个数 count=20 #备份路径 path=/home/dataBack/ #备份数据库sql文件并指定目录 # 本地 mysqldump $database > $path${database}_$(date +%Y%m%d%H%M).sql # 远程 mysqldump -host v-kun.com -u root --port 13306 -p Mysql.158747928 --databases $database > $path${database}_$(date +%Y%m%d%H%M).sql [ $? -eq 0 ] && echo "-----------------数据备份成功_$date_time-----------------" || echo "-----------------数据备份失败-----------------" #找出需要删除的备份 delfile=`ls -l -crt $path/*.sql | awk '{print $9 }' | head -1` #判断现在的备份数量是否大于阈值 number=`ls -l -crt $path/*.sql | awk '{print $9 }' | wc -l` if [ $number -gt $count ] then rm $delfile #删除最早生成的备份,只保留count数量的备份 echo "-----------------已删除过去备份sql $delfile-----------------" fi

新建备份目录

1
2
mkdir -p /home/backups/risen_gzsly_log/scripts mkdir -p /home/backups/risen_gzsly_log/files

scripts 是用来放改备份文件的名称的脚本
files 备份的文件

新增修改备份文件名的脚本

1
2
3
4
echo '#!/bin/bash # 文件名 echo -n "back_risen_gzsly_log_`date -u +\"%Y%m%d%H%M%S\"`.gz"' \ > /home/backups/risen_gzsly_log/scripts/target.sh

其中修改back_date -u +\"%Y%m%d%H%M%S\".gz就是文件名称
脚本路径/home/backups/risen_gzsly_log/scripts/target.sh根据第一步的路径修改

脚本加权限

1
chmod 777 /home/backups/risen_gzsly_log/scripts/target.sh

docker 运行

1
2
3
4
5
6
7
8
9
10
11
12
13
docker run -d -u root --restart=always \ --name back_risen_lsyh_mh \ -e DB_DUMP_TARGET=/db \ -e DB_SERVER=192.168.5.41 \ -e DB_USER=lsyh_mh \ -e DB_PASS=risen*lsyh_mh \ -e DB_NAMES=risen_lsyh_mh \ -e DB_DUMP_CRON="0 2 * * *" \ -e DB_DUMP_DEBUG=true \ -e DB_DUMP_SAFECHARS=test \ -v /home/risen/backups/risen_lsyh_mh/scripts:/scripts.d \ -v /home/risen/backups/risen_lsyh_mh/files:/db \ databack/mysql-backup
  • DB_SERVER: 连接到数据库的主机名。必需的。
  • DB_PORT: 用于连接数据库的端口。可选,默认为3306
  • DB_USER: 数据库用户名
  • DB_PASS: 数据库密码
  • DB_NAMES: 要转储的数据库名称;默认为数据库服务器中的所有数据库
  • DB_DUMP_FREQ: 转储的频率,以分钟为单位。默认为1440分钟,或每天一次。
  • DB_DUMP_BEGIN: 进行第一次转储的时间。默认为直接。必须是两种格式之一:
  • 标记绝对: HHMM,例如2330或0415
  • 段落引用相对: +MM,即启动容器后多少分钟,例如+0(立即),+10(10分钟),或+90(一个半小时)
  • DB_DUMP_CRON: 使用标准crontab语法设置转储调度,一行。
  • RUN_ONCE: 执行备份一次,设置RUN_ONCE后退出。如果你使用外部调度器(例如,作为编配解决方案的一部分,如Cattle或Docker Swarm或kubernetes cron作业),并且不希望容器内部执行调度,这是很有用的。如果使用此选项,那么所有其他调度选项(如DB_DUMP_FREQ和DB_DUMP_BEGIN和DB_DUMP_CRON)都将过时。
  • DB_DUMP_DEBUG: 如果设置为true,输出大量shell脚本消息到容器日志。否则只打印基本消息。
  • DB_DUMP_TARGET: 存放转储文件的地方,应该是一个目录。可以使用空格分隔多个目标。支持三种格式:
  • Local: 如果DB_DUMP_TARGET的值以“/”开头,将转储到本地路径,该路径应该是卷挂载路径。
  • SMB: 如果DB_DUMP_TARGET的值是SMB: //hostname/share/path/格式的URL,则它将通过SMB进行连接。
  • S3: 如果DB_DUMP_TARGET的值是S3: //bucketname/path格式的URL,那么它将通过awscli连接。
  • DB_DUMP_SAFECHARS: 转储文件名通常包含: 在日期,以符合RFC3339。有些系统和外壳不喜欢这个角色。如果设置了这个环境变量,它会将all: 替换为-。
  • COMPRESSION: 压缩使用。支持: gzip(默认)、bzip2
  • DB_DUMP_BY_SCHEMA: 是否在压缩文件中每个模式使用单独的文件(true),或单个转储文件(false)。默认值为false。
  • DB_DUMP_KEEP_PERMISSIONS: 文件目标是否保留权限。默认情况下,mysql-backup使用cp -a将备份压缩文件复制到目标。在具有特定权限的特定文件系统中,这可能会导致错误。可以通过设置DB_DUMP_KEEP_PERMISSIONS=false来禁用-a标志。默认值为true。
  • MYSQLDUMP_OPTS: 传递给mysqldump的选项字符串,例如MYSQLDUMP_OPTS="——opt abc——param def——max_allowed_packet=123455678"将运行mysqldump——opt abc——param def——max_allowed_packet=123455678
    NICE: true to perform mysqldump with ionice and NICE option

官网

docker

GitHub

目录