강좌
클라우드/리눅스에 관한 강좌입니다.
리눅스 분류

[SULINUX 강좌#8] MySQL데이타베이스서버 운영하기

작성자 정보

  • 관리자 작성
  • 작성일

컨텐츠 정보

본문

DB서버(MySQL)

8981409a36269487e41dd29ffd6a290d_1644980085_6793.png
 

 

MySQL은 데이터 관리를 효율적으로 하기 위해 사용하는 DBMS중 하나입니다. MySQL은 빠르고 강력한 DBMS를 목표로 개발되어 왔습니다. 예전 버전에는 DBMS가 갖추어야 할 기본적인 기능도 없이 단지 빠른 DBMS를 목표로 하였지만, 5.X 버전부터는 내장함수 등 다양한 기능을 가지게 되었습니다. 리눅스에서 구축되는 서버 환경이 APM이라고 할 만큼 ApachePHP, MySQL을 많이 사용합니다. SULinuxMySQL 5.5.x를 기본 제공하며, 최신버전 또는 예전버전의 MySQL을 설치하기 위해서는 APM-Install-tools를 통하여 빠르고 쉽게 원하시는 버전의 MySQL을 설치 할 수 있습니다. 설치 방법은 APM_Install-tools편을 참조하시기 바랍니다.

 

 

MySQL의 동작 구조

 

8981409a36269487e41dd29ffd6a290d_1644980101_2566.png
 

 

위 그림은 MySQL의 동작구조를 나타낸 그림입니다. MySQLServer/Client 구조로 작동하며, 서버와 클라이언트 접속을 위해 TCP 3306 포트를 사용합니다. SULinuxMySQL 서버 및 커맨드라인 클라이언트, PHP MySQL 클라이언트가 기본 설치되어 있습니다.

MySQL 서버 접속 확인

 

MySQLServer/Client 구조로 작동됩니다. 그렇기 때문에 MySQL 서버에 접속하기 위해서는 Client가 필요합니다. 커맨드라인에서 사용하는 mysql, mysqldump 등의 명령어는 MySQL의 클라이언트입니다.

 

[root@sulinux conf]# mysql -u root -p

Enter password:

Welcome to the MySQL monitor. Commands end with ; or \g.

Your MySQL connection id is 2

Server version: 5.1.66 Source distribution

 

Copyright (c) 2000, 2012, Oracle and/or its affiliates. All rights reserved.

 

Oracle is a registered trademark of Oracle Corporation and/or its

affiliates. Other names may be trademarks of their respective

owners.

 

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

 

mysql>

 

위와 같이 mysql 명령어를 사용하여 mysql 서버에 접속 할 수 있습니다. 접속된 상태에서는 MySQL의 여러 가지 쿼리 및 명령어를 사용할 수 있습니다.

 

* SULinuxMySQL은 초기 root 비밀번호가 없습니다. 다음 명령어를 사용하여 새로운 비밀번호를 입력하시기 바랍니다.

[root@sulinux conf]# mysqladmin -uroot password "비밀번호

 

위와 같이 변경하고자 하는 비밀번호를 넣어 주어 비밀번호를 설정할 수 있습니다.

 

 

MySQL 시작 및 종료

 

MySQL Server는 항상 실행하고 있는 서버 프로그램입니다. SULinuxMySQL을 서비스 프로그램으로 관리하며 다음과 같이 관리할 수 있습니다.

 

콘솔 접속하여 MySQL을 시작, 종료, 재시작 할 수 있습니다.

 

8981409a36269487e41dd29ffd6a290d_1644980120_3664.png
 

 

위 그림은 service 명령어를 사용하여 mysqld를 시작, 재시작, 종료 한 결과입니다. 위와 같은 방법으로 MySQL 서버를 제어 할 수 있습니다.

MySQL 설정 및 운영

 

(1) SULinux 전용툴을 통한 MySQL 사용자 관리

 

mysql의 사용자 설정은 서버에서 사용자 설정하는 것 보다 까다롭습니다. 입력해야 할 것들이 많고 많은 시간을 필요로 합니다. 이 번거로운 사용자 설정을 명령어 한 줄로 할 수 있는 명령어 su_dbuserSULinux는 제공합니다.

 

(mysql 3.23.* , mysql 4.0.*, mysql 4.1.* , mysql 5.0.*, MySQL 5.*.* 모두 사용가능합니다.)

 

. DB 사용자 및 DB 데이터베이스 생성

su_dbuser명령어로 쉽게 DB를 생성하고, DB 사용자를 생성 할 수 있습니다.

 

[root@sulinux conf]# su_dbuser --add DBDB사용자명 DB사용자패스워드

 

위 명령어에서 DB, DB사용자명, DB사용자의 비밀번호를 입력합니다. 실행하면, DB생성, user테이블에 사용자생성, db 테이블에 생성된 DB을 접근할 수 있게 생성된 사용자에게 권한을 부여합니다.

 

[root@sulinux conf]# su_dbuser --add testdb testdb 12345

MYSQL 관리자(root) 패스워드입력 : mysql_Root비밀번호입력

DB 사용자 추가

DB에 사용자 추가 완료

 

위와 같이 입력하면 testdb 가 생성되며, testdb 사용자가 생성되고, testdb 사용자의 비밀번호는 12345가 됩니다. 그리고 testdb사용자로 로그인 하면 testdb를 사용할 수 있습니다.

 

다음은 설정된 값을 DB에 접속하여 쿼리로 확인한 결과입니다.

mysql> show databases;

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

| Database |

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

| information_schema |

| mysql |

| test |

| testdb |

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

4 rows in set (0.00 sec)

mysql> select * from user where user='testdb' \G

*************************** 1. row ***************************

Host: localhost

User: testdb

Password: *00A51F3F48415C7D4E8908980D443C29C69B60C9

Select_priv: N

Insert_priv: N

Update_priv: N

Delete_priv: N

Create_priv: N

Drop_priv: N

Reload_priv: N

Shutdown_priv: N

Process_priv: N

File_priv: N

Grant_priv: N

References_priv: N

Index_priv: N

Alter_priv: N

Show_db_priv: N

Super_priv: N

Create_tmp_table_priv: N

Lock_tables_priv: N

Execute_priv: N

Repl_slave_priv: N

Repl_client_priv: N

Create_view_priv: N

Show_view_priv: N

Create_routine_priv: N

Alter_routine_priv: N

Create_user_priv: N

ssl_type:

ssl_cipher:

x509_issuer:

x509_subject:

max_questions: 0

max_updates: 0

max_connections: 0

max_user_connections: 0

1 row in set (0.01 sec)

mysql> select * from db where user='testdb' \G

*************************** 1. row ***************************

Host: localhost

Db: testdb

User: testdb

Select_priv: Y

Insert_priv: Y

Update_priv: Y

Delete_priv: Y

Create_priv: Y

Drop_priv: Y

Grant_priv: N

References_priv: Y

Index_priv: Y

Alter_priv: Y

Create_tmp_table_priv: N

Lock_tables_priv: N

Create_view_priv: N

Show_view_priv: N

Create_routine_priv: N

Alter_routine_priv: N

Execute_priv: N

 

. DB 사용자 비밀번호 변경

su_dbuser명령어로 쉽게 DB 사용자의 비밀번호를 변경할 수 있습니다.

 

[root@sulinux conf]# su_dbuser --mod 사용자명 변경할패스워드

 

위 명령어에서 DB사용자명, DB사용자의 비밀번호를 입력합니다. DB사용자 비밀번호를 입력한 비밀번호로 변경됩니다.

 

[root@sulinux ~]# su_dbuser --mod testdb qwer

MYSQL 관리자(root) 패스워드입력 : DBroot비밀번호 입력

DB 사용자 비밀번호 변경

DB에 사용자 비밀번호 변경 완료

 

위와 같이 입력하면 testdb 사용자의 비밀번호가 qwer으로 변경됩니다.

 

. DB 사용자 및 DB 삭제

su_dbuser명령어로 쉽게 DB DB사용자를 삭제할 수 있습니다.

 

[root@sulinux conf]# su_dbuser --del DBDB사용자명

 

위 명령어에서 DB DB 사용자를 삭제합니다. DB사용자명, DB사용자의 비밀번호를 입력합니다. DB사용자 비밀번호를 입력한 비밀번호로 변경됩니다.

 

[root@sulinux ~]# su_dbuser --del testdb testdb

MYSQL 관리자(root) 패스워드입력 : DBroot비밀번호 입력

DB 사용자 삭제

DB에 사용자 및 DB 삭제 완료

 

위와 같이 입력하면 testdb 사용자 및 testdb 를 삭제합니다.

 

(2) DB 데이터 백업 및 복원

 

시스템이 어떠한 이유로 장애가 발생했을 때 최악의 경우 가장 힘이 되는 것은 바로 백업 데이터입니다. 백업은 아무리 강조해도 더하지 않을 만큼 아주 중요합니다. MySQL은 데이터를 백업하기 위한 프로그램을 제공합니다. 다음 방법으로 백업 및 복원하시기 바랍니다.

 

 

. 전체 백업 및 복원

백업

[root@sulinux conf]# mysqldump -uroot -p -A > all.sql

 

복원

[root@sulinux conf]# mysql -uroot -p < all.sql

 

. 일부 DATABASE 만 백업 및 복원

백업

[root@sulinux conf]# mysqldump -uroot -p DB > DB.sql

 

복원

[root@sulinux conf]# mysql -uroot -p DB < DB.sql

(복원 하려는 DB는 존재 해야 합니다.)

 

 

. 일부 TABLE만 백업 및 복원

백업

[root@sulinux conf]# mysqldump -uroot -p DBTABLE > DB.테이블명.sql

 

복원

[root@sulinux conf]# mysql -uroot -p DB < DB.테이블명.sql

(복원 하려는 DB는 존재 해야 합니다.)

(3) mysql root 비밀번호 잊어 먹었을 때.

 

서버의 경우 처음 설치 후 몇 년이고 방치하는 경우가 많습니다. 리눅스 시스템의 root비밀번호를 잊어버리면, single 모드로 들어가서 비밀번호를 변경합니다. 그렇다면, MySQL DBroot 비밀번호를 잊어 버렸을 때는 어떻게 해야 할까요?

MySQLroot 비밀번호를 잊어 버렸을 때 처리하는 방법은 다음과 같습니다.

 

먼저 , DB서버를 정지 합니다.

[root@sulinux conf]# service mysqld stop

위 명령어로 불가능 하다면, killall mysqld 명령어로 mysql 프로세스를 모두 죽입니다.

 

인증을 생략하는 옵션을 넣어 MySQL을 시작합니다.

 

4.0.XX이후 버전.

[root@sulinux conf]# mysqld_safe --skip-grant-tables &

3.23.XX

[root@sulinux conf]#safe_mysqld --skip-grant-tables &

 

위 명령어를 실행하면, MySQL 서버는 로그인 시 인증을 요청하지 않습니다. 그렇기 때문에 인증없이 로그인을 할 수 있습니다.

(주의) 위와 같이 MySQL을 시작 한 후에는 비밀번호 없이 MySQL에 접속 할 수 있기 때문에 매우 위험합니다. ! 비밀번호 변경 후 정상적으로 MySQL을 시작하시기 바랍니다.

[root@sulinux ~]# mysql

Welcome to the MySQL monitor. Commands end with ; or \g.

Your MySQL connection id is 7

Server version: 5.0.67 Source distribution

 

Type 'help;' or '\h' for help. Type '\c' to clear the buffer.

 

mysql> use mysql;

Database changed

mysql> update user set password=password('비밀번호') where user='root';

Query OK, 3 rows affected (0.00 sec)

Rows matched: 3 Changed: 3 Warnings: 0

mysql> exit

 

이렇게 입력하면, MySQL root 비밀번호가 변경됩니다. MySQL을 정지하고 재시작 합니다.

[root@sulinux conf]# service mysqld restart

 

(4) DB 상태 확인

 

어떠한 이유로 MySQL서버가 비정상 적이거나, 현재 접속된 커넥션을 확인하고, 어떤 쿼리를 던지고 있는지, 커넥션의 상태는 어떻는지, 커넥션 시간이 얼마나 되는지 등을 알아 볼 필요가 있을 때가 있습니다. 이런 경우 다음 명령어를 이용하면 쉽게 MySQL 서버 상태를 파악 할 수 있습니다.

 

[root@sulinux conf]# mysqladmin -uroot -p -i 1 processlist

Enter password:

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

| Id | User | Host | db | Command | Time | State | Info |

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

| 5 | root | localhost | | Query | 0 | | show processlist |

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

 

위와 같이 입력하면, 1초 간격으로 조사하여 보여 줍니다. DB 서버 모니터링 하기에 아주 유용합니다.

 

 

참 고

 

 

MySQL의 버전은 여러 가지가 있습니다. 각 버전의 크게 달라진 내용은?

MySQL은 다양한 버전이 있습니다. 아직 3.23.XX를 사용하는 사용자가 있습니다. 그만큼버전별 달라지는 내용이 많아 업그레이드를 하지 못하는 경우가 많습니다. 그렇다면, 각 버전별 달라진 내용들을 다음과 같이 기록 해 보도록 하겠습니다.

 

* 각 버전별 달라진 내용은 www.mysql.com에서 제공하는 영문 매뉴얼을 참조하여 여러 테스트를 진행하고 작성한 내역입니다. ! 버전별 차이를 알아 두시기 바랍니다.

 

 

1. mysql 3.23.XX 에 비해 4.0.XX 달라진 점.

 

1) 사용자 정의 함수가 시스템 정의 함수를 덮어 쓰는 것을 허용하지 않습니다.

 

