MySQL 데이터베이스 관리 기초

MySQLBeginner
지금 연습하기

소개

이번 실습에서는 MySQL을 사용하여 데이터베이스를 관리하는 기본 개념을 살펴봅니다. 데이터베이스 생성 및 삭제, 데이터베이스 선택, 메타데이터 검색 방법을 다룰 예정입니다. 이러한 기술은 초보자부터 숙련된 개발자까지 데이터베이스를 다루는 모든 이들에게 필수적입니다. 이번 실습을 마치면 MySQL 데이터베이스 운영에 대한 탄탄한 기초를 다지게 될 것입니다.

학습 목표

이번 실습을 완료하면 다음을 수행할 수 있습니다:

  • 다양한 방법을 사용하여 데이터베이스를 생성하고 삭제하기
  • 데이터베이스를 선택하고 전환하기
  • MySQL 서버 및 데이터베이스에 대한 중요한 메타데이터 검색하기
  • MySQL에서 데이터베이스 이름의 대소문자 구분 이해하기

데이터베이스 생성 및 목록 조회

이번 단계에서는 MySQL 명령줄 클라이언트를 사용하여 데이터베이스를 생성하고 기존 데이터베이스 목록을 확인하는 방법을 배웁니다. 이는 데이터베이스 관리자나 개발자에게 가장 기본적인 기술입니다.

먼저 터미널 창을 엽니다. LabEx 환경에서는 Ubuntu Linux 시스템을 사용합니다. 터미널이 이미 열려 있어야 하지만, 그렇지 않다면 터미널 아이콘을 클릭하여 열 수 있습니다.

이제 MySQL 클라이언트를 시작합니다:

sudo mysql -u root

LabEx VM에서는 root 사용자에 대한 비밀번호를 입력할 필요가 없습니다.

MySQL 클라이언트 터미널 스크린샷

MySQL 클라이언트에 접속하면 MariaDB [(none)]>와 같은 프롬프트가 나타납니다. 이는 MariaDB 서버(MySQL의 포크 버전)에 연결되었지만, 아직 특정 데이터베이스를 선택하지 않았음을 의미합니다.

사용 가능한 데이터베이스 목록 조회

먼저 MySQL 서버에서 사용 가능한 데이터베이스 목록을 확인해 보겠습니다:

SHOW DATABASES;

다음과 유사한 출력이 나타날 것입니다:

MariaDB [(none)]> SHOW DATABASES;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
| sys                |
+--------------------+
4 rows in set (0.000 sec)

이 명령은 현재 서버에서 사용 가능한 모든 데이터베이스를 나열합니다. 기본 데이터베이스들의 역할은 다음과 같습니다:

  • information_schema: 데이터베이스 메타데이터에 접근할 수 있는 데이터베이스입니다.
  • mysql: 사용자 계정 및 권한 정보를 포함하는 시스템 데이터베이스입니다.
  • performance_schema: MySQL 서버 실행을 저수준에서 모니터링하기 위한 데이터베이스입니다.
  • sys: Performance Schema에서 수집된 데이터를 해석하는 데 도움을 주는 객체 세트를 제공하는 데이터베이스입니다.

데이터베이스 생성

이제 'Hello_World'라는 이름의 새 데이터베이스를 생성해 보겠습니다. MySQL에서는 이를 위해 CREATE DATABASE 명령을 사용합니다:

CREATE DATABASE Hello_World;

이 명령을 실행하면 MySQL은 다음과 같이 응답합니다:

Query OK, 1 row affected (0.000 sec)

이는 데이터베이스가 성공적으로 생성되었음을 의미합니다. 확인을 위해 데이터베이스 목록을 다시 조회해 봅니다:

SHOW DATABASES;

이제 목록에 'Hello_World'가 표시될 것입니다:

MariaDB [(none)]> SHOW DATABASES;
+--------------------+
| Database           |
+--------------------+
| Hello_World        |
| information_schema |
| mysql              |
| performance_schema |
| sys                |
+--------------------+
5 rows in set (0.000 sec)

훌륭합니다! 첫 번째 데이터베이스를 성공적으로 생성했습니다.

데이터베이스 이름의 대소문자 구분

MySQL에서 이해해야 할 중요한 개념은 데이터베이스 이름이 대소문자를 구분한다는 점입니다. 즉, 'Hello_World'와 'hello_world'는 서로 다른 두 개의 데이터베이스로 취급됩니다. 이를 확인해 보겠습니다:

CREATE DATABASE hello_world;
SHOW DATABASES;

이제 목록에 'Hello_World'와 'hello_world'가 모두 표시될 것입니다:

MariaDB [(none)]> CREATE DATABASE hello_world;
Query OK, 1 row affected (0.000 sec)

