CMake Error: CMAKE_C_COMPILER not set, after EnableLanguage 실패와 해결 방법 정리

CentOS에 MySQL 5.6.27 설치 실패와 해결 방법 정리

안녕하세요. 요즘 리눅스 서버에 MySQL 설치하는 일, 생각보다 까다롭더라고요. 저도 며칠 전 CentOS 환경에서 MySQL 5.6.27 버전을 설치하려다 여러 오류를 겪었고… 겨우겨우 해결했어요. 혹시 저처럼 같은 문제로 막히는 분들 계실까 봐, 여기에 과정과 해결 방법을 정리해봤어요. 터미널에서 오류 메시지 하나하나 보면서 머리 싸매던 그 시간이 생각나네요ㅎㅎ

그럼, 어떤 문제들이 있었고 어떻게 풀었는지 찬찬히 따라와 보세요!

1. 환경 설정 및 초기 준비

이번에 제가 작업한 환경은 CentOS 7이었고요, MySQL은 5.6.27 버전 소스를 받아서 직접 컴파일 설치하려고 했어요. 근데 진짜 생각보다 호락호락하지 않더라고요. 처음엔 기본적인 의존성 패키지부터 설치했어요. cmake, gcc, gcc-c++, ncurses-devel 등이 필수거든요. 그런데 저처럼 처음 하시는 분들은 대부분 cmake 관련 에러부터 만날 거예요.

CMake Error: CMAKE_C_COMPILER not set, after EnableLanguage

이런 식의 메시지가 떴다면, 컴파일러가 제대로 설치 안 된 거예요.

그냥 yum groupinstall "Development Tools" 한 줄이면 해결되긴 해요.

여기에 추가로 yum install cmake gcc gcc-c++ ncurses-devel 이렇게 실행하면 대부분의 기본 환경은 갖춰져요.


2. cmake 단계에서의 자주 발생하는 에러

소스를 받아서 압축 풀고, cmake 명령으로 빌드 구성하려고 하면 또 다른 문제가 생겨요. 아래 명령을 실행했을 때…

cmake . -DCMAKE_INSTALL_PREFIX=/usr/local/mysql -DMYSQL_DATADIR=/mysql/data ...

갑자기 막 CMAKE_CXX_COMPILER를 못 찾겠다거나, Curses가 없다고 하는데 진짜 당황스럽죠. 저도 처음엔 그랬거든요. 이럴 땐 yum install ncurses-devel로 해결되더라고요. CMake는 내부적으로 굉장히 많은 조건을 검사하기 때문에, 누락된 패키지가 하나라도 있으면 바로 오류가 뜨니까요.

아래는 당시 제가 실행한 명령들이었고, 위에서 말씀드린 오류가 실제로 이렇게 나왔어요:

[root@ice mysql-5.5.27]# cmake .

The C compiler identification is unknown

The CXX compiler identification is unknown

CMake Error: your C compiler: “CMAKE_C_COMPILER-NOTFOUND” was not found.   Please set CMAKE_C_COMPILER to a valid compiler path or name.

CMake Error: your CXX compiler: “CMAKE_CXX_COMPILER-NOTFOUND” was not found.   Please set CMAKE_CXX_COMPILER to a valid compiler path or name.


3. make 단계의 실패와 최종 성공

cmake를 겨우 통과하고 나서 make를 실행했을 때 또 한 번 멘붕이 왔어요. 컴파일 중간에 undefined reference 이런 식으로 오류가 났는데, 그건 보통 라이브러리 문제거든요. libaio-devel이 없어서 그런 경우가 많아요. 이럴 땐 yum install libaio-devel 하면 됩니다.

컴파일이 정상적으로 끝나면 make install 하고 나서 데이터 디렉토리 초기화, 사용자 계정 설정 등을 하면 되는데요, 저는 아래처럼 설정했어요:

/usr/local/mysql/scripts/mysql_install_db \
--user=mysql \
--basedir=/usr/local/mysql \
--datadir=/mysql/data

그리고 나서 mysqld를 실행하면, 아래처럼 반가운 메시지가 뜹니다:

Starting MySQL… SUCCESS!

진짜 이 화면 보고 괜히 혼자 뿌듯했어요 ㅎㅎ


4. MySQL 실행 오류 해결법

설치까지는 잘 했는데, mysqld 실행이 안 될 때가 있어요. 저는 처음에 아래처럼 실행했는데 아무 반응이 없는 거예요.

/usr/local/mysql/bin/mysqld_safe --user=mysql &

이럴 땐 /var/log/mysqld.log 로그 파일을 꼭 확인해보세요. 저는 로그를 보고 나서야 socket 경로 문제라는 걸 알았어요. 보통 my.cnf 설정 파일에 socket 경로가 잘못 지정되어 있거나, 디렉토리가 없어서 발생해요.

