본문 바로가기

MYSQL13

백업(Backup) 없는 MySQL 테이블 복구하기 백업은 기본인데, 가끔 뜻하지 않게 백업이 존재하는 않는 DB에서 작업하다가 실수를 할 때가 있다.순간 등줄기에 땀 한방울이 흐르는 경험을 하게 될 때, 도움이 되었으면 한다.우선 bin log가 존재를 해야 가능하다. bin log조차 없다면 깔끔하게 포기~~!!흩어져 있는 로그를 하나로 묶어 줄 수 있는 Shell을 하나 짜보자. host]# vi help.sh-------------------------------------------------------------------------------------- #!/bin/sh mysqlbinlog -d DB명 mysql-bin.000001 > help.sqlmysqlbinlog -d DB명 mysql-bin.000002 >> help.sqlmys.. 2015. 3. 23.
Mysql InnoDB – 테이블 당 테이블스페이스 사용하기 여러분은 각각의 InnoDB 테이블과 인덱스 파일을 각자의 파일에 저장할 수가 있다. 이러한 특성을 “다중 테이블스페이스 (multiple tablespaces)”라고 하는데, 그 이유는 실제로 각각의 테이블이 자신만의 테이블스페이스를 가지고 있기 때문이다. 다중 테이블스페이스를 사용하는 것은 특정 테이블을 물리적으로 구분된 여러 개의 디스크에 분산 하기를 원하거나 또는 남아 있는 InnoDB 테이블에 대한 인터럽트 없이 하나의 테이블 백업을 리스토어 하고자 하는 사용자에게 편리하다. 아래의 라인을 my.cnf의 [mysqld] 섹션에 추가하면 다중 테이블스페이스를 활성화 시킬 수가 있다. [mysqld] innodb_file_per_table 서버를 재 구동하면, InnoDB는 새롭게 생성된 각 테이블.. 2014. 7. 18.
XtraBackup을 이용한 MySQL 백업 및 복구 이 글은 XtraBackup을 간단하게 소개한 글이고 자세한 사용법은 MySQL 원격 증분 백업 – Percona XtraBackup 이라는 글에서 다루고 있다. mysql 백업시 보통은 mysqldump를 사용합니다. 하지만 데이터가 커질수록 mysqldump로 백업한 데이터는 복구에 걸리는 시간이 길어집니다. mysql 서버를 중단시키지 않고 InnoDB 엔진도 핫백업이 가능한 도구로 XtraBackup이라는 오픈소스 프로그램이 있습니다. 소개를 보면 mysql 상용 백업 프로그램인 InnoDB Hot Backup 보다 더 많은 기능을 제공합니다. XtraBackup은 기본적으로 InnoDB와 XtraDB의 백업을 지원하지만 같이 설치되는 innobackupex 스크립트를 통해서 MyISAM 방식도 .. 2014. 7. 17.
MySQL(InnoDB) Clean shutdown MySQL의 InnoDB는 MyISAM과는 달리 트랜잭션을 지원하는 스토리지 엔진이며,또한, 내부적으로 여러 종류의 버퍼와 캐시들을 가지고 있어서 어떤 비 정상적인 상황에서도 트랜잭션이 보존될 수 있도록 "Redo log"라고 하는 트랜잭션 로그를 가지고 있으며, 이 트랜잭션 로그를 이용해서, 데이터 변경이 발생해도 즉시 그 변경 내용을 데이터 파일에 기록하지 않아도 ACID를 보장할 수 있게 된다. 일반적인 MySQL의 종료 또는 비 정상적인 종료가 발생하게 되면, 데이터 파일로 기록되지 못한 모든 작업 내용은 InnoDB의 시스템 테이블스페이스와 트랜잭션 로그 파일에 남아 있게 된다. MySQL이 다시 기동되면서InnoDB 스토리지 엔진은 트랜잭션 로그와 데이터 파일의 동기화 여부 (체크포인트 지점).. 2014. 7. 11.
GROUP BY의 Filesort 작업 제거 다른 DBMS와는 달리,MySQL은 GROUP BY 를 실행하면 GROUP BY 대상 컬럼을 기준으로 GROUP BY를 실행한 후, 정렬 작업까지 같이 수행하도록 구현되어 있다. 이러한 자동 정렬 기능이 때로는 필요할 수도 있고, 필요치 않은 경우도 많이 있지만 특별히 이를 제어할 수 있는 방법이 공유되지 않았기 때문에 정렬 작업이 필요치 않은 경우에도 불필요한 정렬 작업을 같이 실행시키고 있는 경우가 많았다. 간단히 GROUP BY 작업에 대한 실행 계획을 확인해보자.root@localhost:test>explain select * from user group by name ; +----+-------------+-------+------+..------+..------+-----------------.. 2014. 7. 8.
[MySQL] 내부 변수 max_allowed_packet 우리의 친구 MySQL에는 내부적으로 런타임 때(즉, 프로그램이 시작될 때) 설정되는 내부 변수들을 가지고 있다. 이러한 내부 변수의 설정은, mysql 명령어를 이용하여 프로그램을 시작할 때, 직접 입력할 수도 있지만, my.cnf에 넣어두면 DEFAULT로 읽기 때문에, 미리미리 입력해 놓으면, 까먹거나 하는 사태가 발생하지 않는다. 그 중 오늘 살펴 볼 것은 max_allowed_packet 이다. 왜 하필 이 놈을???? 이라고 생각할 수도 있지만, 내가 오늘 이 놈때문에 고초를 겪었기 때문이라고 말할 수 밖에....... -0-;;;; 일단 ERROR가 발생한 Log를 보자.. 아래 로그는 Replication이 설정 되어 있는 두 서버가 있고, 이 중 Slave에서 Master의 Log를 다 .. 2014. 7. 3.
InnoDB 테이블 손상(깨어진)시 강제 복구 MyISAM과 달리 InnoDB 테이블들은 매우 안정적이며, 왠만해서는 데이터 파일이 깨어지는 경우는 거의 경험하지 못했다.하지만, 데이터 파일이 깨어진다면 어떻게 해야 할까 ?. DBMS 벤더를 불문하고 손상된(깨어진) 데이터 파일을 복구한다는 것은 쉽지 않은 문제이며 위험도 크다.이런 비 정상적인 현상은 어느 DBMS에서나 발생할 수 있는 현상이며, 이를 위해서 우리는 데이터베이스를 그렇게 열심히 백업하고 있었던 것이다.만약, 백업마저도 복구가 안 된다면, 결국 지금의 깨어진 데이터 파일이라도 어떻게든 복구를 해야 한다.하지만, InnoDB는 myisamchk와 같은 별도의 복구 도구를 제공하지 않는다.손상된 InnoDB 테이블의 복구는 우선 MySQL을 기동시켜서 데이터를 덤프(mysqldump, .. 2014. 7. 3.
UNION과 UNION ALL 의 차이 및 주의 사항 ANSI SQL에서 제안하는 집합 연산 "UNION", "INTERSECT", "MINUS" 중에서 MySQL에서는 UNION 집합 연산만 제공하고 있다. (하지만 MySQL에서 INTERSECT나 MINUS를 다른 형태의 쿼리로 풀어서 사용할 수 있다.) 이 글에서는 UNION 에 대해서 좀 더 자세히 알아 보고자 한다. UNION 집합 연산은 다시 아래와 같이 두가지 종류로 나누어진다. - UNION ALL - UNION DISTINCT 우리가 일반적으로 사용하는 방식인 아무런 추가 키워드 없이 UNION 만 사용하는 것은 UNION DISTINCT 를 줄여서 사용하고 있는 것이다. UNION ALL과 UNION DISTINCT를 레코드가 많은 결과에 대해서 적용해본 사람은 아마도 둘의 처리 방식에 .. 2014. 5. 22.
mysql binary log를 이용한 복구 DB작업전 반드시 data를 백업 후 작업을 진행하자.# cp -arp /usr/local/mysql/data /usr/local/mysql/data_bak_100406 mysql data 폴더를 보면mysql-bin.000001mysql-bin.000002mysql-bin.000003mysql-bin.000004, ...... 등의 파일이 있다. mysql 을 설치하고 부터 실행하는 모든 명령어들(create, update, delete, alter 등) 이 기록에 남는데이러한 기록을 이용하여 현재까지의 DB를 재작성 할 수 있다. 문제발생 시간을 확인하여 그 전 시간까지만 복구를 하면 된다. 1. mysql 바이너리 로그 파일 확보 # mkdir /usr/local/src/mysql_bin_repai.. 2014. 5. 9.
Repair Option-marked as crashed and should be repaired [Error Message] MYSQL ERROR : 1194 - Table 'tableName' is marked as crashed and should be repaired [Command] mysql> repair table tableName; //"tableName"는 오류가 생긴 테이블 입니다. mysql>analyze table tableName;를 실행하면 테이블에 대한 보고서가 작성됩니다. mysql>repair table tableName;를 실행하면 복원이 됩니다. * 만약 repair 명령으로 복구가 안되면 myisamchk로 복구 처리할 것 -o, -r 옵션으로 복구 할 것 (Mysql서버 끄고 할 것) 2010. 1. 12.
mysql 이미 데이터가 들어간 테이블의 UTF-8 및 각종 문자셋 변환 [출처] 다음의 어느 카페에서... 현재 나의 Fedora Core 3 UTF-8 리눅스 상에서, JDBC와 한글 문제를 일으키지 않는 MySQL 4.1.x 설정 상태는... 기존 버전에서는 "euc-kr"로 표기되는 문자셋이 "euckr"로 바뀌었다. /etc/my.cnf [client] default-character-set=utf8 [mysqld] default-character-set=utf8 [mysqldump] default-character-set=utf8 JDBC Driver URL jdbc:mysql://localhost:3306/struts?useUnicode=true&characterEncoding=UTF8 현제 문자셋 정보 보기 show variables like 'c%'; - 결과.. 2009. 6. 2.
MySQL DataBase 서버 튜닝 - Connection과 Memory MySQL Database의 경우 Oracle 이나 MS SQL Server에 비해서 대용량의 자료를 처리하는 경우가 적기에 튜닝에 필요성이 적은 것 같습니다. 그러나 웹이라는 환경은 많은 사용자가 동시에 접속을 할 수 있기에 항상 모니터링과 최적화는 기본이라고 생각합니다. 본 강좌에서는 기본적인 모니터링 방법과 Connection과 Memory 부분에 대한 튜닝 방법을 소개하도록 하겠습니다. 가. 모니터링 및 초기화 명령어 show status - MySQL 데이타베이스의 현재 상황 show Processlist - MySQL 프로세스 목록 show variables - 설정 가능한 모든 변수 목록 flush logs - MySQL의 로그파일 초기화 flush status - MySQL 상태정보 초기화.. 2008. 8. 21.
[MYSQL] 로그 자동으로 지우기 MYSQL 에서 Log가 남는다. 서비스를 하다보면 이 로그가 때문에 하드디스크가 풀이 나는경우가 생긴다.-- 난감! 이럴땐 수동으로 지워주는수 밖에! But 개발자란 뭐든지 자동화를 시켜버리는게 개발자가 아니던가! 로그를 날릴때 아래와 같은 명령어가 있다 purge master logs before date_add(now(), INTERVAL -10 DAY ); 한마디로 10일전 꺼 를 날려라! 란의미이다. 뭐 이렇게만하면-- 수동으로 날리는것 똑같다. 그래도 10일전거 날리는게 어디야!라고도할수 있지만 여기서 끝나면 진정한 프로가 아니지! 여기에 CRONTAB 에다가 걸어주자.. 하루에 한번! 훗! 그러면 이제 손댈 일 없다. 2008. 4. 23.