2018.03.29 15:40 IT/MySQL

mysql order by field

testbl 이라는 테이블이 있다.


mysql> select * from testbl;

+-----+------+------+--------+

| sid | ssid | sort | status |

+-----+------+------+--------+

|   1 | aa   |   23 | e      |

|   2 | aa   |   11 | e      |

|   3 | aa   |   33 | e      |

|   4 | aa   |   32 | e      |

|   5 | bb   |   23 | a      |

|   6 | bb   |   67 | c      |

|   7 | bb   |   34 | a      |

|   8 | bb   |   77 | d      |

|   9 | cc   |   11 | a      |

|  10 | cc   |   22 | a      |

|  11 | cc   |   32 | d      |

|  12 | cc   |   23 | c      |

+-----+------+------+--------+

12 rows in set (0.00 sec)


이 테이블로 몇가지를 해볼 참이다.

일단, 우리가 흔히 쓰는 order by 로 나온 결과를 정렬 할때, 일정한 순서가 아닌 임의로 정한 순서대로 보여주려면 아래와 같이 하면 된다.


mysql> select * from testbl where sid in (3,4,1)  order by field (sid, 3, 4, 1);

+-----+------+------+--------+

| sid | ssid | sort | status |

+-----+------+------+--------+

|   3 | aa   |   33 | e      |

|   4 | aa   |   32 | e      |

|   1 | aa   |   23 | e      |

+-----+------+------+--------+

3 rows in set (0.00 sec)


order by field ( 컬럼명, "순서1", "순서2", .... ) 와 같은 방법으로 원하는 순서를 직접 지정 할 수 있다.


하지만, 이렇게 원하는 순서대로 뽑아내려는 때는 보통... 기존에 있던건 그대로 보여주고 원하는 결과만 위로 보여줘야 할때가 대부분일 것이다.(필자는 그랬다.)

그럴땐 union을 쓰면 된다. 


mysql> (select * from testbl where sid in (3,4,1)  order by field (sid, 3, 4, 1))

union 

(select * from testbl where sid < 9 );

+-----+------+------+--------+

| sid | ssid | sort | status |

+-----+------+------+--------+

|   1 | aa   |   23 | e      |

|   3 | aa   |   33 | e      |

|   4 | aa   |   32 | e      |

|   2 | aa   |   11 | e      |

|   5 | bb   |   23 | a      |

|   6 | bb   |   67 | c      |

|   7 | bb   |   34 | a      |

|   8 | bb   |   77 | d      |

+-----+------+------+--------+

8 rows in set (0.00 sec)


위의 쿼리문에서 union으로 조금 더 뽑아 와봤다. 그런데... 정렬이 엉망이다. 위에서 order by를 썼는데도 먹혀 있지도 않다. 그 이유는 "UNION은 레코드 집합을 순서 없이 만들게 되기 때문에 최종 결과에서 레코드들이 어떻게 나타나야 하는지 순서에 관해 아무것도 암시 하지 않는다." 라는.. 한마디로 union으로 합치면 순서는 멋대로 정해진다 라는 거다.

그래서 이럴때는 뽑아온 대상에 대해서 정렬을 해줘야 한다.


mysql> (select * from testbl where sid in (3,4,1)) 

union 

(select * from testbl where sid < 9 ) 

order by field (sid, 3, 4, 1);

+-----+------+------+--------+

| sid | ssid | sort | status |

+-----+------+------+--------+

|   5 | bb   |   23 | a      |

|   2 | aa   |   11 | e      |

|   8 | bb   |   77 | d      |

|   7 | bb   |   34 | a      |

|   6 | bb   |   67 | c      |

|   3 | aa   |   33 | e      |

|   4 | aa   |   32 | e      |

|   1 | aa   |   23 | e      |

+-----+------+------+--------+

8 rows in set (0.00 sec)


위처럼 해놓으면 3, 4, 1로 정렬 된 것이 보일 것이다. 하지만, 여전히 부족하다. 나머지 순서들이 엉망인데다가, 필자는 3, 4, 1이 맨 위에서 뽑혀지길 원했기 때문이다.

이럴때는 아래와 같이 하면 된다.


mysql> (select * from testbl where sid in (3,4,1)) 

union 

(select * from testbl where sid < 9 ) 

order by field (sid, 1, 4, 3) desc, sid;

+-----+------+------+--------+

| sid | ssid | sort | status |

+-----+------+------+--------+

|   3 | aa   |   33 | e      |

|   4 | aa   |   32 | e      |

|   1 | aa   |   23 | e      |

|   2 | aa   |   11 | e      |

|   5 | bb   |   23 | a      |

|   6 | bb   |   67 | c      |

|   7 | bb   |   34 | a      |

|   8 | bb   |   77 | d      |

+-----+------+------+--------+

8 rows in set (0.00 sec)


유의할점은 desc로 뽑아주기 때문에 기존에 3,4,1로 해놓았던 순서를 1,4,3으로 해놓아야 원하는 결과물을 얻을 수 있다는 거다.


뭐.. 공지사항 같은거 처리할때 꾀 쓸만할꺼 같다..



출처 : http://b1ix.net/93

Posted by 경제/부동산/프로그래머/안드로이드/PHP/mysql/asp 당양부부

2018.01.30 16:59 IT/MySQL

MyISAM, InnoDB 비교

MySQL의 MyISAM과 InnoDB를 비교해 드립니다.

        
 

1. MyISAM

 

 MyISAM은 ISAM(Indexed Sequential Access Method) 의 단점을 보완하기 위해 나온 업그레이드 버젼으로, 이 엔진은 비-트랜젝션-세이프(non-transactional-safe) 테이블을 관리합니다.

       

MyISAM은 후에 소개하는 InnoDB에 비하여 별다른 기능이 없으므로 데이터 모델 디자인이 단순하다는 것이 장점입니다.

따라서 전체적으로 속도가 InnoDB 보다 빠릅니다. 특히 Select 작업 속도가 빠르므로 읽기 작업에 적합합니다!

Full-text 인덱싱이 가능하여 검색하고자 하는 내용에 대한 복합검색이 가능하답니다.

       

But! 그러나 데이터 무결성에 대한 보장이 되지 않습니다. MyISAM을 쓸 때의 무결성은 개발자나 DBA가 해야 합니다 ㅠ_ㅠ
또한 트랜잭션에 대한 지원이 없기 때문에 작업도중 문제가 생겨도 이미 작성된 내용들은 DB로 쏙 들어가버립니다.

