일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- youtuber
- 사이타마
- 칸칸
- 자동차
- 신쥬쿠
- 토익
- paypay
- 스테이크
- 시스템관리
- Sekai Entertainment
- しまじろう
- 여름
- 코라쿠엔
- 영단어
- 전철
- 일본
- 라면
- 米沢、팽이
- Shimajirou
- one tab buy
- 돼지갈비
- 시마지로
- 돈까스
- 리눅스
- 점심
- fish
- 동경 모터쇼
- 명령어
- 원탭바이
- TOY
- Today
- Total
IT Japan
[mySQL5.5] 04장. Server Configuration 본문
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 |