λ³Έλ¬Έ λ°”λ‘œκ°€κΈ°
πŸ’» DEV/SQL

[Real MySQL] 02_μ„€μΉ˜μ™€ μ„€μ •

by vodkassi 2021. 10. 13.
728x90

λ°±μ—”λ“œ 지식 쀑 λΆ€μ‘±ν•˜λ‹€κ³  μ—¬κ²¨μ§€λŠ” DB λ₯Ό 더 ν•™μŠ΅ν•˜κΈ° μœ„ν•΄ Real MySQL μ„œμ μ„ 읽기 μ‹œμž‘ν–ˆλ‹€. μ•žμœΌλ‘œ μ—¬λŸ¬ 차둀에 걸쳐 μ±…μ˜ λ‚΄μš©μ„ 정리해 λ‚˜κ°€κ³ μž ν•œλ‹€.

 

이번 κΈ€μ—μ„œλŠ” MySQL μ„€μΉ˜ 이후 μ„œλ²„λ₯Ό μ‹œμž‘ν•˜λŠ” λ‹¨κ³„μ—μ„œ μ•Œμ•„λ‘μ–΄μ•Ό ν•˜λŠ” λͺ‡ 가지 λͺ…령어와 κ°œλ…μ„ μš”μ•½ν•΄λ³Έλ‹€. 

 

✨  μ„œλ²„ μ—°κ²° 방법 

 

MySQL μ„œλ²„μ— μ ‘μ†ν•˜λŠ” 방법은 터미널에 mysql λͺ…λ Ήμ–΄λ₯Ό μ‹€ν–‰ν•˜λŠ” 것인데, 이 λ•Œ λͺ…λ Ήμ–΄μ˜ μ„ΈλΆ€ λ‚΄μš©μ΄ μ„Έ κ°€μ§€λ‘œ λ‚˜λ‰˜κ²Œ λœλ‹€. 

 

첫 번째 방법은 MySQL μ†ŒμΌ“ νŒŒμΌμ„ μ΄μš©ν•΄ μ ‘μ†ν•˜λŠ” 것이닀.

 

mysql -u root -p --host=localhost --socket=/tmp/mysql.sock

 

πŸ’‘ μ†ŒμΌ“μ΄λž€, ν•˜λ‚˜ μ΄μƒμ˜ 단말에 μœ„μΉ˜ν•œ 두 개의 λ‹€λ₯Έ ν”„λ‘œμ„ΈμŠ€κ°€ 톡신할 수 μžˆλ„λ‘ ν•˜λŠ” μΌμ’…μ˜ 쒅착점이닀. λ¦¬λˆ…μŠ€μ—μ„œλŠ” λͺ¨λ“  것이 파일 λ‹¨μœ„λ‘œ μ²˜λ¦¬λ˜λŠ”λ°, ν”„λ‘œμ„ΈμŠ€λŠ” νŒŒμΌλ“€μ— μ ‘κ·Όν•  λ•Œ fd λ₯Ό μ‚¬μš©ν•˜κ²Œ λœλ‹€. 

 

두 번째 방법은 TCP/IP λ₯Ό 톡해 둜컬호슀트둜 μ ‘μ†ν•˜λŠ” 것인데, 원격 ν˜ΈμŠ€νŠΈμ— μ ‘μ†ν•˜λŠ” 경우 λ°˜λ“œμ‹œ 이 방법을 μ‚¬μš©ν•΄μ•Ό ν•œλ‹€. 이 방법을 μ“Έ λ•Œ 호슀트둜 localhost λ₯Ό λͺ…μ‹œν•˜λŠ” 것과 127.0.0.1을 λͺ…μ‹œν•˜λŠ” 것은 쑰금 λ‹€λ₯΄λ‹€. μ „μžμ˜ 경우 μ•žμ„œ λ§ν–ˆλ˜ μ†ŒμΌ“ νŒŒμΌμ„ 톡해 μ„œλ²„μ— μ ‘μ„ν•˜κ²Œ 되며, IPC (Inter Process Communication) 을 톡해 ν†΅μ‹ ν•œλ‹€. ν•˜μ§€λ§Œ ν›„μžμ˜ 경우 TCP/IP 톡신 방식을 μ‚¬μš©ν•œλ‹€. 

 

