[MYSQL]DB복구(innodb)

Database 2016.09.19 14:49 Posted by 애플자라

중요(장애시) : MYSQL이 죽은 상태에서 해야 씽크가 맞음!! 


ibdata 파일과 함께 테이블 정보가 있는 frm 파일준비 방법은 다음과 같습니다.

  1. MYSQL을 새로 설치한 후에 복구를 원하는 계정,database을 만듭니다.(ibdata, frm 사전백업)
  2. 이전 폴더에 database 이름으로 되어 있는 폴더를 그대로 새로운 폴더에 집어 넣습니다.
    해당 폴더에는 해당 database의 테이블 정보가 들어 있는 frm 파일들이 있습니다.
  3. C:\ProgramData\MySQL\MySQL Server 5.5\data 하단폴더 전체
  4. o    The .frm file for each InnoDB table.

    o    The tablespace files.

    o    The InnoDB log files.

    o    Any InnoDB configuration options, such as those stored in option files. The configuration options are required in case you need to restore the backup from scratch. In that case, you'll need to know how the tablespace and log files were created originally.

  5. 윈도우 기준으로 Mysql 설치 폴더/my.ini 이하 my.ini 파일에 innodb_force_recovery라는 명령어를 추가 시켜 주고 서비스를 재시작 하면 강제 복구 모드로 설정된다.
    예) innodb_force_recovery = 1 ~ 6
  6. 그리고 다시 실행하면 잘 됩니다.

---------------------------------------------------------------


재설치 설치 오류시(삭제)


제어판 Mysql삭제

C:\Program Files\MySQL 폴더삭제

C:\Users\Administrator\AppData -> MySql 검색후 전부삭제

C:\ProgramData\MySQL\MySQL Server 5.5 폴더삭제

D:\MySQL Datafiles 폴더삭제


---------------------------------------------------------------


윈도우 기준으로 Mysql 설치 폴더/my.ini 이하 my.ini 파일에 innodb_force_recovery라는 명령어를 추가 시켜 주고 서비스를 재시작 하면 강제 복구 모드로 설정된다.
예) innodb_force_recovery = 1
숫자는 1에서 6까지 사용 가능하며, 1이 가장 안전하고 좋은 복구 모드이고, 1에서 복구가 안된다면 1~6까지 순차적으로 값을 바꿔가야 한다.
자세한 내용은 http://www.mysqlkorea.co.kr/sub.html?mcode=manual&scode=01&m_no=21875&cat1=14&cat2=422&cat3=442&lang=k 를 참고 하길 바란다.

위와 같이 프로그램을 시작하면 서비스가 정상적으로 시작하게 되며 그후에 dump로 파일을 백업 시킬 수 있다.
덤프 명령어는 Mysql설치폴더/bin에서 mysqldump -u계정명 -p 데이터베이스명 > 백업할파일.sql 로 하면 백업이 되고
반대로 mysqldump -a -u계정명 -p 데이터베이스명 < 백업할파일.sql 이와 같이 하면 복원이 된다.

만약 1이 아닌 복구 모드로 실행시 파일이 전체적으로 백업되지 않았을 경우 복구 모드에 우선순위를 높여 select 명령어로 검사후 csv파일로 저장
저장 후 벌크 인서트로 파일 다시 불러옴
벌크는 http://kr.blog.yahoo.com/freud19390723/79 를 참고

복원이 완료 된 후에는 innodb_force_recovery = 1를 삭제후 프로그램 재시작을 한다.

간단히 설명하자면 파일이 손상된 경우
1. 서비스 시작 중지
2. my.ini파일에 innodb_force_recovery = 1~6 값 설정 후 저장
3. 서비스 시작
4. 서비스 시작시 정상 동작이면 6. 아니면 5.
5. 정상 동작이 아닐경우 다른 복구 모드를 선택하여 서비스 시작
6. 정상 동작일 경우 mysqldump로 파일 백업
7. 높은 우선순위로 변경하여 파일로 저장후 벌크 인서트로 다시 넣음
8. 복구 모드 삭제 후 서비스 재시작


