주간 베스트 월간 베스트 3개월 베스트 베스트 게시물
꽃배달 한국, 중국 전지역배송

MySQL kFAQ ver. 0.0.1

D3µX | 2002.04.12 01:19:59 댓글: 0 조회: 1016 추천: 96
분류컴관련 강좌·팁 https://life.moyiza.kr/itstudy/1748025
MySQL  kFAQ ver. 0.0.1

작성자       : 허정수(wertyu@nownuri.net)
최초 작성일  : 1999년 12월 19일


MySQL  kFAQ ver.

수정자       :
수정일       :


------- 차례  ----------

0. 포기 선언
1. 이 문서에 대해서

2. MySQL의 특징 및 일반적인 질문들
        2.1 MySQL의 특징은 무엇인가요?
        2.2 Transaction이 지원 안된다면서요?
        2.3 License 방식을 알고 싶습니다.
        2.4 와우~ MySQL을 설치하고 싶네요.
            어떻게 해야 되죠?
            
3. MySQL의 설치에 관한 질문들
        3.1 설치는 어렵나요?
        3.2 설치에 필요한 하드웨어 최소 사양은 얼마나 되나요?
        3.3 설치하는 방법 좀 알려주세요.
        3.4 MySQL의 데몬의 구동
        3.5 흑흑..-_-; Access Denied가 나옵니다.
        
4. MySQL의 관리에 관한 질문들
        4.1 설치 후에 해야 할 일들
        4.2 새로운 사용자 추가
        4.3 Access Denied 좀 해결해주세요!
        4.4 root 암호를 잊어 버렸어여 T.T
        4.5 흠... 백업을 하려고 하는데...
        4.6 MySQL을 업그레이드 하려고 합니다.
        4.7 MySQL을 부팅 시에 자동으로 실행되게 하고 싶은에요.
        4.8 mysqld ended라고 나오면서
                 데몬이 계속 죽읍니다.
                 
5. MySQL에서의 SQL 언어에 관한 질문들
        5.1 SQL 이란게 모죠?
        5.2 ANSI SQL92와 MySQL의 SQL과의 차이점은 몹니까?
        5.3 MySQL의 데이타 타입에 대해서
                5.3.1 MySQL의 데이타 타입을 알려주세요
                5.3.2 값이 자동으로 1씩 증가하게 하고 싶은데요.
                5.3.3 AUTO_INCREAMENT는 몬가요?
                5.3.4 한 컬럼에서 최대 얼마나 저장할 수 있나요?
                5.3.5 게시판 등의 본문을 저장하고 싶은데요.. 뭘 써야 하죠?
        5.4 MySQL에서의 SQL 언어
                5.4.1 CREATE
                5.4.2 INSERT
                5.4.3 SELECT
                5.4.4 ALTER
            5.4.5 어떤 database들이 있나 알고 싶은데요?
            5.4.6 어떤 테이블들이 있나 알고 싶어요.
            5.4.7 테이블의 컬럼 형식을 알고 싶어여.
            
6. MySQL+PHP+Apache에 관한 질문들
        6.1 설치하는 방법
        
7. MySQL C API에 관한 질문들
        7.1 알파벳 순으로 정리한 각 함수들의 설명을 넣자.
        7.2 간단한 예를 얻을 수 없을까요?
        
8. MySQL과 Perl에 관한 질문들
        In the Future
------------------------

0. 포기 선언

        이 문서에 있는 내용을 따라해보다
        당신의 컴퓨터에 어떠한 문제가 발생해도
        필자에게는 전혀 책임이 없다.
        따라서 이 문서를 읽는 사람들은
        신중해야 한다.
        


