Linux/CentOS Stream 9

Linux Centos Stream 9 - MySQL 설치

Ryan's Tech Note 2023. 2. 9. 22:12
  • 설치

# dnf install mysql mysql-server

 

  • 버전 확인

# mysql --version

mysql  Ver 8.0.30 for Linux on x86_64 (Source distribution)

 

  • 재기동시 자동 시작

# systemctl enable mysqld

 

  • root 비밀번호 설정

# mysql_secure_installation

 

- 비밀번호 난이도는 low로 해라. medium 이나 strong 으로 하지 않는다. 숫자+영어+특수문자 조합으로도 medium 이 통과가 안된다. 가장 쉬운 low 난이도를 선택하라.

- 만약 medium, strong 으로 골라서 비밀번호가 무한 루프로 통과가 안된다면 SSH를 다시 접속하고 다음과 같이 해결한다.

# mysql -u root -p
mysql> SHOW VARIABLES LIKE 'validate_password%';
mysql> set GLOBAL validate_password.policy=LOW;
mysql> exit

 

  • 시간대역 세팅 (필수)

vi /etc/my.cnf.d/mysql-server.cnf

[mysqld]
default_time_zone = '+09:00'

MySQL 5.1 이후 나온 버전부터 시간대역을 지정하지 않으면 Java 등의 프로그램에서 이런 에러가 발생되는 문제가 있다.

The server time zone value ‘KST’ is unrecognized or represents more than one time zone

따라서, 위와 같은 설정을 필수로 넣어줘야 한다.

 

  • DATA 경로 변경 (선택)

DATA 경로는 df 에서 별도의 경로로 따는 것이 좋다. 데이터가 넘치는 경우 OS가 정지할 수도 있기 때문이다.

먼저 별도의 경로로 DATA 경로를 딴 다음, 아래와 같이 따라하면 된다.

 

DATA 경로를 /var/lib/mysql 에서 다른 곳으로 변경하는 많은 글을 웹서핑하여 검색해 봤는데, Centos Stream 9 에서 제대로 동작하는 방법이 없었다. 시간을 아주 많이 낭비했는데, 그냥 이 방법대로 하면 아주 잘된다.

 

vi /etc/my.cnf.d/mysql-server.cnf

[mysqld]
datadir=/db/mysql

이렇게 datadir 만 원하는 경로로 수정해라. socket 경로는 바꿀 필요가 없다. socket 경로까지 수정하면 에러만 날 뿐이다.

그리고, 디렉토리에 권한을 주고 재기동한다.

# mkdir /db/mysql

# chown mysql:mysql /db/mysql

# chmod 750 /db/mysql

# systemctl restart mysqld

 

그리고, mysql 에 들어가서 test라는 이름으로 database 를 추가하면 /db/mysql/test 디렉토리가 생성되어 있을 것이다.

DATA경로를 변경하는 목적이 내가 생성하는 Database만 별도의 마운트 경로에 저장되면 되는 것이기 때문에 초기에 /var/lib/mysql 에 있는 파일들은 그냥 신경쓰지 않아도 되는 것이다. /db/mysql 에 들어가 보면 /db/mysql/test 디렉토리 외에 많은 파일들이 자동으로 딸려왔는데, 그냥 신경쓰지 않도록 한다. 시스템 DB가 어디어 어떻게 저장하든 큰 용량도 아니고, /db/mysql/test 만 이쪽으로 잘 저장되면 된다. 이 방법이 시간낭비 없이 제일 깔끔하다.

 

  • 로그 경로 변경 (선택)

로그파일 경로를 바꿔주는 이유는 마찬가지로, 로그가 넘칠 경우 OS가 정지할 수도 있기 때문이다.

별도의 로그 파일 저장을 위한 df 경로를 따준 후에 아래와 같이 설정한다.

 

vi /etc/my.cnf.d/mysql-server.cnf

log-error=/log/mysql/mysqld.log

# mkdir /log/mysql

# chown mysql:mysql /log/mysql

# chmod 750 /db/mysql

# mv /var/log/mysql/* /db/mysql

이대로 그냥 restart 하면 에러가 날 것이다.

 

# touch /log/mysql/mysqld.log
# chown mysql:mysql /log/mysql/mysqld.log
# chcon -R -t mysqld_db_t /log/mysql

# chcon system_u:object_r:mysqld_log_t:s0 /log/mysql/mysqld.log (위줄만 실행하면 되는지 이거까지 해야 하는지 확인필요)

이것을 해주면 restart시 에러가 안난다.

 

# systemctl restart mysqld

# systemctl status mysqld

정상적으로 기동되었다.

 

  • 재기동 명령어

# systemctl start mysqld

# systemctl stop mysqld

# systemctl restart mysqld

 

  • MySQL을 편리하게 웹으로 관리할 수 있는 phpmyadmin 을 다음 글에서 설치해보자

https://ryans-note.tistory.com/10

 

Linux Centos Stream 9 - phpmyadmin 설치

OS를 버전업하려면 응용 프로그램들을 모두 다시 설치해야 하는데, 이전과는 설치 방법이 달라지거나 번거로운 오류들이 발생한다. 그래서, OS 버전업을 잘 하지 않게 되는데, 걱정하지 말고 내

ryans-note.tistory.com

  • MySQL 기존 database 마이그레이션

https://ryans-note.tistory.com/11

 

 

  • MySQL 포드 번호 변경 (선택)

# vi /etc/my.cnf.d/mysql-server.cnf

[mysqld]
datadir=/db/mysql
socket=/var/lib/mysql/mysql.sock
log-error=/log/mysql/mysqld.log
pid-file=/run/mysqld/mysqld.pid
default_time_zone = '+09:00'

port=13306

 

확인

# mysql -u root -p

SHOW GLOBAL VARIABLES LIKE 'PORT';

+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| port          | 13306 |
+---------------+-------+

 

 

  • 원격지에서 ROOT 로그인 되도록 설정

# mysql -u root -p

CREATE USER 'root'@'%' IDENTIFIED BY '1234'
FLUSH PRIVILEGES;

사용자 확인

SELECT Host,User,plugin,authentication_string FROM mysql.user WHERE User='root';

(참고) 사용자 비밀번호 변경 - MySQL 8 홈페이지 권장 방법. 다른 방법으로 하면 오류가 나기도 한다.

SET PASSWORD FOR 'root'@'%' = '비밀번호';

(참고) 암호 복잡도 충족 에러가 나는 경우

SET GLOBAL validate_password.policy=LOW;

 

 

넘어가기 전에 공감과 댓글 한번씩 부탁드립니다.