mysql automatycznie dostosowuje maksymalne wartości połączeń

11

Ustawiłem maksymalną liczbę połączeń na około 2000 w pliku my.cnf.

max_connections=2048

Zaktualizowałem do wersji 5.5.20 i teraz widzę następujący wiersz w dzienniku błędów.

120201 19:40:24 [Warning] Changed limits: max_open_files: 1024  max_connections: 214  table_cache: 400

Dlaczego mysql zmienił maksymalną wartość połączeń na 214?

# mysqladmin variables | grep max_connections
| max_connections | 214                                               

Miękkie i twarde otwarte pliki ograniczone przez system operacyjny to 1024

# ulimit -Sa | grep "open files"
open files                      (-n) 1024

# ulimit -Ha | grep "open files"
open files                      (-n) 1024

Liczba faktycznie używanych maksymalnych połączeń:

# mysql -e"show status like '%used_connections%'"
+----------------------+-------+
| Variable_name        | Value |
+----------------------+-------+
| Max_used_connections | 95     |
+----------------------+-------+
shantanuo
źródło
1
Spróbuj ustawić wyższy poziom otwartych plików ulimit, np. 4096.ulimit -n 4096
Czy zachowanie się zmieniło? Miałem wersję 5.0.77 i nie zauważyłem tego problemu. Dopiero po uaktualnieniu do wersji 5.5.20 zmieniono wartości!
shantanuo
1
Zapytam o oczywiste. Czy potwierdziłeś, że aktualizacja nie zmieniła twojego my.cnf? Ponadto, jaki system operacyjny? Czy został zainstalowany przez menedżera pakietów, takiego jak yum? Jeśli tak, to który pakiet?
Derek Downey

Odpowiedzi:

6

Wydaje mi się OK. Nie możesz mieć max_connections większych niż to, ponieważ open_files_limit jest zbyt niski. Dla każdego połączenia MySQL otwiera kilka plików. Spójrz tutaj .

Będziesz musiał zwiększyć limit otwartych plików w swoim systemie operacyjnym, a następnie możesz ustawić wyższą wartość max_connections.

Aleksandar Vucetic
źródło
5

Wygląda na to, że jest to ten sam problem, na który odpowiedziałem tutaj podczas przepływu stosów, chociaż korzystałem z CentOS 7 i MySQL 5.6.26

Musisz zwiększyć limit otwartych plików zarówno dla użytkownika mysql (w limitach.conf), jak i dla usługi mysql (w pliku mysql.service)

dołącz te dwa wiersze do /etc/security/limits.conf

mysql hard nofile 65535
mysql soft nofile 65535

dołącz tę linię do /usr/lib/systemd/system/mysqld.service (w sekcji [usługa])

LimitNOFILE=65535

następnie zrestartuj komputer i sprawdź, czy te komunikaty o błędach zniknęły z dziennika błędów mysql.

MNB
źródło
Inne rozwiązanie to: dba.stackexchange.com/questions/32987/…
Nav
@Nav - Tak, nie możesz użyć maksymalnej liczby skonfigurowanych połączeń, jeśli twój system operacyjny nie pozwala na użycie odpowiedniej liczby uchwytów plików przez mysqld
MNB
Ponadto Ubuntu 15.04+ wymaga innego podejścia: stackoverflow.com/questions/23977095/...
Nav
0

To wydaje się być błędem w nowym mysqld. Miałem ten sam problem. Ustawienie max_connections na 700 działało, ale jeśli ustawię na 900, podczas uruchamiania zostało zresetowane do 214. Gdyby to była celowa zmiana, obniżyłaby to do 700 lub czegoś podobnego, wartość 214 nie ma sensu.
W każdym razie zwiększenie limitu deskryptora za pomocą ulimit -n rozwiązuje problem.

Bart K.
źródło