가장 강조되는 단점으로는 Table-level Lock을 사용하기 때문에 쓰기 작업(INSERT, UPDATE) 속도가 느립니다.

변경을 많이 요하는 작업이라면 Table 단위의 Lock을 사용하는 MyISAM의 사용을 권하지 않습니다.

이렇게 기능이 없다니… 빠르기라도 해야겠네영!

       

따라서 MyISAM의 사용이 적합한 곳은 트랜잭션 처리가 불필요하며,

위에서 언급한 것 처럼 Select의 속도가 빠르므로 주로 조회작업이 많은 경우에 사용됩니다.

     

   

2. InnoDB

       

MyISAM과는 달리 InnoDB는 트랜잭션을 지원하므로 트랜잭션-세이프 스토리지 엔진에 해당됩니다.

Commit, Rollback, 장애복구, row-level locking, 외래키 등 다양한 기능을 지원합니다!

MyISAM의 부족했던 기능에 실망했던 사람들이라면 InnoDB로 갈아탔겠죠?

        

InnoDB의 장점을 살펴보면, 우선 데이터 무결성에 대한 보장이 됩니다.

제약조건, 외래 키의 생성이 가능하며, 동시성 제어가 가능합니다.

특히 MyISAM이 Table 단위의 Lock이었다면 InnoDB는 Row-level Lock (행 단위 Lock) 을 사용하기 때문에

변경 작업(INSERT, UPDATE, DELETE)에 대한 속도가 빠르다는 것이 큰 장점입니다.

       

그러나, 이렇게 여러가지 기능을 제공하다보니 InnoDB의 데이터 모델 디자인에는 많은 시간이 필요합니다.

또한 시스템 자원을 많이 사용한다는 단점 또한 가지고 있습니다. Full-text 인덱싱이 불가능하다는 것 역시 단점으로 보여집니다.

       

InnoDB의 경우는 트랜잭션 처리가 필요한 작업을 수행하며, 데이터 입력 및 수정과 같이 변경이 빈번한!

높은 퍼포먼스를 요구하는 대용량 사이트 등에서 효율적으로 사용될 수 있습니다.

       

        
이 두 종류의 DB를 함께 사용할 수 있을까요?

물론 함께 사용할 수는 있습니다. 하지만 백업 방법에 차이가 있어,

백업이 번거로워지고 Lock에 대한 Level이 다르기 때문에 사용에 문제가 생길 수 있다고 봅니다.


 

위의 내용을 표로 정리해봅시당

  

  

MyISAM

InnoDB

출시일자

더 먼저 출시됨 

이후에 출시 됨 

구조의 복잡성

지원하는 기능이 별로 없어서

구조가 단순하다.

  

외래키, 제약조건, 동시성 제어 등

다양한 기능 지원으로 구조가 복잡. 

기능 지원

Full-text 인덱싱 가능 

외래 키, 제약 조건, 동시성 제어,

트랜잭션 등에 대한 지원!

  

Lock의 단위

Table Level-Lock 

Row Level-Lock 

복구 능력

나쁨 

좋음 



출처 : http://ojava.tistory.com/25

Posted by 경제/부동산/프로그래머/안드로이드/PHP/mysql/asp 당양부부

1. 기존 Procedure 확인하기


show procedure status;


 


2. definer 변경하기


update mysql.proc set definer='username@%' where db = 'dbname';


Posted by 경제/부동산/프로그래머/안드로이드/PHP/mysql/asp 당양부부

1 테이블 검색.


select * from INFORMATION_SCHEMA.tables 

where table_schema='계정명';

 → show tables;


2. 컬럼 검색.

select * from INFORMATION_SCHEMA.columns 

where table_schema='계정명' 

and table_name='테이블명' 

order by ordinal_position;

 →  show full columns from 테이블명;


3. 컬럼명 한줄로 합치기.

select GROUP_CONCAT(column_name, ' ') from INFORMATION_SCHEMA.columns 

where table_schema='계정명' 

and table_name='테이블명' 


만약 GROUP_CONCAT size 문제로 데이터가 잘릴 경우

  3.1. GROUP_CONCAT size 조회.

  show variables like 'group_concat_max_len';


  3.2. GROUP_CONCAT size 설정.

  SET @@group_concat_max_len = 2048 ; 



Posted by 경제/부동산/프로그래머/안드로이드/PHP/mysql/asp 당양부부

2017.01.31 10:30 IT/MySQL

Mysql db_helper

<?php

    // DATABASE 접속객체

    $_DB = false;


    /**

     * 데이터베이스에 접속한다.

     */

    function db_open()

    {

        // 함수 밖에서 정의된 변수에 접근할 수 있도록 설정.

        global $_DB;


        /* 데이터베이스에 접속하기 위한 정보 정의하기 */

        $db_hostname = 'localhost';

        $db_database = 'testdb';

        $db_username = 'root';

        $db_password = 'root';

        $db_portnumber = 3306;

        $db_charset = 'utf8';


        /* 데이터베이스 접속 처리 */

        if ($_DB === false) {

            $_DB = @mysqli_connect($db_hostname, $db_username, $db_password,

                $db_database, $db_portnumber);


            // 에러가 존재한다면?

            if (mysqli_connect_errno()) {

                // 에러메시지 출력하기

                printf("<div style='padding: 15px; margin: 10px;

                            border: 1px solid #dca7a7; border-radius: 4px;

                            color: #a94442; background-color: #f2dede;'>

                        <strong>[Error: %d]</strong> %s</div>",

                        mysqli_connect_errno(), mysqli_connect_error());

                // 웹 페이지 실행중단

                exit();

            } else {

                // 케릭터셋 설정하기

                @mysqli_set_charset($_DB, $db_charset);

            }

        }

    }


    /**

     * 데이터베이스 접속을 해제한다.

     */

    function db_close()

    {

        global $_DB;


        if ($_DB !== false) {

            /* 접속 해제 */

            @mysqli_close($_DB);

        }

    }


    /**

     * SQL구문을 실행한 후 결과를 리턴한다.

     *

     * @param   $sql    - SQL구문의 템플릿. 변수로 치환할 곳은 %s, %d등의 이스케이프 문자를 사용한다.

     * @param   $params - $sql변수 내의 이스케이프 문자를 치환하기 위한 배열.

     *

     * @return 1) SQL구문에 에러가 있는 경우 FALSE가 리턴된다.

     *            2) SELECT문을 실행한 경우 -> 조회결과가 배열로 변환되어 리턴된다.

     *            3) INSERT문을 실행한 경우 -> 자동증가 일련번호값이 리턴된다.

     *            4) UPDATE,DELETE 문을 실행한 경우 -> 영향을 받은 행의 수가 리턴된다.

     */

    function db_query($sql, $params)

    {

        global $_DB;


        // 파라미터가 배열로 전달된 경우 배열의 각 요소에 SQL 특수문자 처리

        if (is_array($params)) {

            for ($i = 0; $i < count($params); ++$i) {

                $params[$i] = mysqli_real_escape_string($_DB, $params[$i]);

            }

            $sql = vsprintf($sql, $params);

        }


        // 쿼리 실행

        $result = @mysqli_query($_DB, $sql);


        // 에러 체크

        if (mysqli_errno($_DB)) {

            printf("<div style='padding: 15px; margin: 10px;

                        border: 1px solid #dca7a7; border-radius: 4px;

                        color: #a94442; background-color: #f2dede;'>

                    <strong>[SQL Error: %d]</strong> %s

                    <blockquote style='padding: 0 0 0 5px; margin: 10px 0 0 5px;

                        border-left: 3px solid #dca7a7'>

                        <i><small>%s</small></i></blockquote></div>",

                    mysqli_errno($_DB), mysqli_error($_DB), $sql);


            return false;

        }


        // SQL 구문 종류 분석

        $query_type = substr(strtolower(trim($sql)), 0, 6);


        // 구분 종류에 따라서 처리결과를 생성한다.

        $value = false;


        switch ($query_type) {

            case 'insert':

                // 자동증가 일련번호 값 리턴하기

                $value = mysqli_insert_id($_DB);

                break;

            case 'delete':

            case 'update':

                // 영향을 받은 행의 수 리턴하기

                $value = mysqli_affected_rows($_DB);

                break;

            case 'select':

                // 조회결과를 배열로 변환하여 리턴

                // MYSQLI_ASSOC, MYSQLI_NUM, MYSQLI_BOTH

                $value = mysqli_fetch_all($result, MYSQLI_ASSOC);

                break;

        }


        // 처리결과 리턴

        return $value;

    }

