반응형
1. MacDocker로 MariaDB 준비
MariaDB Docker 이미지 다운로드
docker pull mariadb:10.1
MariaDB용 Docker 시작 스크립트 생성
참고로 Docker/Home/mysql 디렉토리가 로컬 컴퓨터에 존재해야 한다. 그러면 MariaDB 데이터베이스 파일이 거기에 만들어 진다.
MacBook-Pro-2:Docker jerryj$ cat start-mariadbdocker run -d --name mymaria -p 3306:3306 -v /Users/jerryj/Docker/Home/mysql:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=root mariadb:10.1echo View Logsleep 1docker logs -f mymariaMacBook-Pro-2:Docker jerryj$ cat mysqldocker exec -it mymaria sh -c 'exec mysql -uroot -p'
MariaDB Docker 종료 스크립트
MacBook-Pro-2:Docker jerryj$ cat stop-mariadbdocker stop mymariadocker rm mymaria
그러면 다음과 같이 쉽게 MariaDB를 시작하고 종료할 수 있다.
MacBook-Pro-2:Docker jerryj$ ./start-mariadbe0a7793e0b01eb124a506b065b4bba4224b79bccb97d5f2dedca721795e8d07eView Log2017-03-26 15:07:39 139941082712000 [Note] mysqld (mysqld 10.1.21-MariaDB-1~jessie) starting as process 1 ...2017-03-26 15:07:40 139941082712000 [Warning] Setting lower_case_table_names=2 because file system for /var/lib/mysql/ is case insensitive...
MacBook-Pro-2:Docker jerryj$ ./mysqlEnter password:Welcome to the MariaDB monitor. Commands end with ; or \g.Your MariaDB connection id is 2Copyright (c) 2000, 2016, Oracle, MariaDB Corporation Ab and others.Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.MariaDB [(none)]> show databases;+--------------------+| Database |+--------------------+| information_schema || mysql || performance_schema |+--------------------+3 rows in set (0.01 sec)...
MacBook-Pro-2:Docker jerryj$ ./stop-mariadbmymariamymaria
자 그러면 테스트할 MariaDB Docker 이미지는 준비되었다.
2. Replication 구성을 위한 두 개의 MariaDB 컨테이너 준비
mariadb:10.1 이미지를 이용하여 두 개의 별도 컨테이너를 생성한다.
동일한 이미지를 사용하지만 이름(mysql-a vs mysql-b), 포트(43306 vs 53306), 데이터베이스 디렉토리, 구성파일 디렉토리 등을 다르게 설정하여 서로 다른 데이터베이스가 되도록 하였다.
참고로 두 개의 컨테이너는 하나의 Docker 네트워크(jerry-network)를 통해 서로 연결되도록 되어 있다.
MacBook-Pro-2:Docker jerryj$ cat ./start-db-clusterdocker run -d --name mysql-a -p 43306:3306 -v /Users/jerryj/Docker/Home/mysql-a/mysql:/var/lib/mysql -v /Users/jerryj/Docker/Home/mysql-a/etc:/etc/mysql -e MYSQL_ROOT_PASSWORD=root --network jerry-network mariadb:10.1echo ---------------------------------------------------------------echo View Logsleep 1docker logs mysql-adocker run -d --name mysql-b -p 53306:3306 -v /Users/jerryj/Docker/Home/mysql-b/mysql:/var/lib/mysql -v /Users/jerryj/Docker/Home/mysql-b/etc:/etc/mysql -e MYSQL_ROOT_PASSWORD=root --network jerry-network mariadb:10.1echo ---------------------------------------------------------------echo View Logsleep 1docker logs mysql-b
두 개의 MariaDB 인스턴스를 다음과 같이 실행하고 docker ps로 확인한다.
MacBook-Pro-2:Docker jerryj$ ./start-db-cluster56ebb4e06899094276b62474fd384114f2f95aef360239797003b002add7475a---------------------------------------------------------------View Log2017-03-26 15:12:47 140196917458880 [Note] mysqld (mysqld 10.1.21-MariaDB-1~jessie) starting as process 1 ...2017-03-26 15:12:47 140196917458880 [Warning] Setting lower_case_table_names=2 because file system for /var/lib/mysql/ is case insensitive520b1848cea06c5189947b229b69646ef33b534b1e24f420d3a8fdcef78a1652---------------------------------------------------------------View Log2017-03-26 15:12:49 140465053243328 [Note] mysqld (mysqld 10.1.21-MariaDB-1~jessie) starting as process 1 ...2017-03-26 15:12:49 140465053243328 [Warning] Setting lower_case_table_names=2 because file system for /var/lib/mysql/ is case insensitiveMacBook-Pro-2:Docker jerryj$MacBook-Pro-2:Docker jerryj$ docker psCONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES520b1848cea0 mariadb:10.1 "docker-entrypoint..." 6 seconds ago Up 5 seconds 0.0.0.0:53306->3306/tcp mysql-b56ebb4e06899 mariadb:10.1 "docker-entrypoint..." 8 seconds ago Up 7 seconds 0.0.0.0:43306->3306/tcp mysql-a
각각의 MariaDB 인스턴스는 다음 스크립트를 통해 접속한다.
MacBook-Pro-2:Docker jerryj$ cat mysql-adocker exec -it mysql-a sh -c 'exec mysql -uroot -p'MacBook-Pro-2:Docker jerryj$ cat mysql-bdocker exec -it mysql-b sh -c 'exec mysql -uroot -p'
자 그러면 Replication 테스트를 할 두 개의 MariaDB 컨테이너 준비는 끝났다. 그러면 본격적으로 MySQL(MariaDB) Replication 구성을 진행해 보자.
3. Binary Log 복제 설정
mysql-a와 mysql-b의 /etc/my.cnf에 각각 다음을 추가
MacBook-Pro-2:etc jerryj$ pwd/Users/jerryj/Docker/Home/mysql-a/etcMacBook-Pro-2:conf.d jerryj$ vi my.cnf...[mysqld]log-bin=binlogrelay-log=relayloglog-slave_updates=1server-id=1MacBook-Pro-2:etc jerryj$ pwd/Users/jerryj/Docker/Home/mysql-b/etcMacBook-Pro-2:conf.d jerryj$ vi my.cnf...[mysqld]log-bin=binlogrelay-log=relayloglog-slave_updates=1server-id=2
Binary Log 옵션을 적용하기 위해 DB 서버 재시작
MacBook-Pro-2:Docker jerryj$ ./stop-db-clustermysql-amysql-bmysql-amysql-bMacBook-Pro-2:Docker jerryj$ ./start-db-cluster16f93e1c4b60fa49383c75d448ac3c54e04abd32d8de045449569e918deee40b---------------------------------------------------------------View Log2017-03-26 15:32:09 140363386005440 [Note] mysqld (mysqld 10.1.21-MariaDB-1~jessie) starting as process 1 ...2017-03-26 15:32:09 140363386005440 [Warning] Setting lower_case_table_names=2 because file system for /var/lib/mysql/ is case insensitive120ea03ae6a4db30c1a7ec2683b17b68f6051047015f4d2d5cb5e8ec2bfb3072---------------------------------------------------------------View Log2017-03-26 15:32:11 140592083466176 [Note] mysqld (mysqld 10.1.21-MariaDB-1~jessie) starting as process 1 ...2017-03-26 15:32:11 140592083466176 [Warning] Setting lower_case_table_names=2 because file system for /var/lib/mysql/ is case insensitive
다음과 같이 mysql-a 에서 mysqldump를 실행하여 DB 복사 (암호 root를 입력해야 함)
혹시 fulldump.log 첫 줄에 Enter Password: 문구가 저장되었으면 vi 에디터로 제거한다.
acBook-Pro-2:Docker jerryj$ docker exec -it mysql-a sh -c 'mysqldump -u root -p -A --single-transaction --master-data=2' > fulldump.log
생성된 덤프 파일을 mysql-b의 디렉토리로 복사한 후 mysql-b로 접속하여 덤프 파일을 실행
MacBook-Pro-2:Docker jerryj$ mv fulldump.log Home/mysql-b/etc/MacBook-Pro-2:Docker jerryj$ docker exec -it mysql-b bashroot@c20e562c067a:/# mysql -u root -p < /etc/mysql/fulldump.log
mysql-a(Master)에서 binlog 위치를 파악한다.
MariaDB [(none)]> show master status;+---------------+----------+--------------+------------------+| File | Position | Binlog_Do_DB | Binlog_Ignore_DB |+---------------+----------+--------------+------------------+| binlog.000001 | 310 | | |+---------------+----------+--------------+------------------+1 row in set (0.00 sec)
다음 명령을 mysql-b(Salve)의 mysql 쉘에서 실행한다. 노란색 부분은 상대편 DB의 로그/위치를 사용한다.
CHANGE MASTER TOMASTER_LOG_FILE='binlog.000001',MASTER_LOG_POS=310,MASTER_HOST='mysql-a',MASTER_USER='root',MASTER_PASSWORD='root';START SLAVE;SHOW SLAVE STATUS\GRESET MASTER;SHOW MASTER STATUS;
역시 같은 방법으로 mysql-a(Master)의 mysql 쉘에서 실행한다. 노란색 부분은 상대편 DB의 로그/위치를 사용한다.
CHANGE MASTER TOMASTER_LOG_FILE='binlog.000001',MASTER_LOG_POS=310,MASTER_HOST='mysql-b',MASTER_USER='root',MASTER_PASSWORD='root';START SLAVE;SHOW SLAVE STATUS\G
4. 복제 확인
다음과 같이 mysql-a(Master)에서 DB와 계정을 생성한다.
MariaDB [(none)]> create database mattermost character set utf8 COLLATE utf8_bin;Query OK, 1 row affected (0.00 sec)MariaDB [(none)]> show databases;+--------------------+| Database |+--------------------+| information_schema || mattermost || mysql || performance_schema |+--------------------+4 rows in set (0.02 sec)MariaDB [(none)]> use mysql;Reading table information for completion of table and column namesYou can turn off this feature to get a quicker startup with -ADatabase changedMariaDB [mysql]> INSERT INTO user (Host, User, Password, ssl_cipher, x509_issuer, x509_subject) VALUES ('localhost', 'mmuser', password('mmuser'), '', '', '');Query OK, 1 row affected, 1 warning (0.01 sec)MariaDB [mysql]> INSERT INTO user (Host, User, Password, ssl_cipher, x509_issuer, x509_subject ) VALUES ('%', 'mmuser ', password('mmuser'), '', '', '');Query OK, 1 row affected, 1 warning (0.01 sec)MariaDB [mysql]> flush privileges;Query OK, 0 rows affected (0.00 sec)MariaDB [mysql]> grant all privileges on mattermost.* to mmuser@localhost with grant option;Query OK, 0 rows affected (0.00 sec)MariaDB [mysql]>MariaDB [mysql]> flush privileges;Query OK, 0 rows affected (0.00 sec)
그리고 나서 양쪽 데이터베이스에서 로그인을 시도한다.
MacBook-Pro-2:Docker jerryj$ docker exec -it mysql-a bashroot@c14263392084:/# mysql -ummuser -pEnter password:Welcome to the MariaDB monitor. Commands end with ; or \g.Your MariaDB connection id is 19Copyright (c) 2000, 2016, Oracle, MariaDB Corporation Ab and others.Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.MariaDB [(none)]>
mysql-b(Slave)에서도 로그인이 된다.
MacBook-Pro-2:Docker jerryj$ docker exec -it mysql-b bashroot@c20e562c067a:/# mysql -ummuser -pEnter password:Welcome to the MariaDB monitor. Commands end with ; or \g.Your MariaDB connection id is 33Copyright (c) 2000, 2016, Oracle, MariaDB Corporation Ab and others.Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.MariaDB [(none)]>
'기술' 카테고리의 다른 글
TCP 다이어그램과 CLOSE_WAIT + FIN_WAIT (0) | 2019.08.07 |
---|---|
CentOS 7 KVM 설치 (0) | 2019.08.07 |
Google Cloud - VPN 구성 테스트 (0) | 2019.08.07 |
Google BigQuery에서 CSV 로딩 에러 트러블슈팅 팁 (--autodetect 명령의 활용) (0) | 2019.08.07 |
Google BigQuery Standard SQL에서 UDF(User Defined Function) 작성하기 (0) | 2019.08.07 |