MySQL Custom command-line client

MySQL Command-Line Client에 내 편의대로 단축키 기능을 넣은 실행 파일을 공유해보려고 한다. 이전에 관리하던 블로그에서 한 번 공유한 적이 있었는데, 일부 기능을 좀 더 추가하였다. 실행 파일은 아래 경로에서 압축 파일로 다운로드 받을 수 있다. (순서대로 8.0 tar.gz 파일, 9.0 버전의 소스)

8.0 버전의 mysql 실행 파일은 라이브러리 문제로 9.0에서 실행할 수 없으니, 설치된 MySQL 서버가 9.0 버전 이상이라면 아래 9.0 버전의 mysql.cc 파일을 빌드하여 사용해야 한다.

https://github.com/godtechwak/mysql-server-custom/tree/8.0/mysql-command-cli

https://github.com/godtechwak/mysql-server-custom/blob/9.0-mysql-cli-custom/client/mysql.cc

Mx arm64, RedHat 2가지의 버전이 존재하는데, 각 환경에 맞는 파일을 다운받아서 사용하면 된다. 더 많은 기능을 추가하고 싶다면 mysql.cc 파일을 참고하면 되겠다.

  1. How to Use
    1. 1. \\dd 또는 \\dd<number>
    2. 2. \\tt 또는 \\tt <table_name>
    3. 3. \\tc<number> 또는 \\tc <table_name>
    4. 4. \\ts<number> 또는 \\ts <table_name>
    5. 5. \\gs <status_name> 또는 \\ss <status_name>
    6. 6. \\gv <variable_name> 또는 \\sv <status_name>
    7. 7. \\dc <database_name>
    8. 8. \\dds 또는 \\dds<number>
    9. 9. \\ps 또는 \\psf
    10. 10. \\uu 또는 \\uuc<number> 또는 \\uug<number>
    11. 11. \\qq<number> <table_name>
    12. 12. \\ml 또는 \\dl
    13. 13. \\aurora
    14. 14. \\aurorakill 또는 \\kill

How to Use

적용하는 것은 어렵지 않다. 다운받아서 압축 해제한 실행 파일(mysql)을 실행 경로(ex:/usr/bin)에만 넣어주면 된다. 그리고 평소 접속하는 것처럼 똑같이 접속하면 된다.

mysql -u <user_name> -p -h <ip address>

다음은 어떤 기능이 추가했는지 살펴보도록 하겠다.

1. \\dd 또는 \\dd<number>

\\dd 명령은 show databases 명령의 단축 명령이다. \\dd 명령 수행 후 출력되는 숫자를 \\dd<number>와 같이 재수행하면 숫자에 해당하는 스키마를 사용하도록 변경된다.

mysql[(none)]> \\dd
+--------+----------------------+
| number | SCHEMA_NAME          |
+--------+----------------------+
|      1 | business             |
|      2 | common               |
|      3 | information_schema   |
|      4 | korea                |
|      5 | mysql                |
|      6 | hero                 |
|      7 | performance_schema   |
|      8 | real                 |
|      9 | silver               |
|     10 | sys                  |
|     11 | test                 |
|     12 | test2                |
+--------+----------------------+
mysql[(none)]> \\dd4
Query OK, 0 rows affected (0.00 sec)

mysql[korea]> 

2. \\tt 또는 \\tt <table_name>

\\tt 명령은 show tables 명령의 단축 명령이다. 특정 논리 DB에 생성된 테이블 목록을 조회할 수 있으며, \\tt <table_name> 명령을 수행하면 LIKE ‘%%’ 검색으로 관련된 테이블 목록만 조회한다.

mysql[korea]> \\tt
+--------+------------+
| number | TABLE_NAME |
+--------+------------+
|      1 | bronze     |
|      2 | godiva     |
|      3 | gold       |
|      4 | silver     |
+--------+------------+

mysql[korea]> \\tt go
+------------------------+
| Tables_in_korea (%go%) |
+------------------------+
| godiva                 |
| gold                   |
+------------------------+

mysql[korea]> \\tt gol
+-------------------------+
| Tables_in_korea (%gol%) |
+-------------------------+
| gold                    |
+-------------------------+

3. \\tc<number> 또는 \\tc <table_name>

\\tc 명령은 show create table ‘<table_name>’ 명령의 단축 명령이다. \\tt 명령 수행 후에 \\tc<number> 또는 \\tc <table_name> 명령을 수행하면 선택한 테이블의 create table문을 조회할 수 있다.

