mirror of
https://github.com/tiredofit/docker-db-backup.git
synced 2025-12-21 21:33:28 +01:00
Compare commits
7 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
22e126200e | ||
|
|
3e79ca68a0 | ||
|
|
bfeb07d7c0 | ||
|
|
8a5d647de7 | ||
|
|
4f5c04acac | ||
|
|
494f742cb0 | ||
|
|
e7b9a36745 |
1
.github/workflows/main.yml
vendored
1
.github/workflows/main.yml
vendored
@@ -19,7 +19,6 @@ jobs:
|
||||
id: prep
|
||||
run: |
|
||||
DOCKER_IMAGE=${GITHUB_REPOSITORY/docker-/}
|
||||
set -x
|
||||
if [[ $GITHUB_REF == refs/heads/* ]]; then
|
||||
if [[ $GITHUB_REF == refs/heads/*/* ]] ; then
|
||||
BRANCH="${DOCKER_IMAGE}:$(echo $GITHUB_REF | sed "s|refs/heads/||g" | sed "s|/|-|g")"
|
||||
|
||||
1
.github/workflows/manual.yml
vendored
1
.github/workflows/manual.yml
vendored
@@ -19,7 +19,6 @@ jobs:
|
||||
id: prep
|
||||
run: |
|
||||
DOCKER_IMAGE=${GITHUB_REPOSITORY/docker-/}
|
||||
set -x
|
||||
if [[ $GITHUB_REF == refs/heads/* ]]; then
|
||||
if [[ $GITHUB_REF == refs/heads/*/* ]] ; then
|
||||
BRANCH="${DOCKER_IMAGE}:$(echo $GITHUB_REF | sed "s|refs/heads/||g" | sed "s|/|-|g")"
|
||||
|
||||
25
CHANGELOG.md
25
CHANGELOG.md
@@ -1,3 +1,28 @@
|
||||
## 3.5.6 2022-11-15 <dave at tiredofit dot ca>
|
||||
|
||||
### Changed
|
||||
- Add failure if DB_TYPE empty or malformed
|
||||
|
||||
|
||||
## 3.5.5 2022-10-18 <dave at tiredofit dot ca>
|
||||
|
||||
### Changed
|
||||
- Fix for S3 backups and trailing slashes (@greena13)
|
||||
|
||||
|
||||
## 3.5.4 2022-10-13 <dave at tiredofit dot ca>
|
||||
|
||||
### Changed
|
||||
- Fix for Influx DB 1 backups when compression enabled
|
||||
|
||||
|
||||
## 3.5.3 2022-10-12 <dave at tiredofit dot ca>
|
||||
|
||||
### Changed
|
||||
- Remove build dependencies for blobxfer making image size smaller
|
||||
- Remove silencing commands limiting Postgres backups from working without DEBUG_MODE=TRUE
|
||||
|
||||
|
||||
## 3.5.2 2022-10-11 <dave at tiredofit dot ca>
|
||||
|
||||
### Added
|
||||
|
||||
@@ -20,6 +20,10 @@ RUN set -ex && \
|
||||
bzip2-dev \
|
||||
git \
|
||||
libarchive-dev \
|
||||
libressl-dev \
|
||||
libffi-dev \
|
||||
python3-dev \
|
||||
py3-pip \
|
||||
xz-dev \
|
||||
&& \
|
||||
\
|
||||
@@ -69,7 +73,6 @@ RUN set -ex && \
|
||||
make && \
|
||||
make install && \
|
||||
\
|
||||
apk add gcc build-base libressl-dev libffi-dev python3-dev py3-pip && \
|
||||
pip3 install blobxfer && \
|
||||
\
|
||||
### Cleanup
|
||||
@@ -80,4 +83,4 @@ RUN set -ex && \
|
||||
rm -rf /root/.cache /tmp/* /var/cache/apk/*
|
||||
|
||||
### S6 Setup
|
||||
ADD install /
|
||||
COPY install /
|
||||
|
||||
24
README.md
24
README.md
@@ -189,19 +189,19 @@ Your Organization will be mapped to `DB_USER` and your root token will need to b
|
||||
|
||||
If `BACKUP_LOCATION` = `S3` then the following options are used.
|
||||
|
||||
| Parameter | Description | Default |
|
||||
|-----------------------|-------------------------------------------------------------------------------------------|---------|
|
||||
| `S3_BUCKET` | S3 Bucket name e.g. `mybucket` | |
|
||||
| `S3_KEY_ID` | S3 Key ID | |
|
||||
| `S3_KEY_SECRET` | S3 Key Secret | |
|
||||
| `S3_PATH` | S3 Pathname to save to (must end in a trailing slash e.g. '`backup/`') | |
|
||||
| `S3_REGION` | Define region in which bucket is defined. Example: `ap-northeast-2` | |
|
||||
| `S3_HOST` | Hostname (and port) of S3-compatible service, e.g. `minio:8080`. Defaults to AWS. | |
|
||||
| `S3_PROTOCOL` | Protocol to connect to `S3_HOST`. Either `http` or `https`. Defaults to `https`. | `https` |
|
||||
| `S3_EXTRA_OPTS` | Add any extra options to the end of the `aws-cli` process execution | |
|
||||
| Parameter | Description | Default |
|
||||
|-----------------------|------------------------------------------------------------------------------------------|---------|
|
||||
| `S3_BUCKET` | S3 Bucket name e.g. `mybucket` | |
|
||||
| `S3_KEY_ID` | S3 Key ID | |
|
||||
| `S3_KEY_SECRET` | S3 Key Secret | |
|
||||
| `S3_PATH` | S3 Pathname to save to (must NOT end in a trailing slash e.g. '`backup`') | |
|
||||
| `S3_REGION` | Define region in which bucket is defined. Example: `ap-northeast-2` | |
|
||||
| `S3_HOST` | Hostname (and port) of S3-compatible service, e.g. `minio:8080`. Defaults to AWS. | |
|
||||
| `S3_PROTOCOL` | Protocol to connect to `S3_HOST`. Either `http` or `https`. Defaults to `https`. | `https` |
|
||||
| `S3_EXTRA_OPTS` | Add any extra options to the end of the `aws-cli` process execution | |
|
||||
| `S3_CERT_CA_FILE` | Map a volume and point to your custom CA Bundle for verification e.g. `/certs/bundle.pem` | |
|
||||
| _*OR*_ | | |
|
||||
| `S3_CERT_SKIP_VERIFY` | Skip verifying self signed certificates when connecting | `TRUE` |
|
||||
| _*OR*_ | | |
|
||||
| `S3_CERT_SKIP_VERIFY` | Skip verifying self signed certificates when connecting | `TRUE` |
|
||||
|
||||
#### Upload to a Azure storage account by `blobxfer`
|
||||
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
#!/command/with-contenv bash
|
||||
|
||||
bootstrap_variables() {
|
||||
sanity_var DB_TYPE "Set appropriate DB_TYPE"
|
||||
case "${DB_TYPE,,}" in
|
||||
couch* )
|
||||
dbtype=couch
|
||||
@@ -74,12 +75,18 @@ bootstrap_variables() {
|
||||
sqlite* )
|
||||
dbtype=sqlite3
|
||||
;;
|
||||
* )
|
||||
print_error "I don't recognize 'DB_TYPE=${DB_TYPE}' - Exitting.."
|
||||
exit 99
|
||||
;;
|
||||
esac
|
||||
|
||||
if [ "${BACKUP_LOCATION,,}" = "s3" ] || [ "${BACKUP_LOCATION,,}" = "minio" ] ; then
|
||||
file_env 'S3_KEY_ID'
|
||||
file_env 'S3_KEY_SECRET'
|
||||
fi
|
||||
|
||||
|
||||
}
|
||||
|
||||
backup_couch() {
|
||||
@@ -116,7 +123,7 @@ backup_influx() {
|
||||
influxd backup ${influx_compression} ${bucket} -portable -host ${DB_HOST}:${DB_PORT} ${EXTRA_OPTS} "${TEMP_LOCATION}"/"${target_dir}"
|
||||
exit_code=$?
|
||||
check_exit_code $target_dir
|
||||
print_notice "Creating archive file of '${target_dir}' with tar ${compresion_string}"
|
||||
print_notice "Creating archive file of '${target_dir}' with tar ${compression_string}"
|
||||
tar cf - "${TEMP_LOCATION}"/"${target_dir}" | $dir_compress_cmd > "${TEMP_LOCATION}"/"${target_dir}".tar"${extension}"
|
||||
target=influx_${db}_${DB_HOST#*//}_${now}.tar${extension}
|
||||
generate_checksum
|
||||
@@ -214,7 +221,7 @@ backup_mysql() {
|
||||
compression
|
||||
pre_dbbackup $db
|
||||
print_notice "Dumping MySQL/MariaDB database: '${db}' ${compression_string}"
|
||||
silent mysqldump --max-allowed-packet=${MYSQL_MAX_ALLOWED_PACKET} -h ${DB_HOST} -P ${DB_PORT} -u${DB_USER} ${single_transaction} ${stored_procedures} ${EXTRA_OPTS} --databases $db | $compress_cmd > "${TEMP_LOCATION}"/"${target}"
|
||||
mysqldump --max-allowed-packet=${MYSQL_MAX_ALLOWED_PACKET} -h ${DB_HOST} -P ${DB_PORT} -u${DB_USER} ${single_transaction} ${stored_procedures} ${EXTRA_OPTS} --databases $db | $compress_cmd > "${TEMP_LOCATION}"/"${target}"
|
||||
exit_code=$?
|
||||
check_exit_code $target
|
||||
generate_checksum
|
||||
@@ -228,7 +235,7 @@ backup_mysql() {
|
||||
compression
|
||||
pre_dbbackup all
|
||||
print_notice "Dumping all MySQL / MariaDB databases: '$(echo ${db_names} | xargs | tr ' ' ',')' ${compression_string}"
|
||||
silent mysqldump --max-allowed-packet=${MYSQL_MAX_ALLOWED_PACKET} -h ${DB_HOST} -P ${DB_PORT} -u${DB_USER} ${single_transaction} ${stored_procedures} ${EXTRA_OPTS} --databases $(echo ${db_names} | xargs) | $compress_cmd > "${TEMP_LOCATION}"/"${target}"
|
||||
mysqldump --max-allowed-packet=${MYSQL_MAX_ALLOWED_PACKET} -h ${DB_HOST} -P ${DB_PORT} -u${DB_USER} ${single_transaction} ${stored_procedures} ${EXTRA_OPTS} --databases $(echo ${db_names} | xargs) | $compress_cmd > "${TEMP_LOCATION}"/"${target}"
|
||||
exit_code=$?
|
||||
check_exit_code $target
|
||||
generate_checksum
|
||||
@@ -263,7 +270,7 @@ backup_pgsql() {
|
||||
compression
|
||||
pre_dbbackup $db
|
||||
print_notice "Dumping PostgresSQL database: '${db}' ${compression_string}"
|
||||
silent pg_dump -h ${DB_HOST} -p ${DB_PORT} -U ${DB_USER} $db ${EXTRA_OPTS} | $compress_cmd > ${TEMP_LOCATION}/${target}
|
||||
pg_dump -h ${DB_HOST} -p ${DB_PORT} -U ${DB_USER} $db ${EXTRA_OPTS} | $compress_cmd > ${TEMP_LOCATION}/${target}
|
||||
exit_code=$?
|
||||
check_exit_code $target
|
||||
generate_checksum
|
||||
@@ -285,7 +292,7 @@ backup_pgsql() {
|
||||
for x_db_name in ${tmp_db_names} ; do
|
||||
pgexclude_arg=$(echo ${pgexclude_arg} --exclude-database=${x_db_name})
|
||||
done
|
||||
silent pg_dumpall -h ${DB_HOST} -U ${DB_USER} -p ${DB_PORT} ${pgexclude_arg} ${EXTRA_OPTS} | $compress_cmd > ${TEMP_LOCATION}/${target}
|
||||
pg_dumpall -h ${DB_HOST} -U ${DB_USER} -p ${DB_PORT} ${pgexclude_arg} ${EXTRA_OPTS} | $compress_cmd > ${TEMP_LOCATION}/${target}
|
||||
exit_code=$?
|
||||
check_exit_code $target
|
||||
generate_checksum
|
||||
@@ -471,7 +478,7 @@ cleanup_old_data() {
|
||||
;;
|
||||
"s3" | "minio" )
|
||||
print_info "Cleaning up old backups on S3 storage"
|
||||
aws ${PARAM_AWS_ENDPOINT_URL} s3 ls s3://${S3_BUCKET}/${S3_PATH} ${s3_ssl} ${s3_ca_cert} ${S3_EXTRA_OPTS} | grep " DIR " -v | grep " PRE " -v | while read -r s3_file; do
|
||||
aws ${PARAM_AWS_ENDPOINT_URL} s3 ls s3://${S3_BUCKET}/${S3_PATH}/ ${s3_ssl} ${s3_ca_cert} ${S3_EXTRA_OPTS} | grep " DIR " -v | grep " PRE " -v | while read -r s3_file; do
|
||||
s3_createdate=$(echo $s3_file | awk {'print $1" "$2'})
|
||||
s3_createdate=$(date -d "$s3_createdate" "+%s")
|
||||
s3_olderthan=$(echo $(( $(date +%s)-${DB_CLEANUP_TIME}*60 )))
|
||||
@@ -479,7 +486,7 @@ cleanup_old_data() {
|
||||
s3_filename=$(echo $s3_file | awk {'print $4'})
|
||||
if [ "$s3_filename" != "" ] ; then
|
||||
print_debug "Deleting $s3_filename"
|
||||
silent aws ${PARAM_AWS_ENDPOINT_URL} s3 rm s3://${S3_BUCKET}/${S3_PATH}${s3_filename} ${s3_ssl} ${s3_ca_cert} ${S3_EXTRA_OPTS}
|
||||
silent aws ${PARAM_AWS_ENDPOINT_URL} s3 rm s3://${S3_BUCKET}/${S3_PATH}/${s3_filename} ${s3_ssl} ${s3_ca_cert} ${S3_EXTRA_OPTS}
|
||||
fi
|
||||
fi
|
||||
|
||||
|
||||
Reference in New Issue
Block a user