출처 - http://discafe.tistory.com/entry/MYSQL-InnoDB-%EB%8D%B0%EC%9D%B4%ED%84%B0-%EB%B3%B5%EA%B5%AC-%EB%B0%A9%EB%B2%95

댓글을 달아 주세요

[MYSQL]InnoDB Optimize

Database 2016.08.01 09:45 Posted by 애플자라

C:\Program Files\MySQL\MySQL Server 5.5\bin>mysqlcheck -u root -p --optimize --databases dg_db_batch

Enter password: **********


mysqlcheck -u root -p --optimize --databases dg_db_batch

mysqlcheck -u root -p --optimize --databases dg_db_chart_day

mysqlcheck -u root -p --optimize --databases dg_db_chart_month

mysqlcheck -u root -p --optimize --databases dg_db_chart_week

mysqlcheck -u root -p --optimize --databases dg_db_finance

mysqlcheck -u root -p --optimize --databases dg_db_index

mysqlcheck -u root -p --optimize --databases dg_db_index_calc

mysqlcheck -u root -p --optimize --databases dg_db_intra


---------------------------------------------------------------------------------------------------------


Optimize

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

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

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

mysql> OPTIMIZE TABLE {table name};

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

$ mysqlcheck -u root -p --optimize --databases dbname

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


출처 - http://blog.syszone.co.kr/3333

 

출처 - http://crom0810.tistory.com/entry/MySQL-ibdata1-%ED%8C%8C%EC%9D%BC-%ED%81%AC%EA%B8%B0-%EC%A4%84%EC%9D%B4%EA%B8%B0

댓글을 달아 주세요

Toad for mysql 단축키

Tips 2016.06.29 15:10 Posted by 애플자라

* 테이블 정보 상세보기
F4 : Table, View, Proc, Funct, Package를 DESC(테이블명 위에 커서를 두고 F4키)

 

* 자동완성
Ctrl+. : Table Completion (매칭되는 테이블목록 출력)

 

* SQL문 실행
F5 : SQL Editor내의 모든 SQL문 실행
F9 : SQL문 실행 후 Grid에 출력

 

* 히스토리(과거 수행SQL문 조회)
Alt+Up : History UP
Alt+Down : History DOWN

 

* 텍스트 대/소문자 변환
CTRL+L : 텍스트를 소문자로
CTRL+U : 텍스트를 대문자로

 

* 편집 창 전환(이동)
F6 : SQL Editor와 결과창간의 이동

 

* 쿼리문을 보기좋게 정렬

ALT + D + F

 

'Tips' 카테고리의 다른 글

[eclipse] EasyShell 플러그인  (0) 2016.10.29
아웃룩 첨부파일 관리 - OutlookAttachView  (0) 2016.08.30
Toad for mysql 단축키  (0) 2016.06.29
자동차 대출 계산기  (0) 2016.03.21
[민방위]심폐소생술  (0) 2015.09.22
[자동차]보험(개인형)  (0) 2015.09.22

댓글을 달아 주세요

[MYSQL]Toad for mysql 쿼리 정렬방법

Database 2016.06.29 15:01 Posted by 애플자라
ALT + D + F  누르게 되면 자동정렬

 

댓글을 달아 주세요

[MYSQL]원격 접속 허용

Database 2016.03.25 15:52 Posted by 애플자라
MySQL 외부 접속 허용 설정
MySQL에 원격 접속 허용하기
MySQL에 root 원격 접속 허용하기

개요[편집]

  • MySQL을 설치하면 기본적으로 로컬(localhost)에서만 접속이 가능하고 외부에서는 접속이 불가능하게 되어 있다.