mysql[korea]> \\tt
+--------+------------+
| number | TABLE_NAME |
+--------+------------+
|      1 | bronze     |
|      2 | godiva     |
|      3 | gold       |
|      4 | silver     |
+--------+------------+

mysql[korea]> \\tc4
This is vertical*************************** 1. row ***************************
       Table: silver
Create Table: CREATE TABLE `silver` (
  `id` int NOT NULL AUTO_INCREMENT,
  `created_at` datetime DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=euckr

mysql[korea]> \\tc bronze
+--------+----------------------------+
| Table  | Create Table               |                                                                                                                                                                                 
+--------+----------------------------+
| bronze | CREATE TABLE `bronze` (
  `my_row_id` bigint unsigned NOT NULL AUTO_INCREMENT /*!80023 INVISIBLE */,
  `id` int DEFAULT NULL,
  PRIMARY KEY (`my_row_id`)
) ENGINE=InnoDB DEFAULT CHARSET=euckr |
+--------+-----------------------------

4. \\ts<number> 또는 \\ts <table_name>

\\ts 명령은 SHOW TABLE STATUS LIKE ‘<table_name>’ 명령의 단축 명령이다. \\tt 명령 수행 후에 \\ts<number> 또는 \\ts <table_name> 명령을 수행하면 선택한 테이블의 상태(status)를 조회할 수 있다.

mysql[korea]> \\tt
+--------+------------+
| number | TABLE_NAME |
+--------+------------+
|      1 | bronze     |
|      2 | godiva     |
|      3 | gold       |
|      4 | silver     |
+--------+------------+

mysql[korea]> \\ts4
This is vertical*************************** 1. row ***************************
           Name: silver
         Engine: InnoDB
        Version: 10
     Row_format: Dynamic
           Rows: 2
 Avg_row_length: 8192
    Data_length: 16384
Max_data_length: 0
   Index_length: 0
      Data_free: 0
 Auto_increment: 2
    Create_time: 2023-09-12 20:17:33
    Update_time: NULL
     Check_time: NULL
      Collation: euckr_korean_ci
       Checksum: NULL
 Create_options:
        Comment:
mysql[korea]> \\ts bronze
This is vertical*************************** 1. row ***************************
           Name: bronze
         Engine: InnoDB
        Version: 10
     Row_format: Dynamic
           Rows: 0
 Avg_row_length: 0
    Data_length: 16384
Max_data_length: 0
   Index_length: 0
      Data_free: 0
 Auto_increment: 1
    Create_time: 2024-05-01 13:01:01
    Update_time: NULL
     Check_time: NULL
      Collation: euckr_korean_ci
       Checksum: NULL
 Create_options:
        Comment:

5. \\gs <status_name> 또는 \\ss <status_name>

\\gs 명령은 SHOW GLOBAL STATUS LIKE ‘<status_name>’ 명령의 단축 명령이고, \\ss 명령은 SHOW SESSION STATUS LIKE ‘<status_name>’ 명령의 단축 명령이다.

mysql> \\gs (또는 \\ss)
+-------------------+-------+
| Variable_name     | value |
+-------------------+-------+
| Aborted_clients.  | 15    |
| Aborted_connects  | 1     |
...
...
(omitted)
mysql> \\gs (또는 \\ss) connection
+-----------------------------------+---------------------+
| Variable_name                     | Value               |
+-----------------------------------+---------------------+
| Connection_errors_accept          | 0                   |
| Connection_errors_internal        | 0                   |
| Connection_errors_max_connections | 0                   |
| Connection_errors_peer_address    | 0                   |
| Connection_errors_select          | 0                   |
| Connection_errors_tcpwrap         | 0                   |
| Connections                       | 66                  |
| Global_connection_memory          | 0                   |
| Max_used_connections              | 5                   |
| Max_used_connections_time         | 2024-05-01 13:22:48 |
| Mysqlx_connection_accept_errors   | 0                   |
| Mysqlx_connection_errors          | 0                   |
| Mysqlx_connections_accepted       | 0                   |
| Mysqlx_connections_closed         | 0                   |
| Mysqlx_connections_rejected       | 0                   |
+-----------------------------------+---------------------+

6. \\gv <variable_name> 또는 \\sv <status_name>

\\gv 명령은 SHOW GLOBAL VARIABLES LIKE ‘<variable_name>’ 명령의 단축 명령이고, \\sv 명령은 SHOW SESSION VARIABLES LIKE ‘<variable_name>’ 명령의 단축 명령이다.

mysql> \\gv (또는 \\sv)
+-----------------------------+-------+
| Variable_name               | value |
+-----------------------------+-------+
| activate_all_roles_on_login | OFF   |
| admin_address               |       |
...
...
(omitted)
mysql> \\gv (또는 \\sv) buffer_pool
+-------------------------------------+----------------+
| Variable_name                       | Value          |
+-------------------------------------+----------------+
| innodb_buffer_pool_chunk_size       | 134217728      |
| innodb_buffer_pool_dump_at_shutdown | ON             |
| innodb_buffer_pool_dump_now         | OFF            |
| innodb_buffer_pool_dump_pct         | 25             |
| innodb_buffer_pool_filename         | ib_buffer_pool |
| innodb_buffer_pool_in_core_file     | ON             |
| innodb_buffer_pool_instances        | 1              |
| innodb_buffer_pool_load_abort       | OFF            |
| innodb_buffer_pool_load_at_startup  | ON             |
| innodb_buffer_pool_load_now         | OFF            |
| innodb_buffer_pool_size             | 134217728      |
+-------------------------------------+----------------+

7. \\dc <database_name>

\\dc 명령은 SHOW CREATE DATABASE <database_name> 명령의 단축 명령이다.

mysql> \\dc korea
+----------+--------------------------------------------------------------------------+
| Database | Create Database                                                          |                         
+----------+--------------------------------------------------------------------------+
| korea    | CREATE DATABASE `korea` /*!40100 DEFAULT CHARACTER SET euckr */ /*!80016  DEFAULT ENCRYPTION='N' */                                                             |
+----------|--------------------------------------------------------------------------+

8. \\dds 또는 \\dds<number>

\\dds 명령은 데이터베이스별 사이즈를 조회할 수 있다. \\dds 명령 수행 후에 \\dds<number> 명령을 수행하면 선택한 데이터베이스의 테이블별 사이즈 및 로우 수를 조회할 수 있다.

mysql> \\dds
+--------+----------------------+-----------------+-------------------+
| number | table_schema         | index_data_size | Percentage(%)     |
+--------+----------------------+-----------------+-------------------+
|      1 | information_schema   |    0 bytes      | __________(0.0%)  |
|      2 | performance_schema   |    0 bytes      | __________(0.0%)  |
|      3 | sys                  | 16.00 KiB       | __________(0.0%)  |
|      4 | silver               | 16.00 KiB       | __________(0.0%)  |
|      5 | korea                | 64.00 KiB       | __________(0.0%)  |
|      6 | real                 | 112.00 KiB      | __________(0.0%)  |
|      7 | hero                 | 976.00 KiB      | __________(0.1%)  |
|      8 | common               | 2.11 MiB        | __________(0.1%)  |
|      9 | mysql                | 2.89 MiB        | __________(0.2%)  |
|     10 | test                 | 20.03 MiB       | __________(1.1%)  |
|     11 | business             | 1.76 GiB        | ++++++++++(98.6%) |
+--------+----------------------+-----------------+-------------------+

mysql> \\dds11
+------------+--------------+-----------------+-------------------+------------+
| table_name | table_schema | index_data_size | Percentage(%)     | table_rows |
+------------+--------------+-----------------+-------------------+------------+
| TBLX       | business     | 32.00 KiB       | __________(0.0%)  | 5          |
| business   | business     | 818.72 MiB      | +++++_____(45.3%) | 2,028,511  |
| test       | business     | 987.00 MiB      | +++++_____(54.7%) | 16,045,363 |
+---------------------------+-----------------+-------------------+------------+

9. \\ps 또는 \\psf

\\ps 명령은 SHOW PROCESSLIST 명령의 단축 명령이고, \\psf 명령은 SHOW FULL PROCESSLIST 명령의 단축 명령이다.

mysql> \\ps
+----+-----------------+-----------+-------+---------+--------+------------------------+------------------+
| Id | User            | Host      | db    | Command | Time   | State                  | Info             |
+----+-----------------+-----------+-------+---------+--------+------------------------+------------------+
|  5 | event_scheduler | localhost | NULL  | Daemon  | 151869 | Waiting on empty queue | NULL             |
| 56 | root            | localhost | NULL  | Sleep   |  22847 |                        | NULL             |
| 57 | root            | localhost | test  | Sleep   |  23982 |                        | NULL             |
| 64 | root            | localhost | korea | Sleep   |  18275 |                        | NULL             |
| 65 | root            | localhost | NULL  | Sleep   |  17244 |                        | NULL             |
| 67 | root            | localhost | NULL  | Sleep   |  11165 |                        | NULL             |
| 71 | root            | localhost | NULL  | Query   |      0 | init                   | SHOW PROCESSLIST |
+----+-----------------+-----------+-------+---------+--------+------------------------+------------------+

mysql> \\psf
+----+-----------------+-----------+-------+---------+--------+------------------------+-----------------------+
| Id | User            | Host      | db    | Command | Time   | State                  | Info                  |
+----+-----------------+-----------+-------+---------+--------+------------------------+-----------------------+
|  5 | event_scheduler | localhost | NULL  | Daemon  | 151925 | Waiting on empty queue | NULL                  |
| 56 | root            | localhost | NULL  | Sleep   |  22903 |                        | NULL                  |
| 57 | root            | localhost | test  | Sleep   |  24038 |                        | NULL                  |
| 64 | root            | localhost | korea | Sleep   |  18331 |                        | NULL                  |
| 65 | root            | localhost | NULL  | Sleep   |  17300 |                        | NULL                  |
| 67 | root            | localhost | NULL  | Sleep   |  11221 |                        | NULL                  |
| 71 | root            | localhost | NULL  | Query   |      0 | init                   | SHOW FULL PROCESSLIST |
+----+-----------------+-----------+-------+---------+--------+------------------------+-----------------------+

10. \\uu 또는 \\uuc<number> 또는 \\uug<number>

\\uu 명령은 mysql.user 테이블에서 user와 host 필드를 조회하는 단축 명령이며, \\uu 명령 수행 후에 \\uuc<number> 명령과 \\uug<number> 명령으로 각각 SHOW CREATE USER ‘<user_name>’@'<host>’ 명령과 SHOW GRANTS FOR ‘<user_name>’@'<host>’ 명령의 단축 명령을 수행할 수 있다.

mysql> \\uu
+--------+-----------+-----------+
| number | user      | host      |
+--------+-----------+-----------+
|      1 | exporter  | %         |
|      2 | nice      | %         |
|      3 | root      | %         |
|      4 | yongdal   | 10.%      |
|      5 | silver    | 127.0.0.1 |
|      6 | root      | localhost |
|      7 | silver    | localhost |
|      8 | silverlee | localhost |
|      9 | test      | localhost |
+--------+-----------+-----------+

mysql> \\uuc7
+---------------------------------------------------------------------------------------+
| CREATE USER for silver@127.0.0.1                                                      |                                                                                                                                                                                                             
+---------------------------------------------------------------------------------------+
| CREATE USER `silver`@`127.0.0.1` IDENTIFIED WITH 'caching_sha2_password' AS '$A$005$B8cbXLhzq:MWO&p/Sgs/wfMu8p6.tGDu8SMjB9fCvZ9wand9nF0rce7s3' REQUIRE NONE PASSWORD EXPIRE DEFAULT ACCOUNT UNLOCK PASSWORD HISTORY DEFAULT PASSWORD REUSE INTERVAL DEFAULT PASSWORD REQUIRE CURRENT DEFAULT |

mysql> \\uug1
+--------------------------------------------------------------------+
| Grants for exporter@%                                              |
+--------------------------------------------------------------------+
| GRANT SELECT, PROCESS, REPLICATION CLIENT ON *.* TO `exporter`@`%` |
+--------------------------------------------------------------------+

11. \\qq<number> <table_name>

\\qq 명령은 특정 테이블의 데이터를 LIMIT까지 조회할 수 있는 단축 명령어이다. \\qq<number> <table_name> 명령에서 <number>에 LIMIT 값을 넣고, 조회하려는 테이블명을 적어주면 된다.

mysql> \\qq10 test2
+----+----------+------------+--------+----------------------------+
| id | group_id | member_id  | remark | created_at                 |
+----+----------+------------+--------+----------------------------+
|  1 | BBBBBBB  | 2b0377529e | test58 | 2023-12-20 11:47:51.000000 |
|  2 | BBBBBBB  | 2fa7b0e89e | test7  | 2023-12-20 11:47:59.000000 |
|  3 | BBBBBBB  | aaa123bbb  | test61 | 2023-12-20 11:48:02.000000 |
|  4 | BBBBBBB  | aaa123bbb  | test87 | 2023-12-20 11:48:04.000000 |
|  5 | BBBBBBB  | aaa123bbb  | test52 | 2023-12-20 11:48:11.000000 |
|  6 | BBBBBBB  | 373f55f49e | test1  | 2023-12-20 11:48:12.000000 |
|  7 | BBBBBBB  | 379f25429e | test48 | 2023-12-20 11:48:12.000000 |
|  8 | BBBBBBB  | 37ce484a9e | test38 | 2023-12-20 11:48:13.000000 |
|  9 | BBBBBBB  | 39b6a9409e | test46 | 2023-12-20 11:48:16.000000 |
| 10 | BBBBBBB  | 3df3c5749e | test18 | 2023-12-20 11:48:23.000000 |
+----+----------+------------+--------+----------------------------+

12. \\ml 또는 \\dl

\\ml 명령은 메타데이터 잠금을 조회하는 단축 명령이며, \\dl은 테이블 이하의 세부수준 잠금을 확인할 수 있는 단축 명령이다.

mysql> \\ml
+-----------------+-------------------+-------------+----------------+---------------------+---------------+-------------+
| owner_thread_id | object_type       | COLUMN_NAME | object_name    | lock_type           | lock_duration | lock_status |
+-----------------+-------------------+-------------+----------------+---------------------+---------------+-------------+
|             122 | TABLE             | NULL        | test           | SHARED_WRITE        | TRANSACTION   | GRANTED     |
|             126 | TABLE             | NULL        | metadata_locks | SHARED_READ         | TRANSACTION   | GRANTED     |
|             112 | TABLE             | NULL        | silver         | SHARED_READ_ONLY    | TRANSACTION   | GRANTED     |
|             112 | SCHEMA            | NULL        | NULL           | INTENTION_EXCLUSIVE | TRANSACTION   | GRANTED     |
|             112 | COLUMN STATISTICS | group_id    | silver         | SHARED_READ         | STATEMENT     | GRANTED     |
|             112 | COLUMN STATISTICS | id          | silver         | SHARED_READ         | STATEMENT     | GRANTED     |
|             112 | COLUMN STATISTICS | remark      | silver         | SHARED_READ         | STATEMENT     | GRANTED     |
|             112 | COLUMN STATISTICS | updated_at  | silver         | SHARED_READ         | STATEMENT     | GRANTED     |
|             112 | COLUMN STATISTICS | user_id     | silver         | SHARED_READ         | STATEMENT     | GRANTED     |
+-----------------+-------------------+-------------+----------------+---------------------+---------------+-------------+

mysql> \\dl
+-----------+-------------+------------+-----------+---------------+-------------+------------------------+
| thread_id | object_name | index_name | lock_type | lock_mode     | lock_status | lock_data              |
+-----------+-------------+------------+-----------+---------------+-------------+------------------------+
|       122 | test        | NULL       | TABLE     | IX            | GRANTED     | NULL                   |
|       122 | test        | ix_a       | RECORD    | X             | GRANTED     | supremum pseudo-record |
|       122 | test        | ix_a       | RECORD    | X             | GRANTED     | 8, 10                  |
|       122 | test        | ix_a       | RECORD    | X             | GRANTED     | 11, 5                  |
|       122 | test        | PRIMARY    | RECORD    | X,REC_NOT_GAP | GRANTED     | 10                     |
|       122 | test        | PRIMARY    | RECORD    | X,REC_NOT_GAP | GRANTED     | 5                      |
+-----------+-------------+------------+-----------+---------------+-------------+------------------------+

13. \\aurora

\\aurora 명령은 브라우저에 RDS for MySQL stored procedure reference 웹페이지를 여는 단축 명령이다.

mysql> \\aurora

14. \\aurorakill 또는 \\kill

\\aurorakill 명령과 \\kill 명령은 MySQL 서버에 접속된 특정 커넥션을 끊어내기 위한 단축 명령이다. 해당 명령을 수행하면 각각 MySQL 서버 환경에 맞는 kill 커맨드 생성 데이터가 조회된다.

mysql> \\aurorakill
┌─────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┐
│ Kill connection query for Aurora MySQL                                                                                              │
├─────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┤
│ pager sed 's/|//g'; select concat('CALL mysql.rds_kill(',id,');') from information_schema.processlist where user='{user}'; nopager; │
└─────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┘
mysql> \\kill
┌─────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┐
│ Kill connection query for MySQL                                                                                     │
├─────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┤
│ pager sed 's/|//g'; select concat('kill ',id,';') from information_schema.processlist where user='{user}'; nopager; │
└─────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┘

댓글 남기기