Coldbackup 후 정기점검때 mysql bin 다 지우고 작업한다면
MySQL 5.5에서는 5.1 과 다르게 입력해줘야 할 추가작업이 존재한다.
my.cnf 에 리플에 user/pass 에 대한 내용이 없기때문에 Replication이 자동 시작이 안되는 부분인데,
master / slave 를 파일 동기화 시키고 최초로 처음 시작할땐
1. master 시작하고
2. slave 시작하고
3. slave 에서 아래와 같은 command, 를 입력해줘야 한다.
mysql> slave stop;
mysql>

CHANGE MASTER TO
MASTER_HOST='192.168.0.100',
MASTER_USER='repl',
MASTER_PASSWORD='slavepass',
MASTER_PORT=3306,
MASTER_CONNECT_RETRY=10 ;

mysql> slave start;
그래야 리플리케이션을 시작합니다.

이후 slave에서 파일을 copy할 경우엔 위의 과정을 반복하지 않아도 됩니다.
/var/lib/mysql/master.info 및 relayLog관련 정보까지 그대로 복사하기 때문이다.

숙지해야 할것은 복사전에 /var/lib/mysql/ 에 있는 binary 로그와 master.info, relayLog.info 등은 꼭 삭제해주고 복사하자.

 



네이버 블로그에 썼던것을 다시 정리하며...

DB System이란 것이 시스템과 밀접한 관계가 있는 부분이라 딱히 몇개의 명령어만으로 튜닝을 할 수 있는것은 절대 아니다.

다만 쿼리 튜닝시 또는 시스템이 버벅거리면서 부하를 느끼는데  체크하고자 하는 사항이 발생할 때, 참고할 만한 몇개의 명령어 팁만을 메모해 놓고 필요할때 꺼내 쓰도록 해보자.

1. explain

주로 인덱스가 제대로 구성되었는지, Where절 이하에서 사용되는 index의 튜닝시 필요하다.

explain extended 를 하면 좀더 상세한 내용이 표시된다.

2. mysqladmin processlist

현재 어느 프로세스, 어떤 쿼리가 어떤형태의 모습으로 시스템 부하를 야기하는지 실시간으로 체크할때 사용.

\>myaqladmin processlist 를 치면 그때 그때의 쿼리들이 눈에 들어온다.

자동으로 보고싶다면 -i 옵션을 두어서 일정시간마다 자동으로 process를 체크할수 있도록 하면 편하다.

mysqladmin -i5 processlist (5초마다 체크하라~)

3. slow-query

위의 과정에서 눈에 띄게 자주 보이는 쿼리가 있다면 해당 쿼리를 찾아서 튜닝한다.

또는 slow-query log를 찾아서 튜닝을 한다.

slow-query log의 위치는 일반적으로  /var/log/mysql 에 존재한다.

4. profile 체크

slow-query log에 쌓인 쿼리를 하나씩 뜯어보려면 explain 과 함께 profiling 명령어를 통해 체크해 보면 어느부분에서 시간이 걸리는지 알수 있다.

mysql> set profiling=1;

mysql> SELECT * FROM BBS;

mysql> show profiles;

여러개의 쿼리를 실행하고 난뒤엔 show profiles 를 하게 되면 그동안 실행한 쿼리에 Query_id가 붙어있는 목록이 보인다.

mysql>show profile for query 3 ;

위와 같이 실행하면 쿼리 실행에 걸린 상세항목이 표시된다.

마지막에 실행한 쿼리의 profile을 보고 싶다면

mysql> show profile;

하면 된다.

profiling은 mysql 버전 5.1.28 버전 이후부터 지원한다.




같은 Database 안에서 테이블의 charset 이 utf8이지만 세부 charset이 다른경우 (utf8_general_ci, utf8_unicode_ci)
두개의 char나  varchar를 조인하려고 하면 다음과 같은 에러가 발생한다.

ERROR : java.sql.SQLException: Illegal mix of collations (utf8_unicode_ci,IMPLICIT) and (utf8_general_ci,IMPLICIT) for operation '=

이럴경우 궁극적으로는 table의 charset을 변경하여 맞춰주는 것이 맞지만 그렇지 못할경우  collate라는 명령어로 강제로 변환하여 select 를 할수가 있다.

예를 들어 USER 테이블은 utf8_general_ci로 되어 있고  BBS 테이블은 utf8_unicode_ci 로 되어 있을 경우
SELECT U.MEMBER_ID, B.SUBJECT, B.IDX
FROM USER U, BBS B
WHERE U.MEMBER_ID = B.MEMBER_ID
ORDER BY B.IDX
의 경우 조건절에 '=' 중심으로 맞춰줄 charset 을 변경한다.

SELECT U.MEMBER_ID, B.SUBJECT, B.IDX
FROM USER U, BBS B
WHERE U.MEMBER_ID COLLATE utf8_unicode_ci = B.MEMBER_ID
ORDER BY B.IDX

or

SELECT U.MEMBER_ID, B.SUBJECT, B.IDX
FROM USER U, BBS B
WHERE U.MEMBER_ID = B.MEMBER_ID COLLATE utf8_general_ci
ORDER BY B.IDX

로 해주면 위의 에러가 발생하지 않고 데이터가 잘 나오게 된다.




« PREV : 1 : 2 : 3 : 4 : 5 : 6 : 7 : 8 : 9 : NEXT »