IT Japan

[mySQL5.5] 04장. Server Configuration 본문

MySQL

[mySQL5.5] 04장. Server Configuration

swhwang 2016. 3. 23. 23:21
반응형

n  MySQL Configuration

 

u  Server System Variables
- indicates how server system is configured

- option 파일/command line/set으로 동적 지정

- set  @@global. , @@session.

- show variables : current value 확인

 

1. 먼저 현재 sort_buffer_size를 확인합니다.  2M임을  알 수 있습니다.

mysql> show variables like 'sort_buffer_size';

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

| Variable_name    | Value   |

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

| sort_buffer_size | 2097152 |

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

1 row in set (0.00 sec)

 

2. configuration 파일을 준비합니다.

[root@EDYDR51P0 mysql]# cd /usr/share/mysql

[root@EDYDR51P0 mysql]# cp my-small.cnf /etc/my.cnf

[root@EDYDR51P0 mysql]# vi my.cnf

[mysqld]

....

sort_buffer_size = 64K

query_cache_size=16M

 

** sort_buffer_size 64K임을 기억합니다.

 

또는

mysql>

SET sort_buffer_size=10000;

SET @@local.sort_buffer_size=10000;

SET GLOBAL sort_buffer_size=1000000;

SET @@sort_buffer_size=1000000;

SET @@global.sort_buffer_size=1000000, @@local.sort_buffer_size=1000000;

 

SELECT @@global.sql_mode, @@session.sql_mode, @@sql_mode;

 


 

n  ANSI_QUOTES