2) 권한테이블(user, db)에 여러 가지 새로운 필드가 추가 되었습니다.

mysql DB사용자 및 DB 정보 이전 시 권한 테이블을 수정 해 줘야 합니다.

mysql_fix_privilege_tables 라는 명령어를 제공합니다.

 

3) --safe-show-database 옵션이 제거 되었습니다.

 

4) DB 시작 명령어인 safe_mysqldmysqld_safe로 이름이 바뀌었습니다.

 

5) InnoDB가 기본적으로 설치 됩니다.

 

6) 시작시 사용하는 파라미터 myisam_max_extra_sort_file_size myisam_max_extra_sort_file_size의 단위가 Mbyte에서 Bytes로 변경되었습니다.

 

7) DB 시작시 “--temp-pool” 옵션이 기본적으로 적용됩니다.

 

8) 시작 옵션인 --skip-locking --enable-locking의 이름이 --skip-external-locking --external-locking으로 변경되었습니다.

 

9) 대부분 사용자에게 필요 없어서 MyISAM/ISAMExternal system locking 이 제거 되었습니다.

 

10) 다음 시작 변수 및 옵션의 이름이 바뀌었습니다.

 

3.23.XX

4.0.XX

myisam_bulk_insert_tree_size

bulk_insert_buffer_size