?>

Posted by 경제/부동산/프로그래머/안드로이드/PHP/mysql/asp 당양부부

오늘은 MySQL 내장 함수, 숫자 함수, 문자 함수에 대해 포스팅 합니다.


1. 숫자 관련 함수 

  - ABS(숫자) - 절대값 출력. 

  - CEILING(숫자) - 값보다 큰 정수 중 가장 작은 수. 

  - FLOOR(숫자) - 값보다 작은 정수 중 가장 큰 수[실수를 무조건 버림(음수일 경우는 제외)]. 

  - ROUND(숫자,자릿수) - 숫자를 소수점 이하 자릿수에서 반올림.(자릿수는 양수,0,음수를 갖을 수 있다.) 

  - TRUNCATE(숫자,자릿수) - 숫자를 소수점 이하 자릿수에서 버림. 

  - POW(X,Y) or POWER(X,Y) - X의 Y승 

  - MOD (분자, 분모) - 분자를 분모로 나눈 나머지를 구한다.(연산자 %와 같음) 

  - GREATEST(숫자1,숫자2,숫자3...) - 주어진 수 중 제일 큰 수 리턴. 

  - LEAST(숫자1,숫자2,숫자3...) - 주어진 수 중 제일 작은 수 리턴. 

  - INTERVAL(a,b,c,d.....) - a(숫자)의 위치 반환 


2. 문자 관련 함수 

  - ASCII(문자) - 문자의 아스키 코드값 리턴. 

  - CONCAT('문자열1','문자열2','문자열3'...) - 문자열들을 이어준다. 

  - INSERT('문자열','시작위치','길이','새로운문자열') - 문자열의 시작위치부터 길이만큼 새로운 문자열로 대치 

  - REPLACE('문자열','기존문자열','바뀔문자열') - 문자열 중 기존문자열을 바뀔 문자열로 바꾼다. 

  - INSTR('문자열','찾는문자열') - 문자열 중 찾는 문자열의 위치값을 출력 

  - LEFT('문자열',개수) - 문자열 중 왼쪽에서 개수만큼을 추출.

  - RIGHT('문자열',개수) - 문자열 중 오른쪽에서 개수만큼을 추출. 

  - MID('문자열',시작위치,개수) - 문자열 중 시작위치부터 개수만큼 출력 

  - SUBSTRING('문자열',시작위치,개수) - 문자열 중 시작위치부터 개수만큼 출력 

  - LTRIM('문자열') - 문자열 중 왼쪽의 공백을 없앤다. 

  - RTRIM('문자열') - 문자열 중 오른쪽의 공백을 없앤다. 

  - TRIM('문자열') - 양쪽 모두의 공백을 없앤다. 

  - LCASE('문자열') or LOWER('문자열') - 소문자로 바꾼다. 

  - UCASE('문자열') or UPPER('문자열') - 대문자로 바꾼다. 

  - REVERSE('문자열') - 문자열을 반대로 나열한다. 


3. 논리 관련 함수 

  - IF(논리식,참일 때 값,거짓일 때 값) - 논리식이 참이면 참일 때 값을 출력하고 논리식이 거짓이면 거짓일 때 출력한다. 

  - IFNULL(값1,값2) - 값1이 NULL 이면 값2로 대치하고 그렇지 않으면 값1을 출력 


4. 집계 함수 

  - COUNT(필드명) - NULL 값이 아닌 레코드 수를 구한다. 

  - SUM(필드명) - 필드명의 합계를 구한다. 

  - AVG(필드명) - 각각의 그룹 안에서 필드명의 평균값을 구한다. 

  - MAX(필드명) - 최대값을 구한다. 

  - MIN(필드명) - 최소값을 구한다. 


5. 날짜 관련 함수 

  - NOW() or SYSDATE() or CURRENT_TIMESTAMP() - 현재 날짜와 시간 출력 

  - CURDATE() or CURRENT_DATE() -현재 날짜 출력 

  - CURTIME() or CURRENT_TIME() -현재 시간 출력 

  - DATE_ADD(날짜,INTERVAL 기준값) -날짜에서 기준값 만큼 더한다. 

※ 기준값 : YEAR, MONTH, DAY, HOUR, MINUTE, SECOND 

  - DATE_SUB(날짜,INTERVAL 기준값) -날짜에서 기준값 만큼 뺸다. 