- Identifier 특수 문자(.숫자,_,$제외) 포함된 경우 identifier quote표시를 해야하며, quote기호는

      backtick(`)이다.
-
이 경우 ANSI SQL 동일한 기호인 (double quotation mark)사용합니다.

 

1. #이 포함된 테이블을 생성하면 오류가 발생합니다.

mysql> create table test#(col1 int);

    -> ;

ERROR 1113 (42000): A table must have at least 1 column

 

2. 기본 quote문자인 `을 사용하여 테이블을 생성합니다.

mysql> create table `test#`(col1 int);

Query OK, 0 rows affected (0.00 sec)

 

mysql> drop table `test#`;      (backtick)

Query OK, 0 rows affected (0.00 sec)

 

3. quote문자를 ANSI표준인 "(이중따옴표)로 변경합니다.

mysql> set sql_mode='ansi_quotes';

Query OK, 0 rows affected (0.00 sec)

 

4. 이번에는 "test#"로 테이블은 생성 할 수 있습니다.

mysql>  create table "test#"(col1 int);

Query OK, 0 rows affected (0.01 sec)

 

 

n  IGNORE_SPACES

- 기본적으로 function명과 괄호사이에 space가 있으면 안됩니다.

- IGNORE_SPACES를 설정하면, function명과 괄호사이에 space가 무시됩니다.

- CREATE FUNCTION  function명(IN p_deptno CHAR(2))

   BEGIN

   ...

   END;

 


 

n  Error_for_Division_By-Zero

- 기본값은 NULL이며, 불능상태가 아닙니다.

 

1. 임시테이블을 생성한다.

             mysql> create table scores(id INT,comment CHAR(6));

            

             2. 1/0 으로 불능상태값을 생성한다.

             mysql> INSERT INTO scores VALUES(1/0,'1st');

             Query OK, 1 row affected (0.05 sec)

 

             3. 테이블을 조회합니다.

             mysql> SELECT * FROM scores;

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

             | id   | comment |

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

             | NULL | 1st     |

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

             1 row in set (0.06 sec)

 

             4. ERROR_FOR_DIVISION_BY_ZERO 설정합니다.

               이때, strict mode 설정해야 error 발생합니다.

        mysql> SET SQL_MODE='STRICT_ALL_TABLES,ERROR_FOR_DIVISION_BY_ZERO';

 

             mysql> INSERT INTO scores VALUES(1/0,'2nd');

             ERROR 1365 (22012): Division by 0

 

       5. strict mode가 아닌 경우는 warning만 발생합니다.

             mysql> SET SQL_MODE ='ERROR_FOR_DIVISION_BY_ZERO';

 

             mysql> INSERT INTO scores VALUES(1/0,'2nd');   // 정상적으로 저장됩니다.

             Query OK, 1 row affected, 1 warning (0.00 sec)

 

             mysql> SELECT * FROM scores;

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

             | id   | comment |

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

             | NULL | 1st     |

             | NULL | 2nd     |

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

 

n  STRICT_TRANS_TABLES, STRICT_ALL_TABLES

- strict mode 의미한다.

- 기본적으로 missing, out of range 또는 malformed 경우에도 accptable합니다.

   하지만 strict mode 경우에는 데이터베이스의 input value 제한을 가합니다.

- STRICT_TRANS_TABLES : transaction table에만 제한을 둔다.

- STRICT_ALL_TABLES : 모든 table에 제한을 둔다.

 

n  TRADITIONAL

- composite mode : strict mode + 추가적인 input value에 제한

 

1. 모드를 설정합니다.

mysql> SET SQL_MODE='TRADITIONAL';

 

2. 모드를 조회합니다.

mysql> SELECT @@sql_mode ;

 

 STRICT_TRANS_TABLES,STRICT_ALL_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,

ERROR_FOR_DIVISION_BY_ZERO,TRADITIONAL,NO_AUTO_CREATE_USER

 

3.  malformed  input 을 입력하면, 오류가 발생합니다.

mysql> INSERT INTO birthdates VALUES('1950-02-30');

ERROR 1292 (22007): Incorrect date value: '1950-02-30' for column 'bdate' at row 1

 

4. 현재 SQL_MODE를 모두 clear한다.

mysql> SET SQL_MODE = '';

 

5. 이번에는 SQL문이 오류를 발생하지 않습니다.

mysql> INSERT INTO birthdates VALUES('1950-02-30');

Query OK, 1 row affected,

 

mysql> SELECT * FROM birthdates;

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

| bdate          |

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

| 0000-00-00 |

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

 

 


n  ANSI

- composite mode

- ANSI-like하게 작동하게 하는 모드

 

1. 먼저 || 의 기본 기능을 확인합니다.

mysql> set sql_mode='';

Query OK, 0 rows affected (0.00 sec)

 

mysql> SELECT 'ab'||'cd';            // 오라클의 concat연산자처럼 작동하지 않음

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

| 'ab'||'cd'    |

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

|          0        |

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

 

2. ANSI' 로 모드를 변경합니다.

mysql> SET SQL_MODE='ANSI';

 

mysql> SELECT @@sql_mode ;

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

| @@sql_mode                                                                          |

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

| REAL_AS_FLOAT,PIPES_AS_CONCAT,ANSI_QUOTES,IGNORE_SPACE,ANSI |

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

 

3. 이번에는 ||가  ANSI 표준 SQL의 기능인 concat 기능을 합니다.

 

mysql> SELECT 'ab'||'cd';

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

| 'ab'||'cd'    |

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

| abcd          |

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


 

·                     log file 관련 variables

 

mysql> show variables like 'general_log';

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

| Variable_name | Value |

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

| general_log   | OFF   |

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

1 row in set (0.00 sec)

 

mysql> show variables like 'log';

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

| Variable_name | Value |

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

| log           | OFF   |

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

1 row in set (0.00 sec)

 

mysql> show variables like 'log_bin';

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

| Variable_name | Value |

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

| log_bin       | OFF   |

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

1 row in set (0.00 sec)

 

mysql> show variables like 'log';

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

| Variable_name | Value |

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

| log           | OFF   |

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

1 row in set (0.00 sec)

 

 

mysql> show variables like 'slow_query_log';

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

| Variable_name  | Value |

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

| slow_query_log | OFF   |

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

1 row in set (0.00 sec)

 

mysql> show variables like 'long_query_time';

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

| Variable_name   | Value     |

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

| long_query_time | 10.000000 |

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

1 row in set (0.00 sec)

 

mysql> set global general_log='ON';

Query OK, 0 rows affected (0.00 sec)

 

mysql> show variables like 'max_binlog_size';

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

| Variable_name   | Value      |

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

| max_binlog_size | 1073741824 |

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

1 row in set (0.00 sec)

 

반응형

'MySQL' 카테고리의 다른 글

[mySQL5.5] 06장. Data Types  (0) 2016.03.23
[mySQL5.5] 05장. Client and Tools  (0) 2016.03.23
[mySQL5.5] 03장. Upgrading from 5.1 to 5.5  (0) 2016.03.23
[mySQL5.5] 03장. MySQL Server  (0) 2016.03.23
[mySQL5.5] 02장. shared-memory-base-name  (0) 2016.03.23
Comments