query_cache_startup_type

query_cache_type

record_buffer

read_buffer_size

record_rnd_buffer

read_rnd_buffer_size

sort_buffer

sort_buffer_size

--warnings

--log-warnings

--err-log

--log-error

11) MySQL의 다음과 같은 새로운 예약어가 예약되었습니다. CHECK, FORCE, LOCALTIME, LOCALTIMESTAMP, REQUIRE, SQL_CALC_FOUND_ROWS, SSL, XOR 이로 인해 기존 테이블 및 필드명을 바꾸거나 쿼리에서 "``"를 사용하여야 정상적으로 어플리케이션이 작동하는 경우가 생겼습니다.

 

12) 다음 쿼리 변수의 이름이 변경되었습니다.

 

3.23.XX

4.0.XX

sql_big_tables

big_tables

sql_low_priority_updates

low_priority_updates

sql_max_join_size

max_join_size

sql_query_cache_type

query_cache_type

 

13) Slave의 포지션을 변경하기 위해 사용하는 SET SQL_SLAVE_SKIP_COUNTER=skip_count 대신 SET GLOBAL SQL_SLAVE_SKIP_COUNTER=skip_count 를 사용해야 합니다.

 

14) SHOW INDEX 쿼리에서 다양한 정보를 보여주게 되었습니다.

 