1. 이 문서에 대해서
        
        필자는 1998년 7월 처음으로 MySQL을 사용해 보았다.
        지금처럼 많은 사람들이 MySQL을 쓰고 있지
        않았으므로 문제에 부딪쳤을 때 해결하기가
        쉽지 않았다.
        
        요즘은 필자에게 질문을 해오는 사람들이 많다.
        질문을 해오는 사람들의 질문을 보면 메뉴얼만
        보면 해결할 수 있는 문제들이 대부분이지만,
        처음부터 영어로 된 방대한 양의 메뉴얼을 읽기란
        쉬운 것이 아니고, 또한 문제에 봉착한 사람들의
        *답답한* 마음을 알기에 최대한 시간을 내어
        질문에 답을 해 주고 있다.
        
        이 문서는
        
        i)    필자에게 온 질문들
        ii)   필자가 생각한 '흠, 이 문제는 누가 질문할거 같은데'
        
        라고 생각한 질문들과 답을 모아 놓은 문서들이다.
        
        7개의 섹션으로 질문들을 나눠 놓았다.
        하지만, 이 문서를 수정하는 사람은
        누구나 새로운 섹션을 추가할 수 있고,
        질문이 적절한 섹션에 있지 않을 경우
        옮길 수 있다.
        현재 이 문서는 MySQL 3.22.20 버전의 메뉴얼을 참고하였다.
        
        
2. MySQL의 특징 및 일반적인 질문들
        
        2.1 MySQL의 특징은 무엇인가요?
        
                메뉴얼에는 MySQL의 특징을 다음과 같이 말하고 있습니다.
                
                i) 커널 스레드를 이용한 멀티 스레드를 지원한다.
                   따라서, CPU가 여러 개 있을 경우 여러 개의 CPU를
                   잘 활용할 수 있다.
                i) C, C++, Java, Perl, PHP, Python 과 TCL에 대한 API를 제공한다.
                i) 여러 플랫폼에서 작동한다.
                i) 많은 컬럼 타입을 제공한다.
                i) one-sweep multijoin을 이용하여 Join이 매우 빠르다.
                i) SQL 함수들은 Optimized된 class library를 이용하여 구현되었다.
                   또한 매우 빠르며, 불필요한 메모리 할당을 하지 않는다.
                i) 권한과 암호 시스템은 flexible하고 보안이 잘 되어 있다.
                   원격의 서버에 접속할 때 모든 암호들은 암호화 되어 전송된다.
                i) ODBC를 지원한다. 따라서 Access를 이용해서 MySQL에 연결할 수 있다.
                i) 테이블에 16개의 인덱스를 줄 수 있다.
                i) 크기가 큰 데이타 베이스도 다룰 수 있다. 우리는(MySQL 메뉴얼 작성자)
                   50,000,000 개의 레코드를 가지고 있는 데이타베이스도 다루고 있다.
                i) 메모리 누수가 없다.(상용 메모리 누수 감지 프로그램으로 테스트 했다)
                i) isamchk라는 유틸리티로 테이블 검사, 성능향상, 수리 등을 할 수 있다.
                
                이상이 MySQL의 메뉴얼에서 말하는 MySQL의 특징들을 정리한 것입니다.
                하지만 개인적으로 MySQL의 가장 큰 특징은 _빠르다_ 라고 생각합니다.
                그리고 리눅스 상에서 손쉽게 무료로 구해서 쓸 수 있고,
                또한 사람들이 많이 쓰고 있으므로, 문제가 생겼을 때 대답을 해줄
                사람들도 그만큼 많겠죠.
                
        2.2 Transaction이 지원되지 않는 다면서요?
        
                네. 그렇습니다. MySQL은 Transaction을 지원하지 않습니다.
                MySQL 개발자들은 Transaction이 속도를 매우 느리게 하므로
                Transaction을 구현하지 않기로 했습니다.
                하지만, 꼭 Transaction을 써야 할 경우 lock/unlock tables를
                이용하여 비슷한 효과를 낼 수 있습니다.
        
        2.3 MySQL의 License 방식을 알고 싶습니다.
                
                기본적으로 MS Windows 계열을 제외한 모든
                OS에서는 무료로 사용할 수 있습니다.
                다만 상용을 목적으로 사용하거나, MS Windows 계열에서
                사용할 경우에는 License를 사야합니다.
                1 Copy에 US 200$입니다.
                상용으로 사용한다고 해고, License없이 쓸 수 있는 경우가
                있습니다.
                돈이 들어간 문제는 복잡하므로 더 이상 이야기 하고 싶지
                않습니다.
                중요한 것은 무료로 사용할 수 있다는 것이죠.
        
        2.4 와우~ MySQL을 설치하고 싶네요.
            어떻게 해야 되죠?
            
            이제 MySQL에 매력을 느꼇나 보죠? 설치 방법은
            _3.3 MySQL을 설치하는 방법 좀 알려주세요_ 부분을 읽어
            보시기 바랍니다.
          
        3. MySQL의 설치에 관한 질문들
        
                3.1 설치는 어렵나요?
                
                        NEVER!
                        절대 어렵지 않습니다. 간혹 어려움을 겪는 사람들이 있는데
                        대부분은 메뉴얼 등을 읽지 않고 대충 설치를 한 경우입니다.
                
            3.2 설치에 필요한 하드웨어 최소 사양은 얼마나 되나요?
                    
                    리눅스가 설치될 수 있는 하드웨어면 됩니다.
                    오라클을 설치하다가 하드 디스크가 모라자서 윈도
                    파티션을 지웠던 기억이 나는군여 -_-.
                    MySQL은 정말 작고 빠릅니다.
