aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--docker/base/Dockerfile.j28
-rw-r--r--docker/base/apt_preferences.debian4
-rw-r--r--docker/base/apt_preferences.ubuntu5
-rw-r--r--docker/base/percona-release.repo13
-rw-r--r--docker/base/sources.list.debian4
-rw-r--r--docker/base/sources.list.ubuntu3
-rw-r--r--docker/xtrabackup/Dockerfile.j224
-rwxr-xr-xdocker/xtrabackup/backup.sh49
8 files changed, 107 insertions, 3 deletions
diff --git a/docker/base/Dockerfile.j2 b/docker/base/Dockerfile.j2
index 639f85297..0b8b81011 100644
--- a/docker/base/Dockerfile.j2
+++ b/docker/base/Dockerfile.j2
@@ -63,15 +63,17 @@ COPY yum.conf /etc/yum.conf
'influxdb.repo',
'nfs_ganesha.repo',
'opendaylight.repo',
- 'td.repo',
- 'rabbitmq_rabbitmq-server.repo'
+ 'percona-release.repo',
+ 'rabbitmq_rabbitmq-server.repo',
+ 'td.repo'
] %}
{% set base_yum_repo_keys = [
'https://artifacts.elastic.co/GPG-KEY-elasticsearch',
+ 'https://grafanarel.s3.amazonaws.com/RPM-GPG-KEY-grafana',
'https://repos.influxdata.com/influxdb.key',
'https://packagecloud.io/gpg.key',
- 'https://grafanarel.s3.amazonaws.com/RPM-GPG-KEY-grafana',
+ 'https://www.percona.com/downloads/RPM-GPG-KEY-percona',
'https://packages.treasuredata.com/GPG-KEY-td-agent'
] %}
{% endif %}
diff --git a/docker/base/apt_preferences.debian b/docker/base/apt_preferences.debian
index e69de29bb..1ac2b108a 100644
--- a/docker/base/apt_preferences.debian
+++ b/docker/base/apt_preferences.debian
@@ -0,0 +1,4 @@
+# Lower the priority of packages from Percona's repos
+Package: *
+Pin: origin repo.percona.com
+Pin-Priority: 100
diff --git a/docker/base/apt_preferences.ubuntu b/docker/base/apt_preferences.ubuntu
index a9baa53a3..12c7057f6 100644
--- a/docker/base/apt_preferences.ubuntu
+++ b/docker/base/apt_preferences.ubuntu
@@ -2,3 +2,8 @@
Package: ceph* *cephfs* librbd* *rados* python-rbd librgw*
Pin: version 13.*
Pin-Priority: -1
+
+# Lower the priority of packages from Percona's repos
+Package: *
+Pin: origin repo.percona.com
+Pin-Priority: 100
diff --git a/docker/base/percona-release.repo b/docker/base/percona-release.repo
new file mode 100644
index 000000000..b7d5c54b8
--- /dev/null
+++ b/docker/base/percona-release.repo
@@ -0,0 +1,13 @@
+[percona-release-$basearch]
+name = Percona-Release YUM repository - $basearch
+baseurl = http://repo.percona.com/release/$releasever/RPMS/$basearch
+enabled = 0
+gpgcheck = 1
+gpgkey = file:///etc/pki/rpm-gpg/RPM-GPG-KEY-Percona
+
+[percona-release-noarch]
+name = Percona-Release YUM repository - noarch
+baseurl = http://repo.percona.com/release/$releasever/RPMS/noarch
+enabled = 0
+gpgcheck = 1
+gpgkey = file:///etc/pki/rpm-gpg/RPM-GPG-KEY-Percona
diff --git a/docker/base/sources.list.debian b/docker/base/sources.list.debian
index 44476cef8..50532ddfb 100644
--- a/docker/base/sources.list.debian
+++ b/docker/base/sources.list.debian
@@ -15,3 +15,7 @@ deb [arch=amd64] https://artifacts.elastic.co/packages/5.x/apt stable main
# main docker repo
deb https://download.docker.com/linux/debian stretch stable
+
+# Percona XtraBackup repo
+deb http://repo.percona.com/apt stretch main
+
diff --git a/docker/base/sources.list.ubuntu b/docker/base/sources.list.ubuntu
index 3c5229ba8..5448bb067 100644
--- a/docker/base/sources.list.ubuntu
+++ b/docker/base/sources.list.ubuntu
@@ -35,3 +35,6 @@ deb http://ppa.launchpad.net/odl-team/carbon/ubuntu xenial main
# rabbitmq repo
deb https://packagecloud.io/rabbitmq/rabbitmq-server/ubuntu/ xenial main
+
+# Percona XtraBackup repo
+deb http://repo.percona.com/apt bionic main
diff --git a/docker/xtrabackup/Dockerfile.j2 b/docker/xtrabackup/Dockerfile.j2
new file mode 100644
index 000000000..72fd82288
--- /dev/null
+++ b/docker/xtrabackup/Dockerfile.j2
@@ -0,0 +1,24 @@
+FROM {{ namespace }}/{{ image_prefix }}base:{{ tag }}
+LABEL maintainer="{{ maintainer }}" name="{{ image_name }}" build-date="{{ build_date }}"
+
+{% block xtrabackup_header %}{% endblock %}
+
+{% import "macros.j2" as macros with context %}
+
+{% if base_distro in ['centos', 'oraclelinux', 'rhel'] %}
+RUN yum-config-manager --enable percona\*
+{% endif %}
+
+{% if base_distro in ['centos', 'oraclelinux', 'rhel', 'ubuntu', 'debian'] %}
+ {% set xtrabackup_packages = ['percona-xtrabackup-24', 'qpress'] %}
+{% endif %}
+
+{{ macros.install_packages(xtrabackup_packages | customizable("packages")) }}
+
+COPY backup.sh /usr/local/bin/kolla_mariadb_backup.sh
+RUN chmod 755 /usr/local/bin/kolla_mariadb_backup.sh
+
+CMD /usr/local/bin/kolla_mariadb_backup.sh
+
+{% block xtrabackup_footer %}{% endblock %}
+{% block footer %}{% endblock %}
diff --git a/docker/xtrabackup/backup.sh b/docker/xtrabackup/backup.sh
new file mode 100755
index 000000000..f8dff8bd7
--- /dev/null
+++ b/docker/xtrabackup/backup.sh
@@ -0,0 +1,49 @@
+#!/usr/bin/env bash
+
+set -eu
+
+# Execute a full backup
+backup_full() {
+ echo "Taking a full backup"
+ innobackupex --defaults-file=/etc/mysql/my.cnf \
+ --no-timestamp \
+ --stream=xbstream \
+ --compress \
+ --history=$(date +%d-%m-%Y) ./ > \
+ $BACKUP_DIR/mysqlbackup-$(date +%d-%m-%Y-%s).qp.xbc.xbs
+}
+
+# Execute an incremental backup
+backup_incremental() {
+ echo "Taking an incremental backup"
+ innobackupex --defaults-file=/etc/mysql/my.cnf \
+ --no-timestamp \
+ --stream=xbstream \
+ --compress \
+ --incremental \
+ --incremental-history-name=$(date +%d-%m-%Y) \
+ --history=$(date +%d-%m-%Y) ./ > \
+ $BACKUP_DIR/incremental-$(date +%H)-mysqlbackup-$(date +%d-%m-%Y-%s).qp.xbc.xbs
+}
+
+BACKUP_DIR=/backup/
+cd $BACKUP_DIR
+
+if [ -n $BACKUP_TYPE ]; then
+ case $BACKUP_TYPE in
+ "full")
+ backup_full
+ ;;
+ "incremental")
+ backup_incremental
+ ;;
+ *)
+ echo "Only full or incremental options are supported."
+ exit 1
+ ;;
+ esac
+else
+ echo "You need to specify either full or incremental backup options."
+ exit 1
+fi
+