MariaDB [(none)]> SHOW DATABASES;
+--------------------+
| Database           |
+--------------------+
| Hello_World        |
| hello_world        |
| information_schema |
| mysql              |
| performance_schema |
| sys                |
+--------------------+
6 rows in set (0.000 sec)

이는 'Hello_World'와 'hello_world'가 별개의 데이터베이스로 처리됨을 보여줍니다. 데이터베이스 설계 시 혼란을 피하기 위해 일관된 명명 규칙을 사용하는 것이 좋습니다. 많은 개발자가 대소문자 구분 문제를 방지하기 위해 데이터베이스 이름에 모두 소문자를 사용하는 것을 선호합니다.

mysqladmin을 사용한 데이터베이스 생성

이번 단계에서는 mysqladmin 도구를 사용하여 데이터베이스를 생성하는 다른 방법을 살펴봅니다. 이 도구는 MySQL 프롬프트에 들어가지 않고도 관리 작업을 수행할 수 있게 해주는 명령줄 유틸리티입니다.

먼저 MySQL 클라이언트를 종료합니다. exit 또는 quit을 입력하고 Enter를 누르면 됩니다:

exit

이제 일반 명령 프롬프트로 돌아왔으므로, mysqladmin을 사용하여 새 데이터베이스를 생성해 보겠습니다:

sudo mysqladmin -u root create hello_world2

이 LabEx VM에서는 root 데이터베이스 계정이 로컬 소켓 인증을 사용하므로 mysqladmin과 함께 sudo를 사용해야 합니다.

방금 사용한 명령의 구성 요소는 다음과 같습니다:

  • sudo: 필요한 시스템 권한으로 명령을 실행합니다.
  • -u root: root 데이터베이스 사용자로 연결함을 지정합니다.
  • create: 수행할 작업입니다.
  • hello_world2: 생성할 데이터베이스의 이름입니다.

이제 다시 MySQL 클라이언트에 로그인하여 새 데이터베이스가 생성되었는지 확인합니다:

sudo mysql -u root

MySQL 클라이언트에 접속한 후 데이터베이스 목록을 확인합니다:

SHOW DATABASES;

목록에 'hello_world2'가 표시될 것입니다:

MariaDB [(none)]> SHOW DATABASES;
+--------------------+
| Database           |
+--------------------+
| Hello_World        |
| hello_world        |
| hello_world2       |
| information_schema |
| mysql              |
| performance_schema |
| sys                |
+--------------------+
7 rows in set (0.000 sec)

mysqladmin 도구는 명령줄에서 직접 데이터베이스를 생성하는 빠른 방법을 제공하며, 이는 스크립팅 및 자동화 작업에 유용합니다. 특히 더 큰 스크립트나 자동화 프로세스의 일부로 데이터베이스를 생성해야 할 때 매우 편리합니다.

데이터베이스 삭제

여러 데이터베이스를 생성했으니, 이제 삭제하는 방법을 배워보겠습니다. 데이터베이스 관리에서는 생성만큼이나 삭제 방법을 아는 것도 중요합니다. 'Hello_World' 데이터베이스만 남기고 나머지는 삭제하겠습니다.

MySQL 클라이언트를 사용하여 데이터베이스 삭제

아직 MySQL 클라이언트에 접속해 있지 않다면 로그인합니다:

sudo mysql -u root

이제 'hello_world' 데이터베이스를 삭제합니다:

DROP DATABASE hello_world;
SHOW DATABASES;

'hello_world'가 목록에서 사라진 것을 확인할 수 있습니다:

MariaDB [(none)]> DROP DATABASE hello_world;
Query OK, 0 rows affected (0.002 sec)

MariaDB [(none)]> SHOW DATABASES;
+--------------------+
| Database           |
+--------------------+
| Hello_World        |
| hello_world2       |
| information_schema |
| mysql              |
| performance_schema |
| sys                |
+--------------------+
6 rows in set (0.000 sec)

주의: DROP DATABASE 명령을 사용할 때는 매우 신중해야 합니다. 이 명령은 확인 절차 없이 데이터베이스와 그 안의 모든 내용을 영구적으로 삭제합니다. 운영 환경에서는 이러한 작업을 수행하기 전에 일반적으로 안전장치와 백업을 마련해 두어야 합니다.

mysqladmin을 사용하여 데이터베이스 삭제

이제 mysqladmin을 사용하여 'hello_world2' 데이터베이스를 삭제해 보겠습니다. 이 방법은 삭제 전 확인을 요청하므로 더 안전한 것으로 간주됩니다.

exit 또는 quit을 입력하여 MySQL 클라이언트를 종료한 후, 터미널에서 다음 명령을 실행합니다:

sudo mysqladmin -u root drop hello_world2

작업을 확인하라는 메시지가 표시됩니다:

