3. [SQL기초] MySQL과 MariaDB 그리고 커멘드라인 인터페이스 프롬프트 설정

MariaDB

마리아DB 라고 합니다. MySQL이 오라클에 인수되면서 핵심 개발자가 나와서 배포하고 있는 MySQL 호환 RDBMS 입니다. 

MySQL과 99% 이상 호환성을 유지하며, MySQL의 사용 환경을 그대로 사용할 수 있습니다.

실행 서비스 이름까지 MySQL로 유지되고 있기 때문에 MySQL의 대체제로 사용하기에 좋습니다.

사실상 성능이나 기능이 거의 동일하기 때문에 MySQL이 편하면 굳이 MariaDB로 바꿀 필요성도 없기도 합니다.

완전한 오픈소스로 배포하고 있고, 상업적인 용도로 사용하는데도 아무런 제약이 없기 때문에 MySQL의 상용 라이센스에 대한 제약이 불안하면 대안으로 사용할 수 있습니다.

https://mariadb.com/downloads/

 MariaDB Products & Tools Downloads | MariaDBFind MariaDB downloads, connectors, and tools including Community Server, Enterprise Server, ColumnStore, MaxScale and Xpand.mariadb.com

최근 기능을 대폭 보강하면서 오라클 호환성 기능들이 추가되었고 PL/SQL을 지원하는 등 기존 오라클DB 사용자를 끌어안기 위한 노력을 많이 하고 있습니다.

다만 이렇게 MariaDB에 새로운 기능들이 추가되며서 MySQL과의 호환성이 약간씩 떨어지고 있으므로, 기존에 MySQL을 운영하다 대체를 원하는 경우, MySQL과의 호환성 여부를 확인하고 사용해야 합니다.

오라클DB의 운영 비용에 부담이 있고, 미션 크리티컬하지 않은 데이터들은 마리아DB로 마이그레이션하면서 오라클DB의 기술을 마리아DB에서도 유지하면서 사용할 수 있는 장점이 있습니다.

MySQL에 번들되는 데이터베이스 관리 프로그램으로 워크벤치(Workbench)가 있는 것처럼 MariaDB는 오픈소스 데이터베이스 관리 프로그램인 하이디SQL(Heidi SQL)이 번들되어 제공됩니다.

MySQL 워크벤치보다는 기능적으로는 다소 부족하지만, 무료이고 오픈소스입니다.

HeidiSQL은 윈도우용 프로그램이기 때문에 MariaDB 윈도우용 설치 프로그램에만 번들되어 제공됩니다. 다른 운영체제에서는 다른 데이터베이스 관리 프로그램을 사용해야 합니다.

개인 개발자와 코드 컨트리뷰터들이 배포하는 오픈소스 무료 프로그램이지만, 필요한 기능들이 대부분 있고, 엑셀처럼 테이블 쿼리 결과 데이터를 화면에서 직접 편집할 수 있는 기능을 제공합니다.

https://www.heidisql.com/download.php

 Download HeidiSQLAds were blocked - no problem. But keep in mind that developing HeidiSQL, user support and hosting takes time and money. You may want to send a donation instead. Download HeidiSQL 12.0, released on 12 Apr 2022 Please disable your adblocker and reload the pwww.heidisql.com

HeidiSQL 사용 화면

리눅스 사용자는 커멘드라인 MySQL 인터페이스를 사용하는 것을 추천하며, 학습 과정의 모든 예제도 MySQL 커맨드라인 인터페이스를 기준으로 설명합니다.


MySQL 커맨드 인터페이스 프롬프트 변경하기

MySQL 커멘드라인 인터페이스를 실행하면 표시되는 기본 커멘드라인 프롬프트는 "mysql > " 입니다.

그대로 사용해도 되지만, 프롬프트에 더 다양한 정보들을 표시해서 커멘드라인 쿼리 사용 환경을 조금 더 편하게 만들 수 있습니다.

커멘드라인 프롬프트를 변경하는 방법은 몇 가지 방법을 소개합니다.

1. MySQL 커맨드 라인 인터페이스에서 변경하기

다음 커맨드는 프롬프트를 변경하는 MySQL 커맨드입니다.

mysql > PROMPT \u@\h [\d]\_>\_

어려워 보이지만 "PROMPT "는 커맨드라인 프롬프트를 변경하는 MySQL 내장 명령어입니다. 쿼리문도 그렇지만 대소문자를 구분하지 않습니다. "prompt" 사용해도 됩니다.

커맨드 뒤에 공백을 띄운 후 표시한 부분이 프롬프트에 표시되는 내용입니다.