~
                    
            3.3 설치하는 방법 좀 알려주세요.
            
                    MySQL을 설치하는 방법에는 rpm으로 설치하는 방법과
                    Source Code로 설치하는 방법이 있겠죠.
                    
                    개인적으로 rpm으로 설치하는 방법은 추천하지 않습니다.
                    rpm으로 설치하면 뭐랄까.. 재미가 없죠.
                    Source Code로 설치하면 재미도 있고, 더욱 좋은 것은
                    설치하고자 하는 소프트웨어에 대해 좀더 깊이 알 수 있습니다.                      
                        
                        일단 MySQL의 소스 코드를 http://www.mysql.com에서 다운 받습니다.
                        다운받은 파일을 적당한 디렉터리로 복사한 후에 다음과 같은 명령을
                        내리면 됩니다.
                        
                        $ gzip -d mysql-Version.tar.gz        
                        $ tar xvf mysql-Version.tar        
                        $ cd mysql-Version
                        $ ./configure         
                        $ make        
                        $ make check
                        $ su   (root 유저가 아닐 경우에만 실행)         
                        # make install        
                        $ cd scripts
                        $ ./mysql_install_db
                        
                        특별한 문제 없이 설치가 잘 될 것입니다.
                        
                        기본적으로 MySQL이 설치되는 디렉터리는 /usr/local/mysql 입니다.
                        
                        하지만, 자기가 운영하는 서버가 아닌 학교의 서버 등에
                        MySQL에 설치할 경우 /usr/local/mysql에 쓰기 권환이 없으므로
                        다른 디렉터리로 지정을 해야 하죠
                        설치할 디렉터리를 지정하는 방법은
                        
                        $ ./configure --prefix=/원하는/디렉터리
                        
                        위처럼 하시면 됩니다.
                        
                        설치된 디렉터리 밑의 bin 디렉터리에 실행 파일들이 생깁니다.

                3.4 MySQL 데몬의 구동
                        
                        MySQL의 데몬이 실행되고 있어야 mysql을 사용할 수 있겠죠.
                        MySQL이 설치된 디렉터리 밑의 bin/ 디렉터리에 보면
                        safe_mysqld라는 프로그램이 있습니다.
                        
                        $ safe_mysqld &
                        
                        이렇게 실행을 하면 MySQL의 데몬이 구동되죠.
                        
                        MySQL은 TCP/IP로 Client와 통신을 하게 될 때 3306번 포트를 사용합니다.
                        이 포트를 바꾸려면
                        
                        $ safe_mysqld -P 3333 &
                        
                        이렇게 -P 옵션으로 포트 번호를 바꿀 수 있습니다.
                        
                3.5 흑흑..-_-; Access Denied가 나옵니다.                
                
                        _4.3 Access Denied 좀 해결해주세요!_ 부분을 보시기 바랍니다.
                                        
        4. MySQL의 관리에 대한 질문들
        
                4.1 설치 후 해야 할 일들
                
                        설치 후 가장 먼저 해야 할 일은 root user의 암호를
                        정하는 일입니다.
                        MySQL은 사용자을 -u 옵션으로 지정합니다.
                        
                        -u 옵션이 없을 경우 기본적으로 사용자의 계정을 사용합니다.
                        또한 MySQL의 root 유저에는 초기에 암호가 걸려있지 않습니다.
                        따라서 root 가 아닌 아무 사용자라도
                        
                        [wertyu@ localhost] $ mysql -u root
                        
                        처럼 해서 MySQL의 root 사용자가 될 수 있습니다.
                        시스템의 계정이름과 MySQL의 계정 이름이 다르 다른 것을
                        꼭 기억하고 있어야 합니다.
                        
                        암호를 거는 방법은 세 가지가 있습니다.
                        
                        i) update를 이용하는 방법
                                SQL 문 중 update를 이용해서 mysql database 중
                                user table의 root 사용자의 암호를 거는 방법입니다.
                                
                                $ mysql -u root mysql
                                mysql> update user set password = password('새로운암호') where user = 'root';
                                mysql> flush privileges ;
                                
                                MySQL에서는 사용자의 암호를 암호화 하여 저장합니다.
                                암호를 암호화 하는 함수가 password()라는 함수이죠.
                                
                        ii) SET PASSWORD를 이용하기
                                mysql> SET PASSWORD for root=password('새로운암호');
                        
                        iii) mysqladmin를 이용하는 방법
                                $ mysqladmin -u root password 새로운암호
                                
                        이렇게 3 가지 방법 중 하나로 root 사용자의 암호를 바꾸실 수 있습니다.
                        이때 i) 번 방법으로 할 경우 꼭 flush privileges; 를 실행 시켜야
                        합니다.
                        
                        이제 mysql을 쓸 때마다 -p 옵션을 붙여야 합니다.
                        
                        $ mysql -u root -p
                        
                        4.2 새로운 사용자 추가
                                
                                새로운 사용자를 추가해 보겠습니다.
                                
                                $ mysql -u root mysql
                                mysql> GRANT ALL PRIVILEGES ON *.* TO
                                     > wertyu@localhost
                                     > IDENTIFIED BY '암호' WITH GRANT OPTION;
                                이렇게 해서 모든 database에 대해서 모든 권한을 갖는
                                localhost의 wertyu라는 사용자를 추가했습니다.
                                
                                필자는 귀찮은 명령을 기억하기 싫으므로
                                보통 다음 처럼 사용자를 직접 INSERT합니다.
                                
                                $mysql -u root mysql
                                mysql> INSERT INTO user VALUES('localhost', 'wertyu', password('암호')
                                         > 'Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y') ;
                                mysql> FLUSH PRIVILEGES ;
                                
                                사용자가 어느 하나의 database에만 접근을 하도록 추가할
                                경우가 있습니다. 그때는 다음과 같은 명령을 내리면 됩니다.
                                
                                mysql> GRANT ALL PRIVILEGES ON inos.*
                                     > TO wertyu@localhost IDENTIFIED by '암호';
                                
                                위처럼 하여 inos라는 database에 모든 권한을 갖는
                                wertyu라는 사용자를 추가할 수 있습니다.
                                
                                다음 명령은 SELECT, INSERT, UPDATE 권한만을 줄때의 명령입니다.
                                
                                mysql> GRANT SELECT, INSERT, UPDATE ON inos.*
                                     > TO wertyu@localhost IDENTIFIED by '암호' ;
                                    
                        4.3 Access Denied 좀 해결해주세요!
                        
                                Access Denied가 나오면서 연결이 안되는 이유는 많이 있죠
                                
                                MySQL을 처음 설치하고 난 후에
                                $ mysql -u root mysql
                                이라는 명령을 내렸는데도
                                Access Denied가 나왔다면  설치과정의 mysql_install_db 명령을
                                빼먹고 설치 하신 것입니다.
                                
                                Access Denied using password no
                                라고 나온다면 암호가 걸려 있는 사용자인데 암호를 입력하지 않아서
                                나는 에러입니다.
                                
                                Access Denied using password yes
                                라고 나온다면 암호를 사용했는데 입력한 암호가 틀렸을 경우이죠.
                                
                                이 외에도 수많은 경우가 있는데, 이 부분은 이 글을 읽는 다른 사용자들이
                                직접 추가했으면 하는 바램입니다. 다함께 참여하는 문서가 되었으면 합니다.
                                
                4.4 root 암호를 잊어 버렸어여 T.T
                        
                        root의 암호를 잊어 버렷을 때 정말 난감하죠.
                        그렇다고 다시 MySQL을 설치하기에도 귀찮고 말이죠.
                        
                        이 경우에도 방법이 있습니다.
                        
                        먼저 MySQL의 데몬이 실행 중이라면 데몬의 실행을 중지 시키세요.
                        
                        이제 다시 MySQL의 데몬을 실행 시키는데 -Sg라는 옵션을 줍니다.
                        
                        $ safe_mysqld -Sg &
                        
                        -Sg는 Skip grant table의 약자이지요.
                        이렇게 데몬을 실행 시키면 권한을 검사하지 않으므로
                        누구나 MySQL에 접근할 수 있습니다.
                        이제 mysql database의 user table의 암호 부분을
                        UPDATE를 이용해서 직접 수정해 주면 되겠죠.
                        
                        MySQL 전체를 다시 설치하는 수고를 덜었으면 합니다. ^^
                
                4.5 흠... 백업을 하려고 하는데...어떻게 해야 하나요?
                
                        백업을 하는 방법은 크게 두 가지 방법이 있습니다.
                        MySQL의 데이타가 있느 디렉터리 밑에 있는 파일들을
                        그냥 모두 복사해뒀다가, 필요할 때 다시
                        처음 위치에 덮어 씌우는 방법이 있습니다.
                        다른 방법으로는  mysqldump라는 유틸리티를 이용하는 방법
                        입니다.
                        mysqldump를 사용하는 방법을 설명 드리겠습니다.
                        
                        $ mysqldump [OPTIONS] database [tables]
                        
                        mysqldump는 SQL statement들을 생성합니다.
                        현재 database안에 들어 있는 테이블의 형식과
                        테이블 안의 데이타들 똑같이 만들어 낼 수 있는
                        SQL statement들을 생성합니다.
                        예를들어 foo라는 database가 있다고 가정하고,
                        foo를 백업받으려고 할 경우
                        
                        $ mysqldump foo > foo.backup
                        
                        이렇게 하면 됩니다.
                        mysqldump는 기본적으로  표준 출력으로 SQL statement들을
                        출력하므로 foo.backup이라는 파일로 저장했습니다.
                        
                        복구를 하려면,
                        
                        $ mysql foo < foo.backup
                        
                        이런 식으로 저정된 SQL statement를 실행 시키면 됩니다.

                4.6 MySQL을 업그레이드 하려고 합니다. 기존의 데이타들은 어떻게 되죠?
                        
                        업그레이드를 할 경우, 새로운 버전의 MySQL 문서에서 업그레이드에 관한
                        문서를 꼭 읽어보셔야 합니다.
                        
                        3.22.x 버전과 3.23.x의 데이타들은 호환이 됩니다.
                        그리고 Major 버전이 같으면 데이타들은 거의 호환이 됩니다.
                        또한, 버전이 올라가면서 데이타들이 호환이 안 될 경우,
                        테이블의 구조를 업그레이드 시켜주는 유틸리티도 같이 배포됩니다.
                        
                        따라서 버전이 크게 변하지 않는 이상 MySQL의 업그레이드는
                        MySQL의 설치 과정에서 mysql_install_db 과정만 빼면 됩니다.

                4.7 MySQL을 부팅 시에 자동으로 실행되게 하고 싶은데요.                
                        
                        제가 보통 쓰는 방법은
                        /etc/rc.d/rc.local (레드햇 기준) 파일에
                        
                        MySQL이/설치된/디렉터리/safe_mysqld&
                        
                        위의 한 줄을 추가 하는 방법입니다.
                        
                4.8 mysqld ended라고 나오면서 데몬이 계속 죽습니다.
                
                        이런 경우 MySQL의 error log 파일을 살펴 봐야
                        정확한 이유를 알 수 있습니다.
                        error log는 기본적으로
                        MySQL의 데이타가 저장된 디렉터리에
                        host_name.err 라는 이름으로 저장됩니다.
                        정확히 어디인지 모를 경우
                        safe_mysqld 파일을 보고 MySQL의 데이타들이 어느 디렉터리에
                        저장되는지 확인해 보시면 됩니다.
                        
                        error log의 파일을 보고 에러의 원인을 알아낸 후
                        문제를 해결하면 됩니다.
                        문제가 해결이 안될 경우 error log 파일의 내용을
                        wertyu@nownuri.net으로 보내주시면 최대한 도움을
                        드리도록 노력해 보겠습니다.
                        
        5. MySQL에서의 SQL 언어에 관한 질문들
        
                5.1 SQL 이란게 모죠?
                        SQL(Structured Query Language)는 DBMS에서
                        데이타들을 조작하기 위한 언어입니다.
                        언어라고 해서 C 언어처럼 컴파일을 하고 그렇진 않습니다.
                        단순히 DBMS에 Query를 하고 결과를 얻어 오는 언어입니다.
                        하지만 DB를 배우기 위해서는 꼭 배워야 하는 언어입니다.
                        SQL 언어에 대해서 간단하게 나마 배워보고자 하면
                        _5.4 MySQL에서의 SQL 언어_부분을 읽어보시기 바랍니다.                        

                5.2 ANSI SQL92와 MySQL의 SQL과의 차이점은 몹니까?
                        
                        이 부분은 MySQL 메뉴얼에서 5 장을 읽어 보시면 자세히
                        알 수 있습니다.
                        MySQL에 없는 기능들은 다음과 같습니다.
                        
                
추천 (96) 선물 (0명)
IP: ♡.154.♡.81
3,006 개의 글이 있습니다.
제목 글쓴이 날짜 조회
관리자
2003-09-20
11911
관리자
2003-09-20
11460
관리자
2003-09-20
20594
지구인
2010-08-27
19387
지구인
2009-09-07
13707
SOLIDH
2010-01-29
15665
엔죠라이프
2004-10-07
16755
D3µX
2002-04-15
4900
D3µX
2002-04-15
1607
다원
2002-04-13
1963
다원
2002-04-13
2116
D3µX
2002-04-12
5069
D3µX
2002-04-12
1016
노아
2002-04-11
1564
네로
2002-04-11
4586
네로
2002-04-10
495
네로
2002-04-10
402
네로
2002-04-10
419
D3µX
2002-04-09
769
0_fist
2002-04-03
461
김상일
2002-04-02
4465
노아
2002-03-28
1959
네로
2002-03-25
409
네로
2002-03-25
451
네로
2002-03-24
441
네로
2002-03-24
992
네로
2002-03-24
804
노아
2002-03-15
1895
모이자 모바일