Had Sambungan Pengguna MYSQLi Melebihi
Mesej ralat "Pengguna dbo343879423 sudah mempunyai lebih daripada sambungan aktif 'max_user_connections'" menunjukkan bahawa MySQL sedang mengalami jumlah sambungan yang tinggi, menyebabkan had dicapai. Ini berkemungkinan disebabkan oleh penggunaan yang berlebihan atau aktiviti yang berpotensi berniat jahat.
Punca:
- Hos mempunyai had sambungan ketat yang dikonfigurasikan dalam MySQL.
- Skrip atau aplikasi lain menggunakan sambungan yang berlebihan.
Penyelesaian:
1. Semak Had Sambungan MySQL:
- Log masuk ke pelayan pangkalan data anda melalui SSH atau alat pengurusan.
- Jalankan arahan tunjukkan pembolehubah seperti '%max_connections%'; untuk melihat sambungan maksimum yang dibenarkan.
- Jika had terlalu rendah, rujuk dengan pembekal pengehosan atau laraskan tetapan dalam fail konfigurasi MySQL (my.cnf).
2. Kenalpasti Sambungan Berlebihan:
- Jalankan senarai proses tunjukkan arahan; untuk melihat sambungan MySQL yang aktif.
- Kenal pasti sebarang pertanyaan yang berjalan lama atau sambungan yang mencurigakan.
- Tamatkan sebarang sambungan yang tidak perlu dengan mengeluarkan arahan bunuh , di mana ialah ID proses.
3. Laksanakan Kolam Sambungan:
- Gunakan mekanisme kumpulan sambungan untuk mengurus sambungan dengan cekap.
- Ini melibatkan penciptaan kumpulan sambungan yang boleh digunakan semula, menghalang penciptaan yang berlebihan sambungan.
4. Gunakan Corak Singleton:
- Laksanakan corak tunggal dalam kelas pangkalan data untuk memastikan hanya satu tika digunakan.
- Ini memastikan sambungan tunggal diwujudkan dan digunakan semula, dan bukannya berbilang sambungan dibuat.
Contoh:
Di bawah ialah contoh melaksanakan corak tunggal dalam kelas pangkalan data MySQLi:
class Database {
private static $instance = null;
private $connection;
public static function getInstance() {
if (self::$instance === null) {
self::$instance = new Database();
}
return self::$instance;
}
private function __construct() {
$this->connection = new mysqli(DB_HOST, DB_USER, DB_PASS, DB_NAME);
}
// Database methods and functions...
}
Salin selepas log masuk
Nota:
- Menukar hos tidak akan menyelesaikan isu jika melebihi had sambungan pada semua hos yang tersedia.
- Menggunakan talian yang sama 11 di bahagian lain skrip tidak mungkin menyebabkan ralat.
- Adalah penting untuk memahami konsep had sambungan dan mengoptimumkan kod anda serta konfigurasi MySQL dengan sewajarnya untuk mengelakkan ralat ini pada masa hadapan.
Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Membetulkan 'Pengguna Sudah Mempunyai Lebih Daripada Sambungan Aktif 'Max_User_Connections'' dalam MySQLi?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!