Dropping the database is potentially a very bad thing to do.
Any data stored in the database will be destroyed.

Do you really want to drop the 'hello_world2' database [y/N] y
Database "hello_world2" dropped

'y'를 입력하고 Enter를 눌러 확인합니다. 이 추가 확인 단계는 실수로 데이터베이스를 삭제하는 것을 방지하는 데 도움이 됩니다.

이제 다시 MySQL 클라이언트에 로그인하여 'hello_world2'가 삭제되었는지 확인합니다:

SHOW DATABASES;

결과는 다음과 같아야 합니다:

MariaDB [(none)]> SHOW DATABASES;
+--------------------+
| Database           |
+--------------------+
| Hello_World        |
| information_schema |
| mysql              |
| performance_schema |
| sys                |
+--------------------+
5 rows in set (0.000 sec)

불필요한 데이터베이스를 성공적으로 정리하여 필요한 것들만 남겼습니다.

데이터베이스 선택 및 사용

데이터베이스를 생성하고 삭제하는 방법을 배웠으니, 이제 특정 데이터베이스를 선택하고 사용하는 방법을 알아봅니다. MySQL 작업의 대부분은 특정 데이터베이스 내에서 이루어지므로 이는 매우 중요한 기술입니다.

데이터베이스 선택

작업할 데이터베이스를 선택하려면 USE 명령 뒤에 데이터베이스 이름을 입력합니다:

USE Hello_World;

다음과 같은 메시지가 나타납니다:

Database changed

이는 이제 'Hello_World' 데이터베이스 내에서 작업 중임을 의미합니다. 별도로 지정하지 않는 한, 이후 실행하는 모든 명령은 이 데이터베이스의 컨텍스트 내에서 실행됩니다.

데이터베이스 내 테이블 목록 조회

현재 데이터베이스의 테이블을 보려면 SHOW TABLES; 명령을 사용합니다:

SHOW TABLES;

'Hello_World' 데이터베이스에 아직 테이블을 생성하지 않았으므로 다음과 같이 표시됩니다:

Empty set (0.00 sec)

새 데이터베이스에서는 정상적인 결과입니다. 테이블을 생성하면 이 목록에 나타나게 됩니다.

다른 데이터베이스로 전환하여 테이블이 있는 경우 어떻게 표시되는지 확인해 보겠습니다:

USE mysql;
SHOW TABLES;

'mysql' 시스템 데이터베이스의 테이블 목록이 표시됩니다:

MariaDB [mysql]> USE mysql;
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A

Database changed
MariaDB [mysql]> SHOW TABLES;
+---------------------------+
| Tables_in_mysql           |
+---------------------------+
| column_stats              |
| columns_priv              |
| db                        |
| event                     |
| func                      |
| general_log               |
| global_priv               |
| gtid_slave_pos            |
| help_category             |
| help_keyword              |
| help_relation             |
| help_topic                |
| index_stats               |
| innodb_index_stats        |
| innodb_table_stats        |
| plugin                    |
| proc                      |
| procs_priv                |
| proxies_priv              |
| roles_mapping             |
| servers                   |
| slow_log                  |
| table_stats               |
| tables_priv               |
| time_zone                 |
| time_zone_leap_second     |
| time_zone_name            |
| time_zone_transition      |
| time_zone_transition_type |
| transaction_registry      |
| user                      |
+---------------------------+
31 rows in set (0.001 sec)

이것으로 데이터베이스 간 전환 및 내용 확인 방법을 알 수 있습니다. 'mysql' 데이터베이스는 MySQL이 권한, 사용자 계정 및 기타 내부 데이터를 관리하는 데 사용하는 시스템 테이블을 포함하고 있습니다. 여러분의 애플리케이션에서는 사용자 정의 데이터베이스 내에 직접 테이블을 생성하고 관리하게 됩니다.

MySQL 메타데이터 검색

마지막 단계에서는 MySQL에서 다양한 유형의 메타데이터를 검색하는 방법을 살펴봅니다. 메타데이터는 "데이터에 관한 데이터"로, 내부에 저장된 데이터가 아닌 데이터베이스 시스템 자체에 대한 정보를 제공합니다. 이 정보는 MySQL 환경을 이해하고 관리하는 데 매우 중요할 수 있습니다.

서버 버전

MySQL 서버 버전을 확인하려면 다음을 사용합니다:

SELECT VERSION();

다음과 유사한 출력이 나타납니다:

MariaDB [mysql]> SELECT VERSION();
+----------------------------------+
| VERSION()                        |
+----------------------------------+
| 10.6.12-MariaDB-0ubuntu0.22.04.1 |
+----------------------------------+
1 row in set (0.000 sec)

