Server/basic

APM μ†ŒμŠ€μ„€μΉ˜(2) - MySQL μ†ŒμŠ€ μ„€μΉ˜

이전 ν¬μŠ€ν„°μ—μ„œ apache μ†ŒμŠ€ μ„€μΉ˜λ₯Ό λ‹€λ€˜λ‹€λ©΄ μ΄λ²ˆμ—” MySQL μ†ŒμŠ€ μ„€μΉ˜ λ₯Ό 닀뀄 λ³΄κ² μŠ΅λ‹ˆλ‹€.

[apache μ†ŒμŠ€μ„€μΉ˜: 10000sukk.tistory.com/19]

[참고 좜처: salix97.tistory.com/141]

 

[Mysql 곡식 μ‚¬μ΄νŠΈ λ‹€μš΄λ‘œλ“œ: dev.mysql.com/downloads/mysql/]

 

μœ„μ˜ κ·Έλ¦Όμ—μ„œ μ›ν•˜λŠ” tar νŒŒμΌμ„ 받을 것이닀. Download λ²„νŠΌμ„ 눌λ₯΄λ©΄

μœ„μ™€ 같은 νŽ˜μ΄μ§€κ°€ λœ¨λŠ”λ° No thanks λ₯Ό λˆŒλŸ¬μ„œ λ‹€μš΄λ‘œλ“œλ₯Ό μ‹€ν–‰ μ‹œν‚¬ 수 μžˆλ‹€. 

ν•˜μ§€λ§Œ λ‚˜λŠ” wget 으둜 받을 μ˜ˆμ •μ΄λ‹ˆ 링크 μ£Όμ†Œλ§Œ μ•Œμ•„λ‚΄λ³΄μž.

 

이제 μ••μΆ• 파일 μ£Όμ†Œλ₯Ό μ•Œμ•˜μœΌλ‹ˆ 전체적인 μ†ŒμŠ€μ„€μΉ˜ μˆœμ„œλŠ” Mysql ν™ˆνŽ˜μ΄μ§€μ— μƒμ„Έν•˜κ²Œ λ‚˜μ™€ μžˆλ‹€.

[dev.mysql.com/doc/refman/8.0/en/installing-source-distribution.html]

 

1. μ„ μš”κ΅¬μ‚¬ν•­μœΌλ‘œ μ˜μ‘΄μ„± νŒ¨ν‚€μ§€λ₯Ό λ‹€μš΄ λ°›λŠ”λ‹€.

 

곡식 ν™ˆνŽ˜μ΄μ§€μ—λŠ” 또 prerequsite λ˜ν•œ 잘 λ‚˜μ™€ μžˆλ‹€. μ΄λŠ” Mysql μ„€μΉ˜μ‹œμ— ν•„μš”ν•œ 것듀을 λ‚˜νƒ€λ‚Έ λ¬Έμ„œμ΄λ‹€.

[dev.mysql.com/doc/refman/8.0/en/source-installation-prerequisites.html]

 

이 λ‚΄μš©μ„ 보면

<μ„  μš”κ΅¬ 사항> - μ˜μ‘΄μ„± νŒ¨ν‚€μ§€

1)  cmake

2) GNU make (gmake)  - μ΄λŠ” λ¦¬λˆ…μŠ€μ—μ„œ make와 μ™„μ „νžˆ λ™μΌν•˜κ²Œ κΈ°λŠ₯ν•˜κΈ°μ— gmake λŒ€μ‹ μ— make λ₯Ό μ“°λ©΄ λœλ‹€.

3) gcc 5.3 버전 이상

4) C++ or C99 compiler

5) SSL library

6) Boost C++ library

7) ncurses library

8) Pcre

등이 λ‚˜μ™€ μžˆλ‹€.

 

μœ„μ—μ„œ 1), 5), 6), 7) 만 λ‹€μš΄ λ°›μ•„ λ³΄κ²Ÿλ‹€.

λͺ…λ Ήμ–΄λŠ”

sudo apt-get install cmake

sudo apt-get install libssl-dev

sudo apt-get install libboost-all-dev

sudo apt-get install libncurses5-dev libncursesw5-dev 둜 λ‹€μš΄μ„ λ°›μ•„ μ€€λ‹€.

 

