Search

백엔드 (Spring, Redis, MySQL) 배포후 접근 오류

태그

Description

sudo docker ps 작업 후에 나온 화면입니다 현재 전부 다 올라가 있는 상태지만 인터넷 창에 Public Ip를 들어간 후에 포트번호 :7777로 등록하면 오류가 납니다.
sudo docker logs byl-server를 해보니 엄청난 오류가 쏟아져 나옵니다.
그중에서 반복되는 구문이 있네요
java.sql.SQLSyntaxErrorException: Access denied for user 'eddi'@'%' to database 'byl_db'
JSON
복사
eddi에게 권한이 없다고 하네요… 이후에 설정했던 파일들을 하나씩 뜯어봅니다.
docker-compose.yml
Dockerfile
.env
custom.cnf
application.yaml
파일 구성
하란대로 잘 따라한것 같은데 흠…

Try

권한을 주기 위해 MySQL에 들어가 보겠습니다.
MySQL CONTAINER ID 확인
ubuntu@ip-172-31-9-58:~/BYL/BACKEND$ sudo docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 13b13389da41 jgj/byl-server:latest "java -jar /app.jar …" 8 minutes ago Up About a minute 0.0.0.0:7777->7777/tcp, :::7777->7777/tcp byl-server 98fff2db5029 redis:7.0.4 "docker-entrypoint.s…" 8 minutes ago Up 8 minutes 0.0.0.0:6379->6379/tcp, :::6379->6379/tcp byl-redis 6d108fb762b1 mysql:8.0 "docker-entrypoint.s…" 8 minutes ago Up 8 minutes 0.0.0.0:3306->3306/tcp, :::3306->3306/tcp, 33060/tcp byl-db
JSON
복사
MySQL 접속
ubuntu@ip-172-31-9-58:~/BYL/BACKEND$ sudo docker exec -it 6d108fb762b1 /bin/bash bash-4.4# mysql -u eddi -p Enter password: Welcome to the MySQL monitor. Commands end with ; or \g. // 계정 eddi 와 비밀번호 eddi@123은 제대로 들어가 있는것 같습니다 mysql> use byl_db ERROR 1044 (42000): Access denied for user 'eddi'@'%' to database 'byl_db' // 하지만 여전히 권한은 없는것 같네요
JSON
복사
권한 부여
mysql> GRANT ALL PRIVILEGES ON byl_db.* TO 'eddi'@'%'; ERROR 1044 (42000): Access denied for user 'eddi'@'%' to database 'byl_db'
JSON
복사
? 여기서 원인은 eddi로 로그인을 한 채 eddi에게 권한을 줘서 그런가? 라고 생각했는데
mysql> show databases; +--------------------+ | Database | +--------------------+ | information_schema | | next_page_db | | performance_schema | +--------------------+ 3 rows in set (2.10 sec)
JSON
복사
next_page_db가 들어가 있습니다?
아마 일전에 복붙하다가 걍 돌려버려서 저렇게 된 것 같은데 현재 파일은 수정한 채로 다시 빌드 하였지만 왜 저게 있는걸까요…
혹시 몰라서 next_page_db를 사용해보겠습니다.
mysql> use next_page_db; Database changed mysql> show tables; Empty set (0.00 sec)
JSON
복사
? 사용이 되네요?
현재 그럼 원인은 byl_db가 생성되어야 하는데 next_page_db가 생성되버린거니까 칼럼에서 next_page_db가 있는곳을 찾아보겠습니다.
칼럼 검색결과 .env 파일과 스프링의 application.yaml 파일에서 해당 부분이 쓰여진걸로 확인 됐습니다.
docker-compose.yml이 실행될때 환경변수로 지정된 파일인 .env파일이 실행되는 거니까
아마 .env파일 문제일 가능성이 높겠네요 yaml은 단지 byl_db를 찾는중인건데…
임시로 byl_db를 생성해보겠습니다.
mysql> CREATE DATABASE byl_db; ERROR 1044 (42000): Access denied for user 'eddi'@'%' to database 'byl_db'
JSON
복사
안되네요 세상이 억까합니다.
FileZila에는 분명히 .env파일이 있는데
새벽 4시네요 소소한 행복입니다.
putty에서 확인해보니
ubuntu@ip-172-31-9-58:~/BYL/BACKEND$ ls Dockerfile byl_process-0.0.1-SNAPSHOT.jar docker docker-compose.yml
JSON
복사
분명히 있었는데요 없어졌습니다.
ubuntu@ip-172-31-9-58:~/BYL/BACKEND$ cat .env # Set docker-compose environment DB_ROOT_PASSWORD=eddi@123 DB_USER=eddi DB_PASSWORD=eddi@123 DB_NAME=byl_db
JSON
복사
근데 읽을수는 있네요? 어쩌라는 걸까요? sudo docker-compose down sudo docker-compose up -d 실행후에 확인해보니 여전합니다.
ubuntu@ip-172-31-9-58:~/BYL/BACKEND$ sudo docker exec -it 47b47dab9465 /bin/bash bash-4.4# mysql -u root -p // 루트계정으로 들어가보겠습니다. mysql> show databases; +--------------------+ | Database | +--------------------+ | information_schema | | next_page_db | | performance_schema | +--------------------+ 3 rows in set (0.00 sec) // 여전히 없네요 mysql> CREATE DATABASE byl_db -> ; Query OK, 1 row affected (0.43 sec) mysql> show databases; +--------------------+ | Database | +--------------------+ | byl_db | | information_schema | | mysql | | next_page_db | | performance_schema | | sys | +--------------------+ 6 rows in set (0.16 sec) // 하나 만들어주죠 뭐 mysql> exit Bye bash-4.4# mysql -u eddi -p Enter password: mysql> show databases; +--------------------+ | Database | +--------------------+ | information_schema | | next_page_db | | performance_schema | +--------------------+ 3 rows in set (0.00 sec) // 아니 분명히 만들었는데 왜 없어졌을까요 mysql> exit Bye bash-4.4# mysql -u root -p Enter password: mysql> show databases; +--------------------+ | Database | +--------------------+ | byl_db | | information_schema | | mysql | | next_page_db | | performance_schema | | sys | +--------------------+ 6 rows in set (0.00 sec) // eddi 계정에는 분명히 보이는데 아마 권한자체가 없으면 보이지도 않는것 같습니다. mysql> GRANT ALL PRIVILEGES ON byl_db.* TO 'eddi'@'%'; Query OK, 0 rows affected (2.44 sec) // 그럼 권한을 줍니다. bash-4.4# mysql -u eddi -p Enter password: mysql> show databases; +--------------------+ | Database | +--------------------+ | byl_db | | information_schema | | next_page_db | | performance_schema | +--------------------+ 4 rows in set (0.40 sec) mysql> use byl_db Database changed mysql> show tables; Empty set (0.00 sec) // 잘 먹은것 같네요
JSON
복사
관련 데이터들은 docker-compose.yml 파일에서 volumes에 설정한 대로 저장이 되기에 이미지를 down up 시켜도 유지된다고는 하는데 권한도 유지가 되길 바라겠습니다.