mysql -u root -p --host=127.0.0.1 --port=3306

 

μ„Έ 번째 방법은 호슀트 μ£Όμ†Œμ™€ 포트λ₯Ό λͺ…μ‹œν•˜μ§€ μ•Šμ§€λ§Œ κΈ°λ³Έκ°’μœΌλ‘œ ν˜ΈμŠ€νŠΈλŠ” localhost κ°€ λ˜μ–΄ μ†ŒμΌ“ νŒŒμΌμ„ μ‚¬μš©ν•˜λ©°, μ†ŒμΌ“ 파일의 μœ„μΉ˜λŠ” MySQL μ„œλ²„μ˜ μ„€μ • νŒŒμΌμ—μ„œ μ½λŠ”λ‹€. 

 

mysql -u root -p

 

 

 

✨  μ„œλ²„ μ—…κ·Έλ ˆμ΄λ“œ

 

MySQL μ„œλ²„λ₯Ό μ—…κ·Έλ ˆμ΄λ“œν•˜λŠ” 방법은 두 가지이닀.

 

1) In-place upgrade: μ„œλ²„μ˜ 데이터 νŒŒμΌμ„ κ·ΈλŒ€λ‘œ 두고 μ—…κ·Έλ ˆμ΄λ“œ

2) Logical upgrade: μ„œλ²„μ˜ 데이터λ₯Ό SQL λ¬Έμ΄λ‚˜ 파일둜 λ€ν”„ν•œ ν›„, μƒˆλ‘œ μ—…κ·Έλ ˆμ΄λ“œ 된 λ²„μ „μ˜ MySQL μ„œλ²„μ—μ„œ λ€ν”„λœ 데이터λ₯Ό 적재

 

μ—…κ·Έλ ˆμ΄λ“œ μ‹œ κ³ λ €ν•΄μ•Ό ν•  점 λ˜ν•œ 두 가지이닀.

 

1) λ§ˆμ΄λ„ˆ 버전 κ°„ μ—…κ·Έλ ˆμ΄λ“œ (ex: 8.0.16 -> 8.0.21): 데이터 파일 λ³€κ²½ 없이 진행

2) 메이저 버전 κ°„ μ—…κ·Έλ ˆμ΄λ“œ (ex: 5.6 -> 5.7): 두 단계 이상 μ—…κ·Έλ ˆμ΄λ“œν•  경우 (ex. 5.5 -> 5.7) 데이터 파일 λ³€κ²½ ν•„μš”, μ΄λ•Œ mysqldump ν”„λ‘œκ·Έλž¨μœΌλ‘œ 데이터 λ°±μ—… ν›„ μƒˆλ‘œ κ΅¬μΆ•λœ μ„œλ²„μ— 데이터 적재 κ°€λŠ₯ 

 

❗in-place upgrade λ₯Ό ν•˜λŠ” 경우, 메이저 버전 μ—…κ·Έλ ˆμ΄λ“œκ°€ νŠΉμ • λ§ˆμ΄λ„ˆ λ²„μ „μ—μ„œλ§Œ κ°€λŠ₯ν•œ κ²½μš°κ°€ μžˆκ±°λ‚˜ 이전 메이저 λ²„μ „μ˜ μ΅œμ‹  λ§ˆμ΄λ„ˆ λ²„μ „μ—μ„œλ§Œ 지원될 수 μžˆλ‹€. λ”°λΌμ„œ MySQL λ¬Έμ„œλ₯Ό μ½μ–΄λ³΄λŠ” 것이 μ€‘μš”ν•˜λ‹€.

 

πŸ’‘ MySQL 버전 확인은 mysql --version λͺ…λ Ήμ–΄λ₯Ό 톡해 ν•  수 μžˆλ‹€. 

πŸ’‘ MySQL 버전 확인은 mysql --version λͺ…λ Ήμ–΄λ₯Ό 톡해 ν•  수 μžˆλ‹€. 