이 정보는 현재 MySQL 버전에서 어떤 기능을 사용할 수 있는지 확인하거나, 버전별 문제를 해결할 때 유용합니다.

현재 데이터베이스

현재 사용 중인 데이터베이스를 확인하려면 다음을 사용합니다:

SELECT DATABASE();

출력에는 현재 데이터베이스 이름이 표시되며, 선택된 데이터베이스가 없으면 NULL이 표시됩니다:

MariaDB [mysql]> SELECT DATABASE();
+------------+
| DATABASE() |
+------------+
| mysql      |
+------------+
1 row in set (0.000 sec)

여러 데이터베이스를 작업할 때 현재 어떤 데이터베이스에서 작업 중인지 확인할 때 유용합니다.

현재 사용자

현재 사용자를 확인하려면 다음을 사용합니다:

SELECT USER();

다음과 같은 출력이 나타납니다:

MariaDB [mysql]> SELECT USER();
+----------------+
| USER()         |
+----------------+
| root@localhost |
+----------------+
1 row in set (0.000 sec)

이는 로그인한 MySQL 사용자와 연결된 호스트를 보여줍니다. 현재 권한과 연결 세부 정보를 확인하는 데 유용합니다.

서버 상태 및 변수

모든 서버 상태 지표를 보려면 다음을 사용합니다:

SHOW STATUS;

이 명령은 다양한 카운터와 통계를 포함하여 MySQL 서버의 현재 상태에 대한 풍부한 정보를 제공합니다.

모든 서버 구성 변수를 보려면 다음을 사용합니다:

SHOW VARIABLES;

이 명령은 메모리 사용량, 연결 제한 및 기타 여러 매개변수를 포함하여 MySQL 서버가 어떻게 구성되어 있는지 보여줍니다.

두 명령 모두 방대한 출력을 생성합니다. 터미널에서 스크롤하거나 특정 정보를 필터링할 수 있습니다. 예를 들어, 버퍼 풀과 관련된 변수를 보려면 다음과 같이 합니다:

SHOW VARIABLES LIKE '%buffer%';

이 명령들은 MySQL 서버의 구성과 현재 상태에 대한 광범위한 정보를 제공합니다. 이 메타데이터를 이해하는 것은 성능 최적화, 문제 해결, 그리고 서버가 요구 사항에 맞게 올바르게 구성되었는지 확인하는 데 매우 중요합니다.

예를 들어, SHOW STATUS를 사용하여 실행된 쿼리 수를 확인할 수 있습니다:

SHOW STATUS LIKE 'Questions';

결과는 다음과 같을 수 있습니다:

MariaDB [mysql]> SHOW STATUS LIKE 'Questions';
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| Questions     | 15    |
+---------------+-------+
1 row in set (0.001 sec)

이는 서버가 시작된 이후 실행된 문장의 수를 알려줍니다.

마찬가지로 SHOW VARIABLES를 사용하여 최대 허용 패킷 크기와 같은 중요한 구성 설정을 확인할 수 있습니다:

SHOW VARIABLES LIKE 'max_allowed_packet';

결과는 다음과 같을 수 있습니다:

MariaDB [mysql]> SHOW VARIABLES LIKE 'max_allowed_packet';
+--------------------+----------+
| Variable_name      | Value    |
+--------------------+----------+
| max_allowed_packet | 16777216 |
+--------------------+----------+
1 row in set (0.001 sec)

이는 단일 패킷 또는 생성된/중간 문자열의 최대 크기를 보여주며, 대량의 데이터를 다룰 때 중요할 수 있습니다.

이러한 메타데이터를 검색하고 해석하는 방법을 아는 것은 데이터베이스 관리자나 개발자에게 귀중한 기술입니다. 이를 통해 데이터베이스 시스템의 동작과 성능에 대한 통찰력을 얻을 수 있으며, 이는 최적화와 문제 해결에 필수적입니다.

요약

이번 실습에서는 MySQL 데이터베이스 관리의 기본 측면을 다루었습니다:

  1. MySQL 클라이언트와 mysqladmin 도구를 사용하여 데이터베이스 생성하기
  2. 기존 데이터베이스 목록을 조회하고 그 목적 이해하기
  3. MySQL에서 데이터베이스 이름의 대소문자 구분 이해하기
  4. 데이터베이스를 안전하게 삭제하고 삭제 시 주의사항 숙지하기
  5. 데이터베이스 선택 및 전환하기
  6. MySQL 서버 및 데이터베이스에 대한 중요한 메타데이터 검색하기

이러한 기술들은 MySQL 데이터베이스 작업을 위한 기초를 형성합니다. 데이터베이스 학습을 계속하면서, 이러한 기초를 바탕으로 더 복잡한 데이터베이스 운영 및 관리 작업을 수행하게 될 것입니다.