本机备份脚本
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
<h1><a id="_0"></a>本机备份脚本</h1>
<pre><div class="hljs"><code class="lang-shell"><span class="hljs-meta">#</span><span class="bash">设置本机数据库登录信息</span>
database='v_kun_dev'
date_time=`date +%Y-%m-%d-%H-%M`
<span class="hljs-meta">#</span><span class="bash">保存目录中的文件个数</span>
count=20
<span class="hljs-meta">#</span><span class="bash">备份路径</span>
path=/home/dataBack/
<span class="hljs-meta">
#</span><span class="bash">备份数据库sql文件并指定目录</span>
<span class="hljs-meta">#</span><span class="bash"> 本地</span>
mysqldump $database > $path${database}_$(date +%Y%m%d%H%M).sql
<span class="hljs-meta">#</span><span class="bash"> 远程</span>
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 "-----------------数据备份失败-----------------"
<span class="hljs-meta">
#</span><span class="bash">找出需要删除的备份</span>
delfile=`ls -l -crt $path/*.sql | awk '{print $9 }' | head -1`
<span class="hljs-meta">#</span><span class="bash">判断现在的备份数量是否大于阈值</span>
number=`ls -l -crt $path/*.sql | awk '{print $9 }' | wc -l`
if [ $number -gt $count ]
then
rm $delfile #删除最早生成的备份,只保留count数量的备份
echo "-----------------已删除过去备份sql $delfile-----------------"
fi
</code></div></pre>
<h1><a id="_28"></a>新建备份目录</h1>
<pre><div class="hljs"><code class="lang-shell">mkdir -p /home/backups/risen_gzsly_log/scripts
mkdir -p /home/backups/risen_gzsly_log/files
</code></div></pre>
<p>scripts 是用来放改备份文件的名称的脚本<br />
files 备份的文件</p>
<h1><a id="_36"></a>新增修改备份文件名的脚本</h1>
<pre><div class="hljs"><code class="lang-shell">echo '#!/bin/bash
<span class="hljs-meta">#</span><span class="bash"> 文件名</span>
echo -n "back_risen_gzsly_log_`date -u +\"%Y%m%d%H%M%S\"`.gz"' \
<span class="hljs-meta">></span><span class="bash"> /home/backups/risen_gzsly_log/scripts/target.sh</span>
</code></div></pre>
<p>其中修改back_<code>date -u +\"%Y%m%d%H%M%S\"</code>.gz就是文件名称<br />
脚本路径/home/backups/risen_gzsly_log/scripts/target.sh根据第一步的路径修改</p>
<h1><a id="_46"></a>脚本加权限</h1>
<pre><div class="hljs"><code class="lang-shell">chmod 777 /home/backups/risen_gzsly_log/scripts/target.sh
</code></div></pre>
<h1><a id="docker__52"></a>docker 运行</h1>
<pre><div class="hljs"><code class="lang-shell">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
</code></div></pre>
<ul>
<li><strong>DB_SERVER</strong>: 连接到数据库的主机名。必需的。</li>
<li><strong>DB_PORT</strong>: 用于连接数据库的端口。可选,默认为3306</li>
<li><strong>DB_USER</strong>: 数据库用户名</li>
<li><strong>DB_PASS</strong>: 数据库密码</li>
<li><strong>DB_NAMES</strong>: 要转储的数据库名称;默认为数据库服务器中的所有数据库</li>
<li><strong>DB_DUMP_FREQ</strong>: 转储的频率,以分钟为单位。默认为1440分钟,或每天一次。</li>
<li><strong>DB_DUMP_BEGIN</strong>: 进行第一次转储的时间。默认为直接。必须是两种格式之一:</li>
</ul>
<blockquote>
<ul>
<li>标记绝对: HHMM,例如2330或0415</li>
<li>段落引用相对: +MM,即启动容器后多少分钟,例如+0(立即),+10(10分钟),或+90(一个半小时)</li>
</ul>
</blockquote>
<ul>
<li><strong>DB_DUMP_CRON</strong>: 使用标准crontab语法设置转储调度,一行。</li>
<li><strong>RUN_ONCE</strong>: 执行备份一次,设置RUN_ONCE后退出。如果你使用外部调度器(例如,作为编配解决方案的一部分,如Cattle或Docker Swarm或kubernetes cron作业),并且不希望容器内部执行调度,这是很有用的。如果使用此选项,那么所有其他调度选项(如DB_DUMP_FREQ和DB_DUMP_BEGIN和DB_DUMP_CRON)都将过时。</li>
<li><strong>DB_DUMP_DEBUG</strong>: 如果设置为true,输出大量shell脚本消息到容器日志。否则只打印基本消息。</li>
<li><strong>DB_DUMP_TARGET</strong>: 存放转储文件的地方,应该是一个目录。可以使用空格分隔多个目标。支持三种格式:</li>
</ul>
<blockquote>
<ul>
<li>Local: 如果DB_DUMP_TARGET的值以“/”开头,将转储到本地路径,该路径应该是卷挂载路径。</li>
<li>SMB: 如果DB_DUMP_TARGET的值是SMB: //hostname/share/path/格式的URL,则它将通过SMB进行连接。</li>
<li>S3: 如果DB_DUMP_TARGET的值是S3: //bucketname/path格式的URL,那么它将通过awscli连接。</li>
</ul>
</blockquote>
<ul>
<li><strong>DB_DUMP_SAFECHARS</strong>: 转储文件名通常包含: 在日期,以符合RFC3339。有些系统和外壳不喜欢这个角色。如果设置了这个环境变量,它会将all: 替换为-。</li>
<li><strong>COMPRESSION</strong>: 压缩使用。支持: gzip(默认)、bzip2</li>
<li><strong>DB_DUMP_BY_SCHEMA</strong>: 是否在压缩文件中每个模式使用单独的文件(true),或单个转储文件(false)。默认值为false。</li>
<li><strong>DB_DUMP_KEEP_PERMISSIONS</strong>: 文件目标是否保留权限。默认情况下,mysql-backup使用cp -a将备份压缩文件复制到目标。在具有特定权限的特定文件系统中,这可能会导致错误。可以通过设置DB_DUMP_KEEP_PERMISSIONS=false来禁用-a标志。默认值为true。</li>
<li><strong>MYSQLDUMP_OPTS</strong>: 传递给mysqldump的选项字符串,例如MYSQLDUMP_OPTS="——opt abc——param def——max_allowed_packet=123455678"将运行mysqldump——opt abc——param def——max_allowed_packet=123455678<br />
NICE: true to perform mysqldump with ionice and NICE option</li>
</ul>
<h1><a id="_92"></a>官网</h1>
<p><a href="https://hub.docker.com/r/databack/mysql-backup" target="_blank">docker</a></p>
<p><a href="https://github.com/databacker/mysql-backup" target="_blank">GitHub</a></p>