IT/Docker

[Docker] mariaDB 컨테이너에 호스트 mariaDB 연결 : Table doesn't exist in engine 오류해결

월공 2020. 9. 22. 09:15
728x90
300x250

1.DB 컨테이너가 이미 생성되어있다는 가정하에 진행합니다.

진행방법은 아래에 간단히 남겨놓겠습니다.

 

DB 컨테이너 생성 구문

docker run -it -d -p 60000:3306 --name 컨테이너이름 -e MYSQL_ROOT_PASSWORD=패스워드 -v /var/lib/mysql:/var/lib/mysql mariadb

혹시몰라서 mysqldump 파일 생성 구문도 남겨놓습니다 ㅎㅎ

#mysqldump 파일 생성 (백업하기)
mysqldump -u유저아이디 -p 데이터베이스명 > /원하는경로/데이터베이스명.dump

#dump 파일로 DB 가져오기 (복구하기)
mysql -u유저아이디 -p 데이터베이스명 < /원하는경로/데이터베이스명.dump

 

여튼 DB 컨테이너를 생성하고 포트포워딩한 포트번호(60000)로 연결했을때 heidi sql 로 접속이 잘되는것을 확인할수 있었는데, 참 정말 정말 신기하게도 테이블이 아니라 VIEW 로 인식되는것을 볼수 있었습니다.

그러면서 테이블 목록에 각각 Table doesn't exist in engine 이라는 에러들이 떠있었구요

정말 흥미로운건 , 테이블 엔진이 MyISAM 인것들은 정상적으로 잘 가져왔는데

InnoDB 인것들만 다 저렇게 못가져오고 있었습니다.

여튼 수차례 삽질후에 해결을 하였는데 마운트를 시킬때 기존에 -v /var/lib/mysql/testDB:/var/lib/mysql/testDB

이런식으로 줬던거에 디비명 을 빼버리고 아예 mysql 폴더를 통으로 마운트 시켰습니다

(호스트 mariaDB 서비스는 중지된 상태에서 작업했습니다)

그러면 var/lib/mysql 폴더의 소유자가 polkitd 으로 바뀌면서

정상적으로 테이블 인식을 하는걸 볼수있었습니다.

 

뭐 해결방법중에 mysql 폴더 내부에 있는 ib_logfile0 를 지워라 그런 글을 본거같은데,

저렇게 로그파일 관련하여 지워서 해결을 한거면 , 나도 저거랑 비슷한 문제가 아닐까 싶어 mysql 를 통으로 마운트해줬더니 정상적으로 60000 포트로 접속도되고 테이블 인식도 잘되네요

 

DB 컨테이너를 별도로 뺐으므로 호스트에서는 더이상 DB 작업을 할일이 없을거같긴한데 이게 정상인진 모르겠습니다.

댓글 조언 부탁드리겠습니다.

 

테스트 하시면서 소유자 다시 바꾸고싶으시면 아래 명령어 실행하시면 mysql 폴더 소유자 다시 mysql 로 정상적으로 돌아옵니다, 그리고 도커 db 컨테이너는 stop 하시고 호스트에서 다시 서비스 재시작 하시면 잘되실겁니다.

chown -R mysql:mysql /var/lib/mysql

 

728x90
300x250