외부에서 접속해보면 다음과 같은 오류 메시지가 나온다.[1]
Host '135.79.246.80' is not allowed to connect to this MySQL server
  • Toad for MySQL과 같은 DB 관리 도구를 사용하여 DB에 원격으로 접속하려면 허용해주는 로컬 작업이 필요하다.
  • 여기서는 root를 원격에서 접속할 수 있도록 설정한다. 이것을 응용하면 다른 계정에도 적용할 수 있다.

확인[편집]

  • 아래 쿼리를 날려보면 localhost가 나온다.
  • 즉 root 계정으로는 로컬에서만 접속가능하다.
  • (같은 방법으로 root 대신 다른 사용자명도 조회할 수 있다.)
SELECT Host FROM mysql.user WHERE user='root';

변경[편집]

모든 IP 허용[2]
INSERT INTO mysql.user (host,user,password) VALUES ('%','root',password('패스워드'));
GRANT ALL PRIVILEGES ON *.* TO 'root'@'%';
FLUSH PRIVILEGES;
IP 대역 허용
  • 다음과 같이 설정하면 111.222로 시작하는 모든 IP가 허용된다.
INSERT INTO mysql.user (host,user,password) VALUES ('111.222.%','root',password('패스워드'));
GRANT ALL PRIVILEGES ON *.* TO 'root'@'111.222.%';
FLUSH PRIVILEGES;
특정 IP 1개 허용
INSERT INTO mysql.user (host,user,password) VALUES ('111.222.33.44','root',password('패스워드'));
GRANT ALL PRIVILEGES ON *.* TO 'root'@'111.222.33.44';
FLUSH PRIVILEGES;

원복[편집]

  • 모든 IP를 허용한 경우 다음과 같이 원래 상태로 복구할 수 있다.
DELETE FROM mysql.user WHERE Host='%' AND User='root';
FLUSH PRIVILEGES;

같이 보기[편집]

주석[편집]

  1. 이동 물론 방화벽이 뚫린 경우겠지?
  2. 이동 참고로 %은 모든 아이피를 포함하지만, localhost는 포함되지 않는다.

 

출처 - zetawiki.com/wiki/MySQL에_원격_접속_허용

댓글을 달아 주세요

[MariaDB]언어셋 설정

Database 2016.03.16 16:39 Posted by 애플자라

위치 : C:/Program Files/MariaDB 10.1/data/my.ini 백업 후 아래 추가 서비스 재시작

my.ini

 

윈도우일경우 my.ini 

리눅스일경우 /etc/my.cnf

 

[mysqld]
datadir=C:/Program Files/MariaDB 10.1/data
port=3306
sql_mode="STRICT_TRANS_TABLES,NO_ENGINE_SUBSTITUTION"
default_storage_engine=innodb
innodb_buffer_pool_size=445M
innodb_log_file_size=50M
#하단추가
init_connect="SET collation_connection = utf8_general_ci" 
init_connect="SET NAMES utf8" 
character-set-server = utf8
collation-server = utf8_general_ci

 

[client]
port=3306

#하단추가
default-character-set = utf8

 

[mysqldump]
#하단추가
default-character-set = utf8

 

[mysql]
#하단추가
default-character-set = utf8

 

<확인>
mysql> show variables like 'c%';

댓글을 달아 주세요

Linux 서버가 갑자기 죽으면서 아래와 같이 Mysql 구동시

MySQL manager or server PID file could not be found 발생

 

 

 

Case1)

사용중 디스크 장애로 테이블이 오픈된 상태에서 종료가 된게 원인인걸로 확인

 

Case2)

cnf 파일이 문제가 있거나 혹은 권한 문제로 인해 pid가 없는 경우에 발생하는 에러인듯 하다

(해당 경로에 프로세스 id 관련 파일이 없음)

 

해결방법)

현재 포털에는 많은 것들이 있으나, 운영DB라서 섣불리 건들기 힘듦;

 

댓글을 달아 주세요

[MYSQL]mysql-bin 삭제

Database 2014.10.01 10:58 Posted by 애플자라

