diff --git a/docker/base/Dockerfile.j2 b/docker/base/Dockerfile.j2 index 639f852974..0b8b810112 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 e69de29bb2..1ac2b108a2 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 a9baa53a35..12c7057f6d 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 0000000000..b7d5c54b80 --- /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 44476cef82..50532ddfb7 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 3c5229ba8d..5448bb0673 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 0000000000..72fd82288d --- /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 0000000000..f8dff8bd7b --- /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 +