디비 덤프 시 아래와 같은 오류가 있는경우 체크 할 사항 # 덤프 시 에러내용 root@web:/var/lib/mysql5# mysqldump -u root -p database> database.sql Enter password: mysqldump: Couldn't execute 'SET OPTION SQL_QUOTE_SHOW_CREATE=1': You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'OPTION SQL_QUOTE_SHOW_CREATE=1' at line 1 (1064) # 체크 할 사항 설치된 데이터베이스 서버와 클라이언트툴의 버전이 맞는지 체크한다. 서버의 경우 소스 컴파일하여 5.6.x를 설치하였지만 클라이언트툴은 rpm 으로 기본 설치된 5.0.x의 클라이언트툴이 PATH에 먼저 잡히면서 덤프 시 위와같은 오류가 있는 경우가 많다. 실제 설치한 경로에 있는 mysqldump 명령어를 활용하면 해결될 수 있따.
#####vi /etc/logrotate.d/mysql /var/lib/mysql5/db-slow.log {dailyrotate 7missingokpostrotate/opt/webapps/mysql5/bin/mysqladmin flush-logsendscript}################################################# #daily : 로그파일을 날짜별로 변환#rotate : 지정 갯수 이상되면 예전 log파일 삭제#missingok : 로그파일이 없더라도 오류를 발생시키지 않음#postrotate-endscript :사이에 들어있는 명령어 실행 ################################################# ####메일 스크립트#!/bin/bashYEAR=`date +%Y`MONTH=`date +%m`DAY=`date +%d`SUBJECT="$YEAR$MONTH$DAY DB 슬로우쿼리입니다"EMAIL="메일주소"EMAILMESSAGE="/var/lib/mysql5/db-slow.log-$YEAR$MONTH$DAY" /bin/mail -s "$SUBJECT" "$EMAIL" < $EMAILMESSA
mysql 대용량 파일 insert 하기 (load data) LOAD DATA INFILE '로드 할 파일명' INTO TABLE 테이블명FIELDS TERMINATED BY '|'LINES TERMINATED BY ' '(컬럼명 쭉~~~~~~~~~`); FIELDS TERMINATED BY '|' : 컬럼을 구분자 구분자 지정LINES TERMINATED BY ' ' : 라인(줄)을 구분해줄 구분자. 보통 지정ignore 1 line : 등록할 파일명의 첫줄을 무시하고 insert LOAD DATA INFILE '로드 할 파일명' INTO TABLE 테이블명FIELDS TERMINATED BY '|'LINES TERMINATED BY ' 'ignore 1 line (a, b, c, d, e, f`);
# Linux9 + oracle9i 시스템에서 DB생성하가다 발생한 에러 [oracle@server oracle]$ ./dbca Initializing Java Vertual Machine from /tmp/OraInstall/jre/bin/jre. Pleae wait... /tmp/OraInstall/jre/bin/../lib/i686/green_threads/libzip.so: symbol errno, version GLIBC_2.0 not defined in file libc.so.6 with link time reference (libzip.so) Unable to initialize threads: cannot find class java/lang/Thread Could not create Java VM I tried setting LD_ASSUME_KERNEL=2.4.1 but it still doesn't work.Please help. Thanks # 해결방법 [oracle@server oracle]$ export LD_ASSUME_KERNEL=2.4.1
INSERT INTO mysql.user(User, Host, Password, ssl_cipher, x509_issuer,x509_subject) VALUES('유저아이디t', 'localhost', Password('패스워드'), '', '', ''); INSERT INTO `mysql`.`db` (`Host` ,`Db` ,`User` ,`Select_priv` ,`Insert_priv` ,`Update_priv` ,`Delete_priv` ,`Create_priv` ,`Drop_priv` ,`Grant_priv` ,`References_priv` ,`Index_priv` ,`Alter_priv` ,`Create_tmp_table_priv` ,`Lock_tables_priv` ,`Create_view_priv` ,`Show_view_priv` ,`Create_routine_priv` ,`Alter_routine_priv` ,`Execute_priv` ,`Event_priv` ,`Trigger_priv`)VALUES ('localhost', '디비명', '유저아이디', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y',
ERROR 2006 (HY000) at line 2631: MySQL server has gone away 정해진 패킷 사이즈 또는 timeout 을 초과하게 되면 아래와 같은 오류를 발생 이에 대한 해결책은 아래처럼 값을 임의로 조정. # vi /etc/my.cnf <-- 수정 max_allowed_packet = 1000M wait_timeout = 1200000 interactive_timeout = 10 connect_timeout = 100000
mysql strict mode off 구동 스크립트에서 "start" 부분에 off 옵션을 넣는다. $bindir/mysqld_safe --sql-mode="" --datadir="$datadir" ~~~~~~~~~~
mysql Replication 이용 중 마스터 디비의 데이터가 슬래이브 디비의 데이터에 반영되지 않을 경우 슬래이브 상태를 확인했을 때 아래와 같은 에러가 발생할 수 있다. 101008 19:48:58 [ERROR] Slave: Error 'Duplicate entry '222' for key 1' on query. Default database: 'M_SERVICE'. Query: 'INSERT INTO T_LOTTO_MY ( MY_SEQ,USERNO,NUM1,NUM2,NUM3,NUM4,NUM5,NUM6,GAME_NUM,RANK,PRIZE,UPDATE_DATE ) VALUES ( null,'620013149754',4,18,25,44,16,8,409,'0',0,NOW() )', Error_code: 1062 원인은 슬래이브 데이터베이스에 갱신된 데이터를 쓰로고 할때 발생하는 에러이다. 슬래이브는 에러가 발생하면 더이상 마스터로부터 갱신된 데이터를 반영하지 않는다. 하지만 다행스럽게도 마스터에서의 갱신 정보는 슬래이브에 쌓여있어 위 문제를 해결하여 Replication을 정상화 시킬 수 있다. 해결책) 1. 슬래이브 상태를 멈춘다
# SQL처리 시 Temporary Table이 디스크에 사용되지 않도록 해야한다.# Temporary Table 현황 모니터링# Created_tmp_files 이 많다면 tmp_table_size를 늘려주기mysqladmin -uroot -p extended-status -r -i 1 | grep -E 'Created_tmp|--' 일부 쿼리는 Temporary Table을 메모리에 사용하지 않고 디스크를 바로 사용하는 경우가 있다.쿼리 자체를 수정하여 디스크를 사용하지 않도록 해야겠다. 임시 꼼수로.통계성 쿼리 질의 전에 세션 변수 설정(2G로 할당)을 한 후 해본다. 디스크 사용을 줄이기 위한 목적이지만 쿼리 자체를 수정하는게 더 좋은 방법임.set session tmp_table_size = 2 * 1024 * 1024 * 1024;set session max_heap_table_size = 2 * 1024 * 1024 * 1024;
# Mysql bin log 로테이션 방법 vi /etc/my.cnf ------------------------------------- log-bin=mysql-bin binlog_cache_size = 1M max_binlog_size = 100M expire_logs = 7 ------------------------------------- 로그파일 사이즈를 100M로 하고 갯수는 7개로 제한하는 설정이다. /etc/init.d/mysqld restart -> 데몬 재시작으로 적용한다
mysqlcheck --check --databases [database name]
cubrid 에서 슬로우 쿼리 뽑기(cubrid slow query) 명령어는 큐브리드 브로커 로그가 있는 곳에서 실행한다. # 하나의 로그 파일에서 슬로우 쿼리 뽑기 broker_log_top broker1_1.sql.log # 모든 로그 파일에서 슬로우 쿼리 뽑기 broker_log_top *.log # 특정 기간동안 슬로우 쿼리 뽑기 - 11월 11일부터 11월 12일까지 생성된 SQL 로그에서 슬로우 쿼리 뽑기 - 월과 일은 공백으로 구분한다 - Windows에서는 "*.sql.log"를 인식하지 않으므로 SQL 로그 파일들을 공백으로 구분해서 나열해야 한다. broker_log_top -t -F "11 11" -T "11 12" *.sql.log # 결과 확인 $CUBRID_PATH/log_top.q 파일에 생성 됨