mirror of
https://github.com/bitnami/containers.git
synced 2026-03-20 23:10:53 +08:00
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:
@@ -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**"
|
||||
|
||||
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user