Media Log

1. 현재 시스템내의 모든 데이타베이스를 백업 받겠다.

    [root@soma]# mysqldump -u root -p -A > 1.sql

    [설명]- 모든 데이타베이스를 1.sql 이란 파일명으로 백업을 받는다.
            vi 편집기로 1.sql 파일을 열어보면 각각의 데이타베이스를 create 시키는부분
            각각의 데이타베이스마다 테이블을 create 시키는부분 그리고 테이블에 데이타를
            insert 시키는 부분들이 모두 나열되어있음을 알수있다.


 2. 특정 데이타베이스만 백업 받겠다.

    [root@soma]# mysqldump -u root -p --databases soma_db > 2.sql

    [설명] - soma_db 라는 데이타베이스만 백업을 받는다.
             vi 편집기로 2.sql 파일을 열어보면 soma_db 라는 데이타베이스를 create 시키
             는 부분과 각각의 테이블을 create 시키는부분 그리고 각각의 테이블에 데이타
             를 insert 시키는 부분이 있음을 알수있다.



    [root@soma]# mysqldump -u root -p --databases soma_db cat_db > 3.sql

    [설명] - soma_db,cat_db 라는 데이타베이스만 백업을 받게된다.


  3. 특정 데이타베이스의 특정 테이블만 백업 받겠다.

    [root@soma]# mysqldump -u root -p soma_db book > 4.sql

    [설명] - soma_db 라는 데이타베이스의 book 라는 테이블만 백업을 받겠다.
             vi 4.sql 파일을 열어보면 테이블을 create 시키는 부분과 테이타들을 테이블에
             입력하는 부분이있음을 알수있다.
 
             중요한것은 데이타베이스를 create 시키는 부분이 없음을 주의해야한다.
             이는 백업받은 화일로 복구시킬때 중요한 역활을한다.

mysql에 ip로 접근을 하려면 %를 붙혀 줘야 한다.

GRANT ALL PRIVILEGES ON * . * TO root@'%' IDENTIFIED BY '1111'

안그러면 에러가 뜬다. 접근 허용이 안되어있다고
이 글에서는 오토셋 4.2.0 버전을 이용한 MySQL 연동 작업시 참고할 사항을 제공합니다.

1. MySQL 서버의 모든 설정은 기본적으로 UTF-8 로 셋팅되어 있습니다.

2. MySQL 설정 파일은 윈도우 설치 폴더 안의 my.ini 파일입니다.
오토셋을 통해 제어되는 MySQL 서버는 이 파일을 참조합니다.

3. 미리 생성된 DB 는 아래와 같으며, 적용된 콜레이션(Collation)은 각 DB 별 다릅니다.
- mydb : latin1_swedish_ci (기본값)
- mydb_utf8 : utf8_general_ci
- mydb_euckr : euckr_korean_ci

4. 사용자 계정 정보
- root : MySQL 서버 관리용 ID , 삭제 불가 , 초기 암호는 autoset
- sa : 일반 사용자 , 불필요시 삭제 가능 , 초기 암호는 autoset

5. 사용자 계정별, DB 연결 정보
- root : 모든 DB 에 접근 가능
- sa : mydb , mydb_utf8 , mydb_euckr  / 앞의 3개의 DB만 접근 가능

6. 기타 설정 사항
- 소켓 접속시 사용되는 socket 파일의 위치 (오토셋 설치 폴더\Server\temp\mysql.sock)
- MySQL 서버 설치 경로 (오토셋 설치 폴더\Server\mysql\)
- MySQL 데이터 보관 경로 (오토셋 설치 폴더\Server\mysql\data\)
- 에러 메시지 표시 언어 : 한국어

7. PHP 와 연동 시, 주의할 점
PhpMyAdmin 으로 확인하면, 분명 한글 데이터가 정상적으로 삽입되었지만
실제로 PHP 와 연동시, 한글 깨짐(물음표로 나오는 현상)이 나타나는 경우가 있습니다.

이것은 문자셋이 지정되지 않았기 때문에 발생한 것입니다.

mysql_connect 함수 호출 이후, mysql_query 함수를 이용하여
set names euckr 쿼리를 실행해보시기 바랍니다.
그러면, 한글이 정상적으로 나오게 됩니다.
관련된 예시가 4.2 버전대에는 홈 디렉토리(public_html)에 보시면,
"PHP_MySQL_Sample" 폴더가 있습니다.
해당 폴더의 PHP 코드는 DB 에 테이블 생성하고, 자료를 입력/출력하는 예제가 있습니다.
PHP와 MySQL 관련 작업시 참고하시면 좋겠습니다.

ANSI(EUC-KR)이 아닌 UTF-8로 PHP파일을 인코딩했고,
DB도 UTF-8문자셋을 사용하는데 한글이 제대로 표시되지 않는 경우에는
set name euckr; 대신에 set names utf-8; 을 실행해보시기 바랍니다.

<?php
$conn = mysql_connect ("localhost", "sa", "autoset");
mysql_query("set names euckr");
mysql_select_db("mydb_euckr");
?>

8. PHP 외, 다른 언어와 연동시... 혹은 MySQL 콘솔창에서 한글이 깨진다면?
7번과 같은 맥락의 문제입니다.
MySQL 접속 이후, 문자셋 쿼리(set names )를 실행함으로써 문자셋을 맞춰주시면 됩니다.

Trackback URL : http://blog.sorpyo.com/trackback/174

