programing

mySQL 오류 1040:접속이 너무 많다

nicescript 2022. 9. 28. 21:55
반응형

mySQL 오류 1040:접속이 너무 많다

수정 방법: "SQL Error 1040:Too Many Connection'이라는 단어를 넣으려고 해도

max_user_connection=500

아직 "접속이 너무 많다"

MySQL: 오류 1040:접속이 너무 많다

이는 기본적으로 MySQL이 최대 수의 연결을 동시에 처리하고 기본적으로는 100개의 연결을 동시에 처리함을 나타냅니다.

MySQL은 다음과 같은 이유로 인해 연결이 끊어집니다.

  1. 저속 쿼리

  2. 데이터 스토리지 기술

  3. 잘못된 MySQL 구성

저는 다음과 같은 방법으로 이 문제를 극복할 수 있었습니다.

.MySQL command line tool

show variables like "max_connections";

이렇게 하면 이렇게 되겠네요.

+-----------------+-------+
| Variable_name   | Value |
+-----------------+-------+
| max_connections | 100   |
+-----------------+-------+

MySQL 서버를 다시 시작하지 않고 다음 명령을 실행하여 예를 들어 200으로 설정을 변경할 수 있습니다.

set global max_connections = 200;

다음 번에 MySQL을 재시작할 때 기본값 대신 이 설정이 사용됩니다.

연결 수가 증가하면 MySQL 실행에 필요한 RAM 용량이 증가합니다.

서버 파티션 또는 드라이브에서 사용 가능한 디스크 공간이 부족할 경우 MySQL에서도 이 오류가 반환됩니다.실제 연결된 사용자 수아닌 것이 확실하다면 다음 단계는 MySQL 서버 드라이브/파티션에 사용 가능한 공간이 있는지 확인하는 것입니다.

편집:2019년 1월 편집:
MySQL 5.7, 5.8입니다.이 이상의 버전은 알 수 없습니다.

이와 같이 접속이 부족할 경우 열려 있는 접속을 닫지 않을 가능성이 높습니다.

연결을 여는 코드를 검토하고 가능한 한 빨리 연결이 닫히는지 확인합니다.일반적으로 IDisposable(데이터베이스 접속 포함)을 구현하는 모든 것에 대해 using 키워드를 사용하여 이러한 오브젝트가 필요한 범위를 벗어나는 즉시 폐기되도록 합니다.

다음 쿼리를 사용하여 현재 활성 연결 수를 확인할 수 있습니다.

show processlist

레퍼런스:MySQL show status - 활성 연결 또는 전체 연결?

는 접속 이 컨피규레이션파일에 했기 때문에 my.cnf.

에 "MySQL"로 하십시오.root: mysql은 root로 로그인할 수 는 mysql에 "" (": " " " ".mysql")에 대한 이 사전 되기 때문입니다root user) 및 다음 명령을 사용하여 max_connections 변수를 늘립니다.

SET GLOBAL max_connections = 500;

이 변경은 다음 서버가 재시작될 때까지 적용됩니다.이 변경을 영속적으로 하기 위해서는 Configuration파일을 변경해야 합니다.넌 이걸 할 수 있어

vi /etc/my.cnf

[mysqld]
max_connections = 500

문서에서는 이 오류를 해결하기 위한 단계별 회피책을 자세히 설명합니다.한 번 보세요. 도움이 되었으면 좋겠어요.감사합니다.

max_connections허용되는 총 연결 수를 늘립니다.

★★★★★★★★★★★★★★★★★★」max_user_connections기본 0 = > 제한 없음으로 되돌립니다.단, 사용자 접속별로 제한해야 합니다.

MySQL 연결이 너무 많습니다.

프로그램에서는 연결을 열고 닫지 않고 열린 상태로 둡니다.

나는 같은 문제에 직면했고 마침내 밝혀냈다.

캐치 후 이 코드를 추가했습니다.

