MySQL 을 사용하면서, 생겼던 문제들을 정리하였다.

설치에서 사용까지

MySQL을 받아야 하기 때문에 인터넷의 여러 곳을 돌아다녀보자. 워낙 인터넷이 무궁무진하기 때문에 금방 찾을 수 있을 것이다. 참고로 나는 mysql-3.22.32.tar.gz 을 받았다. 압축을 풀면 mysql-3.22.32 라는 디렉토리가 생길 것이다.

모든 프로그램이 그렇듯 설치할 때가 가장 까다롭다. 하지만 이 mysql 핵심가이드와 함께 한다면 원하는 결과를 얻을 수 있을 것이다. mysql-3.22.32 라는 디렉토리에 들어가서 바로

#./configure --prefix=/usr/local/mysql --with-charset=euc_kr   <-- 이부분을 반드시 해주세요..

를 입력한다. 여기서 '–prefix=/usr/local/mysql'은 이 경로로 설정을 풀라는 뜻이고,
'–with-charset=euc_kr'는 언어를 한국어로 한다는 뜻이다.(미루어 짐작하기에….)
그리고 'make'를 입력하여 컴파일하고, 'make install'을 입력하여 시스템에 깐다.
'scripts/mysql_install_db'를 입력한다. 'make install'을 입력했기 때문에 '/usr/local/mysql/'이란 디렉토리가 생긴다.
'/usr/local/mysql/bin/safe_mysqld&'를 입력한다. 그러면 아무런 일없이 커서가 한칸 아래 내려가서 깜박인다.
여기서 긴장하지말고 엔터를 친다. 그리고 'ps -ax|grep mysql'를 입력한다. 그러면 결과가 나오는데 'mysql………'라고 3~4줄 정도가 나올 것이다.
그리고 './mysql‘를 실행하면 'mysql>'하고 커서가 깜박일 것이다. 이 화면이 나온다면 설치는 무사히 마친 것이다.

'mysql>use mysql'라고 입력하고 엔터를 치면 마지막 줄에 '데이터베이스 체인지'라고 나온다.
그리고 'show table;'을 치면 테이블이 나온다. 이를 확인했다면 'quit'를 치고 빠져 나온다.
지금의 mysql은 아무나 들어갈 수가 있다. 이것은 보안에는 무방비 상태를 의미하므로 패스워드를 정해주어야 한다. 정해주는 방법은 다음과 같다.

'/usr/local/mysql/bin/'에서 'mysql -u root passwd 암호' 또는 'mysqladmin -u root password 암호' 입력한다. 이제 암호가 제대로 입력되었는지 확인해보자. '/usr/local/mysql/bin/'에서 './mysql -p'라고 치면 암호를 입력하라고 요구한다. 방금전 입력했던 암호를 입력해보자. 'mysql>' 가 나온다면 제대로 입력된 것이다.

MySQL FAQ

shell 상에서 아래와 같이 명령을 주시면 됩니다.
mysqldump -p사용자패스워드 db_name > 저장할 파일명( 일반적으로 db_name.dump)
위의 명령을 주시면, db를 백업하실수 있고, 다시&nbs p;쓰실 경우에는
mysql -p패스워드 new_db_name < 저장하신 파일명
여기서 new_db_name은 미리 만들어져 있어야 합니다.


Mysql DB Table를 현재 컴퓨터에서 다른 컴퓨터로 옮길려고 하거든요.
방법이 없을까요…
아직 초보라서…….


alter table 테이블이름 add 칼럼, alter table 테이블이름 drop 칼럼을 사용하세요.

추가하는 예
d 라는 새로운 TIMESTAMP 컬럼을 추가한다.

mysql>alter table t2 add d TIMESTAMP;  //여기서 t2는 컬럼을 추가하려는 테이블명이다.

제거하는 예
컬럼 c를 제거한다.

mysql>alter table t2 drop COLUMN c;      // t2는 위와 같다.

우선 아래와 같이 해보자!!

#ps acx | grep mysqld               

그럼 지금 작동하고 있는 mysql 데몬을 볼수 있을 것이다. 이것을 모두 kill 하자!! 그리고 다시 safe_mysqld & 실행시켜보자..

테이블을 검사하여 복구하려면 'isamchk' 라는 유틸을 이용하는 데 사용법은 다음과 같다.

#/usr/local/mysql/bin/isamchk proftp     <----proftp는 테이블명이다..

위의 실행은 '/usr/local/mysql/var/' 의 Database의 디렉토리에 들어가서 한다.

우선 C로 짠 프로그램(함수)를 컴파일한다. 리눅스에서는 gcc로 컴파일하는데, 이것이 쉽지가 않다. 예를 들어 'getgrade.c'라는 함수가 있다고 하자!! 그럼 이 함수가 있는 디렉토리에 가서 다음과 같이 한다.

#gcc -shared -o getgrade.so getgrade.c -lmysqlclient -I /usr/local/mysql/include/mysql/

여기서 중요한 것은 ‘-I'다음 부분인데, ’mysql.h'파일이 있는 경로명을 적어주어야 한다는 것이다. 이는 시스템마다 다를수 있는데, find 명령을 이용해서 어디에 있는지 경로를 알아두자!!