기본 컨섭은 
1. 클래스에서 DB 연동
2. 리스트를 가져와야 하는 클래스에서 배열로 데이타 저장후
    배열로 해당 내용을 메인 프로그램에서 받음.
3. DB 연결 종료
4. 필요항목에 해당 데이타를 뿌려줍니다.
(왜 이런짓을 하냐면요.. DB 연결시간을 조금이라도 줄일려고 하는^^:::)
먼저 메인 프로그램입니다.

<?php
include_once("./library/common/class.MySqlDbCon.php");
include_once("./library/common/class.BoardQuery.php");

$dbArray = array(); // 데이타 값을 받을 배열 선언

$dbclass = new MySqliDbCon("select"); // DB 연결 클래스 생성
$dbcon = $dbclass->connectDb();  // DB 연결
$boardclass = new BoardQuery($dbcon);  // DB 연결을 리스트를 가져올 클래스에 넘겨주면서 생성

$dbArray = $boardclass->queryTest();  // 리스트를  배열로 받아옴
$boardclass->boardClose(); // 연결 종료
$dbclass->closeDb();  // 연결 종료
?>

<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=euc-kr"/>
</head>
<body>
게시판이나 기타 내용 부분이 보이는 <br>
이미 DB 접속은 끊었음.
<?
for($i = 0; $i <10; $i++) {
    echo $dbArray['ID'][$i];
    echo $dbArray['CODE'][$i];    
    echo $dbArray['SIDO'][$i];
    echo $dbArray['GUGUN'][$i];
    echo $dbArray['DONG'][$i];
    echo "<br>";
}
?>

</body>
</html>

DB 연동 클래스 파일
<?php
class MySqliDbCon {
    private $dbServer;        // DB의 호스트
    private $dbUser;        // DB 접속 user
    private $dbPassword;    // DB 접속 패스워드
    private $dbName;        // DB 명

    private $dbLink;            // 접속 DB 인자
    private $disCon;        // DB 접속 해재 확인
    // Select 실행 DB 연결
    public function conDbSelect() {
        $this->dbServer = "localhost";
        $this->dbUser = "사용자 이름";
        $this->dbPassword = "사용자 비밀번호";
        $this->dbName = "DB 이름";
    }
    // Insert, Update, Delete 실행 DB 연결.
    public function conDbChange() {
        $this->dbServer = "localhost";
        $this->dbUser = "사용자 이름";
        $this->dbPassword = "사용자 비밀번호";
        $this->dbName = "DB 이름";
    }

    // DB 연결 함수
    public function connectDb() {
        $this->dbLink = new mysqli($this->dbServer,$this->dbUser,$this->dbPassword,$this->dbName);
        if (mysqli_connect_errno()) {
            printf("데이타베이스 접속실패 : %s\n", mysqli_connect_error());
            exit();
        } else {
            return $this->dbLink;
        }        
    }
    // DB 종결 함수
    public function closeDb() {    
        if (!mysqli_connect_errno()) {
            $this->dbLink->close();
            $this->disCon = "Y";
        }
    }
    // 생성자 : 리플리케이션 사용시 DB server 를 select 와 change(i,u,d) 로 구분하여 접속
    public function __construct($dmlType) {
        if ($dmlType == "select") {
            $this->conDbSelect();
            echo "조회용 DB";                //테스트용 구분
        } else if ($dmlType == "change") {
            $this->conDbChange();
            echo "조작용 DB";                //테스트용 구분
        }
    }

    // 소멸자
    public function __destruct(){   
        if($this->disCon != "Y") {
            $this->closeDb();
        }
    }

}
?>

리스트를 뽑아오는 클래스 파일입니다.
<?php
class BoardQuery {
    private $dbLink;            // 접속 DB 인자
    private $stmt;
    private $dbArray = array();
    private $disCon;        //  해재 확인

    public function queryTest() {
        if($this->stmt = $this->dbLink->prepare("select ID,CODE,SIDO,GUGUN,DONG from softpage_zip limit 10")) {
            $this->stmt->execute();

            $this->stmt->bind_result($col1, $col2, $col3,$col4,$col5);
            
            $i = 0;
            while ($this->stmt->fetch()) {
                $dbArray['ID'][$i] = $col1;
                $dbArray['CODE'][$i] = $col2;    
                $dbArray['SIDO'][$i] = $col3;
                $dbArray['GUGUN'][$i] = $col4;
                $dbArray['DONG'][$i] = $col5;
                $i ++;
            }
            return $dbArray;
        }
    }

    public function __construct($dbCon) {
        $this->dbLink = $dbCon;
    }

    // 소멸자
    public function __destruct(){   
            $this->boardClose();
    }

    public function boardClose(){   
        if($this->disCon != "Y") {
            $this->stmt->close();
            $this->disCon = "Y";
        }
    }
}
?>

상기와 같습니다. 
아래의 에러부분들은 다 처리하고 올립니다..  소멸자를 안 쓰자니 허전해서 구지 쓰면 좀더 걸리는 부분이 많네요.. 이 부분에 대해서도 고수님들의 조언이 필요합니다..

다들 보시고 지적해 주십시요..  이미 다른분들의 좋은 자료가 있으면..혼동을 막기 위해서 삭제 하겠습니다.


출처 : PHPSCHOOL

mssql isnull() 사용 -> mysql ifnull()

mysql에서는 ifnull('칼럼',0) 이런식으로 사용가능