※ 기준값 : YEAR, MONTH, DAY, HOUR, MINUTE, SECOND 

  - YEAR(날짜) -날짜의 연도 출력. 

  - MONTH(날짜) -날짜의 월 출력. 

  - MONTHNAME(날짜) -날짜의 월을 영어로 출력. 

  - DAYNAME(날짜) -날짜의 요일일 영어로 출력. 

  - DAYOFMONTH(날짜) -날짜의 월별 일자 출력. 

  - DAYOFWEEK(날짜) -날짜의 주별 일자 출력(월요일(0),화요일(1)...일요일(6)) 

  - WEEKDAY(날짜) -날짜의 주별 일자 출력(월요일(0),화요일(1)...일요일(6)) 

  - DAYOFYEAR(날짜) -일년을 기준으로 한 날짜까지의 날 수. 

  - WEEK(날짜) -일년 중 몇 번쨰 주. 

  - FROM_DAYS(날 수) --00년 00월 00일부터 날 수 만큼 경과한 날의 날짜 출력. 

  - TO_DAYS(날짜) --00 년 00 월 00일 부터 날짜까지의 일자 수 출력. 

  - DATE_FORMAT(날짜,'형식') : 날짜를 형식에 맞게 출력 


감사합니다.


'IT > MySQL' 카테고리의 다른 글

MySQL 테이블 정보 및 테이블 컬럼 가져오기. 컬럼 합치기.  (0) 2018.01.16
Mysql db_helper  (0) 2017.01.31
MySQL 내장 함수. 숫자 함수, 문자 함수.  (0) 2017.01.20
Mysql 세자리 콤마 찍기.  (0) 2016.11.16
Mysql 수학 함수  (0) 2016.11.03
mysqlbinlog query 보기  (0) 2016.07.15
Posted by 경제/부동산/프로그래머/안드로이드/PHP/mysql/asp 당양부부

MySQL 세자리 콤마 필요시 FORMAT 함수를 이용.

FORMAT(컬럼명, 소수점이하 자리수)


SELECT FORMAT(price , 0) FROM product;



'IT > MySQL' 카테고리의 다른 글

Mysql db_helper  (0) 2017.01.31
MySQL 내장 함수. 숫자 함수, 문자 함수.  (0) 2017.01.20
Mysql 세자리 콤마 찍기.  (0) 2016.11.16
Mysql 수학 함수  (0) 2016.11.03
mysqlbinlog query 보기  (0) 2016.07.15
Mysql Binary log(bin log).  (0) 2016.07.15
Posted by 경제/부동산/프로그래머/안드로이드/PHP/mysql/asp 당양부부

2016.11.03 10:06 IT/MySQL

Mysql 수학 함수

ABS(X)

X의 절대 값을 리턴한다.

mysql> SELECT ABS(2);

        -> 2

mysql> SELECT ABS(-32);

        -> 32

이 함수는 BIGINT 값과 함께 사용하는 것이 안전하다. 

ACOS(X)

X의 아크 코사인(arc cosine) 값을 리턴한다. 즉, 코사인이 X인 값을 

리턴한다. 만일 X 가 -1 에서 1 사이의 범위에 있지 않으면, NULL을 

리턴한다.

mysql> SELECT ACOS(1);

        -> 0

mysql> SELECT ACOS(1.0001);

        -> NULL

mysql> SELECT ACOS(0);

        -> 1.5707963267949 

ASIN(X)

X 의 아크 사인 값(arc sine)을 리턴 한다. 즉 사인 값이 X인 값. 

만일 X 가 -1 에서 1 사이의 범위에 있지 않으면, NULL을 리턴 한다.

mysql> SELECT ASIN(0.2);

        -> 0.20135792079033

mysql> SELECT ASIN('foo');

 

+-------------+

| ASIN('foo') |

+-------------+

|           0 |

+-------------+

1 row in set, 1 warning (0.00 sec)

 

mysql> SHOW WARNINGS;

 

+---------+------+-----------------------------------------+

 

| Level   | Code | Message                                 |

 

+---------+------+-----------------------------------------+

 

| Warning | 1292 | Truncated incorrect DOUBLE value: 'foo' |

 

+---------+------+-----------------------------------------+

 

ATAN(X)

Returns the arc tangent of X의 아크 탄젠트(arc tangent) 값을 리턴한다. 

즉, 탄젠트가 X인 값.

mysql> SELECT ATAN(2);

        -> 1.1071487177941

mysql> SELECT ATAN(-2);

        -> -1.1071487177941 

ATAN(Y,X), ATAN2(Y,X)

두 변수 X 와 Y의 아크 탄젠트 값을 리턴한다. 이것은 Y / X의 아크 탄젠트 

값을 계산하는 방식과 유사하지만, 두 인수의 부호는 결과에 대한 쿼드런트 

(quadrant)를 알아내기 위해 사용된다는 점은 틀리다.

mysql> SELECT ATAN(-2,2);

        -> -0.78539816339745

mysql> SELECT ATAN2(PI(),0);

        -> 1.5707963267949 

CEILING(X), CEIL(X)

X 보다는 작지 않은 가장 작은 정수 값을 리턴한다.

mysql> SELECT CEILING(1.23);

        -> 2

mysql> SELECT CEIL(-1.23);

        -> -1 

위의 두 함수는 동일한 것이다. 리턴 값은 BIGINT으로 변환된다는 

점은 알아 두자. 

COS(X)

X 의 코사인 값을 리턴 하는데, 여기에서 X 는 레디안(radian)으로 

주어진다.

mysql> SELECT COS(PI());

        -> -1 

COT(X)

X 의 코 탄젠트 값을 리턴한다.

mysql> SELECT COT(12);

        -> -1.5726734063977

mysql> SELECT COT(0);

        -> NULL 

CRC32(expr)

싸이클릭 리던던시 체크 값 (cyclic redundancy check value)을 계산한 

다음에 32-비트 부호화되지 않은 값을 리턴한다. 인수가 NULL이면 NULL

을 리턴한다. 인수는 스트링 값이 되어야 한다.

mysql> SELECT CRC32('MySQL');

        -> 3259397556

mysql> SELECT CRC32('mysql');

        -> 2501908538 

DEGREES(X)

인수 X를 리턴하는데, 레디안에서 차수 (degree)로 변경된 값이 나온다.

mysql> SELECT DEGREES(PI());

        -> 180

mysql> SELECT DEGREES(PI() / 2);

        -> 90 

EXP(X)

X 의 제곱에 대한 e (자연 로그 근) 값을 리턴한다.

mysql> SELECT EXP(2);

        -> 7.3890560989307