15) "ORDER BY col_name DESC"에서 NULL 값의 위치는 항상 끝으로 합니다. 예전 버전에서는 일정하지 않았습니다.

 

16) DOUBLE FLOAT 컬럼에도 UNSIGNED 붙일 수 있게 되었다.

 

17) 비트연산의 버그를 수정하였습니다.

 

18) BIGINT 컬럼을 사용할 수 있습니다.

 

19) “INSERT INTO ... SELECT”에서 항상 "IGNORE"가 활성화 되었지만, 이제는 기본적용이 아닌 "IGNORE" 입력시에만 적용됩니다.

 

20) "TRUNCATE TABLE"쿼리를 사용하여 쉽고 빠르게 테이블의 데이터를 삭제할 수 있습니다. 또한 AUTO_INCREMENT 값 또한 초기화 됩니다.

 

21) 테이블 인덱스를 리빌드 하지 않더라도 full-text 검색을 할 수 있게 되었습니다.

 

22) LOCATE(), INSTR(), STRCMP() 함수가 대/소 문자를 구분하게 되었습니다.

 

23) RAND(seed) 함수가 더 렌덤해 졌습니다.

 

2. mysql 4.0.XX 에 비해 4.1.XX 달라진 점

 

1) (중요) mysql 4.1table 이름은 utf8으로 저장됩니다. 그래서 한글테이블은 지원되지 않으며, 사용하길 원한다면, 4.0으로 downgrade 해야 합니다.

 

2) mysql db user 테이블의 password 필드가 더 길어졌습니다.(16->41)

shell> mysql_fix_privilege_tables --password=root_password

shell> mysql_fix_privilege_tables root_password

업그래이드 하였다면, 위 스크립트로 테이블을 바꾸어 주어야합니다.

(중복되는 컬럼은 경고메시지를 보여줍니다) 스크립트 실행 후에 mysql 재 시작해야 합니다.

 

3) 다양한 time zone 을 지원 합니다.

 

4) char(n) 여기서 nbyte 수가 아니라 글자 수를 의미하게 되었습니다.

(한글 4자라면, 8이아닌 4를 넣어야 합니다.)

 

5) mysql 4.1.X 에서 4.0.11 이하 버전으로 db 이전할때는 .frm 파일이 조금 변했기 때문에 파일 이동으로 되지 않으니 mysqldump 를 사용해서 합니다. (이 말은 즉, db data를 그대로 복사하지 말고 .sql 파일로 dump 뜬 다음 복사해야 합니다.)

 

6) (중요) mysql 4.1.1 에서 그 이하 버전으로 downgrade back는 조금 어렵습니다.

이유는 innoDB 등 걸리는 것이 많습니다.

 

7) UDF(사용자 정의함수) 부분이 아주조금 변경되었습니다.

 

8) mysqldump에서 --opt, --quote-names 옵션이 기본적으로 enabled 되어있습니다.

옵션을 지우고 싶으면 --skip-opt, --skip-quote-names 옵션을 주어야 합니다.

 

9) show tables status 쿼리를 던졌을 때 Type 필드명이 Engine 으로 바뀌었습니다.

 

10) 문자열 비교 방식이 표준 SQL을 따르게 되었습니다.

(벗기고 스페이싱해서 비교합니다. 이는 공백을 제거하고 비교 한다는 의미입니다.)

 

11) 여러개의 테이블에 DELETE 쿼리를 던질때 alias를 주어야 합니다.

) DELETE test FROM test AS t1, test2 WHERE ...

 

12) TIMESTAMP 값이 'YYYY-MM-DD HH:MM:SS'이런 형태의 string으로 나옵니다. (since 4.0.12) 숫자로 보고 싶으면 +0을 합니다. )SELECT ts_col + 0 FROM tbl_name;

 

13) TIMESTAMP(10) 이렇게 하는 것은 지원하지 않습니다. (10)을 빼야합니다.

 

14) 2진수는 문자로 저장됩니다. )0xFFDF 를 문자로 저장됩니다.

CAST()함수를 사용해서 바꾸어 쓰면 됩니다.

)SELECT CAST(0xFEFF AS UNSIGNED INTEGER)

 

15) DATE, DATETIME, TIME valueCAST 함수를 사용하면

) SELECT CAST('2001-1-1' AS DATETIME);

