본문 바로가기

728x90
반응형

Database

(13)
PgBouncer: connection pool 관리 라이브러리 PostgreSQL의 pool을 관리하는 라이브러리 Connection Pool를 관리하여 postgresql의 부하를 줄여줄 수 있다. 더보기PgBouncer는 PostgreSQL을 위한 **경량(lightweight) 커넥션 풀러(Connection Pooler)**입니다. 수많은 클라이언트(애플리케이션)로부터 오는 데이터베이스 연결 요청을 소수의 실제 데이터베이스 연결로 효율적으로 중계하여, PostgreSQL 서버의 부하를 줄이고 전체 시스템의 성능을 향상시키는 역할을 합니다.쉽게 비유하자면, 인기 있는 클럽 입구에서 입장을 관리하는 **가드(Bouncer)**와 같습니다. 수백 명의 손님(애플리케이션 프로세스)이 한 번에 입장하려 하면 클럽 내부(DB 서버)가 혼잡해져 마비됩니다. 이때 가드(P..
PostgreSQL in Ubuntu - DB insert error: (psycopg2.DatabaseError) error with status PGRES_TUPLES_OK and no message from the libpq # Multi process # fork in Linux(Ubuntu) # spawn in Windows PostgreSQL을 이용하여 데이터베이스를 구축1. Windows에서는 정상2. Linux (Ubuntu) 에서는 아래 오류 발생하는 경우 DB insert error: (psycopg2.DatabaseError) error with status PGRES_TUPLES_OK and no message from the libpq 작업 환경과 사용 라이브러리는 다음과 같다OS: Ubuntu 22.04DB 연결: psycopg2-binaryORM: sqlalchemy 위 에러가 발생하는 코드는 insert query후 commit을 하는 단계에서 발생했다. 문제는 Windows에서는 발생하지 않는데, Ubuntu에서만 발생하는 에러라는 점이다.insert commit 단계에서 발생하는 에러임에도 inse..
PostgreSQL: Int id 충돌 문제 # auto increasement error # duplicate key value violates unique constraint PostgreSQL에서 int pk를 auto increment (숫자 자동 증가)로 부여하는 경우,종종 존재하는 id로 row를 추가하려는 경우가 있다. 예시 오류SQLSTATE[23505]: Unique violation: 7 ERROR: duplicate key value violates unique constraint "pages_pkey"DETAIL: Key (id)=(4) already exists. -> id auto increment를 마지막 int부터 다시 시작하도록 설정 psql shell을 진입 - 해당 데이터 베이스 사용 (\c database_name) 1.현재 sequence value를 확인하자(참고: table 명이 pages 인 경우이다)SELECT last_value, i..
PostgreSQL: password 안전하게 사용하기 # PGPASSWORD # .pgpass # .env Python에서 프레임워크가 아닌 Script를 통해 sql문을 사용하는 상황에서create table sql을 작성할 때 DB 접근을 위해 PASSWORD가 필요하다. .env에 기록을 해두고 load_dotenv로 사용할 수 있는데,psql command에 .env에서 불러온 password를 넣는 방식은 보안에 취약할 수 있다.비밀번호 등이 명령어 히스토리에 남을 수 있기 때문이다. 예제코드를 통해 살펴보자import subprocessimport osfrom pathlib import Pathfrom dotenv import load_dotenvload_dotenv()def create_table(): db_user = os.getenv('DB_USER') db_name = os.get..
MySQL: root 유저 비밀번호 설정 후에도 shell 접근이 안되는 경우 # auth_socket # mysql_native_password # mysql -u root -p Ubuntu 환경에서 MySQL 설치후,sudo 권한으로 mysql shell에 들어가서 root의 패스워드를 변경하고 나서다시 ubuntu shell에서 mysql -u root -p 명령어로 shell에 접근하려고 하는데, ERROR 1698 (28000): Access denied for user 'root'@'localhost' 위 오류가 발생하며 접근이 안되는 경우가 있다.이럴 경우 프로젝트에서 DB 설정을 통해 접근해도 같은 식으로 접근이 불가하다. sudo 권한으로 다시 mysql shell에 들어가거나sudo mysql위 명령어로 mysql에 접근하자 ( Log in to MySQL using the socket authentication (without a password) ) 그리고 아..
MySQL: max_connections 수정 Check current max_connections:SHOW VARIABLES LIKE 'max_connections'; Changing the maximum number of connections that MySQL can handle involves modifying the max_connections setting. This parameter determines how many concurrent connections MySQL can accept. Here’s how you can adjust this setting, either temporarily or permanently:Temporarily Changing Max Connections1. Via MySQL Command Line:Conn..
MySQL: query log 확인 # table & file OS: ubuntu 22.04 기준 1. my.cnf 설정파일 변경 /etc/mysql/my.cnf 또는 /etc/my.cnf 나는 /etc/mysql/my.cnf에 있었음 아래 설정을 추가한다 더보기 [mysqld] general_log = 1 general_log_file = /path/to/your/logfile.log 로그 파일 대신에 테이블을 생성해서 볼수도 있다. general_log_file 대신에 log_output = TABLE 이용 더보기 [mysqld] general_log = 1 general_log_file = /path/to/your/logfile.log -> mysql database안에 general_log 테이블 생성됨. 여기에 모든 로그가 기록된다. 사이즈 관리 유의 my..
PostgreSQL: query 기록하고 보기 - log파일로 보기 # /var/log/postgresql PostgreSQL에서 postgresql의 log를 봐보자 OS: ubuntu 22.04 기준 linux: 기본적으로 log들은 /etc/log에서 확인 가능 더보기 cd /etc/log/postgresql 위에서 로그들을 볼 수 있다. * 추가적으로 query들을, 자세하게 볼수 있도록 설정해보자 1. postgresql.conf에 아래와 같이 변경 - 대부분 주석 처리가 되있을 것이므로, 주석을 풀어서 기재하자. 없으면 직접 써줘도 된다. 더보기 log_statement = 'all' 위 설정으로 모든 sql statements에 대한 기록을 해주도록 한다고 한다. (주석으로 none으로 되어 있었음) 더보기 log_parameter_max_length = 0 위 설정은 모든 parameter va..

728x90
반응형