mysql> SELECT EXP(-2);

        -> 0.13533528323661

mysql> SELECT EXP(0);

        -> 1 

FLOOR(X)

X 보다 크지 않은 정수 중에 가장 큰 값을 리턴 한다.

mysql> SELECT FLOOR(1.23);

        -> 1

mysql> SELECT FLOOR(-1.23);

        -> -2 

리턴 값이 BIGINT로 변환 된다는 점을 알아 두자. 

FORMAT(X,D)

숫자 X 의 형태를 '#,###,###.##'로 변경 시키고, D 자릿수 위치에서 

절사를 한 다음에, 그 결과를 스트링으로 리턴한다. 보다 자세한 

사항은, Section 12.3, “스트링 함수”를 참조할 것. 

LN(X)

X의 자연 로그를 리턴한다; 즉, X의 베이스-e 로그.

mysql> SELECT LN(2);

        -> 0.69314718055995

mysql> SELECT LN(-2);

        -> NULL 

이 함수는 LOG(X)과 동의어 이다.

LOG(X), LOG(B,X)

만일 하나의 파라미터를 사용해서 호출이 되면, 이 함수는 X의 자연 

로그를 리턴한다.

mysql> SELECT LOG(2);

        -> 0.69314718055995

mysql> SELECT LOG(-2);

        -> NULL 

만일 두 개의 파라미터를 사용해서 호출을 하면, 이 함수는 부정 베이스 

(arbitrary base) B 에 대한 X의 자연 로그를 리턴 한다.

mysql> SELECT LOG(2,65536);

        -> 16

mysql> SELECT LOG(10,100);

        -> 2 

LOG(B,X)는 LOG(X) / LOG(B)과 동의어 이다. 

LOG2(X)

X의 베이스-e 로그를 리턴한다.

mysql> SELECT LOG2(65536);

        -> 16

mysql> SELECT LOG2(-100);

        -> NULL

 

LOG2()는 스토리지용으로 필요한 비트의 수가 얼마나 되는지를 알아 

보는데 유용하다. 이 함수는 LOG(X) / LOG(2)과 동일하다. 

LOG10(X)

X의 베이스-10 로그를 리턴한다.

mysql> SELECT LOG10(2);

        -> 0.30102999566398

mysql> SELECT LOG10(100);

        -> 2

mysql> SELECT LOG10(-100);

        -> NULL

 

LOG10(X)는 LOG(10,X)과 동일하다. 

MOD(N,M), N % M, N MOD M

모듈러 연산. M으로 나누어진 N의 나머지를 리턴한다.

mysql> SELECT MOD(234, 10);

        -> 4

mysql> SELECT 253 % 7;

        -> 1

mysql> SELECT MOD(29,9);

        -> 2

mysql> SELECT 29 MOD 9;

        -> 2

 

이 함수는 BIGINT 값과 함께 사용할 수가 있다. 

MOD()는 분수를 가지고 있는 값에서도 동작을 하며 나눗셈을 

한 다음에 정확히 나머지 값을리턴한다:

mysql> SELECT MOD(34.5,3);

        -> 1.5 

PI()

π (pi) 값을 리턴 한다. 출력되는 기본 자릿수는 7 자리이지만, 

MySQL은 내부적으로는 전 이중 정밀도(full double-precision)

값을 사용한다.

mysql> SELECT PI();

        -> 3.141593

mysql> SELECT PI()+0.000000000000000000;

        -> 3.141592653589793116

 

POW(X,Y), POWER(X,Y)

Y 제곱이 된 X 값을 리턴한다.

mysql> SELECT POW(2,2);

        -> 4

mysql> SELECT POW(2,-2);

        -> 0.25 

RADIANS(X)

각도를 레디안으로 변경한 인수 X를 리턴한다. (π 레디안은 180 도와 

동일하다.)

mysql> SELECT RADIANS(90);

        -> 1.5707963267949 

RAND(), RAND(N)

0 과 1 사이의 무작위 부정 소수점 값 v 를 리턴한다 (즉, 0 <= v <= 1.0 

사이의 범위). 만일 정수 인수 N이 지정 되었다면, 이것은 시드 값

(seed value)로 사용되며, 반복 시퀀스를 만들어 낸다.

mysql> SELECT RAND();

        -> 0.9233482386203

mysql> SELECT RAND(20);

        -> 0.15888261251047

mysql> SELECT RAND(20);

        -> 0.15888261251047

mysql> SELECT RAND();

        -> 0.63553050033332

mysql> SELECT RAND();

        -> 0.70100469486881

mysql> SELECT RAND(20);

        -> 0.15888261251047

 

i <= R <= j 범위에서 임의적으로 정수 R 을 얻기 위해서는, 수식 

