이번에 로컬에 구성해 둔 mysql docker를 사용하다가 conf 값을 잘못 만지는 바람에 기동이 안되어서 당황해서 컨테이너를 삭제해버리고 말았다. 다행히도 mysql data directory 가 외부에 구성되어 있었고 ~/datadir에 컨테이너의 data directory 가 구성되어 있는 것을 확인할 수 있었다.
Mysql을 Docker로 사용할 때 트러블 슈팅
일단 이번 포스팅에서 다룰 주제는 아래의 2가지이다. 도커로 mysql을 사용할 때 중요한 점으로
- 도커 컨테이너를 실수로 지웠을 때 datadir 을 알고 있을 때
- 도커 컨테이너로 mysql 을 띄웠으나 외부 접속이 안될 때
사실 데이터를 유지할 필요가 없다면 그냥 새롭게 컨테이너를 생성하여 사용해도 되지만 나와 같은 도커에 대한 경험치가 낮은 사람들을 위해 몇 자 기록을 남긴다.
우선적으로 일단 datadir 가 있다는 케이스를 전제하에 작성한다. 없다면 아래의 도커 생성 이후 외부 접속 가능한 내용만 참고하면 된다.
도커 컨테이너를 실수로 지웠으나 datadir을 외부로 잘 잡아두었을 때
이건 정말 다행이다. 하지만 외부 datadir 을datadir을 알고 있다고 하더라도 datadir을 도커로 실행된 mysql 컨테이너의 datadir로 마운트를 시키는 방법을 모르면 정말 하루종일 검색만 할 수도 있다. 아래 명령어를 참고하도록 한다.
#docker run -d -p 3306:3306 --name ${container name} -v {local datadir}:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=${사용할 패스워드} --restart="always" mysql:{version}
docker run -d -p 3306:3306 --name mysql-local -v /blah/blah:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=password --restart="always" mysql:5.6.31
잠시 뒤에 도커가 올라온 것을 확인한다. $docker ps --filter name=mysql 을 수행하면 아래와 같은 그림을 확인할 수 있다.
자 그럼 외부 접속을 통하여 사용하고 있던 database 를 알아보자.
#docker exec -it ${containerId} /bin/sh
docker exec -it c3fc1ea1bd1d /bin/sh
#root 로 실행되지 않는 경우
su -
mysql 로만 실행 시 access denied 가 발생하는 경우에는 뭔가 모자라다는 이야기이기 때문에 추가로 입력을 해줄 필요가 있다.
mysql -u root -p
자 이제 마지막으로 외부 접속 권한을 허용해주는 명령어를 날려보도록 하자.
# 적절하게 id/password 값을 변경하여 권한을 준다.
GRANT ALL privileges ON *.* TO root@'%' IDENTIFIED BY 'password';
FLUSH privileges;
이제 사용하고 있는 sql 개발 툴을 이용하여 접속해 보도록 하자. 혹시 틀린 것이 있거나 문의가 있으면 댓글로 부탁드립니다. 읽어주셔서 감사합니다.
댓글