다음과 같은 결과를 얻습니다. -> '2001-01-01 00:00:00'

4.0에서는 다음과 같은 결과였습니다. -> '2001-01-01'

 

16) DEFAULT values는 더이상 AUTO_INCREMENT을 기술하지 않습니다.

 

17) LIMIT는 음수를 설정하지 못합니다. -1 대신 최대값(18446744073709551615)을 사용

 

18) sql_mode 변수인 SERIALIZE SERIALIZABLE 으로 바뀌었습니다.

) SET TRANSACTION ISOLATION LEVEL SERIALIZABLE

 

19) C APImysql_shutdown(X,SHUTDOWN_DEFAULT).

파라메터가 조금 바뀌었다.

 

20) C APImysql_real_query()의 에러 발생시 -1이 아닌 1을 리턴 합니다. 0이 정상적.

21) password 다루는 방식이 달라졌습니다. 보안을 강하게 하기 위해서 hashing 메커니즘이 바뀌었습니다. 하지만 호환성에 문제가 생겼습니다. 다음 문제들이 있습니다.

- client 라이브러리가 4.1이전 버전을 사용한다면, 서버 말고 클라이언트만 4.1으로 업그레이드 하면 해결됩니다.

- mysql_fix_privilege_tables를 사용하면, 호환이 되지만, 서버 시작할때 --old-passwords 옵션을 주고 시작해야 합니다.

- mysql_fix_privilege_tables 스크립트를 사용하면 password 필드가 41바이트가 됩니다.

- hashing 16바이트에서 41바이트로 바뀌었습니다. 보여지는 것은 45바이트. 4바이트는 솔트(소금)입니다.

- 새로운 포멧은 *부터 시작합니다. 예전포멧은 그렇지 않았습니다.

- 예전 포멧을 사용하려면, old_password()함수를 사용하면 됩니다.

 

22) data typetimestamp로 했을 때, 만약 not null 로 했을 경우, 그 레코드가 삽입, 수정될 때 현재 시간으로 계속 업데이트 되는 문제점이 있습니다.

 

23) 하위버전의 자료를 sql형태로 dump받아서 4.1.X restore할 때 table 이나 컬럼명을 euckr으로 변경하면, varchar, char 타입의 필드의 길이가 반으로 줄어듭니다.

) id varchar(20) ====> id varchar(10) 이렇게 변경되며, 입력되는 자료는 짤리고,

기존에 입력된 자료는 보존됩니다.

 

24) 4.0.XX 까지 하위 호환을 위해 지원했던 isam 4.1.XX는 지원하지 않습니다. 이러한 경우 4.0.XX에서 ALTER TABLE [table name] TYPE = MYISAM 형태의 쿼리를 날려, isammyisam으로 변경 후 4.1.XX 에 데이터를 넣어야 합니다.

 

25) full-text index에서 한글을 지원하는데, full text index가 적용될 필드는 반드시

utf8로 지정해야 합니다.

 

26) 서브쿼리를 지원합니다.

 

3. mysql 4.1.XX에 비해 5.0.XX 달라진 점.

1) BIT 데이터 타입 을 제공합니다.

1~64비트까지 되며, 기본은 1비트입니다.

mysql> create table test_table ( a BIT(2));

mysql> insert into test_table values (2);

mysql> select bin(a+0),hex(a+0),oct(a+0) from test_table;

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

| bin(a+0) | hex(a+0) | oct(a+0) |

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

| 10 | 2 | 2 |

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

1 row in set (0.00 sec)

 

2) Cursors제공합니다. 기본적으로 Server-Side 커서를 제공합니다. 저장프로시저에서 사용 됩니다.

 

3) INFORMATION_SCHEMA를 제공합니다. MySQL데이터베이스의 모들 설정 및 환경이 Meta database를 이용하여 확인 및 수정할 수 있습니다. 다음 예제는 INFORMATION_SCHEMA의 테이블들을 확인한 결과입니다.

mysql> use information_schema;

Database changed

mysql> show tables;

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

| Tables_in_information_schema |

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

| CHARACTER_SETS |

| COLLATIONS |

| COLLATION_CHARACTER_SET_APPLICABILITY |

| COLUMNS |

| COLUMN_PRIVILEGES |

| KEY_COLUMN_USAGE |

| ROUTINES |

| SCHEMATA |

| SCHEMA_PRIVILEGES |

| STATISTICS |

| TABLES |

| TABLE_CONSTRAINTS |

| TABLE_PRIVILEGES |

| TRIGGERS |

| VIEWS |

| USER_PRIVILEGES |

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

16 rows in set (0.00 sec)

 

4) Instance Manager를 통해 원격지에서 데이터베이스 시작 및 종료 할 수 있습니다.

5) 계산이 더욱 정확해 졌습니다.

정확해진 계산

부동소수점의 문제를 도입하지 않고, 정확한 계산을 합니다.

) 0.000110,000번 더하면, 1에 가까운 숫자가 나오는 것이 아닌, 정확하게 1이 나옵니다.

ROUND() 함수가 환경에 영향을 받지 않고 정확한 결과를 처리합니다.

platform 독립성을 향상시켰습니다.