2. mysql tar νŒŒμΌμ„ λ‹€μš΄ λ°›λŠ”λ‹€. 그리고 μ„€μ • -> make ->  make install

μœ„μ—μ„œ tar 파일 μ£Όμ†Œλ₯Ό μ•Œμ•„ λƒˆλ‹€. 이λ₯Ό ν†΅ν•΄μ„œ λ‹€μš΄λ‘œλ“œ λ°›μž

/usr/local/mysql 디렉토리λ₯Ό λ§Œλ“€μ–΄μ„œ μ—¬κΈ°μ„œ 진행 ν•˜κ²Ÿλ‹€.

 

 

 ls λ₯Ό ν†΅ν•΄μ„œ 디렉토리 μ•ˆμ„ μ‚΄νŽ΄λ³΄λ‹ˆ configure 파일이 μ—†λ‹€. ν™˜κ²½μ„€μ •μ€ 그럼 μ–΄λ–»κ²Œ ν•˜λŠ” 것인가?

5.5.9 버전 λΆ€ν„°λŠ” cmake λ₯Ό ν†΅ν•΄μ„œ μ„€μΉ˜λ₯Ό μ§„ν–‰ν•œλ‹€.

-DCMAKE_INSTALL_PREFIX=/usr/local/mysql : μ„€μΉ˜ 디렉토리 μ„€μ •
-DMYSQL_DATADIR=/usr/local/mysql/data : MySQL data directory μ„€μ •
-DMYSQL_UNIX_ADDR=/usr/local/mysql/mysql.sock : Unix socket file 경둜 μ„€μ •, μ„œλ²„κ°€ μ†ŒμΌ“μ—°κ²°μ„ listen ν• λ•Œ μ‚¬μš©
-DMYSQL_TCP_PORT=3306 : μ„œλ²„κ°€ TCP/IP 연결을 μ²­μ·¨ν•˜λŠ” 포트 번호. default λŠ” 3306
-DMYSQL_USER=mysql  
-DDEFAULT_CHARSET=utf8 : μ„œλ²„ 문자 μ„ΈνŠΈ. MySQL 은 기본적으둜 utf8mb4 λ¬Έμžμ„ΈνŠΈλ₯Ό μ‚¬μš©ν•œλ‹€.
-DDEFAULT_COLLATION=utf8_general_ci : μ„œλ²„ 데이터 μ •λ ¬
-DSYSCONFDIR=/etc : my.cnf μ˜΅μ…˜ 파일의 디렉토리 μ„€μ •
-DWITH_EXTRA_CHARSETS=all : μΆ”κ°€λ‘œ 지원할 μ–Έμ–΄ μ„€μ •

 

이 μ•„λž˜λ‘œλŠ” λ°μ΄ν„°λ² μ΄μŠ€μ—μ„œ 데이터λ₯Ό μž‘μ„±, 읽기, μ—…λ°μ΄νŠΈν•˜λŠ”λ° μ‚¬μš©ν•˜λŠ” μ†Œν”„νŠΈμ›¨μ–΄ λͺ¨λ“ˆ. 
-DWITH_INNOBASE_STORAGE_ENGINE=1 : 
-DWITH_MYISAM_STORAGE_ENGINE=1 : 
-DWITH_ARCHIVE_STORAGE_ENGINE=1 
-DWITH_BLACKHOLE_STORAGE_ENGINE=1  
-DWITH_MEMORY_STORAGE_ENGINE=1 
-DWITH_READLINE=1 : readline 지원여뢀 
-DWITH_BOOST=/usr/local/mysql/boost : boost μœ„μΉ˜ 경둜
-DENABLED_LOCAL_INFILE=1 : SQL νŒŒμΌμ„ λ‘œλ“œν•˜κ²Œ ν•΄μ£ΌλŠ” κΈ°λŠ₯을 μΌ λ‹€. (ν™œμ„±ν™”1, λΉ„ν™œμ„±ν™” 0 λ˜λŠ” λͺ…령을 주지 μ•ŠμŒ) 
-DENABLE_DOWNLOADS=1 
-DDOWNLOAD_BOOST=1

 

μœ„μ™€ 같이 μ‹€ν–‰ν•˜λ©΄

μ‹€νŒ¨..

