목록DEV&OPS/Database (15)
삶 가운데 남긴 기록 AACII.TISTORY.COM
FATAL: Peer authentication failed for user "..."1. 리눅스(CentOS)에서 postgresql 14를 설치2. 리눅스의 유저이자 슈퍼 유저인 postgres 계정 생성 3. psql이나 DBever등 툴 혹은 Web Application에서 접속4. database는 postgres라는 이름으로 생성, 스키마, 권한, Role 설정5. 일반 DBMS 유저(예: scott)를 생성하고 접속 시도 위와 같은 상황에서치명적오류: 사용자 "scott"의 password 인증을 실패했습니다.혹은치명적오류: 사용자 "scott"의 peer 인증에 실패했습니다.postgresql 접속시도시 위와 같은 오류가 발생하는 상황에서의 대처했던 경험에 대해 포스팅하겠습니다.유저 sco..
postgresql 14 에서 백업 및 복원 방법을 알려드리겠습니다. # 데이터베이스 백업 pg_dump -h 호스트네임 -p 포트번호 -U 사용자이름 -F tar -b -v 데이터베이스이름 > 백업파일이름 실행하게 되면 비밀번호를 물어보게 됩니다. 이 때 비밀번호는 postgresql 사용자이름에 할당된 비밀번호를 입력하면됩니다. # 데이터베이스 복원 pg_restore -h 호스트네임 -p 포트번호 -U 사용자이름 -d 데이터베이스이름 백업파일이름 복원할 때도 마찬가지로 비밀번호를 물어봅니다. postgresql에 있는 모든 데이터베이스를 백업 및 복원은 다음과 같습니다. 백업은 pg_dumpall 명령으로, 복원은 psql 명령으로 합니다. # 모든 데이터베이스 백업 pg_dumpall -h 호스트..
사전 준비 여기서는 리눅스(CentOS)에서 설치시 사용했던 oracle 계정으로 작업합니다. https://blog.aacii.net/277 CentOS 7 oracle 19c 설치 오라클 데이터베이스 19c 다운로드 https://www.oracle.com/database/technologies/oracle-database-software-downloads.html 파일: Linux x86-64 종류: zip 자신의 운영체제에 맞는 zip 파일을 다운로드합니다. 호스트 네임 등 blog.aacii.net 먼저 백업 덤프 파일이 저장될 디렉토리와 그 별칭을 생성해야 합니다. 안그러면 ORA-39002, ORA-39070, ORA-39087 에러 삼종 세트를 보게되실 겁니다. 여기서 dump 및 복원 시..
사용자 생성 먼저 새로운 사용자를 생성해야 합니다. CREATE USER 사용자이름 WITH PASSWORD '사용자패스워드'; 데이터베이스 생성 생성된 사용자가 사용할 새 데이터 베이스를 생성합니다. CREATE DATABASE 생성할데이터베이스이름; 사용자에게 권한 부여 GRANT ALL PRIVILEGES ON DATABASE 생성된데이터베이스 TO 생성된사용자이름; 사용자 스키마 생성 CREATE SCHEMA 생성할스키마 AUTHORIZATION 사용자이름; 확인 \du -- 사용자 목록 확인 \l -- 데이터베이스 목록 확인 \dn -- 스키마 목록 확인 이제 이 스키마를 사용하여 해당 사용자가 테이블, 뷰 등을 생성할 수 있습니다.
https://www.postgresql.org/download/linux/redhat/ PostgreSQL: Linux downloads (Red Hat family) Linux downloads (Red Hat family) The Red Hat family of distributions includes: Red Hat Enterprise Linux Rocky Linux AlmaLinux CentOS (7 and 6 only) Fedora Oracle Linux and others. PostgreSQL is available on these platforms by default. However, each version www.postgresql.org 에 방문하면 자신의 환경에 맞는 설치 스크립트를 ..
MySQL 8 이상 MySQL 8은 기본 character set 과 collation 이 utf8mb4와 utf8mb4_0900_ai_ci 이므로 별도 utf8설정이 필요하지 않습니다. MySQL의 utf8은 3byte 문자 밖에 표시하지 못하므로 utf8mb4 즉, 4byte 인코딩을 사용할 것을 권장합니다. (MySQL 5.5.3 이상 필요) MySQL 5.7 MySQL 5.7 이하는 명시적으로 설정하지 않으면 latin1 이 기본 캐릭터 셋입니다. mysql 콘솔에 접속 후 mysql -u root -p status으로 server characterset 등을 확인할 수 있습니다. status; Charaterset 설정 CentOS 설정 파일: /etc/my.cnf Ubuntu 설정 파일: /e..
데이터 무결성 검사 단일 테이블에 대해 무결성 검사를 하려면 mysql> CHECK TABLE 데이터베이스이름.테이블이름; 리눅스 콘솔에서 전체 테이블을 검사 하려면 mysqlcheck -u root -p --check --databases 데이터베이스이름 테이블 무결성 검사는 정기적으로 하는 것을 권장합니다. Optimize 사용하지 않은 공간을 회수합니다. MyISAM 엔진을 쓰는 MySQL에서는 optimize 명령은 단편화 제거 작업만을 수행합니다. InnoDB 엔진을 쓰는 MySQL에서는 ALTER문으로 인덱스를 재생성하도록 요청합니다. 단일 테이블에 대해 optimize 하려면 mysql> OPTIMIZE TABLE 데이터베이스이름.테이블이름; 리눅스 콘솔에서 전체 테이블을 optimize 하..
오라클은 접속 사용자 계정의 패스워드 설정 기본 값이 패스워드를 180일 주기로 변경하도록 되어 있습니다. 만료일이 지나면 다음과 같은 메시지를 확인 할 수 있습니다. oracle: the password has expired. 조치 절차에 대해 설명합니다. 1. 로그인 없이 sqlplus 실행 후 dba 계정으로 접속 sqlplus /nolog connect sys as sysdba 2. 혹은 sqlplus 바로 dba 계정으로 접속 sqlplus / as sysdba 3. passowrd_life_time 값 확인 (기본값 180일) select * from dba_profiles where profile = 'DEFAULT'; 4. 만료일을 unlimited로 변경 alter profile defa..
원본 테이블 구조(스키마)와 같은 새 테이블 생성 CREATE TABLE IF NOT EXISTS 타겟DB.복사테이블 LIKE 원본DB.원본테이블; 원본 테이블에 Primary Key 또는 auto_increment가 설정되어 있으면 복사할 수 없습니다. 원본 테이블 구조(스키마)와 같은 새 테이블을 생성 후 데이터도 함께 복사 CREATE TABLE IF NOT EXISTS 타겟DB.복사테이블 SELECT * FROM 원본DB.원본테이블; 원본 테이블에 Primary Key 또는 auto_increment가 설정되어 있으면 복사할 수 없습니다. 테이블을 생성했던 CREATE 쿼리 보기 SHOW CREATE TABLE 원본DB.테이블이름; Primary Key나 auto_increment 등 제약사항도 ..
리눅스 개발서버에서 MySQL 5.X 사용중에 디스크 용량 부족 메시지가 나오길래 우선 디스크 용량을 조사해 보았습니다. df -h 과연 루트 파티션의 용량이 꽉차 있었습니다. 그래서... 원인을 찾기 위해 좀더 조사해보았습니다. du -h 여러분의 실제 경로는 다를 수 있습니다만 /var/lib/mysql/ibtmp1 용량을 잡아먹던 범인은 바로 이 ibtmp1 파일이었습니다. 무한정 커지고 있더군요. 문제 해결은 단순히 MySQL를 재시작하는 것이었습니다. 리눅스 콘솔에서 아래와 같이 재시작 합니다. systemctl restart mysqld MySQL Temporary Tablespace 사용자가 생성한 임시 테이블들이 shared temporary tablespace 에 생성됩니다. 아무것도 설..
함수적 종속(Functional Dependency) X→ Y: X, Y가 속성의 부분 집합일 때, X 값이 항상 Y 값의 오직 하나만 연관 되어 있을 경우 함수적으로 종속되어있다고 합니다. 학번 이름 학년 학과 400 이순신 4 컴퓨터공학과 422 유관순 3 수학과 (Determinant): 학번 → (Dependent): 이름, 학년, 학과 완전 함수적 종속과 부분 함수적 종속 수강 테이블 학번 과목번호 성적 학년 100 c413 a 4 100 e412 b 4 학번, 과목번호 → 성적 학번 → 학년 성적은 (학번, 과목번호)에 완전 함수적 종속(Functional Dependency)입니다. 학년은 (학번, 과목번호)에 부분 함수적 종속(Partial Functional Dependency)이다. 학..
MYSQL 에서 VARCHAR 형식으로 데이터는 YYYY-MM-DD 같이 저장되어 있을 때 비교 연산자를 사용하면 오류가 생길 수 있습니다. 그럴 때 필요한 함수가 DATE_FORMAT() 과 STR_TO_DATE() 입니다. 1. 컬럼이 VARCHAR 형식일 때 SELECT * FROM TBL_BOARD WHERE DATE
MySQL 콘솔 접속 mysql -u root -p :루트 패스워드 입력 데이터베이스(DB) 확인 show databases; 사용자(user) 확인 select * from mysql.user; tester 계정 추가 create user 'tester'@'localhost' identified by 'testerpw'; -- localhost에서만 접속 가능한 아이디:tester 패스워드: testerpw 으로 계정 생성 create user 'tester'@'%' identified by 'testerpw'; -- 모든 아이피에서 접속 가능하도록 아이디:tester 패스워드: testerpw 으로 계정 생성 create user 'tester'@'192.168.0.100' identified by ..
MySQL Event Scheduler MySQL 5.1 부터 자바의 Quartz나 리눅스의 Crontab 처럼 이벤트 스케줄러를 통해 배치작업을 할 수 있게 되었습니다. 아래의 작업들은 콘솔에서 root 계정으로 접속하여 작업하는 것을 추천드립니다. mysql -u root -p 이벤트 스케줄러 상태 확인 SHOW VARIABLES LIKE 'event%'; 이벤트 스케줄러 ON/OFF SET GLOBAL event_scheduler = ON; SET GLOBAL event_scheduler = OFF; 만약 event_schedule 변경중에 에러코드 1227 이 나오는 경우 mysql을 root 권한으로 접속 후 다음을 실행하십시오. UPDATE mysql.user set Super_Priv='Y'..
특정 테이블의 내용으로 테이블을 업데이트할 때가 있습니다. 이럴 때 join 을 이용하여 update 할 수 있습니다. UPDATE 업데이트할테이블명 AS A INNER JOIN 데이터를가져올테이블명 AS B ON A.조인키 = B.조인키 SETA.업데이트할컬럼 = B.가져올데이터컬럼 WHERE 절 예제) 테이블(TBL__WRK)에 수정 일자(MODDATE)가 null 인 행들만 등록일자(REGDATE)로 업데이트 UPDATE TBL_WRK AS A INNER JOIN TBL_WRK AS B ON A.WRKID = B.WRKID SET A.MODDATE = B.REGDATE WHERE A.MODDATE IS NULL 테이블 내용을 기초로 DELETE 할 때는 조금 다릅니다. DELETE FROM TBL1..