MariaDB Replication via Docker
- Dockerinzing MariaDB - {:.} Installing MariaDB 10.0.22
- Configuring Master
- Configuring Slave - {:.} Master 에서 에러날시

Dockerinzing MariaDB
Installing MariaDB 10.0.22
해당 git을 clone하고 10.0 폴더 안에서 docker build시키면 됩니다.
참고로 docker pull mariadb 해서 이미지 받으면 5.5 입니다.
cd mariadb/10.0
docker build -t mariadb .
Configuring Master
docker run -p 3306:3306 --name mariadb -e MYSQL_ROOT_PASSWORD=1234 -d mariadb
[client]
default-character-set=utf8
port = 3306
[mysqld]
collation-server = utf8_unicode_ci
init-connect='SET NAMES utf8'
character-set-server = utf8
server-id = 1
log_bin = /var/log/mysql/mariadb-bin
log_bin_index = /var/log/mysql/mariadb-bin.index
#sync_binlog = 1
expire_logs_days = 10
max_binlog_size = 100M
# slaves
#relay_log = /var/log/mysql/relay-bin
#relay_log_index = /var/log/mysql/relay-bin.index
#relay_log_info_file = /var/log/mysql/relay-bin.info
#log_slave_updates
위에 있는 내용들을 찾아서 주석을 제거해주면 됩니다.
docker restart mariadb
SLAVE 권한을 MASTER에서 줍니다.
그리고 MASTER에 대한 정보를 얻습니다.
CREATE USER `repl`@`%` IDENTIFIED BY '1234';
GRANT REPLICATION SLAVE ON *.* to `repl`;
FLUSH TABLES WITH READ LOCK;
SHOW MASTER STATUS;
+--------------------+----------+--------------+------------------+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+--------------------+----------+--------------+------------------+
| mariadb-bin.000001 | 599 | | |
+--------------------+----------+--------------+------------------+
UNLOCK TABLES;
만약 MASTER DB가 사용중이었다면, mysqldump를 사용해서 이전의 데이터를 slave에 구성해야 합니다.
Configuring Slave
docker run -p 3307:3306 --name slave --link mariadb:master --volume /home/ubuntu/data/mariadb/:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=1234 -d mariadb
docker exec -it slave bash
SLAVE의 my.cnf 설정을 다음과 같이 합니다.
server-id는 master 와 달라야 합니다.
server-id = 2
#report_host = master1
#auto_increment_increment = 2
#auto_increment_offset = 1
log_bin = /var/log/mysql/mariadb-bin
log_bin_index = /var/log/mysql/mariadb-bin.index
# not fab for performance, but safer
#sync_binlog = 1
expire_logs_days = 10
max_binlog_size = 100M
# slaves
relay_log = /var/log/mysql/relay-bin
relay_log_index = /var/log/mysql/relay-bin.index
relay_log_info_file = /var/log/mysql/relay-bin.info
replicate-do-db=www
log_slave_updates
다음과 같이 master의 DB또는 특정 table을 replicate할 수 있습니다.
여러개가 있으면 여러번 쓰면 됩니다.
- replicate-do-db = db_name
- replicate-do-table = db_name.table_name
만약 전체 테이블에 대한 Replication을 구축하고 싶다면 다음과 같이 합니다.
binlog-ignore-db=information_schema
binlog-ignore-db=mysql
replicate-ignore-db=information_schema
replicate-ignore-db=mysql
Restart시켜줍니다.
docker restart slave
다음으로 SLAVE DB로 접속해서 설정해주면 됩니다.
MariaDB [(none)]> CHANGE MASTER TO
MASTER_HOST='master',
MASTER_USER='repl',
MASTER_PASSWORD='1234',
MASTER_PORT=3306,
MASTER_LOG_FILE='mariadb-bin.000001',
MASTER_LOG_POS=0,
MASTER_CONNECT_RETRY=10;
Master 에서 에러날시
Master에서 에러가 나면 slave에서는 에러가 난 부분부터 동기화를 중단합니다.
에러부분을 자동으로 skip 하기 위해서는 slave db -> my.cnf -> [mysqld] 안에다가 다음을 추가합니다.
slave-skip-errors=all