πŸ’‘ MySQL 8.0 μ£Όμš” 변경사항: 8.0 λ²„μ „μœΌλ‘œ μ—…κ·Έλ ˆμ΄λ“œ μ‹œ λ³€κ²½λ˜λŠ” λͺ‡ 가지 뢀뢄은 λ‹€μŒκ³Ό κ°™λ‹€.

  • μ‚¬μš©μž 인증 방식 (Native Authentication -> Caching SHA-2 Authentication)
  • μ™Έλž˜ν‚€ μ΄λ¦„μ˜ 길이 (64κΈ€μž μ œν•œ)
  • 데이터 λ”•μ…”λ„ˆλ¦¬ 정보 보관 (FRM ν™•μž₯자λ₯Ό 가진 파일 -> InnoDB ν…Œμ΄λΈ”) 

 

✨  μ„œλ²„ μ„€μ • (conf)

 

MySQL μ„œλ²„λŠ” ν•˜λ‚˜μ˜ μ„€μ • νŒŒμΌμ„ μ‚¬μš©ν•˜λ©°, μ§€μ •λœ μ—¬λŸ¬ 개의 디렉토리λ₯Ό νƒμƒ‰ν•˜λ©° 처음 발견된 νŒŒμΌμ„ μ‚¬μš©ν•œλ‹€.

 

πŸ’‘λ§₯의 μ„€μ • νŒŒμΌμ€ my.conf 둜 λ˜μ–΄ 있으며 mysql --verbose --help | grep my.cnf λͺ…λ Ήμ–΄λ₯Ό 톡해 경둜λ₯Ό 확인할 수 μžˆλ‹€.

πŸ’‘λ¦¬λˆ…μŠ€μ˜ mysqld --verbose --help λͺ…λ Ήμ–΄λ₯Ό ν†΅ν•΄μ„œλ„ 경둜λ₯Ό 확인할 수 μžˆλ‹€. 

 

/etc/my.cnf /etc/mysql/my.cnf /usr/local/etc/my.cnf ~/.my.cnf

 

μ΄λ ‡κ²Œ 4개의 λ‹€λ₯Έ κ²½λ‘œκ°€ λ‚˜μ˜€λ©°, μ„œλ²„λŠ” 첫 번째 κ²½λ‘œλΆ€ν„° μˆœμ„œλŒ€λ‘œ μ½μ–΄λ‚˜κ°€λ‹€κ°€ my.cnf 파일이 μ‘΄μž¬ν•˜λ©΄ μ½λŠ”λ‹€. μ„€μ • νŒŒμΌμ„ μ—΄λ©΄ 이런 λ‚΄μš©μ΄ μžˆλ‹€:

 

# Default Homebrew MySQL server config
[mysqld]
# Only allow connections from localhost
bind-address = 127.0.0.1
mysqlx-bind-address = 127.0.0.1

 

λŒ€κ΄„ν˜Έ μ•ˆμ— μžˆλŠ” λ‚΄μš©μ€ μ„€μ • κ·Έλ£Ή 이름이며, ν”„λ‘œκ·Έλž¨μ΄ μ°Έμ‘°ν•˜λŠ” μ˜μ—­μ΄κΈ°λ„ ν•˜λ‹€. κ°€λ Ή, mysqld ν”„λ‘œκ·Έλž¨μ€ mysqld μ„Ήμ…˜μ„ μ°Έμ‘°ν•  것이며, mysqldump ν”„λ‘œκ·Έλž¨μ€ [mysqldump] μ„Ήμ…˜μ„ μ°Έμ‘°ν•œλ‹€. μ„€μ • 파일의 그룹은 같은 νŒŒμΌμ„ κ³΅μœ ν•˜κΈ°λŠ” ν•˜μ§€λ§Œ, μ„œλ‘œ λ¬΄κ΄€ν•˜κ²Œ μ μš©λœλ‹€. 

 

