HomeAboutMeBlogGuest
© 2025 Sejin Cha. All rights reserved.
Built with Next.js, deployed on Vercel
♥️
2기 최종 프로젝트 팀별 공간
/
[팀 BackFro💯] ArtZip: 세상 모든 전시회를 한 번에
[팀 BackFro💯] ArtZip: 세상 모든 전시회를 한 번에
/
☠️
백엔드 기술 문서
/
🧨
mysql ONLY_FULL_GROUP_BY 에러 해결
🧨

mysql ONLY_FULL_GROUP_BY 에러 해결

문제 상황

  • group by 절을 사용하는 퀴리를 날릴 때 Expression #7 of SELECT list is not in GROUP BY clause and contains nonaggregated column 'artzip.reviewlike1_.user_id' which is not functionally dependent on columns in GROUP BY clause; this is incompatible with sql_mode=only_full_group_by 에러 발생
  • sql_mode=only_full_group_by 로 인한 에러

문제 원인

5.7 Version에서는 sql_mode 항목이 생겼으며 그 옵션 안에 only_full_group_by 내용이 존재함에 따라 발생
sql_mode란? MySql에 저장될 데이터에 대한 유효성 검사 범위를 설정하는 시스템 변수

해결

개발 및 서버 환경

mysql console에서 mysql version, sql_mode 확인하는 법
# mysql version 확인 select version(); # sql_mode 확인 select @@sql_mode;
  • 개발 환경
    • docker mysql version 8.0.30
    • sql_mode: ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION
  • 서버 환경
    • AWS RDS mysql version 8.0.28
    • sql_mode: STRICT_TRANS_TABLES,NO_ENGINE_SUBSTITUTION

mysql docker container를 새로 생성

  • 실행중인 컨테이너의 옵션을 바로 변경하는 방법은 없음. 옵션을 주고 컨테이너를 run해야 함. (참고: docker - container 옵션 변경 - mysql 기준)
  • 서버 환경과 같은 옵션으로 mysql docker container 실행 --sql-mode="STRICT_TRANS_TABLES,NO_ENGINE_SUBSTITUTION"
    • docker run --name artzip-mysql-new -e MYSQL_ROOT_PASSWORD=root1234 -d -p 3306:3306 mysql/mysql-server:8.0 --sql-mode="STRICT_TRANS_TABLES,NO_ENGINE_SUBSTITUTION"
      (+)
      • (+) mysql에 user 생성 및 권한주기
        • # mysql console 접속 docker exec -it artzip-mysql-new mysql -u root -p # 비밀번호 입력 (root1234) # 콘솔에 아래 명령어 실행 create user 'root'@'%' IDENTIFIED BY 'root1234'; grant all privileges ON *.* TO 'root'@'%' with grant option;
      • (+) database 생성하기
        • create database artzip; use artzip; # 확인 select database();

Reference

  • [MySQL] sql_mode=only_full_group_by 에러 해결 방법
  • [Docker] Mysql 컨테이너 sql-mode 관련 설정 with ONLY_FULL_GROUP_BY 에러 해결하기