Tag Archives: mysql

우분투에서 mysql 사용하기

설치하기

mysql 서버와 클라이언트를 설치한다

설치하는 중 root 사용자 패스워드를 입력하라는 화면이 나오면 사용할 root 패스워드를 입력한다.

mysql 설정파일(/etc/mysql/my.cnf)에서 bind-address 설정부분을 주석처리한다.

데이터베이스 생성하기

create 명령어를 사용해서 데이터베이스를 생성한다. 여기에서는 springbook이라는 이름으로 데이터베이스를 생성한다.

데이터베이스에 접속하기

앞에서 생성한 데이터베이스에 접속한다.

현재 만들어진 테이블을 살펴본다. 아직 테이블을 만드지 않았으므로 아무런 테이블도 표시되지 않는다.

캐릭터 셋(Character Set) 설정하기

테이블을 생성하기에 앞서 클라이언트, 서버, 데이터베이스 등의 캐릭터 셋을 설정해야 한다.

지원되는 캐릭터 셋 확인하기

현재 머신에 설치된 mysql에서 사용가능한 Charater Set을 확인한다.

현재 설정된 캐릭터 셋 확인하기

현재 설치된 캐릭터 셋을 확인한다.

mysql_charaterset

결과에서 보는 바와 같이, client, connection, database, result, server의 캐릭터 셋이 기본적으로 latin1로 되어 있음을 확인할 수 있다.

utf8로 캐릭터 셋 변경하기

캐릭터 셋을 변경하는 방법에는 여러가지가 있으나, mysql 데몬이 재시작된 후에도 캐릭터 셋 정보를 그대로 유지하려면 설정파일(my.cnf)을 편집해야 한다.

아래와 같이 utf8로 된 부분을 [client], [mysqld], [mysql] 영역에 추가한다

mysql 서버 데몬을 재시작한다.

springbook 데이터베이스에 새로 접속해 보면, 아래와 같이 캐릭터 셋이 utf8로 모두 변경되었음을 확인할 수 있다.

mysql_charaterset_utf8

테이블 생성하기

create table 문을 사용해서 새로운 테이블을 생성한다.

show tables 명령을 실행해보면 users 테이블이 생성되었음을 확인할 수 있다.

사용자 추가하기

사용자는 GRANT 명령어를 사용해서 추가할 수 있다. 여기에서는 아이디가 “spring”이고, 패스워드가 “book”인 사용자를 추가하고, 동시에 springbook 데이터베이스에 대한 권한을 모두 주고자 한다.

데이터베이스를 mysql로 이동한다. mysql 데이터베이스는 사용자가 등록되는 데이터베이스다.

이제 user 테이블을 조회해보면 방금 등록한 spring 사용자가 등록되었음을 확인할 수 있다. root 게정도 함께 보이며, 패스워드는 암호화되어 저장되므로 조회 결과가 순식간에 스크롤된다.

참고자료

 

[번역] MySQL 5.1의 InnoDB에서 MySQL 테이블 최적화하기

원문 : http://www.laurencegellert.com/2011/07/mysql-maintenance-tasks-for-innodb-with-mysql-5-1/

때때로 MySQL 5.1 데이터베이스는 몇가지 관리 작업을 수행해야 한다. 내 경우를 예로 들면, 운영서버에서 겨우 400k 행을 가진 두 개의 테이블을 조인하는 간단한 쿼리문을 실행하는데 너무 오래 걸리는 경우가 있었다. 실제로 이 쿼리문이 실행되는데 약 30초에서 100초 가량이 걸렸다. 테스트와 검수작업 후에 58ms로 처리 시간을 줄였다. 쿼리문의 컬럼은 이미 인덱스가 생성되어 있었기 때문이다. 이 정도 처리속도라면 다행히도 사용자들이 불편해 하는 정도는 아니였지만, 나는 이정도 처리 속도도 괜히 성가시게 느껴졌다. 해결책은 간단했는데, 몇가지 명령문을 실행해서 정리 작업을 하면 되었기 때문이다. 이 정리작업을 하고 나니, 동일한 쿼리문을 운영서버에서 실행하는데 겨우 4.8ms 밖에 걸리지 않게 되었다. 정말이지 만족스러운 결과였다.

내가 한 일들

  1. Backup – 데이터베이스 백업하기
  2. Check – 데이터베이스 체크하기
  3. Optimize – 데이터베이스 최적화하기
  4. Analyze – 데이터베이스 분석하기

각 수행 단계들에 대한 상세 설명

1. 먼저 mysqldump 명령문을 이용해서 데이터베이스를 백업한다.

프로시져 또는 함수가 있다면 반드시 -routines 인자를 사용해야 한다. 또한 트리거를 사용한다면 반드시 -triggers 인자를 사용해야 한다.

여기에 더해서 다른 시스템에서 백업한 데이터베이스를 실제로 재생성하여 백업이 정확한지 확인해야 한다.

만약 데이터베이스가 너무 커다면 이처럼 데이터베이스 전체를 백업하는 일은 사실 불가능하다. 하지만 데이터베이스가 너무 크다면, 이미 복제 서버를 구축해서 백업 시스템을 활용중일 것이다.

2 Check

테이블 무결성을 검사한다.

http://dev.mysql.com/doc/refman/5.1/en/check-table.html

단일 테이블에 대해 검사를 하려면:

콘솔에서 데이터베이스의 전체 테이블을 검사하려면 :

테이블 무결성 검사는 정기적으로 하는 것이 좋다.

3. Optimize

단편화 제거 작업(defrag operation)과 같이, optimize table 명령문을 사용하면 사용하지 않은 공간을 회수할 수 있다. MyISAM 엔진에서는 optimize 명령문은 말그대로 단편화 제거 작업만을 수행한다. 반면 InnoDB 엔진의 경우 내부적으로 ALTER TABLE문을 실행하여, MySQL 서버에 대해 테이블과 인덱스를 재생성하도록 요청한다.

http://dev.mysql.com/doc/refman/5.1/en/optimize-table.html

단일 테이블에 대해 optimize를 하려면:

콘솔에서 데이터베이스의 전체 테이블을 optimize를 하려면:

만약 InnoDB라면 결과에 “Table does not support optimize, doing recreate + analyze instead” 메시지가 나온다.

4. Analyze

analyze를 실행하면 인덱스를 재생성하여 성능을 최적화하는데, 키를 재분배하기 때문이다. 만약 인덱스가 제대로 생성되어 있음에도 slow query가 발생한다면, analyze를 실행하는 것을 고려해 볼만하다. analyze를 실행하면 read 락이 걸린다. 만약 모든 테이블이 InnoDB 엔진을 사용한다면, optimize 과정에 이미 analyze가 포함되어 있다.

http://dev.mysql.com/doc/refman/5.1/en/analyze-table.html

단일 테이블에 대해 analyze를 하려면:

콘솔에서 데이터베이스의 전체 테이블을 analyze를 하려면:

InnoDB에서 analyze를 하는 경우, 몇가지 특이점이 있다. 특히 analyzer가 취하는 샘플의 갯수가 다를 수 있다는 점이다(샘플의 갯수는 innodb_stats_sample_pages 옵션으로 설정할 수 있다). 기본값이 매우 작기 때문에, analyze를 여러번 시도하게 될 때, 그때마다 결과가 달라질 수도 있다.

더 자세한 내용은 아래를 참조하라.

http://dev.mysql.com/doc/refman/5.1/en/innodb-restrictions.html