Mariadb replication settings
3.2K
Mariadb replication settings
See https://mariadb.com/kb/en/mariadb-license/
It's just free. (Public Domain)
See https://github.com/yidigun/mariadb-replication
$LANG and $TZ envoringment variables.11.5.2-noble, 11.5.2, 11.5, 11, latest10.11.9-jammy, 10.11.9, 10.11, 10 (not supported)10.7-focal, 10.7 (not supported)none | master | slave)PASSWORD_SECRET (default: repl)3306)passwords)Make password config file using shell script syntax.
Format: USERNAME_PASSWORD="Password in plain text"
ROOT_PASSWORD="s3cret12#$" # database admin
REPL_PASSWORD="cp1fly*" # replication user
...
services:
mariadb:
...
env:
- REPL_USERNAME=repl
- PASSWORD_SECRET=passwords
...
secrets:
passwords:
- file: ${HOME}/passwords.sh
See https://mariadb.com/kb/en/setting-up-a-replication-slave-with-mariabackup/ for more details.
ROOT_PASSWORD="s3cret12#$" # database admin
REPL_PASSWORD="cp1fly*" # replication user
version: "3.3"
services:
mariadb-master:
image: yidigun/mariadb-replication:10.7
restart: unless-stopped
hostname: ${HOSTNAME}
ports:
- "3306:3306/tcp"
environment:
- TZ=Asia/Seoul
- LANG=ko_KR.UTF-8
- REPL_MODE=master
- REPL_SERVER_ID=1
- REPL_USERNAME=repl
volumes:
- /data/mariadb/data:/var/lib/mysql
- /data/mariadb/log:/var/log/mysql
- /data/mariadb/run:/run/mysqld
- /data/mariadb/snapshots:/snapshots
secrets:
- passwords
secrets:
passwords:
file: /path/to/passwords.sh
[MASTER]$ docker compose up -d
Start service and check master database work properly.
First, make full backup of master server using mariabackup.
Following command will create backup copy in /snapshots/snapshot-%Y%m%d.
(eg: /snapshots/snapshot-20220210)
[MASTER]$ docker exec mariadb-master backup-master --no-lock
And move the backup files to slave server's /var/lib/mysql volume by any means.
[MASTER]$ (cd /data/mariadb/snapshots/snapshot-`date +%Y%m%d`; tar cf - *) | \
ssh slave-server ' \
sudo mkdir -p /data/mariadb/data; \
(cd /data/mariadb/data; sudo tar xf -) && \
sudo chown -R 999:999 /data/mariadb/data'
REPL_PASSWORD="cp1fly*" # replication user
Note: REPL_SERVER_ID value must be unique in cluster.
version: "3.3"
services:
mariadb-slave:
image: yidigun/mariadb-replication:10.7
restart: unless-stopped
hostname: ${HOSTNAME}
ports:
- "3306:3306/tcp"
environment:
- TZ=Asia/Seoul
- LANG=ko_KR.UTF-8
- REPL_MODE=slave
- REPL_SERVER_ID=2
- REPL_USERNAME=repl
- REPL_MASTER_HOST=mariadb-master.example.com
- REPL_MASTER_PORT=3306
volumes:
- /data/mariadb/data:/var/lib/mysql
- /data/mariadb/log:/var/log/mysql
- /data/mariadb/run:/run/mysqld
secrets:
- passwords
secrets:
passwords:
file: /path/to/passwords.sh
[SLAVE]$ docker compose up -d
Replication position will retrieved from /var/lib/mysql/xtrabackup_binlog_info.
This file was generated when mariadb-backup (former mariabackup) make backup copy.
[SLAVE]$ docker exec mariadb-slave start-slave
[MASTER]$ docker exec mariadb-master show-status
[SLAVE]$ docker exec mariadb-slave show-status
Content type
Image
Digest
sha256:9b833d310…
Size
158.7 MB
Last updated
about 2 years ago
docker pull yidigun/mariadb-replication