각기 다른 플렛폼에서도 같은 결과의 계산 값을 가지게 하였습니다.

잘못된 값들을 처리합니다.

Overflow , 0으로 나눴을 때 단순히 null을 리턴 하는 것이 아닌, 에러를 알아챕니다.

이 설정을 하기 위해서는 시스템변수인 "sql_mode"를 설정하여야 합니다.

 

 

 

6) Storage Engines : ARCHIVE, FEDERATED Storage Engine

ARCHIVE Storage Engine : 데이터 압축저장.

많은 양의 데이터를 인덱스 없이 작은 발자국만 남기고 저장할 때 사용합니다.

설치 시 configure 단계에서 --with-archive-storage-engine 옵션을 주어야 합니다.

저장되는 파일은 압축된 파일인 테이블명.ARZ, .ARM, ARN 으로 저장됩니다.

단지, insert, select 쿼리만 지원합니다. (delete, update, replace 지원안함)

 

FEDERATED Storage Engine : 동맹 데이터 저장 엔진

로컬테이블보다, 원격데이터 베이스에 접근이 많을시 사용합니다.

설치 시 configure 단계에서 --with-federated-storage-engine 옵션을 줍니다.

.MYD파일이 생성되지 않습니다.

FEDERATED 테이블 생성 예제는 다음과 같습니다.

CREATE TABLE federated_table (

id int(20) NOT NULL auto_increment,

name varchar(32) NOT NULL default '',

other int(20) NOT NULL default '0',

PRIMARY KEY (id),

KEY name (name),

KEY other_key (other)

)

ENGINE=FEDERATED

DEFAULT CHARSET=latin1

CONNECTION='mysql://root@remote_host:9306/federated/test_table';

 

7) Stored Routine : 저장 프로시져, 저장 함수 지원합니다.

많이 아쉬웠던 사용자 정의 함수를 지원합니다.

생성: CREATE PROCEDURE , CREATE FUNCTION 등의 쿼리를 사용합니다.

 

8) Strict Mode and Standard Error Handling: 다양한 SQL 모드 지원

시스템 변수 sql_mode를 이용하여, 다양한 sql 구문과, 에러 메시지 출력을 지원합니다.

 

9) Triggers: 제한된 트리거 제공.

“CREATE TRIGGER"이런 문장으로 트리거를 생성합니다. 저장함수 및 저장프로시저에서도 기본적인 트리거를 제공합니다.

 

10) VARCHAR Data Type: 최대길이가 늘어났습니다.

VARCHAR 데이터타입의 길이가 65,532 byte로 늘어났습니다.

데이터의 마지막 공백은 제거 하던 것을 없앴습니다.

 

11) Views: named, updateable 뷰를 제공합니다.

 

12) XA Transactions: Server-Side XA 트렌젝션 제공합니다.

 

13) Performance enhancements: 성능향상

많은 쿼리들이 성능향상 되었습니다.

- 많은 테이블 join에서 좋지 않은 키 사용에도 성능이 향상되었습니다.

- 다른키의 OR 연산에 최적화 되었습니다.

- join에서 “=”이 향상되었습니다.

- NOT IN NOT BETWEEN을 최적화하여, 쿼리를 만드는데 사용하는 검색 시간을 줄였습니다.

- InnoDB Storage Engine에서 성능향상되었습니다.

+ 새로운 압축방법을 사용하여 20% 의 공간절약을 할 수 있습니다.

+ ALTER TABLE에서의 실패 또는 중지에 대해 더 빠르게 복구 합니다.

+ TRUNCATE에서 더 빠르게 실행됩니다.

- NDBCluster Storage Engine에서의 성능향상

+ IN BETWEEN을 사용하는 쿼리들의 성능이 향상되었습니다.

+ Condition pushdown : 가장 새롭게 기록된 정보를 먼저 검색하게 하여 성능 향상시켰습니다. 네트웍의 부하를 줄였습니다.

- COUNT(DISTINCT) 사용시 BLOB 타입이 아니라면, 테이블 대신 임시파일을 직접 다루어 성능향상 시켰습니다. MIN(), MAX(), GROUP BY 또한 성능 향상되었습니다.

- MySQL client library에서 buffer를 사용하여 수신하기 때문에 많은 양의 시스템콜을 줄여서 성능 향상시켰습니다.

- COUNT()함수에서 NULL키를 미리 제거하여 속도를 향상시켰습니다.

) SELECT COUNT(*) FROM t1,t2 WHERE t2.c=t1.a;

여기서 cNULL값이 허용된 키입니다.

- 단일 테이블의 UPDATE 또는 DELETE 쿼리 에서 ORDER BY ... LIMIT N 문장을 사용할 경우 단지 N개의 레코드만 읽어 성능을 향상시켰습니다.

 

4. MySQL 5.1의 새로워진 기능

1) 파티셔닝 지원

테이블을 생성할 때, 여러개의 파일으로 분리하여 테이블을 생성할 수 있습니다.

지금까지는 하나의 테이블은 하나의 파일이 생겼습니다. mysql 5.1.6 이후 버젼에서는 파티셔닝을 지원하여, 하나의 테이블을 여러개의 파일으로 생성하여 성능 향상을 시킬 수 있습니다.

 

 

 