mysql-bin.index, mysql-bin.00005 이런 화일들은 mysql 의 replication 이라는 동기화 방법을 위해 sql 문을 저장시켜둔 로그 화일이다. 일명 bin 로그 라고 한다.

그래서 DB 서버한대의 서비스에서는 특별히 필요치않다.
replication 이라는 동기화에서 해당 로그들을 초기화시키기 위해

reset master => master 서버에서의 명령
reset slave => slave 서버에서의 명령

이런식으로 처리한다.

 

mysql-bin log파일은 용량이 급격히 증가하여 순식간에 DB서버의 Disk 사용량을 Full 상태로

만들 수 있다.

 

따라서 해당 로그를 쌓이지 않게 하려면 my.cnf 화일 에서 log-bin 이란곳을 주석처리하시고 재시작

 

종종 My-SQL이 어느 위치의 my.cnf 파일을 참조하는지 애매한 경우가 있다.

이럴경우 아래의 명령어로 간단히 알수 있다.

앞에서부터 우선순위로 참조한다.


# /usr/local/mysql/bin/mysql --verbose --help | grep -A 1 'Default options'


예시)

Default options are read from the following files in the given order:

/etc/my.cnf /etc/mysql/my.cnf /usr/local/mysql/etc/my.cnf ~/.my.cnf

 

mysql-bin 로그 기록하지 않기

 

[root@ws mysql]# vi /etc/my.cnf 

log-bin=mysql-bin -> 주석처리 후 데몬 재실행

[root@ws mysql]# service mysqld restart 또는 /etc/init.d/mysqld start

mysqld 를 정지 중:                                         [  OK  ]

mysqld (을)를 시작 중:                                     [  OK  ]

 

출처 - http://blog.daum.net/_blog/BlogTypeView.do?blogid=0CvWY&articleno=17384859&categoryId=0

 

 

댓글을 달아 주세요

[MYSQL] 형변환

Database 2008.06.04 14:34 Posted by 애플자라
CAST(expression AS type)

CONVERT(expression,type)

CONVERT(expr USING transcoding_name)

 


1.Convert
한 타입의 값을 취해서 다른 타입의 값으로 사용
CONVERT(expression,type)
ex) $sql = "select convert(day, signed) as day from schedule
타입값은 아래의 것들 중 하나가 될 것이다:

? BINARY

? CHAR

? DATE

? DATETIME

? SIGNED

? TIME

? UNSIGNED


2.Cast(형변환 함수)
한 타입의 값을 취해서 다른 타입의 값으로 사용
CAST(expression AS type)
ex)SELECT CAST(NOW() AS DATE);
타입값은 아래의 것들 중 하나가 될 것이다:

? BINARY

? CHAR

? DATE

? DATETIME

? SIGNED

? TIME

? UNSIGNED


3.CONVERT(expr USING transcoding_name)
SELECT CONVERT('abc' USING utf8);

댓글을 달아 주세요

1. ./configure 시에 에러
증상1

checking for tgetent in -lncurses... no
checking for tgetent in -lcurses... no
checking for tgetent in -ltermcap... no
checking for termcap functions library... configure: error: No curses/termcap library found
[root@localhost mysql-4.0.13]# make
make: *** No targets specified and no makefile found. stop.

Q1 : 왜 이런 메세지가 뜨냐?

A1: gcc가 없던지 PATH가 안잡혀 있는 경우

 

Q2 : configure: error: no acceptable C compiler found in $PATH
 설치를 잘못 한건가?
[root@localhost mysql-4.0.13]make 실행 시
make: *** No targets specified and no makefile found.  멈춤.
메세지 뜨는데 어케?

A2 : 리눅스에 gcc가 설치됐는지 확인하라.
# rpm -qa| grep gcc

2. 소스 설치시 "NOTE: This is a MySQL binary distribution." 라는 메시지의 경우
Q : It's ready to run, you don't need to configure it! 나옵니다. 이유가?