FLOOR(i + RAND() * (j – i)을 사용한다. 

예를 들면, 1에서 12 사이의 범위에서 임의의 정수를 얻고자 한다면, 

아래의 명령문을 사용하면 된다: 

SELECT FLOOR(7 + (RAND() * 5));

ORDER BY 구문에서는 RAND() 값을 사용하는 컬럼을 사용할 수가 

없는데, 그 이유는 ORDER BY가 그 컬럼을 여러 번 계산하기 때문이다. 

하지만, 아래와 같이 무작위로 열을 추출할 수는 있다:

 

mysql> SELECT * FROM tbl_name ORDER BY RAND();

LIMIT과 결합이 된 ORDER BY RAND()는 열로 이루어진 셋에서 무작위 

샘플을 선택하는 경우에 유용하게 사용할 수가 있다: 

mysql> SELECT * FROM table1, table2 WHERE a=b AND c<d 

-> ORDER BY RAND() LIMIT 1000;

WHERE 구문에 있는 RAND()는 WHERE 구문이 실행될 때마다 반복적으로 

계산된다는 점을 알아 두기 바란다. 

RAND()는 완벽한 무작위 제너레이터는 아니지만, 동일 MySQL 버전을 

사용하고 있는 플랫폼간에 이식성이 있는 ad hoc 랜덤 숫자를 만들기

에는 속도가 빠른 방식이다. 

ROUND(X), ROUND(X,D)

인수 X를 리턴 하는데, 이때에는 이와 가장 가까운 정수로 절사가 된다.

두 개의 인수를 사용하면, D 자릿수에서 절사가 된 X 가 리턴 된다. 

D 는 음수로 표시될 수도 있는데, 이렇게 하면 소수점에서 왼쪽으로 

D 자리에 있는 X 의 값이 0 이 된다.

mysql> SELECT ROUND(-1.23);

        -> -1

mysql> SELECT ROUND(-1.58);

        -> -2

mysql> SELECT ROUND(1.58);

        -> 2

mysql> SELECT ROUND(1.298, 1);

        -> 1.3

mysql> SELECT ROUND(1.298, 0);

        -> 1

mysql> SELECT ROUND(23.298, -1);

        -> 20 

리턴 타입은 첫 번째 인수와 같은 타입이 된다. 이것은 정수 인수의 

경우에는, 그 결과가 정수 (소수점이 없는)가 된다는 것을 의미하는 

것이다. 

MySQL 5.0.3 이전에는, 인수가 두 개의 정수 사이의 절반에 해당될 

때 ROUND()는 C 라이브러리의 실행에 따라서 값을 리턴 했다. 이 

방식은 항상 반올림, 잘라냄, 0으로 만들기와 같은 방식을 취했다. 

만일 한 가지 방식의 절사 (rounding) 방식만을 사용하고자 할

경우에는 TRUNCATE() 또는 FLOOR()와 같은 함수를 대신 

사용하는 것이 좋다. MySQL 5.0.3 이후에는, ROUND()는 

첫 번째 인수가 10진수 값일 경우에는 정확한 인수 값을 

얻기 위해서 정밀도 수학 라이브러리(precision math library)를 

사용한다: 

정확한 숫자를 얻기 위해서, ROUND()는 “반올림 (round half up)” 

또는 “가장 가까운 값으로 절사 (round toward nearest)” 규칙을 

사용한다: 어떤 수의 소수점 이하 부분이 .5 보다 크거나 같을 경우

에는, 그 수가 양수라면 바로 다음의 정수로, 그 수가 음수일 경우에는, 

바로 이전 정수로 절사 (round)를 한다 (즉, 소수 부분을 0 으로 만든다). 

소수점 이하의 숫자가 .5보다 작을 경우에는, 그 수가 양수라면 바로 

이전 정수로, 음수일 경우에는 바로 다음 정수로 된다. 

추정 값 숫자에 대해서는, C 라이브러리에 따라서 그 결과가 나온다. 

대부분의 시스템에서는, ROUND()가 "가장 근접한 짝수로 절사 

(round to nearest even)" 규칙을 사용한다: 소수점 이하 부분이 있는 

값은 가장 근접한 정수로 된다. 

아래의 예문은 정확한 값과 추정 값을 어떻게 서로 다르게 라운딩 (rounding)

하는지를 보여준다:

mysql> SELECT ROUND(2.5), ROUND(25E-1);

+------------+--------------+

| ROUND(2.5) | ROUND(25E-1) |

+------------+--------------+

| 3          |            2 |

+------------+--------------+

보다 자세한 정보는, Chapter 21, Precision Math를 참고한다. 

SIGN(X)

인수의 부호를 -1, 0, 또는 1로 리턴 하는데, 여기에서 리턴 되는 숫자는 

각각 음수, 0, 양수를 나타내는 것이다.

mysql> SELECT SIGN(-32);

        -> -1

mysql> SELECT SIGN(0);

        -> 0

mysql> SELECT SIGN(234);

        -> 1

SIN(X)

래디안으로 주어진 X의 싸인(sin) 값을 리턴 한다.

mysql> SELECT SIN(PI());

        -> 1.2246063538224e-16

mysql> SELECT ROUND(SIN(PI()));

        -> 0

SQRT(X)

음수가 아닌 X의 제곱 루트(square root) 값을 리턴한다.

mysql> SELECT SQRT(4);

        -> 2

mysql> SELECT SQRT(20);

        -> 4.4721359549996

mysql> SELECT SQRT(-16);

        -> NULL  

TAN(X)

래디안으로 주어진 X의 탄젠트 값을 리턴한다.

mysql> SELECT TAN(PI());

        -> -1.2246063538224e-16

mysql> SELECT TAN(PI()+1);

        -> 1.5574077246549 

TRUNCATE(X,D)

숫자 X를 D 자릿수 뒤의 숫자를 없앤 후 리턴한다. 만일 D가 0 이면, 

리턴되는 숫자는 소수점 또는 소수 부분이 없게 된다. D는 음수로 

표시할 수도 있는데, 이렇게 표시하면 숫자 X의 D 자리로부터 왼쪽 

부분이 0으로 표시가 된다.

mysql> SELECT TRUNCATE(1.223,1);

        -> 1.2

mysql> SELECT TRUNCATE(1.999,1);

        -> 1.9

mysql> SELECT TRUNCATE(1.999,0);

        -> 1

mysql> SELECT TRUNCATE(-1.999,1);

        -> -1.9

mysql> SELECT TRUNCATE(122,-2);

       -> 100

mysql> SELECT TRUNCATE(10.28*100,0);

       -> 1028

'IT > MySQL' 카테고리의 다른 글

MySQL 내장 함수. 숫자 함수, 문자 함수.  (0) 2017.01.20
Mysql 세자리 콤마 찍기.  (0) 2016.11.16
Mysql 수학 함수  (0) 2016.11.03
mysqlbinlog query 보기  (0) 2016.07.15
Mysql Binary log(bin log).  (0) 2016.07.15
mysql 여러가지 작업(optimize, Mornitoring 등).  (0) 2016.05.09
Posted by 경제/부동산/프로그래머/안드로이드/PHP/mysql/asp 당양부부


[MySQL Program] mysqlbinlog


 앱으로 보기 본문 기타 기능

mysqlbinlog 프로그램은 어려운 부분은 아니다. 하지만 간과하기 쉬운 몇가지가 있어서 좀 생각하고 넘어가는게 좋을 것 같다.

mysqlbinlog 프로그램을 사용한다는 것은 binary-log format, relay-log format, statement-based format, row-based format, Point-In-Time recovery 와 같은 주제들에 모두 관심을 갖는다는 의미라서 중요하다.

Section 5.2.4, “The Binary Log”

Section 17.2.4, “Replication Relay and Status Logs”

Section 17.2.1, “Replication Formats”

Section 7.5, “Point-in-Time (Incremental) Recovery Using the Binary Log”

MySQL Internals: The Binary Log (19.7 Event Structure, 19.6 Event Meanings, 19.9 Event Data for Specific Event Types)



[용도]

mysqlbinlog 프로그램은 보통 두 가지 용도로 사용한다.

1. 추적

데이터에 문제가 발생하거나 마스터 슬레이브간 불일치가 발생하거나 어떤 트랜잭션이 문제가 되었거나 등 어떤 문제가 발생했을 때

write 쿼리에 대해 추적할 수 있는 기능을 제공한다.

복제를 위해 또는 이런 증거를 남기기 위해 binary log를 활성화 시켰다면 mysqlbinlog 프로그램으로 Statement 형태로 변환해서 볼 수 있게 된다.

2. 복구

MySQL의 백업정책은 회사마다 다르겠지만 보통 하루 한번은 full backup을 할 것이다.

이때 full backup만 가지고 복구해서 해결되면 다행이지만 그렇지 않은 경우 binary log를 적용하여 PIT recovery를 수행해야한다.

시점은 datetime일 수도 있고 sequence number 일수도 있다.


[사용법]

shell> mysqlbinlog [options] binlog.0000003


[결과파일]

# at 141 (해당 이벤트의 시작 포지션)

#100309  9:28:36 server id 123  end_log_pos 245 (로그 남은 시간, server id, 끝나는 포지션)

  Query thread_id=3350  exec_time=11  error_code=0 (thread id, 수행시간 등)

 


Statement는 사실 그냥 우리가 알아볼수 있는 쿼리형태라서 따로 설명이 필요 없다.

Row-Based Event 에 대해서만 잠시 살펴보겠다.

이벤트 타입은 3가지로 기록된다. (WRITE_ROWS_EVENT, UPDATE_ROWS_EVENT, DELETE_ROWS_EVENT)


(원본쿼리 예제)

CREATE TABLE t

(

  id   INT NOT NULL,

  name VARCHAR(20) NOT NULL,

  date DATE NULL

) ENGINE = InnoDB;


START TRANSACTION;

INSERT INTO t VALUES(1, 'apple', NULL);

UPDATE t SET name = 'pear', date = '2009-01-01' WHERE id = 1;

DELETE FROM t WHERE id = 1;

COMMIT;

 


(결과1) mysqlbinlog 로 본 결과

Statement-Based와는 달리 알아보기 힘들게 되어 있다.

예제에 따라 Write_rows, Update_rows, Delete_rows 이벤트로 나뉘는 걸 확인 할 수 있다.

shell> mysqlbinlog log_file

...

# at 218

#080828 15:03:08 server id 1  end_log_pos 258   Write_rows: table id 17 flags: STMT_END_F


BINLOG '

fAS3SBMBAAAALAAAANoAAAAAABEAAAAAAAAABHRlc3QAAXQAAwMPCgIUAAQ=

fAS3SBcBAAAAKAAAAAIBAAAQABEAAAAAAAEAA//8AQAAAAVhcHBsZQ==

'/*!*/;

...

# at 302

#080828 15:03:08 server id 1  end_log_pos 356   Update_rows: table id 17 flags: STMT_END_F


BINLOG '

fAS3SBMBAAAALAAAAC4BAAAAABEAAAAAAAAABHRlc3QAAXQAAwMPCgIUAAQ=

fAS3SBgBAAAANgAAAGQBAAAQABEAAAAAAAEAA////AEAAAAFYXBwbGX4AQAAAARwZWFyIbIP

'/*!*/;

...

# at 400

#080828 15:03:08 server id 1  end_log_pos 442   Delete_rows: table id 17 flags: STMT_END_F


BINLOG '

fAS3SBMBAAAALAAAAJABAAAAABEAAAAAAAAABHRlc3QAAXQAAwMPCgIUAAQ=

fAS3SBkBAAAAKgAAALoBAAAQABEAAAAAAAEAA//4AQAAAARwZWFyIbIP

'/*!*/;


(결과2) --vervose 옵션을 1개 사용

이제는 좀 알아보기 편하게 되었다. 매칭되는 컬럼의 개수와 값을 알 수 있다.

shell> mysqlbinlog -v log_file

or

shell> mysqlbinlog -v --base64-output=DECODE-ROWS log_file

...

# at 218

#080828 15:03:08 server id 1  end_log_pos 258   Write_rows: table id 17 flags: STMT_END_F


BINLOG '

fAS3SBMBAAAALAAAANoAAAAAABEAAAAAAAAABHRlc3QAAXQAAwMPCgIUAAQ=

fAS3SBcBAAAAKAAAAAIBAAAQABEAAAAAAAEAA//8AQAAAAVhcHBsZQ==

'/*!*/;

### INSERT INTO test.t

### SET

###   @1=1

###   @2='apple'

###   @3=NULL

...

# at 302

#080828 15:03:08 server id 1  end_log_pos 356   Update_rows: table id 17 flags: STMT_END_F


BINLOG '

fAS3SBMBAAAALAAAAC4BAAAAABEAAAAAAAAABHRlc3QAAXQAAwMPCgIUAAQ=

fAS3SBgBAAAANgAAAGQBAAAQABEAAAAAAAEAA////AEAAAAFYXBwbGX4AQAAAARwZWFyIbIP

'/*!*/;

### UPDATE test.t

### WHERE

###   @1=1

###   @2='apple'

###   @3=NULL

### SET

###   @1=1

###   @2='pear'

###   @3='2009:01:01'

...

# at 400

#080828 15:03:08 server id 1  end_log_pos 442   Delete_rows: table id 17 flags: STMT_END_F


BINLOG '

fAS3SBMBAAAALAAAAJABAAAAABEAAAAAAAAABHRlc3QAAXQAAwMPCgIUAAQ=

fAS3SBkBAAAAKgAAALoBAAAQABEAAAAAAAEAA//4AQAAAARwZWFyIbIP

'/*!*/;

### DELETE FROM test.t

### WHERE

###   @1=1

###   @2='pear'

###   @3='2009:01:01'


(결과3) --vervose 옵션을 2개 사용

이제는 컬럼의 데이터 타입과 nullable 도 알 수 있게 되었다.

 shell> mysqlbinlog -vv log_file

...

# at 218

#080828 15:03:08 server id 1  end_log_pos 258   Write_rows: table id 17 flags: STMT_END_F


BINLOG '

fAS3SBMBAAAALAAAANoAAAAAABEAAAAAAAAABHRlc3QAAXQAAwMPCgIUAAQ=

fAS3SBcBAAAAKAAAAAIBAAAQABEAAAAAAAEAA//8AQAAAAVhcHBsZQ==

'/*!*/;

### INSERT INTO test.t

### SET

###   @1=1 /* INT meta=0 nullable=0 is_null=0 */

###   @2='apple' /* VARSTRING(20) meta=20 nullable=0 is_null=0 */

###   @3=NULL /* VARSTRING(20) meta=0 nullable=1 is_null=1 */

...

# at 302

#080828 15:03:08 server id 1  end_log_pos 356   Update_rows: table id 17 flags: STMT_END_F


BINLOG '

fAS3SBMBAAAALAAAAC4BAAAAABEAAAAAAAAABHRlc3QAAXQAAwMPCgIUAAQ=

fAS3SBgBAAAANgAAAGQBAAAQABEAAAAAAAEAA////AEAAAAFYXBwbGX4AQAAAARwZWFyIbIP

'/*!*/;

### UPDATE test.t

### WHERE

###   @1=1 /* INT meta=0 nullable=0 is_null=0 */

###   @2='apple' /* VARSTRING(20) meta=20 nullable=0 is_null=0 */

###   @3=NULL /* VARSTRING(20) meta=0 nullable=1 is_null=1 */

### SET

###   @1=1 /* INT meta=0 nullable=0 is_null=0 */

###   @2='pear' /* VARSTRING(20) meta=20 nullable=0 is_null=0 */

###   @3='2009:01:01' /* DATE meta=0 nullable=1 is_null=0 */

...

# at 400

#080828 15:03:08 server id 1  end_log_pos 442   Delete_rows: table id 17 flags: STMT_END_F


BINLOG '

fAS3SBMBAAAALAAAAJABAAAAABEAAAAAAAAABHRlc3QAAXQAAwMPCgIUAAQ=

fAS3SBkBAAAAKgAAALoBAAAQABEAAAAAAAEAA//4AQAAAARwZWFyIbIP

'/*!*/;

### DELETE FROM test.t

### WHERE

###   @1=1 /* INT meta=0 nullable=0 is_null=0 */

###   @2='pear' /* VARSTRING(20) meta=20 nullable=0 is_null=0 */

###   @3='2009:01:01' /* DATE meta=0 nullable=1 is_null=0 */


(결과4)  --base64-output=DECODE-ROWS 와  --verbose 옵션의 조합

binary 형태도 제외하고 보여준다.

shell> mysqlbinlog -v --base64-output=DECODE-ROWS log_file

...

# at 218

#080828 15:03:08 server id 1  end_log_pos 258   Write_rows: table id 17 flags: STMT_END_F

### INSERT INTO test.t

### SET

###   @1=1

###   @2='apple'

###   @3=NULL

...

# at 302

#080828 15:03:08 server id 1  end_log_pos 356   Update_rows: table id 17 flags: STMT_END_F

### UPDATE test.t

### WHERE

###   @1=1

###   @2='apple'

###   @3=NULL

### SET

###   @1=1

###   @2='pear'

###   @3='2009:01:01'

...

# at 400

#080828 15:03:08 server id 1  end_log_pos 442   Delete_rows: table id 17 flags: STMT_END_F

### DELETE FROM test.t

### WHERE

###   @1=1

###   @2='pear'

###   @3='2009:01:01'


4.6.7.2 mysqlbinlog Row Event Display




[옵션들]

 --read-from-remote-server

옵션의 경우 리모트서버에서 binlog를 읽을 수 있게 처리해준다. 타겟이 되는 서버에 대한 옵션을 같이 써줘야한다.

 --host, --password, --port, --protocol, --socket, and --user


--hexdump

16진수로 덤프를 해준다. 복제에 문제가 생겼을 때 trace하는데 유용하다.


--rewrite-db

DB명을 바꿀 수 있다. 별거 아닌 것 같아도 복구 할때 유용하다.


--database

--binlog-do-db 옵션과 마찬가지로 특정 DB만 내린다. 이건 주의해야한다.


--start-datetime, --stop-datetime

시점(시간)을 명시한다.


--start-position, --stop-position

시점(포지션)을 명시한다.


--verbose

row event를 SQL형태로 변환해준다.


--exclude-gtids, --include-gtids, --skip-gtids

GTID 옵션들

 


[Row-Based 로 변경되는 경우들]


5.2.4.3 Mixed Binary Logging Format



'IT > MySQL' 카테고리의 다른 글

Mysql 세자리 콤마 찍기.  (0) 2016.11.16
Mysql 수학 함수  (0) 2016.11.03
mysqlbinlog query 보기  (0) 2016.07.15
Mysql Binary log(bin log).  (0) 2016.07.15
mysql 여러가지 작업(optimize, Mornitoring 등).  (0) 2016.05.09
mysql table name ibd 형태일 시 파일 의미.  (0) 2016.04.28
Posted by 경제/부동산/프로그래머/안드로이드/PHP/mysql/asp 당양부부

Mysql 데이터를 좀 더 안정적으로 보호하기 위해선 바이너리 로그가 필수다.


my.cnf에 보면

log-bin=mysql-bin 을 주석처리 하지 않는다면 로그를 지속적으로 쌓을 것이다.

혹은 Mysql 시작시에 --log-bin[=file_name] 을 사용


로그가 용량을 꽤 차지 하게 되므로, 주기적으로 데이터베이스를 백업 받고 바이너리 로그를 지워주는 것이 좋다.


복구할 때는

mysqlbinlog msyql-bin.000001 > bakcup.sql

형식으로해서 쿼리문으로 복구가 가능하다.

로그를 관리할려면 my.cnf에 아래와 같이 설정하면 된다.



binlog_cache_size      =  50M      # binlog cache 사이즈 

max_binlog_size        =  500M    # bin로그 maximum 사이즈 

expire_logs_days        = 3       # 로그 만료기간


바이너리 로그 리스트는


mysql> show binary logs; 

mysql> show master logs; 


해당 로그 파일을 삭제할 때는 


mysql> purge master logs to 'mysql-bin.000010';


특정 일자기준으로 삭제할 때는


mysql> purge master logs before date_sub(CURRENT_DATE, INTERVAL 31 DAY);


my.cnf 설정 외에 환경변수를 수정해도 된다.


mysql>show variables;

에서 expire_logs_days를 보면 알 수 있다.


기본적으로는 0으로 되어 있어 삭제가 되지 않으나


mysql> set global expire_logs_days=7;

로 설정하면 7일동안 저장하고 삭제한다.

Posted by 경제/부동산/프로그래머/안드로이드/PHP/mysql/asp 당양부부
이전버튼 1 2 3 4 이전버튼

블로그 이미지
경제를 좋아하는 일산의 행복한 프로그래머입니다. 감사합니다.
당양부부
Yesterday31
Today3
Total107,629

달력

 « |  » 2018.06
          1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30

최근에 달린 댓글

최근에 받은 트랙백

글 보관함