목록Database/MYSQL (24)
미스터 역마살
파티션 생성시 주의사항 스토어드루틴이나 UDF, 사용자 변수등을 파티션 표현식에 사용할 수 없다. 파티션 표현식은 일반적으로 칼럼 그 자체 또는 mysql 내장 함수를 사용할 수 있는데, 여기서 일부 함수들은 파티션 생성은 가능하지만 파티션 프루닝은 지원하지 않을 수 있다. ABS(), CEILING(), EXTRACT(), FLOOR(), MOD(), DATEDIFF(), DAY(), DAYOFMONTH(), DAYOFWEEK(), DAYOFYEAR(), HOUR(), MICROSECOND(), MINUTE(), MONTH(), QUARTER(), SECOND(), TIME_TO_SEC(), TO_DAYS(), TO_SECONDS(), UNIX_TIMESTAMP(), WEEKDAY(), YEAR(), ..
Mysql DBA 업무 SQL Mysql DBA 업무를 수행하면서 필요했던 SQL 모음이다. 계정 및 권한 관리 계정 리스트 확인 하기 use mysql; select * from user; 계정 생성 /* 계정 생성 */ CREATE USER create user test3@123.123.123.123 identified by '[패스워드]'; -- 계정 생성하면서 권한 주기 GRANT ALL ON *.* TO test@localhost IDENTIFIED BY "[패스워드]"; GRANT Select, Insert, Delete On test_db.test 'test_user'@'192.168.0.20' IDENTIFIED BY '[패스워드]' FLUSH privileges; 권한 추가 GRANT A..
InnoDB란? Innodb는 Mysql에서 사용하는 데이터베이스 엔진이다. 트랜잭션 세이프 스토리지 엔진으로서 대용량 데이터를 처리 할 때 많은 장점을 가지고 있다. 또한 Innodb는 오라클과 비슷한 기능들을 제공 하고 있다. (commit, rollback, 장애복구, row-level locking, 외래키 등) InnoDB 아키텍처 InnoDB는 크게 메모리 영역, CPU 영역, 디스크 스토리지 영역으로 구분할 수 있다. 메모리, 파일 영역 1. Innodb buffer pool Innodb스토리지 엔진에서 가장 핵심적인 부분으로 디스크의 데이터 파일이나 정보를 메모리에 캐시해두는 공간이다. 오라클의 데이터 버퍼캐시 같은 역할은 한다고 생각하면 될듯 하다. SELECT시 버퍼캐시에 해당 페이지가..
에러 발생 상황 Truncated incorrect INTEGER value : 'AWS' 에러 발생 상황 S전자 보안포털 사이트에서 On-premise → AWS RDS로 이전을 한것에 대한 테스트를 하던 와중 Truncated incorrect INTEGER value라는 에러가 발생하였다. 해당 에러가 발생한 조회조건을 봤는데 컬럼 타입이 모두 VARCHAR로 INTEGER와는 전혀 무관한 타입이었다. 구글링을 해봐도 버그라는 내용만 나오고 당최 이유를 알지 못했다. 그러던 와중에 파라미터값을 SELECT 절로 조회 할 수 있었다. -- 일반적인 방법 show variables; -- 이것도 가능 select @@global.sql_mode; 하지만 이렇게 조회할 경우 서로 다른 값이 나왔다. 너무..
에러 발생 이유 Mysql에서 This function has none of DETERMINISTIC, NO SQL, or READS SQL DATA in its declaration and binary logging is enabled (you might want to use the less safe log_bin_trust_function_creators variable) 에러가 발생하는 이유는 아래와 같다. 구글링 해보니 MySQL 특정 버전대에서 Super 권한이 없는 user에게서 발생할 수 있는 문제이다. 원인은 mysql global variable 중 log_bin_trust_function_creators 옵션이었다. log_bin_trust_function_creators 옵션은 MyS..
에러가 나는 이유 THE TOTAL NUMBER OF LOCKS EXCEEDS THE LOCK TABLE SIZE 에러 발생할때 이유는 아래와 같다. MySQL은 저 문장이 들어오면 일단 select 결과를 모두 메모리로 가져온다. 그 메모리가 buffer 다. 이걸 조정하는 게 buffer_size 옵션이다. 그런데, 가지고 올 데이터량이 많아서 buffer_size를 넘어간다면? MySQL 은 Temp_Table이 완성되기 전에 You_Table 이 변경되면 안되니까, You_Table 에다가 lock을 걸어버린다. 즉, 그동안 다른 트랜잭션이 데이터를 변경할 수 없다는 소리다. 그래서 이런 에러가 생긴다. 해결방안 innodb_buffer_pool_size의 기본값이 8,388,608이라는데 이것은..