민서네집

SQL state [HY000]; error code [1030]; Got error -1 from storage engine 본문

Database/MySQL

SQL state [HY000]; error code [1030]; Got error -1 from storage engine

브라이언7 2013. 5. 21. 19:43

2013. 5. 21 오후 7:36:17 org.apache.catalina.core.StandardWrapperValve invoke

심각: Servlet.service() for servlet [SyncServerServlet] in context with path [/{context명}] threw exception [org.springframework.jdbc.UncategorizedSQLException: 

### Error updating database.  Cause: java.sql.SQLException: Got error -1 from storage engine

### The error may involve {패키지명}.dao.CommMapper.startPackage-Inline

### The error occurred while setting parameters

### SQL: /* SQL_ID : CommMapper - startPackage */   INSERT INTO T_PACKAGE    (SESSION_ID, PACKAGE_INDEX, RECV_TIME, RECV_MSG)   VALUES    (?, ?, now(6), ?)

### Cause: java.sql.SQLException: Got error -1 from storage engine

; uncategorized SQLException for SQL []; SQL state [HY000]; error code [1030]; Got error -1 from storage engine; nested exception is java.sql.SQLException: Got error -1 from storage engine] with root cause

java.sql.SQLException: Got error -1 from storage engine

at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:1074)

at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:4120)

at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:4052)

at com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:2503)

at com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:2664)

at com.mysql.jdbc.ConnectionImpl.execSQL(ConnectionImpl.java:2794)

at com.mysql.jdbc.PreparedStatement.executeInternal(PreparedStatement.java:2155)

at com.mysql.jdbc.PreparedStatement.execute(PreparedStatement.java:1379)

...


해결책은? 찾고 있다.


여기에 보면.... 

You can try the inbuilt queries like REPAIR command so as to fix up the corruption issues
The next is to go for Mysql restore database with the help of valid and updated backup.
  • Unexpected or improper system shutdown
  • Virus attack or any kind of software malfunction
  • Because of inappropriate editing of database
  • Due to Mysql application crash

이거 중에 하나라고 얘기를 함.


mysql이 설치된 디렉토리의 bin 디렉토리에서 perror라는 바이너리 파일을 실행하면 관련된 내용을 리턴해 준다.
위 내용은 디스크 공간이 부족하다는 말!!!

그래서 df -h로 해당 공간 확인하고 tmp 공간이 부족한 것을 확인한 다음, /tmp에서 $MYSQL_HOME/data/tmp로 변경을 해 준 후 mysql을 재시작 했더니 문제가 해결되었다고 함.

tmp 찾아서 싹 날리고 재시작 하면 되지 않을까...

mysql 에도 purge 하는 기능이 있나? 오라클처럼?

DB drop 하고 초기화하는 것을 하도 여러번 했더니 그런것 같기도 하고. 오라클처럼 어디 휴지통에 쌓이는게 아닐까?

   PURGE [MASTER] LOGS TO 'binlog-name'
   PURGE [MASTER] LOGS BEFORE 'date'

[출처] MySQL binary logs 삭제 - purge logs|작성자 앙마

PURGE [MASTER] LOGS TO 'logname';
PURGE [MASTER] LOGS BEFORE 'date'; 

date 이전까지 지움[출처] MySQL binary logs 삭제 - purge logs|작성자 앙마 

-- 2003-05-29 11:24:00 이전의 파일을 지움
mysql> purge logs before '2003-05-29 11:24:00';

-- aaa-bin.000004 이전의 파일을 지움
mysql> purge logs to 'aaa-bin.000004';

purge 해도 마찬가지고, mysql 서버를 재시작해도 마찬가지였음.
Database 용량이 1.7 MB 밖에 안됨. 용량이 너무 많아서 그런것 같지는 않고...

< force_innodb_recovery 옵션 바꾸기 >


MySQL의 기본 설정 파일(my.cnf)의 위치 확인




< MySQL Database Recovery >


< Mysql 'Got error -1 from storage engine' error >





Windows7, Windows8 OS인 경우 다음과 같다.

[Query] select @@datadir;

[결과] C:\ProgramData\MySQL\MySQL Server 5.6\data\

C:\ProgramData\MySQL\MySQL Server 5.6 디렉터리에 my.ini 파일도 있었다.

C.5.4.4. Where MySQL Stores Temporary Files



[일부 발췌] 
On Windows, Netware and OS2, MySQL checks in order the values of the TMPDIRTEMP, and TMP environment variables. For the first one found to be set, MySQL uses it and does not check those remaining. If none of TMPDIRTEMP, or TMP are set, MySQL uses the Windows system default, which is usually C:\windows\temp\.

[MySQL/Table 복구] 내부 명령어로 복구하기




Change the MySQL temp directory



나는 C:\ProgramData\MySQL\MySQL Server 5.6 디렉터리 밑에 temp 디렉터리를 만들고,
my.ini 파일에서 [mysqld] 섹션 밑에 다음을 추가하고 mysqld 서비스를 재시작 하였으나 에러가 계속 남.

tmpdir="C:/ProgramData/MySQL/MySQL Server 5.6/temp"

### Cause: java.sql.SQLException: Got error -1 from storage engine
; uncategorized SQLException for SQL []; SQL state [HY000]; error code [1030]; Got error -1 from storage engine; nested exception is java.sql.SQLException: Got error -1 from storage engine] with root cause
java.sql.SQLException: Got error -1 from storage engine

Temporary Directory도 바꾸어 보았으나 문제가 해결되지 않음.
아마도 Data File 을 크게 늘릴때 어떤 이유로 에러가 발생한것 같은데...
Data File 증가값 옵션이 잘못 되어 있어서 너무 큰 파일로 생성시키려 하다가 실패한 것인지...
다른 사람은 괜찮은데, 나만 그런걸 봐서는... 인터넷으로 설치파일을 받을때 md5 검사를 안해봐서 실행은 되지만 어딘가가 깨진 데이터가 들어간 것인지도 모르겠다.

Inno DB 는 Repair 명령도 안되고 해서, mysql 을 uninstall 하고, 인터넷에서 최신 버전을 받아서 다시 설치했다. 이때는 md5 검사를 해서 정상인지 확인했다. 지금은 아무 문제없이 잘 되고 있다.

Comments