mysql 을 사용하고 있는데 데이터 양이 너무 많아지다보니 리눅스 서버 용량에 부하가 걸리기 시작했다.
use 퍼센트가 90% 가량을 찍어가면서 덤프 데이터까지 넣으니 중간에 에러가 나면서
데이터 insert 는 물론 select 에도 에러를 뱉어냈다. ㅠㅠ
서버 용량을 살펴보니 mysql 이 설치되어있던 SSD 는 full 인데 HDD 1T 는 놀고있는것을 발견했다.
ㅎ...
mysql database 저장소 변경을 진행한다.
[환경]
CentOS 7.7
Mysql 8.0.18
1. 현재 mysql 데이터베이스 저장 경로 확인하기
[root@localhost ~]# mysql -uroot -p
Enter password:
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 7472
Server version: 8.0.18 MySQL Community Server - GPL
Copyright (c) 2000, 2019, Oracle and/or its affiliates. All rights reserved.
Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
mysql> select @@datadir;
+-------------------+
| @@datadir |
+-------------------+
| /var/lib/mysql/ |
+-------------------+
1 row in set (0.00 sec)
mysql>
- root 계정으로 로그인
- select @@datadir; 으로 기본 데이터 저장소 확인
- 확인 후 quit; 으로 종료한다.
2. mysql 서버 종료
$ systemctl stop mysqld
- 환경 설정 변경을 위해 mysql 을 종료한다.
3. 변경할 신규 저장디렉토리 생성
# 신규 경로의 디렉토리 생성
$ mkdir /home/sunny/database
# mysql 복사
$ rsync -av /var/lib/mysql /home/sunny/database/
# mysql 권한 부여
$ chown -R mysql:mysql /home/sunny/database/mysql
- rsync 작업 시 기존 스키마들을 모두 복사하여 가져온다.
4. mysql 설정파일 변경
# mysql 설정파일 조회
vi /etc/my.cnf
-----------
#datadir=/var/lib/mysql
#socket=/var/lib/mysql/mysql.sock
datadir=/home/sunny/database/mysql
socket=/home/sunny/database/mysql/mysql.sock
- 파일의 datadir 와 socket 경로를 생성한 디렉토리로 변경한다.
- 이때 기존 경로를 주석하는 과정에서 #사이에 띄어쓰기는 하면 안됨... 이것때매 안되서 엄청 헤맸다 ㅠㅠ
5. SElinux 보안 추가
$ semanage fcontext -a -t mysqld_db_t "/home/sunny/database/mysql(/.*)?"
$ restorecon -R /home/sunny/database/mysql
- 프로세스에 새로 권한을 추가해주었기 때문에 해당 경로의 selinux 보안 컨텍스트를 추가해주어야한다.
- 추가 하지 않으면 mysql 실행시 permission 에러가 발생한다. 해당 에러내용은 /var/log/audit/audit.log 에서 확인 가능하다.
- 안된다고 selinux 를 해제하는것은 매우 위험하다. 인터넷 연결이 되어있으면 가급적 해제는 비추한다.
- 설정이 잘 되었는지는 semanage fcontext -l | grep mysql 으로 확인하면 된다.
$ semanage fcontext -l | grep mysql
$ /home/sunny/database/mysql(/.*)? all files system_u:object_r:mysqld_db_t:s0
6. mysql 재실행
$ systemctl start mysql
- 재실행 후 1번 과정으로 디렉토리가 변경되었는지 확인한다.
- 정상적으로 변경되었으면 성공! 추가 데이터를 넣으면 앞으로 mysql data는 설정한 경로로 들어간다.
*** 정상적으로 실행이 안될경우!
$ ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/var/lib/mysql/mysql.sock' (2)
실행하려고 하니 위와같이 소켓 에러가 발생했다. 분명 socket 경로를 변경해주었는데도 기존의 소켓경로를 찾는다.
일단 새로 설정한 (my.cnf) 경로로 링크를 설정한다.
$ ln -sf /home/sunny/database/mysql.sock /var/lib/mysql/mysql.sock
[ 참고 ]
https://m.blog.naver.com/PostView.naver?isHttpsRedirect=true&blogId=yswon72&logNo=56982175
'Database > Mysql' 카테고리의 다른 글
[MySQL/Linux] 덤프 파일 생성 스케줄링 및 복원 (0) | 2021.04.14 |
---|