A : 컴파일이 필요없는 바이너리를 받은거 같다. 이미 컴파일한 거다.
  압축풀고 적당한 위치로 이동시켜라.

tar zxvf mysql-xx.xx.tar.gz
mv mysql-xx.xx /usr/local/
ln -s /usr/local/mysqlxx.xx /usr/local/mysql

3. mysql을 실행하면 (2)번 에러
Q : ERROR 2002: Can't connect to local MySQL server through socket '/var/lib/mysql/m
ysql.sock' (2) 무슨 에러인지요?

A : 데몬 구동시 ./safe_mysqld --user=mysql & 실행 시켜보라.
그래도 에러가 날 경우 ln -s /tmp/mysql.sock /var/lib/mysql/mysql.sock 해보라.

4. mysql.sock 중에 (40)번에러
Q : ERROR 2002: Can't connect to local MySQL server through socket '/var/lib/mysql/m
ysql.sock' (40)

A : chown mysql.mysql -R /var/lib/mysql 를 하기 바란다.
그리고 참고로 php에서의 mysql socket 은 /etc/php.ini 에서 경로를 수정할 수 있다.

5. mysql 데몬이 죽어버릴때
Q : # ./mysqld_safe &
    chown mysql .. <-- 비슷한 오류가 뜨면서 데몬이 죽어버린다.어케?

 

A : 레드햇 리눅스라면 groupadd 와 useradd 에 '-r' 옵션을 사용하라.
# useradd -r -d /usr/local/mysql mysql
이렇게 하면 500 보다 작은 UID, GID를 가진 mysql 그룹과
사용자가 생성된다.

6. mysql 실행시 데몬 바로 죽음
Q :

030527 22:33:39  mysqld started
030527 22:33:39  Can't start server: Bind on TCP/IP port: 주소가 이미 사용 중

030527 22:33:39  Do you already have another mysqld server running on port: 3306 ?
030527 22:33:39  Aborting
030527 22:39:50  /usr/local/mysql/libexec/mysqld: Shutdown 이 완료됨!
030527 22:39:50  mysqld ended

A : 3306 포트에 이미 다른 mysqld 가 실행되고 있다.
# vi /mysql/scripts/mysql_config 을 열어서 포트번호 수정.


7. mysql-4.0.12 설치후 데몬이 안띄워지고 바로 죽을 경우.
Q 정상적으로 소스 설치하고 나서,,
  /usr/local/mysql/bin/mysqld_safe & 실행하면,,, 데몬이 시작하자 마자 바로 죽는다.
 ./safe_mysqld Starting mysqld daemon with databases from /usr/local/mysql/var
   mysqld ended
에러 메세지를 보기 위해 /usr/local/mysql/var 로 이동  vinnylover.err 파일을 열어보니

아래와 같은 메세지가 있더군.
mysqld started
InnoDB: Started
Fetal error: Can't open privilege tables: Can't find file: ' ./mysql/host.frm'(errno: 13)'
Aborting

A : mysql_install_db 스크립트를 실행해서 초기 테이블을 생성.
   # ./mysql_install_db 하면 된다. (/usr/local/mysql/bin 아래에서 하라)

8. mysql sock 에러 문제의 확실한 해결법
Q : 접속하면 >/var/lib/mysql/mysql.sock ... (111)


A : 디렉토리 퍼미션 문제
# killall mysqld
# chmod 755 -R /var/lib/mysql
# chown mysql.mysql -R /var/lib/mysql
# mysqld_safe --language=korean &

9. make 명령어를 실행하면 설치가 해제

Q : make[2]: *** No rule to make target `ctype-euc_kr.lo', needed by `bmove_upp.lo'. 멈춤.
make[2]: 나감 `/usr/local/down/mysql-3.23.38/libmysql' 디렉토리
make[1]: *** [all-recursive] 오류 1
make[1]: 나감 `/usr/local/down/mysql-3.23.38' 디렉토리
make: *** [all-recursive-am] 오류 2

