공유기에 내 PC 와 잉여 노트북에 MariaDB 설치함.
C++ 기반 MariaDB API 를 포팅하고 for 문을 약 25만번 돌면서
select 를 날려 값이 중복되는지 체크하는, 복잡하지 않은 테스트였다.
노트북에서 테스트가 잘 되어 회사 서버(Ubunru) 에 설치하여 똑같이 테스트를 진행하는데
Lost connection to MySQL server during query.
가 뜨는 것이었다.
구글링해보니 이래저래 많은 해결책이 있어 금방 해결하겠다 싶었는데, 뭘 해도 해결이 안됨.
정말, 검색해서 나오는 건 다 해본듯 하다. 심지어 OS 문제인가 싶어 VirtualBox에 Ubuntu 14, 16도 설치해보고,
MariaDB Upgrade, Downgrade 도 해보고, 쿼리 사이에 Sleep 도 줘보고,
심지어 DB 연결 -> 쿼리 하나 전송 -> 연결해제 -> DB 연결 -> 쿼리 하나 전송 -> 연결 해제~~
이런 식으로도 테스트를 해 보았지만 위 증상은 여전했다.
♣ Error Log 체크
그러다 MariaDB 의 에러로그를 봤다.
[Warning] Aborted connection 16 to db: 'base_station' user: 'mesteam' host: '192.168.10.25' (Got an error reading communication packets).
혹시나 하고 위 error 내역으로 구글링을 진행하고 아래 사이트까지 가게 됨.
https://www.percona.com/blog/2016/05/16/mysql-got-an-error-reading-communication-packet-errors/
그야말로 이 이슈에 대해 할 수 있는 건 다 정리해 놓은 듯 했다.
그 중 tcpdump 를 떠 보라는 내용이 보여 MariaDB Server 에서 TCP Dump 를 실행하고 쿼리를 날려보았다.
$ sudo tcpdump port 3306
♣ TCP Dump
그렇게, 양단이 쿼리와 ACK 를 다다다~ 주고 받다가, 위 증상이 나타났을 때 어~! 뭔가 이상함을 발견함.
14:16:57.598731 IP 192.168.10.25.51060 > 192.168.109.5.mysql: Flags [P.], seq 1860445:1860525, ack 3837097, win 251, length 80 14:16:57.598987 IP 192.168.109.5.mysql > 192.168.10.25.51060: Flags [P.], seq 3837097:3837262, ack 1860525, win 237, length 165 14:16:57.599944 IP 192.168.10.25.51060 > 192.168.109.5.mysql: Flags [P.], seq 1860525:1860605, ack 3837262, win 256, length 80 14:16:57.600200 IP 192.168.109.5.mysql > 192.168.10.25.51060: Flags [P.], seq 3837262:3837427, ack 1860605, win 237, length 165 14:17:49.661117 IP 192.168.109.5.mysql > 192.168.10.25.51060: Flags [P.], seq 9712582:9712747, ack 4709245, win 237, length 165 14:17:49.661515 IP 192.168.109.5.mysql > 192.168.253.200.51060: Flags [P.], seq 2639052253:2639052418, ack 1996360229, win 237, length 165 14:17:52.424828 IP 192.168.10.25.51060 > 192.168.109.5.mysql: Flags [P.], seq 4709165:4709245, ack 9712582, win 254, length 80 14:17:52.424854 IP 192.168.109.5.mysql > 192.168.10.25.51060: Flags [.], ack 4709245, win 237, options [nop,nop,sack 1 {4709165:4709245}], length 0 14:17:52.425088 IP 192.168.109.5.mysql > 192.168.253.200.51060: Flags [.], ack 1, win 237, options [nop,nop,sack 1 {4294967217:1}], length 0 14:17:56.205151 IP 192.168.109.5.mysql > 192.168.10.25.51060: Flags [P.], seq 9712582:9712747, ack 4709245, win 237, length 165 14:17:56.205610 IP 192.168.109.5.mysql > 192.168.253.200.51060: Flags [P.], seq 0:165, ack 1, win 237, length 165 14:18:02.025159 IP 192.168.10.25.51060 > 192.168.109.5.mysql: Flags [R.], seq 4709245, ack 9712582, win 0, length 0 |
192.168.109.5 : DB Server
192.168.10.25 : 회사에서 부여받은 내 IP -> 공유기에 세팅해서 사용함.
192.168.253.200 : 공유기에서 DHCP 로 할당한, 내 PC 의 IP.
즉 어느 시점에서 DB Server 가 공유기가 아닌, 내 PC 로 패킷을 날리기 시작한 것이다.
이것은, 공유기 문제?
그래서 공유기를 빼고 라인을 직접 내 PC 에 연결하여 테스트를 진행해 보았더니, 잘된다.
하아~~
공유기 설정문제인지, 공유기 자체 버그인지는 아직 모른다.
공유기를 다른 회사 제품으로 바꾸어 테스트해보니 이상없이 잘 돌아간다.
하~ 회사 이름을 밝힐 수도 없고... 일단 공유기를 교체하고 진행하자.