Database/MySQL (29) 썸네일형 리스트형 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; 이렇게 적어 두었으니 까먹더라도 여기로 오겠지? 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 라는 계정으로 데이터베이스 및 하위 오프젝트들을 생성했.. binary log file position based replication 개요 데이터베이스 변경분을 binarylog에 event로 기록한다. inndb 기준, 1개의 event는 1개의 transaction 이다. slave는 master의 binarylog를 읽고 slave의 로컬 데이터베이스에서 binarylog의 event를 실행한다. 각 slave는 모든 binarycontents를 받는다. 또한 binarylog에서 어떤 구문을 수행할지에 대해서는 slave에서 결정한다. slave의 i/o thread는 로컬에 binary log를 저장하며 relay log 라고 한다. slave의 sql thread는 relay log 의 내용중에서 약속된 event 만 실행한다. event를 특정해서 적용하는것은 불가능 하며 특정 데이터베이스 및 테이블을 선정하는것은 가능하다.. SYSBENCH 를 이용하여 RDS MySQL, RDS Aurora, GCP Cloud SQL MySQL OLTP 테스트 2차 개요 1차 테스트에서 rds-mysql 이 탈락하고 아래와 같은 이유로 2차 테스트를 진행함 transaction 성능은 aurora 가 좋지만 bulk insert 에서 aurora가 gcp 보다 느린 이유는? aurora 의 disk 성능이 타 서비스와 비교해서 동등한가? 확인가능 한가? 테스트 내용 sysbench 의 oltp_read_write 시나리오는 dml 이 혼합된 형태인데 위 transaction 이 select 에 포함되어 있는지 등이 불명확하며 wirte 의 구성도 delete1:update:2:insert1 로 되어 있기 때문에 transaction 수치와 bulk-insert 수치를 동등하게 비교할 수 없다. 따라서 insert, update, select, delete 로 시나리.. 이전 1 2 3 4 다음