태터데스크 관리자

도움말
닫기
적용하기   첫페이지 만들기

태터데스크 메시지

저장하였습니다.


ERROR 1016: Can`t open file:[Tablename].MYD (errno: 145) 


☆. 하드웨어의 오류 및 기타 이유로 table file이 손상된 경우
     Myisamchk 나 check table명령어를 사용하여 수동으로 복구

     # myisamchk -r [Tablename].MYI  

 

☆. 자동복구 방법

    이 기능은 MySQL기동시 table 이 crash marking이 되어 있는지 혹은 적절히
    close 되지 않았는지 체크하는 기능으로 mysqld 의 파라메터로 지정해주도록 되어 있다.

    --myisam-recover = {default | backup | force | quick }

    DEFAULT : 이 옵션은 아무 옵션도 주지 않은 것과 동일한 의미로 자동 복구를
         사용하지 않는다는 의미

    BACKUP : 추천하는 옵션으로 복구중 변경되는 테이블은 BAK확장자를 붙여서
         백업을 해놓고 복구에 들어가는 옵션

    FORCE : 복구시 테이타 손실이 무시하고 강제로 복구
 
    QUICK: 테이블에 어떠한 삭제된 블락도 없다면 table에 row를 점검하지 않는다.
        속도는 빠르지만 완벽한 복구는 보장할 수 없다.

    /etc/rc.d/init.d/mysql 같은 startup script에 아래 부분을 수정해주시고 MySQL을 재시작
    .
    case \$mode\ in
    \start\)
    # Start daemon
    if test -x $bindir/safe_mysqld
    then
    $bindir/safe_mysqld --myisam-recover=backup (수정할 부분)
    ~~~~~~~~~~~~~~~~~~~~~~~
    .
   
    service mysql stop (MySQL중단)
    service mysql start (MySQL재시작)  
 
 
☆. mysql 서버의 중지 없이 하는방법
    mysql에 접속하여 check table,repair table명령문으로 해결할수도 있습니다. 



출처 : http://www.mysqlkorea.co.kr/gnuboard4/bbs/board.php?bo_table=community_03&wr_id=1490&page=2

 
MySQL Table 복구 - Got error 127 from storage engine

 

1. 에러 메세지

ERROR 1030 (HY000): Got error 127 from storage engine

2. 복구 절차

  1. Analyze Table `Table Name`
  2. Repair Table `Table Name`

3. 예제보기

mysql> SELECT COUNT(A.IDX) AS 'CNT' FROM PRO_QNA_T A WHERE A.TYPE > 0;
ERROR 1030 (HY000): Got error 127 from storage engine
mysql>
mysql>
mysql> Analyze PRO_QNA_T;
ERROR 1064 (42000): You have an error in your SQL syntax;
check the manual that corresponds to your MySQL server version
for the right syntax to use near 'PRO_QNA_T' at line 1
mysql> Analyze Table PRO_QNA_T;
+---------------------+---------+----------+----------+
|           Table             |     Op    | Msg_type | Msg_text |
+---------------------+---------+----------+----------+
| ihelpers.PRO_QNA_T | analyze  |   status   |      OK     |
+---------------------+---------+----------+----------+
1 row in set (0.01 sec)

mysql> Repair Table PRO_QNA_T; 
+--------------------+--------+----------+--------------------------------------------+
| Table | Op | Msg_type | Msg_text |
+--------------------+--------+----------+--------------------------------------------+
| ihelpers.PRO_QNA_T | repair | info | Key 1 - Found wrong stored record at 24884 |
| ihelpers.PRO_QNA_T | repair | warning | Number of rows changed from 2187 to 2186 |
| ihelpers.PRO_QNA_T | repair | status | OK |
+--------------------+--------+----------+--------------------------------------------+
3 rows in set (0.17 sec)
mysql> Analyze Table PRO_QNA_T; 
+--------------------+---------+----------+-----------------------------+
| Table | Op | Msg_type | Msg_text |
+--------------------+---------+----------+-----------------------------+
| ihelpers.PRO_QNA_T | analyze | status | Table is already up to date |
+--------------------+---------+----------+-----------------------------+
1 row in set (0.00 sec)
mysql> SELECT COUNT(A.IDX) AS 'CNT' FROM PRO_QNA_T A WHERE A.TYPE > 0; 
+------+
| CNT |
+------+
| 2186 |
+------+
1 row in set (0.01 sec)

mysql>

출처 : http://blog.naver.com/entrv/100021821499
엑셀 데이터 -> MySQL
from D.B./Mysql 2007/08/20 15:04

엑셀 데이터 -> MySQL

*엑셀 데이터를 MySQL로 변환하기

엑셀로 데이터를 생성하고 저장시 [파일]-[다른 이름으로 저장]에서 "텍스트 (탭으로분리)(*.txt)"의
형식으로 저장한다. ("c:\mysql\Book1.txt" 로 저장했다고 가정해보자)

mysql>load data infile 'c:/mysql/Book1.txt' into table 테이블명 fields terminated by '\t';
  *경로의 구분에 역슬래쉬(\) 대신에 슬래시(/)를 사용해야 한다.
  *fields terminated by '\t'; 는 필드 공백을 탭키로 사용한다는 옵션. (\t 는 탭키를의미)

===========================================================================================

1.엑셀파일을 텍스트 파일로 저장

2.mysql 이있는 시스템으로 파일 옮긴다.

3. LOAD DATA INFILE 'text.txt' INTO TABLE 테이블이름 FIELDS TERMINATED BY '\n';

ex)  Load Data INFILE '/home/admin/hanja_definitions' INTO TABLE test FIELDS TERMINATED BY '\n';

이렇게 하시면 많은 엑셀파일의 데이타를 쉽게 테이블에 저장할 수 있겠죠!!!

===================================================================================

## CSV파일의 경우 ##

LOAD DATA INFILE '/home/ignc/domain.csv' INTO TABLE `ez_domain` FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '' LINES TERMINATED BY '\n';

Tag // excel, mysql
Mysql 백업 및 복구
from D.B./Mysql 2007/08/20 15:03

* 백업 하기!
    DB 백업은 콘솔상에서 mysql 빠져 나오신 다음에..
    => mysqldump -u ID -p TABLE명 혹은 DB명 > 백업할 파일이름.sql
    하고 비밀번호 입력하시면 백업이 되구요

* 복구하기
   => mysql -u ID -p < 백업한 파일이름.sql 하시고
   비밀번호 입력하시면 됩니다..
 

MySQL 접속]
mysql -hDB서버명 -uMySQL아이디 -pMySQL패스워드 데이타베이스명

[MySQL 백업하기]
MySQL 명령어로 백업받기 :
mysqldump -hDB서버명 -u유저명 -p패스워드 [백업할 테이터베이스명] > [외부로 저장할 파일명]
ex) mysqldump -hdb1.guideline.co.kr -uDBuser -pPassword MyDB > MyDB.sql

특정 테이블만 백업 할 경우 :
mysqldump -hDB서버명 -u유저명 -p패스워드 [테이타베이스명] [특정테이블명] > [외부로 저장할 파일명]
ex) mysqldump -hdb1.guideline.co.kr -uDBuser -pPassword MyDB MyTable > MyDB_MyTable.sql

[MySQL 복구하기]
mysql -hDB서버명 -u유저명 -p패스워드 [복구할 테이터베이스명] < [외부로 저장된 파일명]
ex) mysql -hdb1.guideline.co.kr -uDBuser -pPassword MyDB < MyDB.sql

1. mysqld 데몬을 죽입니다.(말이 무식해서리 ^^ )
#killall mysqld <엔터>
#ps -ef |grep mysql(엔터)로 데몬이 죽은 지 확인

2. mysql이 깔린곳으로 이동
# cd /usr/local/mysql

3. grant-table 미사용모드로 mysql시작
# ./bin/safe_mysqld –skip-grant &

4. mysql 실행
#mysql -u root -p mysql<엔터>
패스워드 물어도 그냥 엔터치세요

5.1 insert문으로 root에게 모든 권한부여
insert into user values(’localhost’, ‘root’, password(’1234′), ‘Y’, ‘Y’, ‘Y’, ‘Y’, ‘Y’, ‘Y’, ‘Y’, ‘Y’, ‘Y’, ‘Y’, ‘Y’, ‘Y’, ‘Y’, ‘Y’);

5.2 grant문으로 root에게 모든권한부여
mysql>GRANT ALL PRIVILEGES ON zboard.* TO 사용자id@localhost IDENTIFIED BY ‘비밀번호’ WITH GRANT OPTION;
이렇게 사용자id에게 zboard db에대한 권한만 부여하고 나니까 root 권한 접속 불가, 사용자id접속이 가능하나, db인 zboard에 대한 권한외 어떠한 것도 실행이 불가 했습니다.

6. user 테이블 정보가 변경되었으니 mysql에게 새로운 정보를 다시 읽게 한다.
mysql>flush privileges;<엔터>

7. exit명령으로 빠져나옴
mysql>exit

8. 실행중인 mysql 다시 종료
#killall mysqld <엔터>

9. 일반모드로 Mysql 재시작
# /usr/local/mysql/bin/safe_mysqld &

10. root 권한으로 접속하면 사용자권한 다시설정 등
모든 mysql의 모든권한으로 행사할 수 있음

작업관리자에서 MySql 프로세스를 끝낸다

명령프롬프트창에서…
c:\………\MySqld - -skip-grant   

새로운 명령프롬프트 창을 띠운다.
c:\………\mysql -u root -p
password :

mysql>use mysql
Database changed
mysql>update user set password=password(’변경할 비번’) where user=(’root’);
Query OK, 1 row affected (0.00 sec)
Rows matched: 1   Changed: 1 Warnings: 0

mysql>flush privileges;
Query OK, 0 row affected (0.00 sec)

mysql>quit


새로운필드를 칼럼과 칼럼 사이에 위치

alter table 테이블명 add column 새로운필드 데이터형 after 원하는 위치 앞필드

 ===========================================

맨 앞에 위치

alter table 테이블명 add column 새로운필드 데이터형 first
 

===========================================

위의내용 복합

alter table 테이블명 add column 새로운필드1 데이터형 after 원하는 위치 앞필드,
add column 새로운필드2 데이터형 after 원하는 위치의 앞필드

Tag // alter, mysql
BACKUP TABLE 문
MyISAM 형식의 테이블만 사용할 수 있으며, FILE_priv 권한이 
주어져 있어야 한다. BACKUP TABLE 문을 수행하면 테이블의
데이터 파일(*.MYD)과 테이블 포맷 파일(*.frm)을 지정한 디렉토리로
복사하게 된다.
주의: 백업하여 저장할 디렉토리를 먼저 만들고 모든 사용자에게
쓰기 권한(w)이 주어져야 한다.


【형식】
BACKUP TABLE tbl_name[, tbl_name...] TO '/path/to/backup/directory'



【예제】
# mkdir -p /work/jijoeDB
# ls -l
drwxr-xr-x 2 root other 512 Jul 23 14:09 jijoeDB
# chmod a+w /work/jijoeDB
# ls -l drwxrwxrwx 2 root other 512 Jul 23 14:09 jijoeDB
# mysql -u jijoe -p


mysql> use jijoeDB Database changed
mysql> show tables;
+-------------------+
| Tables_in_jijoeDB |
+-------------------+
| aa |
+-------------------+
1 row in set (0.00 sec)

mysql> select * from aa;
+------+
| a |
+------+
| 11 |
| 22 |
+------+
2 rows in set (0.00 sec)

mysql> flush tables with read lock;
Query OK, 0 rows affected (0.00 sec)

mysql> backup table aa to '/work/jijoeDB';
☜ 반드시 절대 경로를 지정하세요
+------------+--------+----------+----------+
| Table | Op | Msg_type | Msg_text |
+------------+--------+----------+----------+
| jijoeDB.aa | backup | status | OK |
+------------+--------+----------+----------+
1 row in set (0.01 sec)

mysql> unlock tables; Query OK, 0 rows affected (0.01 sec)
 mysql> drop table aa; Query OK, 0 rows affected (0.01 sec)
 mysql> show tables; Empty set (0.01 sec)

mysql>


 # ls -l jijoeDB -rw-rw---- 1 mysql mysql 10 Jul 23 14:13 aa.MYD
-rw-rw---- 1 mysql mysql 8554 Jul 23 14:13 aa.frm
#
 
RESTORE TABLE 문 
MyISAM 형식의 테이블만 사용할 수 있으며, BACKUP TABLE 문을 수행하면 
테이블의 데이터 파일(*.MYD)과 테이블 포맷 파일(*.frm)을 지정한
디렉토리로 복사하게 된다.

【형식】
RESTORE TABLE tbl_name[,tbl_name...] FROM '/path/to/backup/directory'
【예제】
# ls -l drwxrwxrwx 2 root other 512 Jul 23 14:09 jijoeDB
# ls -l jijoeDB -rw-rw---- 1 mysql mysql 10 Jul 23 14:13 aa.MYD
-rw-rw---- 1 mysql mysql 8554 Jul 23 14:13 aa.frm
# mysql -u jijoe -p
 mysql> use jijoeDB Database changed
mysql> show tables; Empty set (0.00 sec)

mysql> restore table aa from '/work/jijoeDB'; ☜ 반드시 절대 경로를 지정하세요
+------------+---------+----------+----------+
| Table | Op | Msg_type | Msg_text |
+------------+---------+----------+----------+
| jijoeDB.aa | restore | status | OK |
+------------+---------+----------+----------+
1 row in set (0.01 sec)

mysql> show tables; +-------------------+
| Tables_in_jijoeDB |
+-------------------+
| aa |
+-------------------+
1 row in set (0.00 sec)

mysql> select * from aa; +------+
| a |
+------+
| 11 |
| 22 |
+------+
2 rows in set (0.00 sec)
mysql>
Mysql 백업 하기!
from D.B./Mysql 2007/08/20 14:56
 

* 백업 하기!
    DB 백업은 콘솔상에서 mysql 빠져 나오신 다음에..
    => mysqldump -u ID -p TABLE명 혹은 DB명 > 백업할 파일이름.sql
    하고 비밀번호 입력하시면 백업이 되구요

* 복구하기
   => mysql -u ID -p < 백업한 파일이름.sql 하시고
   비밀번호 입력하시면 됩니다..

MySQL 접속]
mysql -hDB서버명 -uMySQL아이디 -pMySQL패스워드 데이타베이스명

[MySQL 백업하기]
MySQL 명령어로 백업받기 :
mysqldump -hDB서버명 -u유저명 -p패스워드 [백업할 테이터베이스명] > [외부로 저장할 파일명]
ex) mysqldump -hdb1.guideline.co.kr -uDBuser -pPassword MyDB > MyDB.sql

특정 테이블만 백업 할 경우 :
mysqldump -hDB서버명 -u유저명 -p패스워드 [테이타베이스명] [특정테이블명] > [외부로 저장할 파일명]
ex) mysqldump -hdb1.guideline.co.kr -uDBuser -pPassword MyDB MyTable > MyDB_MyTable.sql

[MySQL 복구하기]
mysql -hDB서버명 -u유저명 -p패스워드 [복구할 테이터베이스명] < [외부로 저장된 파일명]
ex) mysql -hdb1.guideline.co.kr -uDBuser -pPassword MyDB < MyDB.sql

출처 : http://cafe.naver.com/killtodbms/15


추가 내용 : 테이블 구조만 백업받기

mysqldump -h host -u user -ppassword -d database > script.sql
mysqldump -h 218.156.38.111 -u root -p1234 -d test > db_create_script.sql
이렇게 하면 test 데이터베이스 안의 모든 테이블의 구조만 db_create_script.sql 파일로 저장됩니다.

MYSQL형식
from D.B./Mysql 2007/08/20 14:54
 

숫자 형식

MySQL
크기
SQL Server 2000
TINYINT
1 바이트
TINYINT
SMALLINT
2 바이트
SMALLINT
MEDIUMINT
3 바이트

INT
4 바이트
INT
INTEGER
4 바이트
INT
BIGINT
8 바이트
BIGINT
FLOAT(X<=24)
4 바이트
FLOAT(0)
FLOAT(25<=X<=53)
8 바이트
FLOAT(25)
DOUBLE
8 바이트
FLOAT(25)
DOUBLE PRECISION
8 바이트
FLOAT(53)
REAL
8 바이트
REAL
DECIMAL
M 바이트 (D+2, if M DECIMAL
NUMERIC
M 바이트 (D+2, if M NUMERIC

날짜 및 시간 형식

MySQL
크기
SQL Server 2000
DATE
3 바이트
SMALLDATETIME
DATETIME
8 바이트
DATETIME
TIMESTAMP
4 바이트
TIMESTAMP
TIME
3 바이트
SMALLDATETIME
YEAR
1 바이트
SMALLDATETIME

문자열 형식

MySQL
크기
SQL Server 2000
CHAR(m)
M 바이트, 1<=M<=255
CHAR
VARCHAR(m)
L+1 바이트 (L<=M이고 1<=M<=255인 경우)
VARCHAR
TINYBLOB
L + 1 바이트 (L<2^8인 경우)
BINARY
BLOB
L + 2 바이트 (L<2^16인 경우)
VARBINARY
TEXT
L + 2 바이트 (L<2^16인 경우)
TEXT
MEDIUMBLOB
L + 3 바이트 (L<2^24인 경우)
IMAGE
MEDIUMTEXT
L + 3 바이트 (L<2^24인 경우)
TEXT
LONGBLOB
L + 4 바이트 (L<2^32인 경우)
IMAGE
LONGTEXT
L + 4 바이트 (L<2^32인 경우)
TEXT
ENUM (VALUE1, VALUE2, …)
Enum 수에 따라 1 또는 2 바이트. Values (최대 값은 65535)
제공되는 데이터 형식은 없지만, CHECK 제약 조건*이 해당 기능을 제공.
SET (VALUE1, VALUE2, …)
인수의 수에 따라 최대 1, 2, 3, 4 또는 8 바이트



출처 : http://blog.naver.com/udoll/70001816285

Tag // 형식