added master/slave replication support

Example,

Start master:

```bash
docker run -it --rm --name mariadb-master \
  -e 'MARIADB_USER=root' -e 'MARIADB_PASSWORD=password' \
  -e 'MARIADB_DATABASE=newdatabase' \
  -e 'REPLICATION_MODE=master' -e 'REPLICATION_USER=slave' -e 'REPLICATION_PASSWORD=slavepassword' \
  bitnami/mariadb
```

Start Slave:

```bash
docker run -it --rm --name mariadb-slave \
  --link mariadb-master:mariadb-master \
  -e 'MARIADB_USER=root' -e 'MARIADB_PASSWORD=password' \
  -e 'MARIADB_DATABASE=newdatabase' -e 'REPLICATION_MODE=slave' \
  bitnami/mariadb
```
This commit is contained in:
Sameer Naik
2015-07-27 15:02:04 +05:30
parent ecbb8eeef4
commit 993b16471e
2 changed files with 44 additions and 0 deletions

View File

@@ -1,6 +1,14 @@
# MariaDB Utility functions
PROGRAM_OPTIONS="--defaults-file=$BITNAMI_APP_DIR/my.cnf --log-error=$BITNAMI_APP_DIR/logs/mysqld.log --basedir=$BITNAMI_APP_DIR --datadir=$BITNAMI_APP_DIR/data --plugin-dir=$BITNAMI_APP_DIR/lib/plugin --user=$BITNAMI_APP_USER --socket=$BITNAMI_APP_DIR/tmp/mysql.sock --lower-case-table-names=1"
if [ "$REPLICATION_MODE" ]; then
SERVER_ID=${SERVER_ID:-$RANDOM}
PROGRAM_OPTIONS+=" --server-id=$SERVER_ID --log-bin=mysql-bin --binlog-format=ROW"
if [ "$REPLICATION_MODE" = "slave" ]; then
PROGRAM_OPTIONS+=" --relay-log=mysql-relay-bin ${MARIADB_DATABASE:+--replicate-do-db=$MARIADB_DATABASE}"
fi
fi
initialize_database() {
echo "==> Initializing MySQL database..."
echo ""
@@ -46,6 +54,40 @@ create_mysql_user() {
echo "DROP DATABASE IF EXISTS test ; " >> /tmp/init_mysql.sql
}
configure_replication() {
case "$REPLICATION_MODE" in
master)
if [ "$REPLICATION_USER" ]; then
echo "==> Creating replication user $REPLICATION_USER..."
echo ""
echo "GRANT REPLICATION SLAVE ON *.* TO '$REPLICATION_USER'@'%' IDENTIFIED BY '$REPLICATION_PASSWORD';" >> /tmp/init_mysql.sql
echo "FLUSH PRIVILEGES ;" >> /tmp/init_mysql.sql
fi
;;
slave)
echo ""
echo "==> Setting up MariaDB slave..."
echo "==> Trying to fetch MariaDB master connection parameters from the mariadb-master link..."
MASTER_HOST=${MASTER_HOST:-$MARIADB_MASTER_PORT_3306_TCP_ADDR}
MASTER_USER=${MASTER_USER:-$MARIADB_MASTER_ENV_MARIADB_USER}
MASTER_PASSWORD=${MASTER_PASSWORD:-$MARIADB_MASTER_ENV_MARIADB_PASSWORD}
REPLICATION_USER=${REPLICATION_USER:-$MARIADB_MASTER_ENV_REPLICATION_USER}
REPLICATION_PASSWORD=${REPLICATION_PASSWORD:-$MARIADB_MASTER_ENV_REPLICATION_PASSWORD}
echo "==> Creating a data snapshot..."
mysqldump -u$MASTER_USER ${MASTER_PASSWORD:+-p$MASTER_PASSWORD} -h $MASTER_HOST $MARIADB_DATABASE --master-data >> /tmp/init_mysql.sql
echo "==> Setting the master configuration..."
echo "CHANGE MASTER TO MASTER_HOST='$MASTER_HOST', MASTER_USER='$REPLICATION_USER', MASTER_PASSWORD='$REPLICATION_PASSWORD'" >> /tmp/init_mysql.sql
echo "==> Starting the slave..."
echo "START SLAVE ;" >> /tmp/init_mysql.sql
;;
esac
}
print_mysql_password() {
if [ -z $MARIADB_PASSWORD ]; then
echo "**none**"

View File

@@ -32,6 +32,8 @@ if [ "$1" = 'mysqld.bin' ]; then
create_mysql_user
configure_replication
print_app_credentials $BITNAMI_APP_NAME $MARIADB_USER `print_mysql_password` `print_mysql_database`
else
print_container_already_initialized $BITNAMI_APP_NAME