먼저이 쿼리를 실행해야합니다.
SELECT user,host FROM mysql.user
WHERE super_priv='Y' AND
CONCAT(user,'@',host) <> 'root@localhost';
SUPER 권한 이있는 모든 사용자가 나열 됩니다 . 애플리케이션 관련 DB 처리를 수행하는 대부분의 사용자는이 권한이 필요하지 않습니다. MySQL Documentation 에 따르면 SUPER 권한이있는 사용자는 다음을 수행 할 수 있습니다.
- 복제 좌표를 제어하기 위해 CHANGE MASTER TO를 실행하십시오.
mysqladmin kill
다른 계정에 속한 스레드를 죽이거나 죽이는 행위
- 이진 로그를 제거하여 이진 로그를 체계적으로 삭제
- SET GLOBAL을 사용하여 구성을 변경하여 전역 시스템 변수를 수정하십시오.
- mysqladmin 디버그 명령
- 로깅 활성화 또는 비활성화
- * read_only * 시스템 변수가 활성화 된 경우에도 업데이트 수행
- 슬레이브 서버에서 복제 시작 및 중지
- 저장된 프로그램 및보기의 DEFINER 속성에있는 계정의 스펙
- 가장 중요한 문제는 다음과 같습니다 . : max_connections 시스템 변수에 의해 제어되는 연결 한계 에 도달 한 경우에도 한 번 연결할 수 있습니다 .
root @ localhost로 로그인하여 다음과 같이 SUPER 권한을 취소해야합니다.
UPDATE mysql.user SET super_priv='N'
WHERE super_priv='Y' AND
CONCAT(user,'@',host) <> 'root@localhost';
FLUSH PRIVILEGES;
이 작업을 수행하면 모든 사용자가 mysql 연결을 초과 할 때마다 root@localhost
로그인 만 할 수 있습니다. 결국, 모든 사람과 할머니가 슈퍼 특권을 가졌다면, 이것은 root@localhost
다른 사람들보다 먼저 연결되는 것을 방해 할 것입니다. max_connections가 200에 있고 mysqld를 다시 시작하지 않고 300으로 올려야하는 경우 다음 명령을 사용 하여 max_connections 를 동적으로 늘릴 수 있습니다 .
mysql> SET GLOBAL max_connections = 300;
이렇게하면 더 많은 연결을 즉시 적용 할 수 있지만 임의로 숫자를 임의로 늘리지는 않습니다. 당신은 mysql이 증가를 수용하기에 충분한 RAM을 가지고 있는지 확인해야한다.
주의 사항 : max_connections를 300으로 동적으로 변경하면 /etc/my.cnf에 넣으십시오.
[mysqld]
max_connections=300
MySQL DB 서버에서 mysqltuner.pl을 실행할 수 있습니다. 없는 경우 다음을 실행하십시오.
cd
wget mysqltuner.pl
perl mysqltuner.pl
실적 측정 항목 아래의 세 번째 줄에는
-------- Performance Metrics -------------------------------------------------
[--] Up for: 8d 20h 46m 22s (8M q [10.711 qps], 129K conn, TX: 90B, RX: 19B)
[--] Reads / Writes: 4% / 96%
[--] Total buffers: 2.1G global + 5.4M per thread (2000 max threads)
[OK] Maximum possible memory usage: 12.6G (80% of installed RAM)
스레드 당 5.4M 참조? max_connections로 곱해집니다. 이 예에서는 최대 약 10.8G의 RAM이됩니다. 따라서 max_connections를 사용할 때마다 mysqltuner.pl을 실행하고 너무 많은 메모리에 대해 OS를 누르는지 확인해야합니다.
어쨌든 SUPER 권한을 가진 사람을 제한하면 그러한 사용자는 mysqld를 DB Connections로 넘치게 할 수 있습니다.