본문 바로가기

Database

(32)
MySQL Procedure Privileges 개발할때 일반 계정에 다음과 같이 모든 권한을 주는데 사실 파트별로 필요한 권한을 주는것이 맞다. GRANT ALL PRIVILEGES ON *.* TO USER@'host'; 귀찮아서 미루다 보면 권한은 나중에 꼭 해깔리고, 한 번에 작업이 끝나지 않는 경우도 많음 사용자에 procedure 권한은 다음과 같이 줄 수 있다. GRANT EXECUTE, CREATE ROUTINE, ALTER ROUTINE ON DATABASE_NAME.* TO USER@'host'; 일반 계정에 create 권한을 주려면 환경변수 값을 변경해줘야 한다. SET GLOBAL log_bin_trust_function_creators = 1; 이렇게 적어 두었으니 까먹더라도 여기로 오겠지?
postgresql database 관리 postgresql 은 multi database 를 지원한다. CREATE DATABASE database 를 생성하기 위해서는 role 에 createdb attiribute 가 있어야 한다. (superuser 제외) 데이터베이스를 생성할때 template 에서 생성되는 데이터베이스에 복사를 하는 개념이다. postgresql 에서는 이런한 template 이 두개 제공된다. template0 1과 달리 변경이 안되며, 기본값을 가지는 template 이다. pg_dump 로 부터 restoring 할때 유용하다. template1 기본적으로 제공되는 template site-local 추가가 가능하다. 추가된 속성은 다음 생성되는 데이터베이스에 기본값이 된다. -- 기본 적인 데이터베이스 설정 C..
postgresql 소스설치 개요 rpm 같은 패키지를 이용하여 설치를 할 경우 각종 기본 값, 행동에 해당하는 것들을 알기 어렵기 때문에 소스로 설치하여 작동 환경 등을 알아 본다. 운영에서 소스를 컴파일하여 설치하지는 않음 패키지 설치는 일반계정의 홈 하위 디렉터리에 설치를 한다. 문제되면 한방에 지우기 편하기 때문. 삽질하기가 용이해짐 설치 소스다운로드 wget https://ftp.postgresql.org/pub/source/v12.3/postgresql-12.3.tar.gz tar xvfz postgresql-12.3.tar.gz 컴파일 및 설치 컴파일을 할때는 configure 를 통해 사용자가 기본설정을 바꾸거나 추가할 수 있다. 여기서는 다음을 추가 한다. prefix with-python (https://www.p..
HAProxy 를 이용한 read / write split 및 failover 개요 MHA 기반으로 MySQL 의 서버사이드의 Failover 를 구성하였을때 클라이언트 사이드 Failover 로 HAProxy 를 이용하여 테스트 진행한다. 테스트는 2개 노드로 진행하지만 실 운영에서는 최소 3개 노드가 필요하다. HAProxy 를 이용한 failover 예상 아키텍쳐 MySQL MHA manager Proxy( HAProxy ) L4,L7, GSLB HAProxy 특징 Event-Driven Architeture Non-Blocking I/O zero-copy multi process or multi thread model CPU Cache efficiency 같은 작업에 대해 동일 CPU 를 연결 → cache miss 를 줄여 성능향상 TCP, HTTP close mode K..
replication 관련 명령어 모음 리플리케이션에 사용되는 명령어 정리 MASTER -- master / slave 구분 mysql> show variables like 'read_only'; +---------------+-------+ | Variable_name | Value | +---------------+-------+ | read_only | ON | +---------------+-------+ 1 row in set (0.00 sec) -- master 상태 확인 mysql> show master status; +------------------+----------+--------------+------------------+-------------------+ | File | Position | Binlog..
ERROR 1449 (HY000): The user specified as a definer ('mysql.infoschema'@'localhost') does not exist percona 8.0 과 기타 tool 들을 연동하면서 password 플러그인 문제로 골치가 아팠다. 이유는 8.0 의 기본이 'caching_sha2_password ' 인데 해당 플러그인 방식을 지원하지 않는 라이브러리 기반으로 작성된 tool 들이 있기 때문인데 이를 위해 다음과 같이 설정을 해 놓았었다. # my.cnf [mysqld] ... ... default_authentication_plugin=mysql_native_password 계정도 다음처럼 생성했다. mysql> select user, plugin from mysql.user; +------------------+-----------------------+ | user | plugin | +-------------..
mysql auto increment 를 포함한 테이블에서 pk 생성시 주의점 mysql에서 dump 한 ddl 을 그대로 적용하려는데 오류가 발생했다. 해당 테이블은 auto increment 컬럼을 가지고 있었는데 ddl 문은 다음과 같았다. ddl create table t1( seq bigint(20) not null auto_increment, pk1 int, pk2 int, primary key( pk1, pk2 ) ); 실행결과 mysql> create table t1( -> seq bigint(20) not null auto_increment, -> pk1 int, -> pk2 int, -> primary key( pk1, pk2 ) -> ); ERROR 1075 (42000): Incorrect table definition; there can be only one..
RDS MySQL 로 Procedure 이관 definer 오류 mysql 에서 rds mysql 로 이관시 발생했던 문제이다. 이전에 mysql 에서 rds mysql 로의 호환성 테스트를 했을때 미쳐 생각을 못한것이 procedure 의 definer 에 관한거 였다. definer 란 owner 정도로 생각하면 되는데 create procere 구문을 수행한 mysql 계정을 뜻한다. DELIMITER ;; CREATE DEFINER=`root`@`%` PROCEDURE SP_TEST() BEGIN END;; DELIMITER ; mysql jobdb 라는 데이터베이스를 rds mysql 로 이관한다고 하자. jobdb 내에는 sp_test() 이라는 프로시져가 있고 관리 차원에서 dba 라는 계정으로 데이터베이스 및 하위 오프젝트들을 생성했..