2) (row)기반 리플리케이션 지원

지금까지 MySQL은 문장(statement)기반으로 리플리케이션을 하였습니다.. 이것은, 마스터 서버에서 bin로그(생성,삭제,갱신등)를 남겼고, 그 로그를 slave에서 가져가 DB를 순차적으로 갱신하여 리플리케이션이 이뤄졌습니다. 문장 기반은 마스터서버에서 행했던 어려운 계산이 슬레이브에서 동일하게 일어나야 하기에 비효율적인 면이 있었습니다. 이 문제를 해결한 것이 열기반 리플리케이션입니다. 이는 마스터 서버에서 갱신되는 것을 각 테이블의 열 별로 기록하여 슬레이브 서버에서는 계산을 하지 않고 기록하므로 효율적인 면이 있습니다.

 

 

3) 플러그인 API

MySQL 5.1에서는 아주 유연한 플러그인 API를 제공합니다. MySQL서버를 재시작 하지 않고 로딩, 언로딩이 가능합니다.

 

 

4) 이벤트 스케줄러

MySQL에서도 스케줄러를 제공합니다. linuxcron, Windows의 스케줄러와 비슷한 기능을 합니다. 이는 mysql의 쓰레드(스케줄러 쓰레드)가 하나 작동하게 됩니다. 그 쓰레드가 등록된 스케줄을 감시하여 실행시킵니다. MySQL에 정기적인 작업을 수행하기 위해서 cron등의 도움을 받았지만, 이제 자체적으로 가능하게 되었습니다.

 

 

5) 로그를 테이블에 기록

일반적인 로그 , 슬로우 쿼리 로그 등을 mysql 데이터베이스의 general_log , slow_log 테이블에 기록할 수 있는 기능을 제공합니다. 이로 인해 로그를 다양하게 활용 할 수 있게 되었습니다.

 

 

6) mysql_upgrade 프로그램

mysql_upgrade 프로그램은 모든 테이블을 조사하고, 잘못된 테이블이 있으면 테이블을 복구 하게 됩니다. mysql 업그레이드 시에 아주 유용한 프로그램입니다.

 

 

7) MySQL 클러스터 리플리케이션

MySQL 클러스터로 구성된 시스템끼리 리플리케이션이 가능해 졌습니다. 물론, MySQL 클러스터와 일반적인 MySQL 서버와의 리플리케이션도 가능합니다.

 

 

 

8) MySQL Cluster disk data storage

MySQL 5.1.6 이전 버젼의 MySQL 클러스터에서 사용하는 NDBCluster 저장 엔진에서는 엄격하게 메모리를 사용했었습니다. 5.1.6이상에서는 클러스터 데이터를 디스크에 저장할 수 있게 되었습니다. 그렇지만, 인덱스는 아직 메모리에 저장됩니다.

 

 

9) MySQL 클러스터 백업 기능 향상

예전 버전 에서 문제되었던, 클러스터 환경에서 백업문제를 해결하였습니다.

 

 

10) 테이블스페이스 백업

mysqldump 유틸리티에서 테이블스페이스 백업을 지원하게 되었습니다.

 

 

11) 향상된 INFORMATION_SCHEMA

INFORMATION_SCHEMA에 더 많은 메타데이터를 제공하게 되었습니다.

 

 

12) XML함수(XPath)제공

XPath를 이용하여 element를 검색하여 XML형태의 데이터 제공

 

 

13) Load emulator 제공

mysqlslap 라는 프로그램을 제공합니다. 이 프로그램은 가상의 사용자를 만들어 mysql 서버의 성능을 테스트 해 볼 수 있는 프로그램입니다.

MySQL 4.1 서버부터 이 프로그램을 테스트 가능하다고 합니다.

*참고자료 : http://dev.mysql.com/doc/refman/5.1/en/mysql-nutshell.html

 

5. MySQL 5.5.x의 새로운 기능들

1) 멀티코어 CPU에 대한 확장성이 향상

CPU 속도(클럭)을 높이는데는 물리적인 한계가 있습니다. 그래서 요즘 CPUCore를 늘려 성능을 향상시킵니다. mysql 5.5는 멀티코어 cpu를 활용할 수 있게 향상되었다고 합니다. 이는 InnoDBlocking 과 메모리 관리에 변화를 준 것입니다.

 

InnoDB에서는 확장성이 적은 mutexe를 사용하기 보다는 원자적인 CPU 명령을 사용한 RW-lock 사용하여 성능을 향상시켰습니다.

메모리 관리 부분은 일반적인 malloc 라이브러리 보다 향상된 tcmalloc(리눅스), mtalloc(솔라리스)를 사용했습니다.

 

2) InnoDB I/O 서브시스템 변경

InnoDB I/O 서브시스템이 사용가능한 I/O 용량을 효율적으로 사용할 수 있게 바뀌었습니다.

- Background I/O Thread 향상

- 1개의 Threadread, write 를 담당했으나, 이제 readwrite에 다중 쓰레드를 할당할 수 있습니다.

innodb_read_io_threads : 읽기 쓰레드 갯수 기본 4

