MySQL 을 이용한 데이터베이스 관리 기본

MySQLBeginner
지금 연습하기

소개

이 랩에서는 MySQL 을 사용하여 데이터베이스 관리의 기본 개념을 탐구합니다. 데이터베이스 생성 및 삭제, 데이터베이스 선택, 메타데이터 검색을 다룰 것입니다. 이러한 기술은 초보자부터 숙련된 개발자에 이르기까지 데이터베이스를 사용하는 모든 사람에게 필수적입니다. 이 랩을 마치면 기본적인 MySQL 데이터베이스 작업에 대한 탄탄한 기반을 갖게 될 것입니다.

학습 목표

이 랩을 완료하면 다음을 수행할 수 있습니다.

  • 다양한 방법을 사용하여 데이터베이스를 생성하고 삭제합니다.
  • 데이터베이스를 선택하고 전환합니다.
  • MySQL 서버 및 데이터베이스에 대한 중요한 메타데이터를 검색합니다.
  • MySQL 에서 데이터베이스 이름의 대소문자 구분을 이해합니다.
이것은 가이드 실험입니다. 학습과 실습을 돕기 위한 단계별 지침을 제공합니다.각 단계를 완료하고 실무 경험을 쌓기 위해 지침을 주의 깊게 따르세요. 과거 데이터에 따르면, 이것은 초급 레벨의 실험이며 완료율은 86%입니다.학습자들로부터 99%의 긍정적인 리뷰율을 받았습니다.

데이터베이스 생성 및 목록

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

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

이제 MySQL 클라이언트를 시작해 보겠습니다.

sudo mysql -u root

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

MySQL client terminal screenshot

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을 사용하여 새 데이터베이스를 만들어 보겠습니다.

mysqladmin -u root -p create hello_world2

비밀번호를 묻는 메시지가 표시되면 Enter 키를 누르십시오 (LabEx VM 에서 root MySQL 사용자는 비밀번호가 설정되어 있지 않다는 것을 기억하십시오).

방금 사용한 mysqladmin 명령은 다음과 같이 분석됩니다.

  • -u root: root 사용자로 연결함을 지정합니다.
  • -p: mysqladmin에게 비밀번호를 묻도록 지시합니다.
  • 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 클라이언트를 종료한 다음 터미널에서 다음 명령을 실행합니다.

mysqladmin -u root -p drop hello_world2

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

Enter password:
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';

다음과 같은 출력을 얻을 수 있습니다.

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 데이터베이스 작업의 기초를 형성합니다. 데이터베이스 여정을 진행하면서 이러한 기본 사항을 기반으로 보다 복잡한 데이터베이스 작업 및 관리 작업을 수행하게 됩니다.