해결 방법은 간단했어요. socket=/tmp/mysql.sock으로 설정하고, 해당 경로에 디렉토리가 없으면 mkdir -p /tmp 해주면 끝나요. 이때 권한 설정도 잊으면 안 돼요.

chown -R mysql:mysql /tmp
chmod 755 /tmp

그리고 나서 다시 실행하면 정상적으로 프로세스가 올라갑니다.


5. PATH 환경변수 등록과 자동 실행 설정

매번 MySQL 실행하려고 경로 입력하기 귀찮잖아요. 그래서 아예 환경변수로 등록해두면 편해요. ~/.bash_profile 파일을 열어서 아래 내용을 추가해줍니다.

export PATH=$PATH:/usr/local/mysql/bin

그리고 source ~/.bash_profile로 적용시키면 이제 mysql 명령어를 어디서든 쓸 수 있어요.

자동 실행도 설정해두면 더 좋겠죠? CentOS 7에서는 systemd를 쓰니까 아래처럼 mysqld.service 파일을 만들어서 /etc/systemd/system/에 저장해주고 systemctl enable mysqld 하면 부팅 시 자동으로 MySQL이 실행돼요.


6. 실수하기 쉬운 포인트 총정리

처음부터 끝까지 해보면서 제가 가장 많이 헤맨 건 의존성 설치 누락이었어요. ncurses-devel, libaio-devel, gcc-c++, bison, make, cmake… 하나라도 빠지면 cmake가 뻗거나 make가 실패하더라고요.

그리고 포트 열어주는 것도 잊기 쉬운데요, 방화벽이 켜져 있으면 외부에서 접속이 안 되니까 아래 명령도 꼭 해줘야 해요:

firewall-cmd --permanent --add-port=3306/tcp
firewall-cmd --reload

이거 안 해두고 접속 안 된다고 멘붕 오는 경우 정말 많아요. 저도 처음에 포트 때문인 줄도 몰랐었고요.


Q1. MySQL 5.6.27 컴파일 시 CMake 에러가 발생하는 이유는 뭔가요?
A1. 대부분의 경우 CMake 에러는 필수 의존 패키지가 누락됐기 때문이에요. 특히 gcc, gcc-c++, ncurses-devel, bison, cmake 중 하나라도 없으면 에러가 납니다. yum groupinstall "Development Tools"로 한 번에 설치하는 게 좋아요.

Q2. undefined reference 오류는 왜 생기나요?
A2. 컴파일 도중 undefined reference가 뜬다면 연결된 라이브러리가 누락된 상태예요. 주로 libaio-devel이나 zlib-devel 같은 시스템 라이브러리를 설치하지 않아서 생겨요. yum install libaio-devel zlib-devel로 해결됩니다.

Q3. mysql 명령어가 ‘not found’라고 뜨는 건 왜 그런가요?
A3. PATH 환경변수에 MySQL 실행 경로가 등록되어 있지 않아서 그래요. .bash_profile 파일에 export PATH=$PATH:/usr/local/mysql/bin을 추가하고 source ~/.bash_profile을 실행하면 해결돼요.

Q4. mysqld_safe 실행했는데 아무 반응이 없어요. 어떻게 하죠?
A4. 백그라운드 실행이라 터미널에 출력이 안 될 수 있어요. /var/log/mysqld.log 파일을 꼭 확인해보세요. socket 경로나 권한 문제일 수 있고, ps aux | grep mysqld로 프로세스 확인도 가능합니다.

Q5. 설치 후 외부에서 접속이 안 됩니다. 방화벽 문제인가요?
A5. 맞아요. CentOS 기본 방화벽 설정에서는 3306 포트가 닫혀 있어요. firewall-cmd --permanent --add-port=3306/tcpfirewall-cmd --reload로 포트를 열어주면 외부 접속이 가능해집니다.


이번에 직접 MySQL 5.6.27을 리눅스에서 설치하면서 느낀 건… 아무리 간단해 보여도 실제로 해보면 예상치 못한 문제가 정말 많다는 거였어요. 오류 하나 해결하면 또 다른 오류가 나오고, 그걸 또 구글링해서 찾아보고… 진짜 삽질의 연속이었죠.

그런데도 이렇게 끝까지 포기하지 않고 하나씩 해결하고 나니까, 다음엔 어떤 버전이든 똑같이 대응할 수 있을 것 같은 자신감이 생기더라고요. 혹시 지금 비슷한 상황에서 헤매고 있다면, 제가 겪었던 과정이 조금이나마 도움이 되었으면 좋겠어요. 설치 자체보다 중요한 건 그 과정을 ‘이해하고 넘어가는 것’ 같거든요.

혹시 글 보시고 궁금한 점 있으면 댓글로 남겨주세요. 실시간까진 안 되더라도 꼭 답변 드릴게요!