웹사이트 검색

15가지 유용한 MySQL/MariaDB 성능 조정 및 최적화 팁


MySQL은 강력한 오픈 소스 관계형 데이터베이스 관리 시스템, 줄여서 RDBMS입니다. 1995년(20세)에 발매된 제품입니다. 데이터베이스 내의 콘텐츠를 관리하는 데 가장 널리 사용되는 구조적 쿼리 언어를 사용합니다. 최신 MySQL 버전은 5.6.25이며 2015년 5월 29일에 출시되었습니다.

MySQL에 대한 흥미로운 사실은 이름이 Michael Widenius(MySQL 창시자)의 딸 My에서 따왔다는 사실입니다. MySQL에 대한 흥미로운 사실이 많이 있지만 이 문서에서는 MySQL 서버를 관리하는 데 도움이 되는 몇 가지 유용한 사례를 보여 드리고자 합니다.

2009 4월에 MySQL 프로젝트는 Oracle에 인수되었습니다. 그 결과 MariaDB라는 MySQL 커뮤니티 포크가 생성되었습니다. 포크를 만든 주된 이유는 일반 공중 라이선스에 따라 프로젝트를 무료로 유지하기 위해서였습니다.

오늘날 MySQLMariaDBWordPress, 와 같은 웹 애플리케이션에 사용되는 가장 자주 사용되는 RDBMS 중 하나입니다. Joomla, Magento 및 기타.

이 기사에서는 MySQL/MariaDB의 성능을 미세 조정하여 최적화하는 방법에 대한 기본적이면서도 유용한 팁을 보여줍니다. 이 문서에서는 이미 MySQL 또는 MariaDB가 설치되어 있다고 가정합니다. 시스템에 설치하는 방법이 여전히 궁금하다면 여기에서 광범위한 가이드를 따르세요.

  1. RHEL/CentOS 7에 LAMP 설치
  2. Fedora 22에 LAMP 설치
  3. Ubuntu 15.04에서 LAMP 설정
  4. Debian 8에 MariaDB 설치
  5. 젠투 리눅스에 MariaDB 설치
  6. Arch Linux에 MariaDB 설치

중요: 시작하기 전에 이 제안을 맹목적으로 받아들이지 마십시오. 각 MySQL 설정은 고유하므로 변경하기 전에 추가로 생각해야 합니다.

당신이 알아야 할 사항:

  1. MySQL/MariaDB 구성 파일은 /etc/my.cnf에 있습니다. 이 파일을 수정할 때마다 MySQL 서비스를 다시 시작해야 새로운 변경 사항이 적용됩니다.
  2. 이 글을 작성하기 위해 MySQL 버전 5.6이 템플릿으로 사용되었습니다.

1. InnoDB 테이블당 파일 활성화

먼저 InnoDB가 스토리지 엔진이라는 점을 설명하는 것이 중요합니다. MySQL과 MariaDB는 InnoDB를 기본 스토리지 엔진으로 사용합니다. 과거에는 MySQL이 데이터베이스 테이블과 인덱스를 시스템 테이블스페이스에 보관하는 데 사용되었습니다. 이 접근 방식은 유일한 목적이 데이터베이스 처리이고 해당 스토리지 디스크가 다른 목적으로 사용되지 않는 서버를 위한 것입니다.

InnoDB는 보다 유연한 접근 방식을 제공하며 각 데이터베이스 정보는 .ibd 데이터 파일에 보관됩니다. 각 .ibd 파일은 자체 테이블스페이스를 나타냅니다. 이렇게 하면 "TRUNCATE"와 같은 데이터베이스 작업을 더 빠르게 완료할 수 있으며 데이터베이스 테이블을 삭제하거나 자를 때 사용되지 않은 공간을 회수할 수도 있습니다.

이 구성의 또 다른 이점은 일부 데이터베이스 테이블을 별도의 저장 장치에 보관할 수 있다는 것입니다. 이렇게 하면 디스크의 I/O 로드가 크게 향상될 수 있습니다.

innodb_file_per_tableMySQL 5.6 이상에서 기본적으로 활성화됩니다. /etc/my.cnf 파일에서 확인할 수 있습니다. 지시문은 다음과 같습니다.

innodb_file_per_table=1

2. MySQL 데이터베이스 데이터를 별도의 파티션에 저장

참고: 이 설정은 MySQL에서만 작동하고 MariaDB에서는 작동하지 않습니다.

때로는 OS 읽기/쓰기로 인해 MySQL 서버의 성능이 저하될 수 있습니다. 특히 동일한 하드 드라이브에 있는 경우 더욱 그렇습니다. 대신, MySQL 서비스를 위해 별도의 하드 드라이브(SSD 선호)를 사용하는 것이 좋습니다.

이 작업을 완료하려면 새 드라이브를 컴퓨터/서버에 연결해야 합니다. 이 기사에서는 드라이브가 /dev/sdb 아래에 있다고 가정합니다.

다음 단계는 새 드라이브를 준비하는 것입니다.

fdisk /dev/sdb

이제 “n”을 눌러 새 파티션을 만듭니다. 그런 다음 “p”를 눌러 새 파티션을 기본 파티션으로 만듭니다. 그런 다음 파티션 번호를 1-4로 설정하세요. 그런 다음 파티션 크기를 선택합니다. 여기에서 Enter를 누르세요. 다음 단계에서는 파티션의 크기를 구성해야 합니다.

전체 디스크를 사용하려면 한 번 더 Enter를 누르세요. 그렇지 않으면 새 파티션의 크기를 수동으로 설정할 수 있습니다. 준비가 되면 “w”를 눌러 변경 사항을 작성하세요. 이제 새 파티션을 위한 파일 시스템을 생성해야 합니다. 이 작업은 다음을 통해 쉽게 수행할 수 있습니다.

mkfs.ext4 /dev/sdb1

이제 새 파티션을 폴더에 마운트하겠습니다. 내 폴더 이름을 “ssd”로 지정하고 루트 디렉터리에 만들었습니다.

mkdir /ssd/

방금 만든 새 파티션을 새 폴더에 마운트할 준비가 되었습니다.

mount /dev/sdb1  /ssd/

/etc/fstab 파일에 다음 줄을 추가하면 시작 시 마운트를 수행할 수 있습니다.

/dev/sdb1 /ssd ext3 defaults 0 0

이제 MySQL을 새 디스크로 이동할 준비가 되었습니다. 먼저 다음을 사용하여 MySQL 서비스를 중지합니다.

service mysqld stop

데이터베이스에 쓰기 시도를 방지하려면 Apache/nginx도 중지하는 것이 좋습니다.

service httpd stop
service nginx stop

이제 전체 MySQL 디렉터리를 새 드라이브에 복사합니다.

cp /var/lib/mysql /ssd/ -Rp

MySQL 데이터베이스 사이트에 따라 시간이 걸릴 수 있습니다. 이 프로세스가 완료되면 MySQL 디렉터리의 이름을 바꿉니다.

mv /var/lib/mysql /var/lib/mysql-backup

다음으로 심볼릭 링크를 생성하겠습니다.

ln -s /ssd/mysql /var/lib/mysql

이제 MySQL 및 웹 서비스를 시작할 준비가 되었습니다.

service mysqld start
service httpd start
service nginx start

이 시점에서 MySQL 데이터베이스는 새 드라이브에서 액세스됩니다.