#cd /usr/local/mysql/bin
#./safe_mysqld
Starting mysqld daemon with databases from /usr/local/mysql/var
011007 21:39:39  mysqld ended

위와 같은 메시지가 뜨면서 에러가 뜨는 경우!! 필자도 애먹었다~~

#vi /usr/local/mysql/var/fat81.com.err

에러 파일을 보면 왜 데몬이 안뜨는지 이유가 영어로 자세히 나와있다. 대충 이유를 해석하자면 ‘mysql'이란 계정으로 바꾸어 주라는 내용이다. 파일의 내용은 아래와 같다.

----------------------fat81.com.err------------------------------------------
011007 21:18:07  mysqld started
Fatal error: Can't change to run as user 'mysql' ;  Please check that the user exists!
011007 21:18:08  Aborting
 
011007 21:18:08  /usr/local/mysql/libexec/mysqld: Shutdown Complete
 
011007 21:18:08  mysqld ended
--------------------------------------------------------------------------

해결책은 다음과 같다.

#chmod 755 /usr/local/mysql/var

그리고는 다시 데몬을 띄워보자!!

root 패스워드 보호하기

많은 사람들이 mysql을 시스템에 설치하고 루트(root)의 패스워드를 준다. 그러나 여기서 한가지 중요한 사실이 있다. 우선 mysql에 접속해서 'mysql' 데이터베이스의 user 의 테이블을 보자. 그 상태에서 아래의 명령을 내려보자!!

mysql>select host, user, password from user where user = 'root';

그럼 결과는 'localhost' 와 'myfeel.hoseo.ac.kr'가 있을 것이다. 그런데 그 옆을 보면 'localhost'는 패스워드가 설정되어 있지만 'myfeel.hoseo.ac.kr' 은 패스워드가 지정되어 있지 않다. 그 상태에서 mysql을 빠져나가 프롬프트에서 다음과 같이 명령을 내려보자..

#./mysql -u root -h myfeel.hoseo.ac.kr -p

그리고 패스워드를 입력하지 않고 엔터를 누르면 그냥 접속이 가능하다.(이럴 수가!!)
이런 일을 방지하기 위해 반드시 귀찬더라도 아래와 같이 해준다.

#./mysqladmin -u root password 1234   <---------ex
#./mysqladmin -u root -h myfeel.hoseo.ac.kr password 1234     <----------ex

텍스트 파일의 데이터를 자동으로 추가시키기

텍스트 파일 형태로 어떤 데이터들이 들어있다고 하자.
이런 경우는 대개 대용량의 데이터들을 입력할 때이다. 일일이 손수 추가시킬 수도 있겠지만, 그렇게 하기에는 너무 많다. 이럴 때 사용할 수 있는 것이 바로 LOAD DATA 명령어이다.
여기서는 이해하기 쉽게 예를 들어 설명해 보겠다.
다음과 같은 스키마를 가진 vocabulary 라는 테이블이 있다.

create table vocabulary(
num int(10) not null default '0' auto_increment,
name varchar(20),
mean varchar(50),
primary key(num)
);

바로 이 테이블에 데이터를 추가할 것이다. 이번에는 텍스트 파일을 보자!! 파일명은 eng.txt 이다.

1	school	학교
2	speak	스피커

위의 텍스트 파일을 생성 시에 주의할 것이 있다. 각 항목은 탭(TAB)간으로 띄어준다. 그리고 각 행은 엔터(ENTER)로 구분한다.
이제 모든 준비가 완료 되었다. 실제로 자동으로 입력해보자!!
텍스트 파일의 복사는 데이터베이스 파일이 있는 경로로 복사한다. mysql 의 경우 각 데이터베이스는 디렉토리 이름으로 생성되어서 구분한다. 나의 현재 경우는 /var/lib/mysql/ 아래 데이테이스 이름의 디렉토리 아래에 복사했다. 여기서는 test 라는 데이터베이스 이름으로 했다.

#mysql test -p
mysql>load data infile "eng.txt" into table vocabulary fields terminated by '\t' lines terminated by '\n';
Query OK, 2 rows affected (0.01 sec)
Records: 2  Deleted: 0  Skipped: 0  Warnings: 0
mysql>select * from vocabulary;

어떤가? 제대로 입력되었는가??
여기서 주의할 점은 num 항목은 auto_increment 와 primary key 로 지정해주었지만, 텍스트 파일에서 반드시 num 항목에 대한 입력값을 주어야 한다는 것이다.
그대신 primary key 이기 때문에 유일한 값을 넣어야 한다. 그렇지 않으면 에러가 발생한다.

보너스!!

바로 앞에서 했던 것은 테이블의 필드가 3 개라면, txt 파일에도 똑같이 3 개의 데이터를 넣어주어야 했다. 이번에는 특정 필드만 데이터를 넣는 방법을 알아보자!! name 와 mean 필드만 데이터를 입력하고 싶다면, 아래와 같이 실행한다.

load data infile "a.txt" into table md_basic fields terminated by '\t' lines terminated by '\n' (name, mean);

여기서 당연히 txt 파일에서는 2 개의 필드의 데이터만 있어야 한다.

  • computer/database/mysql_tip.txt
  • Last modified: 3 years ago
  • by likewind