즉, μ†ŒμŠ€ 디렉토리 내에 build λ₯Ό μœ„ν•œ 디렉토리λ₯Ό μΆ”κ°€ μƒμ„±ν•˜κ³ 

(μ˜΅μ…˜μ—μ„œ μƒμ„±ν•˜λŠ” 디렉토리('μ•„λ¬΄κ±°λ‚˜') – “디렉토리 이름은 자유둭게 κ°€λŠ₯”)
κ·Έ ν•˜λ‹¨μ—μ„œ μž‘μ—…μ„ μ§„ν–‰ν•˜λ„λ‘ “(κ°•μ œ)ꢌ고” λ˜μ–΄ 버렸닀.

[ν•΄κ²°μ±… 좜처: jirak.net/wp/cmake-error-for-mysql-8-0-15-please-do-not-build-in-source/]

 

cd mysql-8.0.19
rm -f CMakeCache.txt  
mkdir '아무이름'
cd '아무이름'
cmake \
.. \
-DCMAKE_INSTALL_PREFIX…. (μ΄ν•˜ μƒλž΅)

 

(μ°Έκ³ ) rm -f CMakeCache.txt ν•˜λŠ” 이유  - CMakeList 에 μ˜ν•΄μ„œ ν•œλ²ˆ μΊμ‹œκ°€ μ •μ˜λ˜λ©΄ 이λ₯Ό μ΄ˆκΈ°ν™” μ‹œν‚¬ 수 μžˆλŠ” 방법은 μΊμ‹œ νŒŒμΌμ„ μ§€μš°κ±°λ‚˜ κ°•μ œλ‘œ 값을 λ°”κΎΈλŠ” 방법 밖에 μ—†λ‹€.

 

λ‚˜λŠ” mymysql 을 λ§Œλ“€μ–΄μ„œ μ§„ν–‰ν•˜μ˜€λ‹€. 이전에 쳣던 λͺ…λ Ήμ–΄ 뒀에 .. λ₯Ό λΆ™νžˆλ©΄ λΆ€λͺ¨ λ””λ ‰ν† λ¦¬μ˜ cmake κ°€ μ‹€ν–‰λœλ‹€.

이후에 make 와 make install 을 μ§„ν–‰μ‹œμΌœ μ€€λ‹€. μ˜€λž˜κ±Έλ¦°λ‹€.

 

3.MySQL 데이터 베이슀 μ΄ˆκΈ°ν™”

[곡식 λ¬Έμ„œ: dev.mysql.com/doc/refman/5.7/en/data-directory-initialization.html]

 

1) MySQL 을 μ„œλΉ„μŠ€ ν•  계정을 생성해 주자(λ³΄μ•ˆμ„ μœ„ν•΄μ„œ)

groupadd mysql
useradd -g mysql mysql 둜 μ§„ν–‰ν•œλ‹€.

groupadd mysql 은 mysql μ΄λΌλŠ” 그룹을 λ§Œλ“€μ–΄μ„œ κ΄€λ¦¬ν•˜κ² λ‹€λŠ” λœ»μ΄λ‹€.
useradd λŠ” μƒˆλ‘œμš΄ μ‚¬μš©μžλ₯Ό μΆ”κ°€ν•˜κ² λ‹€λŠ” λœ»μ΄λ‹€. -r μ˜΅μ…˜μ€ system accountλ₯Ό λ§Œλ“€κ² λ‹€λŠ” μ†Œλ¦¬.
-g μ˜΅μ…˜μ€ μ–΄λ–€ 그룹에 넣어놓고 관리할것인지, -s μ˜΅μ…˜μ€ μœ μ €μ˜ 둜그인 shell 을 μ§€μ •ν•˜λŠ” 것.
λ§ˆμ§€λ§‰μ— κΈ°μˆ ν•œ mysql μ΄λΌλŠ” μ΄λ¦„μœΌλ‘œ μƒˆλ‘œμš΄ μ‚¬μš©μžλ₯Ό μΆ”κ°€ν•˜κ² λ‹€λŠ” λœ»μ΄λ‹€.

mysql 그룹이 λ§Œλ“€μ–΄ 진것을 확인 κ°€λŠ₯ν•˜λ‹€.

cat /etc/passwd 둜 μœ μ € 정보 λ˜ν•œ 확인 κ°€λŠ₯ν•˜λ‹€.

 

