본문 바로가기
sql

Real Mysql 2장

by 스르나 2024. 4. 25.

 

접속 방법

mysql -uroot -p --host=localhost --socket=/tmp/mysql.sock
mysql -uroot -p --host=127.0.0.1 --port=3306
mysql -uroot -p

sock파일을 명시해서 접속을 할 수 있고, 원격 서버에 있는 Mysql에 접속 시에는 2번째 방식으로 접속하는 방법이 있다. 마지막 방법은 그냥 자동으로 localhost, 3306으로 붙는 방법이다. 이때 sock파일은 설치된 mysql의 설정을 따라간다. 그래서 sock이 없다고 하면 의도적으로 첫 번째 방법으로 붙으면 된다.

 

 

My.cnf / My.ini

Mysql의 설정 파일이다. 해당 설정 파일은 Mysql 시작할 때 한번 읽고 그 이후에는 읽지 않는다.

위치는 아래 명령어로 나온 항목 중 basedir밑에 있는 것이 일반적이다(window msi로 설치 시 C드라이브 아래 Programdata밑에 my.ini라는 이름으로 존재한다.

show global variables like '%dir'

 

설정파일에서 읽은 내용은 주로 메모리 관련, 작동 방식에 대한 내용이다.

각 설정에 대한 내용은 아래에 자세히 나와 있다.

https://dev.mysql.com/doc/refman/8.0/en/server-system-variable-reference.html

테이블의 Header는 다음과 같은 의미이다.

  • Cmd-Line: 커맨드라인으로 해당 값을 변경할 수 있는지 여부
  • Option File: 설정파일로 제어가 가능한지 여부
  • System Var: 시스템변수인지 아닌지에 대한 여부
  • Var Scope: 시스템 변수가 미치는 영향이 global인지 session단위인지 나타낸다.
  • Dynamic: 동적 변수인지 정적변수인지에 대한 내용이다.

 

글로벌, 세션 변수

글로벌 변수는 해당 설정값이 Mysql전체에 영향을 주고, 세션변수는 Mysql에 접속한 클라이언트와의 연결에 영향을 준다.(즉, 클라이언트에 부여하는 값이다)

세션변수는 각 클라이언트가 개별 커넥션을 가져갈 때 이용하며, 각기 다른 설정을 가질 수 있다. 대표적인 예시로 autocommit이 있다. autocommit을 Off로 설정한 커넥션은 쿼리의 반영을 즉시하지 않고, commit 명령이 와야한다.

설정의 Var Scope가 Both인경우는 설정파일을 이용해 세션변수 또한 변경이 가능한 것을 의미한다. Var Scope가 세션인 경우는 설정파일로의 설정이 불가하고, 세션 생성시 만든 설정을 이용한다. 그리고 Mysql 서버에서 임의로 수정이 불가하다.

 

정적, 동적 변수

설정 값들중 서버 기동중 변경이 가능한 것이 동적 변수이고, 불가하고 재시작이 필요한 경우가 정적 변수이다.

동적 변수는 SET명령어로 수정이 가능하다. global을 쓰면 시스템변수의 변경, 안쓰면 현재 세션에서의 변경이다(물론 global 변수는 global을 무조건 붙여야한다)

set (global) wait_timeout= 20000;

wait_timeout(세션변수) 변경 예시

 

set  wait_timeout = 20000;
show variables like '%wait_timeout';

변경 내용

show global variables like '%wait_timeout';

global은 영향을 안받는다.

세션만 변경시 글로벌은 그대로인 것을 볼 수 있다.

하지만, 해당 변경은 현재 실행중인 Mysql 인스턴스에서만 유효하고, 재시작시 설정파일의 값으로 다시 돌아간다. 그래서 같이 바꾸기 위해서는 SET PERSIST가 필요하다.

 

SET PERSIST max_connections=5000;

 

SER PERSIST를 이용하면 설정파일 또한 변경이 된다. SET PERSIST를 이용하면 변경된 내용은 mysqld-auto.cnf파일에 쓰여지고, mysql 시작이 my.cnf파일과 함께 읽어서 적용한다.

  • mysqd-auto.cnf내용
{"Version": 2, "mysql_dynamic_parse_early_variables": {"max_connections": {"Value": "300", "Metadata": {"Host": "localhost", "User": "root", "Timestamp": 1689003097184891}}}}

(현재 인스턴스는 적용하지 않고 재시작시 적용이 필요하면 SET PERSIST_ONLY를 이용하면 된다)

'sql' 카테고리의 다른 글

SQL 실습환경 준비하기 - Mysql  (0) 2021.03.01