μ„€μ • νŒŒμΌμ—λŠ” μ‹œμŠ€ν…œ λ³€μˆ˜λ₯Ό λ³€κ²½ν•  수 μžˆλŠ” λ‚΄μš©μ„ 담을 수 있으며, 반영된 μ‹œμŠ€ν…œ λ³€μˆ˜λŠ” MySQL μ„œλ²„μ—μ„œ SHOW GLOBAL VARIABLES λͺ…λ Ήμ–΄λ₯Ό μž…λ ₯ν•˜μ—¬ 확인할 수 μžˆλ‹€. 각 μ‹œμŠ€ν…œ λ³€μˆ˜λŠ” 5가지 속성을 κ°–λŠ”λ‹€.

 

1) Cmd-Line : MySQL μ„œλ²„μ˜ λͺ…λ ΉμœΌλ‘œ 섀정될 수 μžˆλŠ”μ§€ μ—¬λΆ€ 

2) Option File : cnf 파일둜 μ œμ–΄ν•  수 μžˆλŠ”μ§€ μ—¬λΆ€ 

3) System Var : μ‹œμŠ€ν…œ λ³€μˆ˜μΈμ§€ μ—¬λΆ€ 

4) Var Scope : 적용 λ²”μœ„ 

5) Dynamic : mySQL μ„œλ²„κ°€ 기동 쀑인 μƒνƒœμ—μ„œ λ³€κ²½ κ°€λŠ₯ν•œμ§€ 

 

πŸ’‘ 속성 쀑 4번인 Var Scope에 따라 μ‹œμŠ€ν…œ λ³€μˆ˜λ₯Ό κΈ€λ‘œλ²Œ/μ„Έμ…˜ λ³€μˆ˜λ‘œ λ‚˜λˆŒ 수 μžˆλ‹€.

1) κΈ€λ‘œλ²Œ λ³€μˆ˜ :  MySQL μ„œλ²„ 전체λ₯Ό λŒ€μƒμœΌλ‘œ ν•˜λŠ” λ³€μˆ˜

2) μ„Έμ…˜ λ³€μˆ˜ : μ„œλ²„μ™€ ν΄λΌμ΄μ–ΈνŠΈμ˜ 컀λ„₯μ…˜μ„ λŒ€μƒμœΌλ‘œ ν•˜λŠ” λ³€μˆ˜

 

β—μΌλ°˜μ μœΌλ‘œ μ‹œμŠ€ν…œ λ³€μˆ˜ 쀑 μ„Έμ…˜μ— μ μš©λ˜λŠ” λ³€μˆ˜μ˜ 경우 κΈ€λ‘œλ²Œμ—λ„ 적용이 λ˜λŠ”λ°, μ΄λ•Œ Var Scope λŠ” 'Both' 둜 ν‘œκΈ°ν•œλ‹€. 

❗보톡 'Both' 인 λ³€μˆ˜λŠ” μ„€μ • νŒŒμΌμ„ 톡해 기본값을 μ„€μ •ν•  수 μžˆμœΌλ‚˜, μ„Έμ…˜ λ³€μˆ˜λŠ” 그럴 수 μ—†κ³  μ„Έμ…˜μ΄ λ§Œλ“€μ–΄μ§€λŠ” μˆœκ°„ ν•΄λ‹Ή 컀λ„₯μ…˜μ—λ§Œ μœ νš¨ν•œ λ³€μˆ˜κ°€ λœλ‹€. 

 

πŸ’‘ 속성 쀑 5번인 Dynamic에 따라 μ‹œμŠ€ν…œ λ³€μˆ˜λ₯Ό 정적/동적 λ³€μˆ˜λ‘œ λ‚˜λˆŒ 수 μžˆλ‹€.

1) μ •μ  λ³€μˆ˜ : mySQL μ„œλ²„κ°€ 기동 쀑인 μƒνƒœμ—μ„œ λ³€κ²½ λΆˆκ°€λŠ₯

2) λ™μ  λ³€μˆ˜ : mySQL μ„œλ²„κ°€ 기동 쀑인 μƒνƒœμ—μ„œ λ³€κ²½ κ°€λŠ₯

 