A : 먼저 LD_LIBRARY_PATH에 모든 라이브러리 경로가 들어가 있어야 한다.
이런 경우때문에 필요한 라이브러리를 찾지못해 에러가 발생.
거의 필요한 패키지를 설치했는데도 에러가 나면 LD_LIBRARY_PATH를 확인해볼 필요가 있다.

10. mysql 설치시 gcc에러나는데 해결책

Q :

# ./configure --prefix=/usr/local/mysql --with-charset=euc_kr
checking for c++... c++
checking whether the C++ compiler (c++   ) works... no
configure: error: installation or configuration problem: C++ compiler cannot create executables.

A : rpm으로 찾아서 다 설치하고 나서 컴파일 하면 된다.
rpmfind.net에서 찾으실 수 있습니다. 에러 보고 하나하나 다 설치하면 된다.

11. 인스톨 설치도중 103 에러
Q : an error occured move data process: -103
compenent : server

A : mysql 설치된 폴더를 완전시 삭제 후 재설치

12. mysql설치 시 invalid user 오류

Q : chown: mysql: invalid user
Starting mysqld daemon with databases from /usr/local/mysql/data
030417 11:42:35  mysqld ended

A : mysql 이란 유져가 유효하지 않다라는 에러로써 현재 mysql이란 계정이 존재하지 않기때문에 나는 에러

# /usr/sbin/useradd mysql -M -s /bin/false

# chown -R root /usr/local/mysql
# chown -R mysql /usr/local/mysql/var
# chgrp -R mysql /usr/local/mysql

13. mysql 4.0.12 설치 시 "Check your system clock" 오류
Q

# ./configure --prefix=/usr/local/mysql --with-charset=euc_kr
이렇게 했는데 다음과 같은 메세지의 경우....
checking build system type... i686-pc-linux
checking host system type... i686-pc-linux
checking target system type... i686-pc-linux
checking for a BSD-compatible install... /usr/bin/install -c
checking whether build environment is sane... configure: error: newly created file is older than distributed files!
Check your system clock

A : mysql이 개발된 시간보다 현재시간 차이로 생기는 문제
인터넷(네트웍)이 되는 상황이라면
# date

# rdate -s time.bora.net   => rdate -s time.nuri.net와 같이 다른서버로 해도 된다.

# date

14. 설치시 configure: error: no acceptable cc found in $PATH 에러
Q :

configure: error: no acceptable cc found in $PATH


A : cc 즉 c complier 가 없다
c 컴파일러가 PATH에 안잡혀 있을 수 있다. path를 추가하거나 gcc를 재설치

# vi /etc/profile

PATH=$PATH:.:/usr/local/mysql/bin

15. config시 ERROR: 1062 Duplicate entry 'localhost-root' for key 1
Q : mysql 소스설치 config시 에러의 경우

rpm버전 삭제했는데 데몬이 살아 있나? ps -ax | grep mysql 하면 암것도 안나온다.
ERROR: 1062 Duplicate entry 'localhost-root' for key 1
ERROR: 1062 Duplicate entry 'localhost-root' for key 1
030312 14:58:03 ./bin/mysqld: Shutdown Complete

A : 캐시에 이전데몬이 살아있기 때문이다.
kill  또는 killall 명령으로 프로세스를 완전히 죽이고 설치하라

16. configure 에러로 "error : No curses/termcap library found" 에러?
Q : checking for termcap functions library...
configure: error : No curses/termcap library found

A : libtermcap-devel-xxx 패키지가 필요해서 발생하는 에러
설치시디를 넣으시고 설치를 하면 해결된다.

TAG MySQL

댓글을 달아 주세요

  1. Favicon of http://www.hurstvillerepaircentre.com.au/ BlogIcon repair iphone 2011.06.15 20:57  댓글주소  수정/삭제  댓글쓰기

    좋은 글 감사합니다. 제가 퍼가도 될까요?