/usr/local/mysql λ””λ ‰ν† λ¦¬λ‘œ μ΄λ™ν•œλ‹€. μ΄λŠ” make λ‹Ήμ‹œμ— 생성 cmake μ„€μ •μœΌλ‘œ 인해 생성됫을 것이닀. λ‚˜λŠ” 이미 μƒμ„±λœ μƒνƒœμ˜€λ‹€.

그리고 mysql-files λ₯Ό μƒμ„±ν•˜μ—¬ μ€€λ‹€.

그리고 chown으둜 그룹의 μ†Œμœ κΆŒμžλ₯Ό λ°”κΏ”μ€€λ‹€. 

(μ°Έκ³ )

chown λͺ…λ Ήμ–΄λŠ” change own 의 μΆ•μ•½μ–΄λ‘œ, 파일의 μ†Œμœ κΆŒμžλ₯Ό λ³€κ²½ν•˜λŠ” λͺ…령어이닀
chown {μ†Œμœ κΆŒμž}:{κ·Έλ£Ήμ‹λ³„μž} {μ†Œμœ κΆŒμ„ λ³€κ²½ν•˜κ³  싢은 파일λͺ…} ν˜•νƒœλ‘œ λͺ…λ Ήμ–΄λ₯Ό μ‹€ν–‰ν•œλ‹€.
즉, mysql-files λΌλŠ” λ””λ ‰ν† λ¦¬μ˜ μ†Œμœ κΆŒμ„ mysql μ΄λΌλŠ” 그룹의 mysql μ΄λΌλŠ” μœ μ €μ—κ²Œ ν• λ‹Ήν•˜κ² λ‹€λŠ” 뜻.
-R μ˜΅μ…˜: ν•˜μœ„ λ””λ ‰ν† λ¦¬κΉŒμ§€ λͺ¨λ“  μ†Œμœ κΆŒμ„ ν• λ‹Ή.
ls -al λͺ…λ Ήμ–΄λ‘œ μ†Œμœ κΆŒμ„ 확인할 수 μžˆλ‹€.

 

chmod 둜 λ””λ ‰ν† λ¦¬μ˜ μ‚¬μš©κΆŒν•œμ„ λ³€κ²½ν•΄μ€€λ‹€. (μ°Έκ³ )chmod λͺ…λ Ήμ–΄λŠ” change mode 의 μΆ•μ•½μ–΄λ‘œ, λŒ€μƒ 파일과 λ””λ ‰ν† λ¦¬μ˜ μ‚¬μš©κΆŒν•œμ„ λ³€κ²½ν•  λ•Œ μ‚¬μš©ν•œλ‹€.
chmod [μ˜΅μ…˜] [λͺ¨λ“œ] [파일] ν˜•νƒœλ‘œ λͺ…λ Ήμ–΄λ₯Ό μ‹€ν–‰ν•œλ‹€. 750μ΄λΌλŠ” λœ»μ€
- μ†Œμœ μžκΆŒν•œ : 읽기, μ“°κΈ°, μ‹€ν–‰
- κ·Έλ£ΉκΆŒν•œ : 읽기, μ‹€ν–‰
- μ „μ²΄κΆŒν•œ : μ—†μŒ
λΌλŠ” 의미둜 ν•΄μ„λœλ‹€. 

 

ls -l  λͺ…λ ΉμœΌλ‘œ 바뀐것을 확인 κ°€λŠ₯ν•˜λ‹€.

 

이제 κΈ°λ³Έ 데이터 베이슀λ₯Ό μƒμ„±ν•˜μž.

μ΄λŸ°μ‹μœΌλ‘œ λ§ˆμ§€λ§‰μ— μž„μ‹œ λΉ„λ°€λ²ˆν˜Έλ₯Ό μ£Όλ©΄ 잘 μ—°κ²° 된 것이닀.

 

(선택사항)[λ§Œμ•½ λ³΄μ•ˆ 연결을 μ›ν•œλ‹€λ©΄ : medium.com/@js230023/λ¦¬λˆ…μŠ€-mysql-μ„€μ •-1701ba44da9c]

 

 

 

- mysql μ„œλ²„ λ°±κ·ΈλΌμš΄λ“œλ‘œ μ‹€ν–‰

