[MySQL/MariaDB] - ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/tmp/mysql.sock' (2)
ERROR 2002 (HY000) : Can’t connect to local MySQL server through socket ‘/var/lib/mysql/mysql.sock’ (2)
오류에 대한 포스팅이다.
에러
ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/tmp/mysql.sock' (2)
또는
ERROR 2002 (HY000) : Can’t connect to local MySQL server through socket '/var/lib/mysql/mysql.sock' (2)
원인
1) 원인
mysql.sock 파일이 경로 및 심볼릭링크 정확하지 않아서 발생하는 오류
2) 원인
mysql.sock 파일에 대한 권한 문제 오류
3) 원인
실질적인 설정 문제 일 수도 있으나, 설정 없이 갑자기 안되는 경우에는 Mac 업데이트로 인한 my.cnf 손상이나 mysql 실행 도중 손상되서 mysql.sock 문제가 발생 한 이유이다.
또는 구글링을 해서 여러 mysql 설정이 기술 된 my.cnf파일을 mysql, mariadb 또 버전이나 OS 환경을 고려하지 않고 무작정 가져다 사용하면 에러 발생가 발생 할 수 있다.
이럴 경우에는 data 백업 한 후에 재 설치해야 한다.
해결
1) 해결
다른 오류들은 해결하거나 없어야 한다.
1. mysql 실행
2. mysql.sock 위치 찾기
$ mysql_config --socket
3. my.cnf 설정된 socket 경로를 심볼릭링크 설정
$ sudo ln -s /var/lib/mysql/mysql.sock /tmp/mysql.sock
$ sudo ln -s /var/lib/mysql/mysql.sock /tmp/mysql.sock
mysql.sock 심볼릭링크 확인
$ ls -al
lrwxr-xr-x 1 linked2ev admin 25 6 20 16:16 mysql.sock -> /var/lib/mysql/mysql.sock
/tmp/mysql.sock 라는 원본파일이 /var/lib/mysql/mysql.sock 에 Symbolic Link가 연결되었다는 의미
2) 해결
디렉토리에 권한 변경
$ sudo chmod -R 777 /var/lib/mysql
파일 소유자/소유자 그룹 변경
$ chown <사용자>:<사용자그룹> <파일>
$ sudo chown root:admin /var/lib/mysql
3) 해결
구글링을 해서 여러 mysql 설정이 기술 된 my.cnf파일을 mysql, mariadb 또 버전이나 OS 환경을 고려하지 않고 무작정 가져다 사용시 에러 발생가 발생 할 수 있다.
설정파일을 원복하거나 재설치하면 된다.
[참고] -> [Homebrew] 3. MariaDB 설치 for Mac
mysqld.sock 에 연결이 되지 않는 문제
출처: https://aliwo.github.io/swblog/linux/ubuntu/mysql/ubuntu-swap/#
발단
어느날 qa 서버 관리자 페이지가 마비 됬다. 관리자 페이지 html 및 로그인 까지는 잘 되는데 db 연산이 필요한 부분만 들어가면 뻗어 버리는 것을 발견.
조사 1
최근에 관리자 페이지 api 를 손댄 적도 없는데 왜 그럴까? pycharm 의 database tool 로 qa서버의 mysql에 접속해 보았다.
읭? database tool 에서도 접속이 되지 않는다.(Java IO Error 발생) 슬슬 사태의 심각성을 깨닫게 된다.
정확한 원인파악을 위해 이번엔 ssh 터미널로 들어가 직접 mysql 클라이언트를 실행해보기로 한다.
$ mysql -p -u root
error: 'Can't connect to local MySQL server through socket '/var/run/mysqld/mysqld.sock'
일 났다.
일단 이게 운영서버가 아니라서 참 다행이라는 생각을 했다. 대체 뭐가 문제일까 궁리해 보기 시작한다. 일단 저 .sock 파일. .sock 파일이 socket 파일이라는 건 알고 있는데, mysql 서버가 켜질때, 그리고 port 를 listen 할 때 필요한 파일이라는 것 말고는 구체적으로 어떻게 동작하는지도 몰랐다.
아니 애초에 멀쩡하던 파일이 왜 없어진 걸까
최근에 mysql 설정 관련해서 공부하면서 설정파일들을 이리저리 만져보던 것이 기억이 났다. 문득, “설마 내가 테스트용 서버에 있던 mysql 설정 파일을 덮어 써 버린게 아닐까?” 하는 생각이 뇌리를 스쳤다.
부리나케 해당 서버에 접속해서 my.cnf 파일을 대조해 보았다. 결과는? 내가 그런 황당한 실수를 했었더라면 이 글을 적고 있지도 않았을 것이다. 문제는 다른 곳에 있었다.
조사 2
디지털 오션에서 다음 커맨드를 입력해 보라는 글을 찾았다.
$ tail -30 /var/log/mysql/error.log
tail 커맨드를 사용해서 mysql 의 에러로그 마지막 30줄을 보게 되는데
[Note] InnoDB: Initializing buffer pool, total size = 128M, instances = 1, chunk size = 128M
[ERROR] InnoDB: mmap(137428992 bytes) failed; errno 12
[ERROR] InnoDB: Cannot allocate memory for the buffer pool
[ERROR] InnoDB: Plugin initialization aborted with error Generic error
그 중 위와 같은 문구가 포함되어 있었다. 본문의 질문자와 증상이 똑같았다. 요는 서버의 메모리 부족 이 원인이라는 것이다.
어디서 메모리 누수가 일어나는건지… 알아내려면 상당히 많은 시간이 걸릴 것 같았다.
일단 메모리가 문제라는 것은 알았으니 swap 을 사용해서 메모리를 늘리면 되었다.
정리
- mysqld.sock 파일은 mysql 서버가 시작함과 동시에 생성되며, 꺼지면 mysqld 디렉터리 째로 없어진다.
참고
다음 링크들이 도움이 많이 되었다.
https://www.digitalocean.com/community/questions/mysql-stopped-and-it-can-t-be-restart
https://www.digitalocean.com/community/tutorials/how-to-add-swap-on-ubuntu-14-04
'프로그램 활용 > 클라우드 가상화 도커' 카테고리의 다른 글
도커 이미지 이름 구성 (0) | 2023.08.07 |
---|---|
도커 docker Failed to get D-Bus connection 에러 해결 (0) | 2023.08.07 |
도커 docker에서 실행중인 MariaDB 설정 파일 수정하기 (0) | 2023.08.04 |
헷갈리는 Docker - 수정 (0) | 2023.08.04 |
도커(Docker)로 생성된 웹페이지의 내용 변경방법 (0) | 2023.08.04 |