finally{
    try {
        rs.close();
        p.close();
        conn.close();
    } catch (SQLException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
}

DB가 사용하도록 구성된 연결 수를 보려면:

select @@max_connections;

변경하려면:

set global max_connections = 200;

현재 접속되어 있는 수를 확인하려면 다음 절차를 따릅니다.

show processlist;

또한 문제가 있는 쿼리를 추적할 수 있도록 트랜잭션의 적절한 스프레드시트를 작성하기 위해 이 소프트웨어를 작성했습니다.

다음을 시도해 보십시오.

합니다.sudo gedit /etc/mysql/my.cnf

my.my.cnf 파일입니다.set-variable=max_connections=500

이 문제는 대부분 MySQL에 허용된 최대 동시 연결 수를 초과했을 때 발생합니다.max_connections ___た 、 max _ connections 。은 하다, 하다, 하다, 하다를 통해서 할 수 요.show global variables like max_connections;

다음의 순서로 수정할 수 있습니다.

순서 1:

MySQL 。SET GLOBAL max_connections = 100;

MySQL에 로그인하면 너무 많은 연결 오류가 수정됩니다.이 방법에서는, 서버를 재기동할 필요는 없습니다.

순서 2:

위의 스텝 1을 사용하면 문제를 해결할 수 있지만 mysql을 재시작하면 max_connections가 기본값으로 롤백됩니다.

max_connection 값을 영속적으로 유지하려면 my.cnf 파일을 업데이트합니다.

MySQL 버 my my my my 。Service mysql stop

mymy.cnf 를 합니다.vi /etc/mysql/my.cnf

mysqld 섹션에서 변수 max_connections를 찾습니다.

[mysql]

max_connections = 300

더 높은 값으로 설정하고 파일을 저장합니다.

기동합니다.Service mysql start

주의: max_connections 변수 값을 늘리기 전에 서버에 새로운 요구 및 연결에 충분한 메모리가 있는지 확인하십시오.

MySQL은 각 연결에 대해 메모리를 미리 할당하고 연결이 닫힐 때만 메모리를 할당 해제합니다.새로운 접속을 쿼리할 때는 메모리, 네트워크, 계산 능력 등의 리소스가 사용자 요구에 충분히 대응할 수 있어야 합니다.

또한 추가 요청을 수용하기 위해 MySQL 서버에서 열린 테이블 제한을 늘리는 것도 고려해야 합니다.그리고 마지막으로.서버에서 트랜잭션이 완료된 연결을 닫는 것이 매우 중요합니다.

현재 실행 중인 응용 프로그램이 여전히 mysql에 액세스 중이고 모든 DB 연결을 사용했는지 확인합니다.

따라서 workbench에서 mysql에 접속하려고 하면 "too many connections" 오류가 발생합니다.

모든 DB 연결을 유지하는 현재 실행 중인 웹 애플리케이션을 중지하면 문제가 해결됩니다.

이 문제는 https://dev.mysql.com/doc/refman/8.0/en/too-many-connections.html에서 명확하게 기술되어 있습니다.

MySQL 서버에 연결하려고 할 때 클라이언트에서 Too many connections 오류가 발생할 경우 사용 가능한 모든 연결이 다른 클라이언트에서 사용되고 있습니다.

몇 분 후에 문제가 해결되었습니다.다른 클라이언트에 의해 연결이 해제된 것 같습니다.또한 vs 와 workbench 를 동시에 재기동해 보았습니다.

데이터베이스 창 서비스를 다시 시작하여 문제가 해결됨

최신 솔루션

Windows 를 사용하고 있는 경우는, 다음의 패스로 이동합니다.

‪C:\xampp\mysql\bin\my.ini

그리고 아래를 아래에 추가합니다.[mysqld]섹션:

max_connections = 500

Connections를 모두 문장으로 포장했는데도 이 오류가 발생했습니다.내가 간과하고 있었던 것은 그 연결들이 얼마나 오랫동안 열려 있었는가 하는 것이다.

나는 이런 일을 하고 있었다.

using (MySqlConnection conn = new MySqlConnection(ConnectionString))
{
    conn.Open();
    foreach(var m in conn.Query<model>(sql))
    {
        // do something that takes a while, accesses disk or even open up other connections
    }
}

루프 내의 모든 것이 완료될 때까지 연결이 닫히지 않으며 루프가 더 많은 연결을 생성하면 연결이 실제로 누적되기 시작할 수 있습니다.

이것이 더 낫다:

List<model> models = null;
using (MySqlConnection conn = new MySqlConnection(ConnectionString))
{
    conn.Open();

    models = conn.Query<model>(sql).ToList(); // to list is needed here since once the connection is closed you can't step through an IEnumerable   
}

foreach(var m in models)
{
    // do something that takes a while, accesses disk or even open up other connections
}

그러면 다른 작업을 수행하기 전에 연결이 닫히고 다시 연결 풀로 해제됩니다.

언급URL : https://stackoverflow.com/questions/14331032/mysql-error-1040-too-many-connection

반응형