μ‹œμŠ€ν…œ λ³€μˆ˜λŠ” μ„€μ • νŒŒμΌμ„ ν†΅ν•΄μ„œ λ˜λŠ” μ‹œμŠ€ν…œ λ³€μˆ˜λ₯Ό 직접 κ±΄λ“œλ € (SET GLOBAL...) λ³€κ²½ν•  수 μžˆλŠ”λ°, μ „μžμ˜ 경우 μ„œλ²„κ°€ μž¬μ‹œμž‘ν•˜κΈ° μ „μ—λŠ” μ μš©λ˜μ§€ μ•ŠλŠ”λ‹€ (정적 λ³€μˆ˜) . ν›„μžλ₯Ό ν†΅ν•œ κ²½μš°μ—λ„ μ„€μ • νŒŒμΌμ— λ°˜μ˜ν•˜λŠ” 것은 μ•„λ‹ˆκΈ° λ•Œλ¬Έμ— ν˜„μž¬ 기동 쀑인 μΈμŠ€ν„΄μŠ€μ—μ„œλ§Œ μœ νš¨ν•˜λ‹€. λ”°λΌμ„œ MySQL 8.0 λΆ€ν„°λŠ” SET PERSIST λͺ…λ Ήμ–΄λ₯Ό 톡해 μ‹€ν–‰ 쀑인 μ‹œμŠ€ν…œ λ³€μˆ˜λ₯Ό λ³€κ²½ν•˜κ³  λ™μ‹œμ— my.cnf 이 μ•„λ‹Œ λ³„λ„μ˜ μ„€μ • 파일 (mysqld-auto.cnf) 에도 기둝할 수 있게 λ˜μ–΄ μžˆλ‹€. 이후 MySQL μ„œλ²„κ°€ μž¬μ‹œμž‘ν•  λ•Œ 두 개의 μ„€μ • νŒŒμΌμ„ λͺ¨λ‘ μ°Έμ‘°ν•΄μ„œ 변경사항을 μ μš©ν•œλ‹€. 

 

πŸ’‘ SET PERSIST λͺ…λ Ήμ–΄λŠ” μ„Έμ…˜ λ³€μˆ˜μ—λŠ” μ μš©λ˜μ§€ μ•ŠλŠ”λ‹€. (μ„Έμ…˜ λ³€μˆ˜μ— μ μš©ν•  경우 μžλ™μœΌλ‘œ GLOBAL 둜 인식함)

πŸ’‘ SET PERSIST λͺ…λ Ήμ–΄λ₯Ό 톡해 mysqld-auto.cnf 에 변경사항을 μ μ–΄λ†“κΈ°λ§Œ ν•˜κ³  λ‹Ήμž₯ λ°˜μ˜ν•˜κ³  μ‹Άμ§€λŠ” μ•ŠμœΌλ©΄ SET PERSIST_ONLY λ₯Ό μ‚¬μš©ν•œλ‹€. 정적 λ³€μˆ˜μ˜ 값을 영ꡬ적으둜 λ°”κΎΈκ³ μž ν•  λ•Œ μ‚¬μš©ν•  수 μžˆλ‹€. 

πŸ’‘ SET PERSIST 둜 μΆ”κ°€ν•œ μ„€μ • 파일의 λ‚΄μš©μ„ μ‚­μ œν•˜κ³  싢은 경우 직접 μˆ˜μ •ν•˜λŠ” 것보닀 였λ₯˜ 방지λ₯Ό μœ„ν•΄ RESET PERSIST λͺ…λ Ήμ–΄λ₯Ό μ‚¬μš©ν•˜λŠ” 것이 더 μš©μ΄ν•˜λ‹€. 

 

 

 

✨ 참고자료

  • Real MySQL (μœ„ν‚€λΆμŠ€) 

'πŸ’» DEV > SQL' μΉ΄ν…Œκ³ λ¦¬μ˜ λ‹€λ₯Έ κΈ€

[SQL] MYSQL κΈ°λ³Έ 문법  (0) 2021.07.17

λŒ“κΈ€