Solution

ubuntu@ip-172-31-9-58:~/BYL/BACKEND$ sudo docker logs byl-server . ____ _ __ _ _ /\\ / ___'_ __ _ _(_)_ __ __ _ \ \ \ \ ( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \ \\/ ___)| |_)| | | | | || (_| | ) ) ) ) ' |____| .__|_| |_|_| |_\__, | / / / / =========|_|==============|___/=/_/_/_/ :: Spring Boot :: (v2.7.9) 2023-05-01 19:22:45.212 INFO 1 --- [ main] c.jgj.byl_process.BylProcessApplication : Starting BylProcessApplication using Java 17-ea on 0fce083b9c22 with PID 1 (/app.jar started by root in /) 2023-05-01 19:22:45.366 INFO 1 --- [ main] c.jgj.byl_process.BylProcessApplication : No active profile set, falling back to 1 default profile: "default" 2023-05-01 19:23:12.007 INFO 1 --- [ main] .s.d.r.c.RepositoryConfigurationDelegate : Multiple Spring Data modules found, entering strict repository configuration mode 2023-05-01 19:23:12.087 INFO 1 --- [ main] .s.d.r.c.RepositoryConfigurationDelegate : Bootstrapping Spring Data JPA repositories in DEFAULT mode. 2023-05-01 19:23:19.934 INFO 1 --- [ main] .s.d.r.c.RepositoryConfigurationDelegate : Finished Spring Data repository scanning in 7330 ms. Found 14 JPA repository interfaces. 2023-05-01 19:23:39.605 INFO 1 --- [ main] o.s.b.w.embedded.tomcat.TomcatWebServer : Tomcat initialized with port(s): 7777 (http) 2023-05-01 19:23:40.070 INFO 1 --- [ main] o.apache.catalina.core.StandardService : Starting service [Tomcat] 2023-05-01 19:23:40.098 INFO 1 --- [ main] org.apache.catalina.core.StandardEngine : Starting Servlet engine: [Apache Tomcat/9.0.71] 2023-05-01 19:23:42.505 INFO 1 --- [ main] o.a.c.c.C.[Tomcat].[localhost].[/] : Initializing Spring embedded WebApplicationContext 2023-05-01 19:23:42.542 INFO 1 --- [ main] w.s.c.ServletWebServerApplicationContext : Root WebApplicationContext: initialization completed in 55417 ms 2023-05-01 19:23:54.032 INFO 1 --- [ main] o.hibernate.jpa.internal.util.LogHelper : HHH000204: Processing PersistenceUnitInfo [name: default] 2023-05-01 19:23:55.426 INFO 1 --- [ main] org.hibernate.Version : HHH000412: Hibernate ORM core version 5.6.15.Final 2023-05-01 19:24:00.932 INFO 1 --- [ main] o.hibernate.annotations.common.Version : HCANN000001: Hibernate Commons Annotations {5.1.2.Final} 2023-05-01 19:24:04.792 INFO 1 --- [ main] com.zaxxer.hikari.HikariDataSource : HikariPool-1 - Starting... 2023-05-01 19:24:19.088 INFO 1 --- [ main] com.zaxxer.hikari.HikariDataSource : HikariPool-1 - Start completed. 2023-05-01 19:24:20.285 INFO 1 --- [ main] org.hibernate.dialect.Dialect : HHH000400: Using dialect: org.hibernate.dialect.MySQL57Dialect 2023-05-01 19:24:59.147 INFO 1 --- [ main] o.h.e.t.j.p.i.JtaPlatformInitiator : HHH000490: Using JtaPlatform implementation: [org.hibernate.engine.transaction.jta.platform.internal.NoJtaPlatform] 2023-05-01 19:24:59.343 INFO 1 --- [ main] j.LocalContainerEntityManagerFactoryBean : Initialized JPA EntityManagerFactory for persistence unit 'default' 2023-05-01 19:25:12.095 INFO 1 --- [ main] o.s.b.w.embedded.tomcat.TomcatWebServer : Tomcat started on port(s): 7777 (http) with context path '' 2023-05-01 19:25:12.128 INFO 1 --- [ main] c.jgj.byl_process.BylProcessApplication : Started BylProcessApplication in 161.55 seconds (JVM running for 186.18)
JSON
복사
권한 자체도 유지가 되나 봅니다.
자세한 원인은 알 수 없지만.
1.
수정된 .env파일을 docker-compose.yml 파일이 읽지를 못 한다.
2.
그래서 현재 byl_db가 아닌 next_page_db 가 생성됨
3.
mysql에서 root 계정으로 로그인 (.env 파일 root password)
4.
데이터베이스 생성 및 eddi에게 권한 부여
5.
해결