[선행 작업]

- 마스터 서버의 mysql 에서 복제 전용 계정을 새로 만들던가 기존 계정에 복제 관련 권한을 추가해 줘야한다.

mysql> GRANT REPLICATION SLAVE ON *.* TO 'id'@'ip' IDENTIFIED BY 'password';


- 마스터, 슬레이브에서 replication 할 db 의 데이터를 맞춰둔다. (덤프 이용)

* DB 데이터 백업

# mysqldump -u계정명 -p비밀번호 db > db.sql


* 함수, 프로시저, 트리거 를 함께 백업해야 할 경우

# mysqldump --routines --trigger -u계정명 -p비밀번호 db > db.sql


* 함수, 프로시저, 트리거 만 백업해야 할 경우 (테이블 제외)

# mysqldump --routines --no-create-info --no-data --no-create-db --skip-opt db > db_no_tables.sql


* 백업 데이터 복원

# mysql -u계정명 -p비밀번호 db < db.sql




[설정]

1) 마스터 설정파일 수정

/etc/my.cnf.d/server.cnf

----

[mysqld]

log-bin=mysql-bin

server-id=1

----

위 항목 추가


2) 마스터 mysql 실행 & 마스터 설정 확인

# service mysql start

mysql> show master status;

+------------------+----------+--------------+------------------+

| File             | Position | Binlog_Do_DB | Binlog_Ignore_DB |

+------------------+----------+--------------+------------------+

| mysql-bin.000001 |      906 |              |                  |

+------------------+----------+--------------+------------------+

* file, position 기록해놓기.


3) 슬레이브 설정파일 수정

/etc/my.cnf.d/server.cnf

----

[mysqld]

server-id=2

# replicate-do-db='repl' 

# 위 설정을 통해 하나의 db 만 replication 가능. 없으면 모든 db 를 replication 함.

# 몇몇개의 db 만 replication 할 경우 replicate-do-db 항목을 여러개 추가

----

위 항목 추가


4) 슬레이브 mysql 실행 & 슬레이브 마스터 연결 설정

# service mysql start

mysql> change master to

master_host='192.168.0.1',

master_user='id',

master_password='password',

master_log_file='mysql-bin.000001',   # 마스터 설정에서 확인한 file 이름

master_log_pos=906;                   # 마스터 설정에서 확인한 position 번호


5) 슬레이브 replication start

mysql> start slave;



[참고 링크]

http://we-minarida.tistory.com/entry/%EC%8B%A4%EC%82%AC%EC%9A%A9-db-%EC%97%90%EC%84%9C-mysql-replication

http://server-talk.tistory.com/241

https://blurblah.net/1490


<MariaDB 10.1 기준>


* DB 데이터 백업

# mysqldump -u계정명 -p비밀번호 DB이름 > db.sql


* 특정 테이블만 백업

# mysqldump -u계정명 -p비밀번호 DB이름 테이블명1 테이블명2 테이블명3 > tables.sql

 

* 함수, 프로시저, 트리거 를 함께 백업해야 할 경우

mysqldump --routines --trigger -u계정명 -p비밀번호 DB이름 db.sql


함수, 프로시저, 트리거 만 백업해야 할 경우 (테이블 제외)

mysqldump --routines --no-create-info --no-data --no-create-db --skip-opt DB이름> db_no_tables.sql


* 백업 데이터 복원

mysql -u계정명 -p비밀번호 DB이름 < db.sql


 

[참고사항]

- 복원 시

ERROR 1418 (HY000): This function has none of DETERMINISTIC, NO SQL, 
or READS SQL DATA in its declaration and binary logging is enabled 
(you *might* want to use the less safe log_bin_trust_function_creators 
variable) 

위와 같은 오류가 발생 할 경우

1. mysql 서버를 시작할 때 다음 옵션을 추가 한다.

--log-bin-trust-function-creators=1

2. 계정에 접속해서 다음을 실행한다. (또는 접속툴을 이용해서)

mysql>SET GLOBAL log_bin_trust_function_creators = 1; 

(권한이 없어 실패할 경우 권한 있는 계정 또는 root 로 실행)



[docker 를 이용해 mysql + redmine 설치]


* docker-compose 사용


(docker-compose-redmine.yaml)



version: '2.1'

services:
redmine:
image: redmine
restart: always
container_name: redmine
ports:
- 3000:3000
environment:
REDMINE_DB_MYSQL: db
REDMINE_DB_PASSWORD: pass
REDMINE_DB_DATABASE: redmine
REDMINE_DB_ENCODING: utf8
depends_on:
db:
condition: service_healthy

db:
image: mysql
restart: always
ports:
- 3306:3306
environment:
MYSQL_ROOT_PASSWORD: pass
MYSQL_DATABASE: redmine
command:
- --character-set-server=utf8mb4
- --collation-server=utf8mb4_unicode_ci



$ docker-compose -f docker-compose-redmine.yaml up -d


위 상태로 실행하면 redmine 이 실행되었다가 계속 restart 를 반복합니다.


mysql 은 잘 실행되지만 redmine 이 실행 도중 오류가 발생하는 것으로 보이는데..


$ docker logs -f redmine


redmine 로그를 확인해보면 


' Authentication plugin 'caching_sha2_password' cannot be loaded '


위와 같은 오류를 확인할 수 있습니다.


검색 해 본 결과 mysql 버전에 따른 오류라고 하는데요...

(https://stackoverflow.com/questions/49979089/authentication-plugin-caching-sha2-password-cannot-be-loaded-in-circleci-mysql)


그래서 mysql 버전을 5.7 버전으로 지정해서 설치하니까 잘 됩니다.


image: mysql    ->   image: mysql:5.7




version: '2.1'

services:
redmine:
image: redmine
restart: always
container_name: redmine
ports:
- 3000:3000
environment:
REDMINE_DB_MYSQL: db
REDMINE_DB_PASSWORD: pass
REDMINE_DB_DATABASE: redmine
REDMINE_DB_ENCODING: utf8
depends_on:
db:
condition: service_healthy

db:
image: mysql:5.7
restart: always
ports:
- 3306:3306
environment:
MYSQL_ROOT_PASSWORD: pass
MYSQL_DATABASE: redmine
command:
- --character-set-server=utf8mb4
- --collation-server=utf8mb4_unicode_ci




[추가사항]


혹시나 해서 mysql 대신 mariadb 로 하니까 최신버전이어도 잘 되는듯 합니다.


image: mariadb


(mariadb 만세)


+ Recent posts