표시 내용중 역슬래시(\)+알파벳문자1개 조합은 내장된 변수값 표시, 또는 예약어입니다. 나머지는 화면에 그대로 출력되는 일반 텍스트가 됩니다. 뒤에서 자세히 설명합니다.

예를 들어 다음과 같이 텍스트로만 프롬프트를 설정하면 프롬프트가 그대로 표시됩니다.

PROMPT 마이SQL > 

변경했던 프롬프트를 기본 프롬프트로 다시 변경하려면 

prompt 

만 입력해서 실행하면 됩니다.

2. my.cnf 환경 설정 파일에 기본 프롬프트 설정하기

매번 커맨드 프롬프트에서 프롬프트 모양을 바꾸는 번거로움을 피하려면 MySQL 환경 설정 파일에 기본 프롬프트를 설정할 수 있습니다.

MySQL 환경 설정 파일인 my.cnf 파일은 /etc/my.cnf 경로에 있습니다.

파일을 연 후 다음과 같이 프롬프트 설정 값을 추가해주면 됩니다.

[mysql]
prompt="\\u@\\h [\\d]\\_>\\_"

[mysql]은 섹션 구분입니다. 없는 경우에만 추가해야 하고 기존에 섹션이 정의되어 있으면 프롬프트 설정행만 섹션 안에 추가해주면 됩니다.

프롬프트 표시 내용은 쌍따옴표(")로 감싸야 하고, 역슬래시(\)는 2개로 표시를 해서 프롬프트 설정 예약어가 셸에서 실행되지 않도록 해야 합니다.

3. MySQL 커맨드 인터페이스 실행 파라미터로 프롬프트 설정하기

다음처럼 MySQL 커맨드 인터페이스를 실행할 때 "--prompt" 옵션으로 프롬프트를 설정할 수 있습니다.

$ mysql --prompt="\u@\h [\d]> " -u root -p

4. MySQL 환경변수를 셸에서 선언하기

MySQL의 셸 환경 변수 키는 "MYSQL_PS1"입니다.

셸 환경에서 다음과 같이 실행하면 MySQL 커맨드라인 프롬프트 설정값이 변경 적용됩니다.

$ export MYSQL_PS1="\U [\D]> "

프롬프트 예약어들

앞서 변수를 사용한 예에서 "\u"는 DB사용자계정, "\h"는 호스트명(IP), "\d"는 현재 데이터베이스 명, "\_"는 공백 1칸이 됩니다. 따라서 "\u@\h [\d]\_>\_"는 "root@192.168.0.10 [shop] > " 와 같이 표시됩니다.

한글이 지원되는 환경에서는 한글로 프롬프트를 만들 수도 있습니다.

프롬프트 문자열에 사용할 수 있는 내장 변수, 또는 예약어는 다음과 같습니다.

일반 변수들

변수 기능
\C 현재 MySQL 계정.
\c 입력한 쿼리문 행 수 카운트. 빈행에 enter만 입력해도 카운트가 올라감.
\d 현재 데이터베이스 명. 선택된 DB가 없으면 "none" 표시
\h 서버 호스트 명
\l 현재 쿼리 종료 문자 표시(Delimiter). 기본값은 ";"
\n 새로운  생성 구분자.
\p TCP/IP 포트, 또는 socket 연결 정보 표시.
\S 세미콜론(;) 표시.
\t Tab 문자 표시
\U 현재 사용중인 사용자@호스트명 표시. "\u@\h"와 같음.
\u 현재 사용자 계정.
\v DB 서버 버전.
\_ 공백 한 개. 또는 "\ " 처럼 역슬래시 뒤에 공백을 하나 넣어도 동일함
\ 프롬프트에 아무것도 표시 안함.
\'  따옴표
\"  따옴표
\\ “\” 문자 표시

날짜 관련 변수들

변수 기능
\D 날짜 전체 표시. 예) Wed Jul 20 12:49:06 2022
\m 현재 시간의 
\O 현재  세자리 표시. 예) Jan, Feb, …
\o 현재  숫자 표시(1~2자리)
\P am/pm 표시.
\R 현재 시간을 24시간으로 표시. (0–23)
\r 현재 시간을 12시간으로 표시. (01~12)
\s 현재 시간의 초 표시.
\w 현재 요일 3자리 표시. 예) Mon, Tue, Wed ...
\Y 현재 연 4자리 표시.
\y 현재 연도 2자리 표시.

예약어들을 활용해 다음과 같은 다양한 프롬프트를 만들 수 있습니다.

prompt \U [\D]>

prompt \R:\m \U >

prompt \u@\h [\d]\_>\_