Database/MySQL (29) 썸네일형 리스트형 InnoDB Buffer pool buffer pool 은 InnoDB 가 억세스 하는 테이블 및 인덱스 데이터를 캐시하는 메모리 영역이다. 시스템 물리 메모리의 60~80% 정도를 할당 한다. 작업의 효율성을 위해 복수의 행을 보관할 수 있도록 페이지로 나뉘며 링크된 페이지 목록으로 구현된다. 오랫동안 참조되지 않은 페이지는 LRU 알고리즘으로 만료 시킨다. buffer pool 은 2개의 하위 리스트로 구성된다. new sublist buffer pool 의 5/8 공간을 차지 최근에 참조되면 이 sublist 에 추가 된다. old sublist buffer pool 의 3/8 공간을 차지 참조되지 않을 수록 점차 이 sublist 에 가까워지거나 이동되어 진다. 새로운 page 가 추가될때 이 두개의 sublist 사이로 추가되며.. InnoDB Locking and Transaction Model MySQL lock global lock MySQL 서버 전체에 걸리는 잠금으로 보통 mysqldump 등에서 백업을 위해 사용한다. FLUSH TABLES WITH READ LOCK; 위 구문은 실행과 동시에 데이터베이스에 구분없이 서버 전체를 대상으로 잠금이 획득된다. table lock 개별 테이블 단위로 설정하는 장금이다. FLUSH TABLES WITH READ LOCK; 명시적 잠금은 아래와 같이 구문으로 명시적으로 잠금을 획득할 수 있다. LOCK TABLES table_name [READ | WRITE]; UNLOCK TABLES; 묵시적 잠금은 MyISAM 혹은 MEMORY 스토리지 엔진 등에서 데이터를 변경할때 테이블 단위 잠금을 지원하므로 자동으로 획득후 해제를 하게 된다. user .. MySQL shell importTable() 사용하기 filelist=" T1.csv T2.csv " HOST=127.0.0.1 PASSWD=pass DATABASE=test USER=root THREADS=4 file_path=/home/chlee/data CMD="$HOME/mysqlsh/bin/mysqlsh -h $HOST -u$USER -p$PASSWD --mysql" function importAll() { for filename in `ls $filelist` do importTable $file_path/$filename done } function importTable() { if [ -f "$1" ]; then basename=$(basename -- $1) filename=${basename%.*} echo "import $filename.. MySQL shell exportTable() 사용하기 tablelist=" T1 T2 " file_path=/home/chlee/data mysqlsh_path=$HOME/mysqlsh/bin HOST=127.0.0.1 PASSWD=pass DATABASE=test USER=root CMD="$mysqlsh_path/mysqlsh -h $HOST -u$USER -p$PASSWD --mysql" function exportAll() { for table in $tablelist do exportTable ${table%.*} done } function exportTable() { table=$1 echo "export $table" time $CMD -e "util.exportTable('${DATABASE}.$table' , 'file://$file_pa.. MySQL 쿼리로 csv 데이터 추출하기 tablelist=" T1 T2 T3 " HOST=127.0.0.1 PASSWD=pass DATABASE=test CMD="mysql -h$HOST -uroot -p$PASSWD $DATABASE -sN -e " map[T1]="'BTC','ETH'" map[T2]="'BTC2','ETH2'" map[T3]="'BTC3','ETH3'" START_TIME="unix_timestamp( '2021-09-27' )" END_TIME="unix_timestamp( '2021-09-29' )" function exportDiffData() { set -f SQL="SELECT * FROM $1 where $START_TIME purge binary logs statement 데이터 변경분을 가지고 있는 binary log 는 삭제되지 않고 계속 축척된다. 상황에 따라 다르겠지만 디스크는 무한하지 않기 때문에 주기적으로 삭제되어야 한다. PURGE { BINARY | MASTER } LOGS { TO 'log_name' | BEFORE datetime_expr } 예문 PURGE BINARY LOGS TO 'mysql-bin.010'; PURGE BINARY LOGS BEFORE '2019-04-02 22:46:26'; slave 가 있고 replication 중 이라면 삭제에 주의해야 한다. replication 이 아직 진행되지 않은 상태에서 purge 를 할 경우 replication 이 중단 될 수 있다. 물론 해당 파일을 읽는 중이라면 삭제는 되지 않는다. 메뉴얼에서.. @@GLOBAL.GTID_PURGED cannot be changed: the added gtid set must not overlap with @@GLOBAL.GTID_EXECUTED kafka connect 테스트 중에 mysql master 의 데이터를 slave 로 옮기던 중 아래 오류가 발생 했다. @@GLOBAL.GTID_PURGED cannot be changed: the added gtid set must not overlap with @@GLOBAL.GTID_EXECUTED 내용은 master 에서 purged 된것을 slave 의 gtid_executed 에 설정 할 수 없다는 것인데 이것은 각 서버마다 uuid 로 gtid 를 생성하는데 master 의 것을 가져와서 slave 에 반영하려 했기 때문에 발생한 것이다. workaround 는 다음과 같다. reset master mysql> reset master; 해당 구문을 dump 파일에서 삭제 SET @@GLO.. Mysql 실행되는 로그 파일로 남기기 mysql> set global general_log=on; Query OK, 0 rows affected (0.00 sec) mysql> set global log_output='file'; Query OK, 0 rows affected (0.00 sec) mysql> set global general_log_file='/home/bos/mysql/data/general_log.log'; Query OK, 0 rows affected (0.01 sec) mysql> 이전 1 2 3 4 다음