장비교체 하면서 MySQL 5.6 -> 5.7로 업그레이드 할 일이 생겼다.

 

자~ 계획을 세워보자 

(누구나 계획은 있지...)

 

 

 

 

 

 

 

 

 

 

 

 

 

 

5.6 복제세트에 5.7 복제세트를 붙여서 업그레이드

여기서 문제가 될만한것을 생각해보자

 

1. 5.7 부터 기본 캐릭터셋이 utf8mb4 로 바뀌었다.

   5.6 (utf8) -> 5.7 (utf8mb4) 로 복제를 걸때 다른 캐릭터셋으로 연결되면서 오류가 발생한다. 

   이를 해결하기 위해 global slave_type_conversions=ALL_NON_LOSSY 를 적용해주면 된다. 

   이부분은 캐릭터셋을 utf8mb4로  바꿀때만 적용된다. utf8을 그대로 사용할 경우 아무 문제 없다.

 

2. 5.6 (utf8) 3byte ->  5.7 (utf8mb4) 4byte 로 변경되면서 컬럼사이즈가 varcahr 로는 max 수치가 오버되는 경우가 있다. 

 

3. 5.7 에서 sql_mode에 ONLY_FULL_GROUP_BY, STRICT_TRANS_TABLES 가 기본으로 적용되었다.
   5.6 에서는 SQL 표준문법이 아니더라도 실행은 되었지만 5.7 에서는 에러가 발생하는 쿼리 확인이 필요하다.
   - ONLY_FULL_GROUP_BY : group by 하지 않은 열을 select 할 수 없다. 
   - STRICT_TRANS_TABLES : 형식이 맞지 않는 값을 insert 할때, 예전에는 warning 이 뜨고 그냥 입력되었지만 5.7부터는 에러가 발생한다.

 

자 이제 복제를 걸어보자. 

원본 DB에서 xtrabackup 을 받아서 신규 DB에 복원하고 복제를 걸면된다. (상세한 설명은 생략한다.)

 

잘된다. 싶었는데.. 문제가 생겼다. 

복제가.. 밀린다! 복제 지연 발생.

 

해결방법은.. LOGICAL_CLOCK 방식의 병렬복제 (Multi-Threaded Slave, MTS) 를 적용해 보자. (적용 방법 생략)

아!! 안된다. ㅡ_ㅡ);;;

 

slave_parallel_workers 를 4개를 잡아도 1넘만 일한다.

mysql> select Id, Master_log_name, Master_log_pos from slave_worker_info;
+----+------------------+----------------+
| Id | Master_log_name  | Master_log_pos |
+----+------------------+----------------+
|  1 | mysql-bin.000011 |     1920310192 |
|  2 |                  |              0 |
|  3 |                  |              0 |
|  4 |                  |              0 |
+----+------------------+----------------+

 

어라어라 왜? 안되지?

 

당연히 안되는거다.. 

 

slave_parallel_type을 logical_clock 으로 적용하기 위해서는 Master 에 binlog_transaction_dependency_tracking 을 적용해야 되는데 5.6 에는 이 파라미터가 없다. 

dev.mysql.com/doc/refman/5.7/en/replication-options-replica.html#sysvar_slave_parallel_type

 

어쩔수 없지 병렬복제는 포기하고 복제지연을 해결할 방법은 5.7 Master 에 적용된 log_slave_updates 옵션을 해제하고 

아래와 같이 구축하고 점검시에 5.7 서버 2대를 Master/Slave로 구성한다. 

log_slave_updates 활성시에 relay log 에 기록된 내용을 binlog 에도 저장해야되니 I/O가 2개가 되서 복제 지연이 발생할 수도 있다.

아래와 같이 구축하고 나서 복제지연은 해결되었다. 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

'MySQL' 카테고리의 다른 글

binlog format  (0) 2021.05.15
인덱스 최대 크기  (0) 2021.05.13
MySQL 포퍼먼스 튜닝  (0) 2021.05.12
delete .. where in () 시 결합인덱스 사용  (0) 2021.05.03
MySQL 5.7 Virtual Columns  (0) 2021.04.27

+ Recent posts