innodb_write_io_threads : 쓰기 쓰레드 갯수 기본 4

 

- I/O Rate를 조정할 수 있습니다.

예전 버전은 기본적으로 IOPS(the number of Input/Output operations Per Second)100이였지만, 지금은 기본이 200이며 이 값을 다음 변수로 제어할 수 있습니다.

innodb_io_capacity : IOPS (기본 200, Disk7200RPM 이하라면 100으로 설정하는 것이 좋습니다.)

 

 

3) 진단과 모니터링 기능이 좋아졌습니다.

- Performance Schema

MySQL 서버 실행상태를 low 레벨에서 확인 할 수 있습니다.

MySQL 데이터 디렉토리를 보면 performance_schema DB가 기본적으로 설치됩니다. 이 테이블을 이용한다고 하며 자세한 것은 mysql 매뉴얼을 참고하기 바랍니다.

 

- DTrace 지원

이는 Solaris, Mac OS X, FreeBSD 에서 사용되는 것이라니 skip 합니다.

 

- SHOW ENGINE INNODB STATUS의 결과가 더 자세해 졌습니다.

 

- Debug Sync : 디버그를 위한 동기화 포인트를 제공합니다.

- 새로운 상태 변수 제공

Innodb_have_atomic_builtins : innodb의 사용가능한 atomic instruction의 상태를 보여줍니다..(On/Off)

 

 

4) Solaris에서 MySQL Server를 운영함에 있어 여러 명령어가 변경 및 향상되었습니다.

 

 

5) 기본 storage engine MyISAM 에서 InnoDB로 바뀌었습니다.

 

 

6) Semisynchronous Replication 지원

- MySQLReplication은 기본적으로 비동기식이지만, Semi비동기식 리플리케이션을 제공합니다.

Semi비동기식이란 MasterblocksSlave의 응답을 받은 후 처리합니다.

- 기본은 아니고 PLUGIN으로 설치해야 합니다.

INSTALL PLUGIN rpl_semi_sync_master SONAME 'semisync_master.so';

INSTALL PLUGIN rpl_semi_sync_slave SONAME 'semisync_slave.so';

 

 

7) 새로운 유니코드 언어셋을 지원합니다.

utf16, utf32, utf8mb4

 

 

8) 테이블 파티셔닝의 향상

- 2가지의 새로운 사용자 정의 테이블 파티셔닝을 제공합니다.

RANGE COLUMNS 파티셔닝 , LIST COLUMNS 파티셔닝을 제공합니다.

) RANGE COLUMNS 파티셔닝

PARTITION BY RANGE (store_id) (

PARTITION p0 VALUES LESS THAN (6),

PARTITION p1 VALUES LESS THAN (11)

);

 

) LIST COLUMNS 파티셔닝

PARTITION BY LIST(store_id) (

PARTITION pNorth VALUES IN (3,5,6,9,17),

PARTITION pEast VALUES IN (1,2,10,11,19,20)

);

 

 

9) 표준 SQLSIGNALRESIGNAL 구문 제공

오류 핸들링을 위해 제공합니다.

 

 

10) LOAD XML INFILE 구문이 추가 되었습니다.

 

 

 

 

11) MySQL인증방식에서 pluggable authenticationproxy user인증이 추가 되었습니다.

pluggable 인증으로 LDAP, Kerberos, PAM, or Windows login ID 등을 사용할 수 있습니다.

 

 

12) 소스 설치하는 방법이 바뀌었습니다.

GNU autotools 대신 CMake를 사용합니다. 설치법은 다음과 같습니다.

( cmake는 미리 설치해야 합니다. )

cmake -DCMAKE_INSTALL_PREFIX=/usr/local/mysql \

-DDEFAULT_CHARSET=utf8 \

-DDEFAULT_COLLATION=utf8_general_ci \

-DENABLED_LOCAL_INFILE=1 \

-DWITH_SSL=system \

-DMYSQL_DATADIR=/usr/local/mysql/data \

-DWITH_READLINE=ON

 

make -j 4

make install

* CMake 를 사용하면 컴파일 과정에 진행률과 보기 좋게 컬러로 나옵니다.

 

13. 기타 소스 설치 후 달라 진 내용들

mysql_install_db 프로그램의 경로가 변경되었습니다.

/usr/local/mysql/scripts 로 바뀌었습니다.

 

my.cnf 셈플 및 mysql.server 스크립트의 경로가 변경되었습니다.

/usr/local/mysql/support-files

 

헤더 파일 및 라이브러리 디렉토리가 변경되었습니다.

/usr/local/mysql/lib

/usr/local/mysql/include

 

PHP 연동시 라이브러리 위치 때문에 libmysqlclient.so.18 파일을 찾을 수 없다고 합니다.

ln -s /usr/local/mysql/lib/libmysqlclient.so.18 /usr/lib

위와 같이 링크를 걸어 주면 끝난다.

 

* 참고자료 : http://dev.mysql.com/doc/refman/5.5/en/mysql-nutshell.html

 

 

관련자료

댓글 0
등록된 댓글이 없습니다.

공지사항


뉴스광장


  • 현재 회원수 :  60,041 명
  • 현재 강좌수 :  35,855 개
  • 현재 접속자 :  119 명