본문 바로가기

반응형

MySQL

(10)
[MySQL] root 패스워드 분실 시 리셋 방법 만일 여러분이 한번도 MySQL root 계정의 패스워드를 설정한적이 없다면 root로 접속 할 때 패스워드를 묻지 않습니다. 패스워드를 설정하지 않으면 매번 접속 할 때 마다 귀찮게 패스워드를 묻지도 않아고, 패스워드를 기억 할 필요가 없어서 편리합니다. 하지만... 저는 설정 했나봅니다(ಥ _ ಥ) !!NOTE!! - 설마 귀찮다고 패스워드를 설정하지 않는 분은 없겠죠? 잠깐의 귀찮음과 당신의 보안을 맞바꿔서는 안되요!! 처럼 패스워드를 설정해놓고 잊어 버리는 사람들을 위해 MySQL 공식 사이트에서는 MySQL - How to Reset the Root Password 섹션에서 다음과 같이 가이드하고 있습니다. 윈도우 환경, 유닉스 or 리눅스 환경, 운영체제 상관 없지만 MySQL 서버가 설치된 ..
[MySQL] InnoDB 엔진에서 쿼리별 잡히는 lock 쿼리별 잡히는 lock에 대해 알아 보기전에 InnoDB의 lock에 대해 먼저 알아 보는 시간을 가져 보려 했지만 워낙 잘 정리가 된 블로그가 있어서 공유한다. 아래의 내용들을 보기 전에 링크 되어 있는 블로그의 글을 먼저 읽어 본다면 많은 도움이 되리라 생각한다. MySQL InnoDB lock & deadlock 이해하기 - www.letmecompile.com/mysql-innodb-lock-deadlock/ SELECT … FROM consistent read 의 경우 transaction isolation level이 SERIALIZABLE이 아니면 lock을 잡지 않는다. LOCKING READ(SELECT … FOR UPDATE, SELECT … LOCK IN SHARE MODE), UPD..
MySQL transaction isolation level MySQL의 innoDB에서 제공하는 transaction isolation level. 한글로 하면 '트랜잭션 격리 수준'이라고 한다. 트랜잭션이란? 트랜잭션 격리 수준에 대해 알아보기 앞서, 트랜잭션이 무엇인지 먼저 알아보자. 트랜잭션이란, 데이터베이스의 상태를 변경하기 위해 수행하는 '작업의 단위'라고 정의 할수 있다. 예를 들어 데이터베이스로 부터 select하고 그 결과에 따라 update를 통해 해당 값을 변경하기까지의 모든 과정을 하나의 트랜잭션이라고 할수 있다. 트랜잭션이 하나의 작업 단위로서 올바르게 동작하기 위해서는 원자성(Atomicity), 일관성(Consistency), 격리성(Isolation, 독립성이라고 표현하기도 한다), 지속성(Durability). 이 4가지 조건이 만족..
MySQL 백업 스크립트 아래 쉘 스크립트를 crontab등에 등록 해두고 매일매일 실행 시키면 4일 까지의 덤프 데이터가 남는다. #!/bin/sh BACKUP_DIR=/home/SOMEWHERE/db_backup TODAY=`date +%Y%m%d` RETENTION_PERIOD=4 # 백업 덤프 파일 보관 기간 4일 DAY_BEFORE_RETENTION_PERIOD=`date --date "${RETENTION_PERIOD} day ago" +%Y%m%d` #echo "DAY_BEFORE_RETENTION_PERIOD:"${DAY_BEFORE_RETENTION_PERIOD} #유저가 작성한 DB 목록 추출 mysql -u root -h 127.0.0.1 -P 3306 --password='PASSWORD' --skip-co..
MySQL master-slave 리플리케이션(my.cnf 설정) 1. replication용 DB 계정 생성( master/slave 둘다 ) $ create user repl@'192.168.186.%' identified by 'repl'; $ grant replication slave, replication client on *.* to repl@'192.168.186.%' identified by 'repl'; 2. master 설정 1) master my.cnf 수정 [mysqld] server-id = 1 # master DB id for replication .... ######################################## # Replication related settings ##################################..
SQL 쿼리 프로파일링 심심 풀이로 쿼리를 '발'로 짜다 보니 이중 삼중의 조인쿼리와 서브쿼리가 한데 어우러진 아주 복잡 미묘한 쿼리를 만들게 되었습니다. 암튼 중요한 것은 바롤 짠 쿼리가 아니라 이 쿼리가 과연 정상적인 성능을 낼 수 있을까 하는 의문이 들더군요. MySQL을 대상으로 만들긴 했지만, MySQL에서 사실 쿼리가 어떤 순서로 실행 되는지도 모르고(쿼리 계획 이라고 하는 것 같던데..) 내부 구조에도 아는 바가 없어 고민하며 프로파일링 툴을 찾다가 몇 가지 재미있는 링크들을 찾아 간만에 포스팅을 하나 올립니다. 일단 explain 이라는 쿼리 플랜을 보여주는 명령어가 있더군요. SQL 표준이 아닌지라, MySQL에서는 select 절만 지원한다고 하는데, 오라클이나 좀 빵빵한 DB들은 explain을 update..
[MySQL] 서브(Sub) 쿼리 서브쿼리란? 하나의 테이블에서 검색한 결과를 다른 테이블에 전달하여 새로운 결과를 검색하는 것입니다. 예를 들어 A라는 테이블에서 검색해 나온 결과만을 대상으로 다시 한번 더 쿼리를 날린다는 것입니다. 참고로 하나 이상의 테이블을 연결하여 검색하는 기능은 조인(Join) 쿼리라고 합니다. 기본 문법 SELECT coulmn_name FROM table_name WHERE column_name = ( SELECT column_name FROM table_name WHERE column_name = some_value ); 생각 보다 간단하지 않나요? 기본적인 것은 일반 쿼리와 동일 합니다. 다만, where 에 조건으로 오는 것이 일반 컬럼이 아니라 또 다른 쿼리라는 것이 차이점 입니다. 실행 순서는 괄호..
[MySQL] 조인(Join) 쿼리 조인(Join)의 개념 조인은 여러개의 테이블을 결합하여 데이터를 검색 하는 것입니다. 예를 들어 A와 B라는 테이블을 따로 select하는 것이 아니라 동시에 select를 한다고 생각하시면 됩니다. 그 결과 중 특정 컬럼들의 값을 비교해서 같은 것들(혹은 다른 것들)만 select한다던지 하는 것을 조인이라고 합니다. where 절로 구분 하는 방법에 따라 여러가지 이름으로 불리고 있지만 간단한 개념이 이렇다는 것입니다. 조인(Join)의 종류 연산자에 따른 분류 : EQUI JOIN : 테이블들의 컬럼 값들이 일치하는 경우('=' 연산자 사용) NON-EQUI JOIN : 테이블드릐 컬럼 값들이 일치하지 않는 경우('' 와 같은 비교 연산자 사용) FROM 절의 JOIN형태에 따른 분류 INNER ..
MySQL - Commmands out of sync MySQL을 사용하던 서버가 Commands out of sync 라는 에러를 내며서 정상적으로 동작하지 않는다. 무슨 일인가 싶어 구글에게 물어 봤다. 그러니 나오는 대답.. If you get Commands out of sync; you can't run this command now in your client code, you are calling client functions in the wrong order. This can happen, for example, if you are using mysql_use_result() and try to execute a new query before you have called mysql_free_result(). It can also happen i..
MySQL rename error (errno 121) DB A에 있는 테이블들을 DB B로, rename을 사용하여 옮기는 코드가 오류를 내고 있다는 연락을 받았다. 다른 모든 테이블들은 아무런 군소리 없이 옮겨 지는데 딱 한 테이블만 121 에러 코드를 내면서 옮겨 지지 않았다. 무슨 소린가 해서 구글 박사님게 물어 보니 외부 참조 키가 중복이 되면 121 에러 코드가 리턴 된단다. 그래서 테이블 스키마를 살펴 보니...아무런 constraint가 없었다. 이 테이블은 그냥 컬럼들의 나열일 뿐이었다. /** 1) MySQL rename menual page : http://dev.mysql.com/doc/refman/4.1/en/rename-table.html 2) 121 error : http://forums.mysql.com/read.php?22,33..

반응형