: mysqld_safe --user=mysql 

ps -ef | grep mysqld λͺ…λ Ήμ–΄λ‘œ MySQL 이 μ‹€ν–‰λ˜κ³  μžˆλŠ”μ§€ 확인

 

μœ„μ—μ„œ 얻은 μž„μ‹œ λΉ„λ°€λ²ˆν˜Έλ‘œ mysql μ„œλ²„λ‘œ 접속 κ°€λŠ₯ν•˜λ‹€. λ‚˜κ°€κΈ°λŠ” exit μž…λ ₯

 

 

[root μ•”ν˜Έμ˜ λΉ„λ°€λ²ˆν˜Έλ₯Ό μ΄ˆκΈ°ν™” ν•˜λŠ” 방법: 

dev.mysql.com/doc/refman/8.0/en/data-directory-initialization.html#data-directory-initialization-password-assignment ]

 

μœ„μ˜ λͺ…λ ΉμœΌλ‘œ mysql μ„œλ²„λ₯Ό μ’…λ£Œ κ°€λŠ₯ν•˜λ‹€.

 

4. μ„œλΉ„μŠ€ 등둝

μ„œλΉ„μŠ€λ₯Ό λ“±λ‘ν•˜μ—¬ λ†“μœΌλ©΄ μ„œλΉ„μŠ€κ°€ μ‹€ν–‰λ λ•Œ μžλ™μœΌλ‘œ mysql이 μ‹€ν–‰ λœλ‹€.

μœ„λ₯Ό μ‹€ν–‰

 

vi 둜 이λ₯Ό μ—°λ‹€.

'=' 뒀에 λΉ„μ–΄ μžˆλŠ” 곡백에 μ•„λž˜ μ£Όμ†Œλ₯Ό μΆ”κ°€ν•˜μ—¬ μ€€λ‹€.

 

 

5. 마무리

MySQL 의 μ˜΅μ…˜νŒŒμΌμ€ ν”„λ‘œκ·Έλž¨μ„ μ‹€ν–‰ν• λ•Œλ§ˆλ‹€ λͺ…령쀄에 μ˜΅μ…˜μ„ μž…λ ₯ν•  ν•„μš”κ°€ 없도둝 일반적으둜 μ‚¬μš©λ˜λŠ” μ˜΅μ…˜μ„ μ§€μ •ν•˜λŠ” νŽΈλ¦¬ν•œ 방법이닀. ν”„λ‘œκ·Έλž¨μ΄ μ˜΅μ…˜νŒŒμΌμ„ μ½λŠ”μ§€ μ—¬λΆ€λ₯Ό ν™•μΈν•˜κΈ° μœ„ν•΄μ„œλŠ” mysqld --verbose --help λ₯Ό μ‚¬μš©ν•  수 μžˆλ‹€. μ˜΅μ…˜νŒŒμΌμ€ my.cnf λΌλŠ” μ΄λ¦„μ˜ ν…μŠ€νŠΈνŒŒμΌλ‘œ λ˜μ–΄μžˆλ‹€. cnf λž€ config 의 μ€„μž„λ§μ΄λ‹€. λ¦¬λˆ…μŠ€ μš΄μ˜μ²΄μ œμ—μ„œ my.cnf νŒŒμΌμ€ default 둜 /etc/my.cnf κ²½λ‘œμ—μ„œ μ½μ–΄μ˜¨λ‹€. CMake 둜 MySQL 을 λΉŒλ“œν• λ•Œ, SYSCONFDIR λ₯Ό μ„€μ •ν•΄μ£Όμ—ˆλ‹€λ©΄ ν•΄λ‹Ή κ²½λ‘œμ—μ„œ my.cnf νŒŒμΌμ„ μ½μ–΄μ˜¨λ‹€. 

 

sudo /etc/my.cnf λ₯Ό μ—΄μ–΄μ„œ 이λ₯Ό μΆ”κ°€ν•œλ‹€.

[mysqld] 
bind-address=0.0.0.0 
port=3306 
basedir=/usr/local/mysql 
datadir=/usr/local/mysql/data

 

 

이제 service λͺ…λ ΉμœΌλ‘œλ„ 컨트둀 κ°€λŠ₯ν•˜λ‹€