Bagian ini mencantumkan beberapa kesalahan yang sering dialami pengguna. Anda akan menemukan deskripsi kesalahan dan cara mengatasi masalah di sini Show
Server MySQL telah hilang ErrorBagian ini juga membahas terkait Lost connection to server during query error Alasan paling umum untuk kesalahan server MySQL telah hilang adalah bahwa server kehabisan waktu dan menutup koneksi. Secara default, server menutup koneksi setelah 8 jam jika tidak terjadi apa-apa. Anda dapat mengubah batas waktu dengan menyetel variabel wait_timeout saat Anda memulai mysqld Alasan umum lainnya untuk menerima kesalahan server MySQL telah hilang adalah karena Anda telah mengeluarkan "tutup" pada koneksi MySQL Anda dan kemudian mencoba menjalankan kueri pada koneksi tertutup Jika Anda memiliki skrip, Anda hanya perlu mengeluarkan kueri lagi agar klien dapat melakukan koneksi ulang otomatis Anda biasanya bisa mendapatkan kode kesalahan berikut dalam kasus ini (yang mana yang Anda dapatkan bergantung pada OS) Kode kesalahan Keterangan CR_SERVER_GONE_ERROR Klien tidak dapat mengirim pertanyaan ke server CR_SERVER_LOST Klien tidak mendapatkan kesalahan saat menulis ke server, tetapi tidak mendapatkan jawaban lengkap (atau jawaban apa pun) untuk pertanyaan tersebut Anda juga akan mendapatkan kesalahan ini jika seseorang telah mematikan utas yang sedang berjalan dengan kill #threadid# Anda dapat memeriksa apakah MySQL belum mati dengan menjalankan versi mysqladmin dan memeriksa waktu aktifnya. Jika masalahnya adalah mysqld crash, Anda harus berkonsentrasi untuk menemukan alasan crash tersebut. Dalam hal ini Anda harus memulai dengan memeriksa apakah mengeluarkan kueri lagi akan mematikan MySQL lagi. Melihat Anda juga bisa mendapatkan error ini jika mengirimkan kueri ke server yang salah atau terlalu besar. Jika mysqld mendapatkan paket yang terlalu besar atau rusak, dianggap ada yang tidak beres dengan klien dan menutup koneksi. Jika Anda memerlukan kueri besar (misalnya, jika Anda bekerja dengan kolom gumpalan besar), Anda dapat meningkatkan batas kueri dengan memulai mysqld dengan opsi -O max_allowed_packet=# (default 1M). Memori ekstra dialokasikan sesuai permintaan, jadi mysqld akan menggunakan lebih banyak memori hanya saat Anda mengeluarkan kueri besar atau saat mysqld harus mengembalikan baris hasil besar Jika Anda ingin membuat laporan bug terkait masalah ini, pastikan Anda menyertakan informasi berikut
. Tidak dapat terhubung ke kesalahan server MySQL [lokal].Klien MySQL di Unix dapat terhubung ke server mysqld dengan dua cara berbeda. Soket Unix, yang terhubung melalui file dalam sistem file (default shell> mysqladmin -h `hostname` version2) atau TCP/IP, yang terhubung melalui nomor port. Soket Unix lebih cepat dari TCP/IP tetapi hanya dapat digunakan saat terhubung ke server di komputer yang sama. Soket Unix digunakan jika Anda tidak menentukan nama host atau jika Anda menentukan nama host khusus localhost Di Windows, jika server mysqld berjalan di 9x/Me, Anda hanya dapat terhubung melalui TCP/IP. Jika server berjalan pada NT/2000/XP dan mysqld dimulai dengan --enable-named-pipe, Anda juga dapat terhubung dengan pipa bernama. Nama pipa bernama adalah MySQL. Jika Anda tidak memberikan nama host saat menghubungkan ke mysqld, klien MySQL pertama-tama akan mencoba menyambung ke pipa bernama, dan jika ini tidak berhasil, klien akan menyambung ke port TCP/IP. Anda dapat memaksa penggunaan pipa bernama pada Windows dengan menggunakan. sebagai nama host Kesalahan (2002) Tidak dapat terhubung. biasanya berarti tidak ada server MySQL yang berjalan di sistem atau Anda menggunakan file soket atau port TCP/IP yang salah saat mencoba menyambung ke server mysqld Mulailah dengan memeriksa (menggunakan ps atau pengelola tugas di Windows) bahwa ada proses yang berjalan bernama mysqld di server Anda. Jika tidak ada proses mysqld, Anda harus memulainya. Lihat Jika proses mysqld sedang berjalan, Anda dapat memeriksa server dengan mencoba koneksi yang berbeda ini (tentu saja nomor port dan nama jalur soket mungkin berbeda dalam pengaturan Anda) shell> mysqladmin version shell> mysqladmin variables shell> mysqladmin -h `hostname` version variables shell> mysqladmin -h `hostname` --port=3306 version shell> mysqladmin -h 'ip for your host' version shell> mysqladmin --socket=/tmp/mysql.sock version_ Perhatikan penggunaan backquotes daripada forward quotes dengan perintah hostname; Berikut adalah beberapa alasan kesalahan Tidak dapat terhubung ke server MySQL lokal mungkin terjadi
Jika Anda mendapatkan pesan kesalahan Can't connect to MySQL server on some_hostname, Anda dapat mencoba hal-hal berikut untuk mengetahui masalahnya
Tuan rumah '. ' diblokir KesalahanJika Anda mendapatkan error seperti ini Host 'hostname' is blocked because of many connection errors. Unblock with 'mysqladmin flush-hosts'_ ini berarti mysqld telah mendapatkan banyak (max_connect_errors) permintaan koneksi dari host 'hostname' yang terputus di tengah. Setelah permintaan max_connect_errors gagal, mysqld berasumsi bahwa ada sesuatu yang salah (seperti serangan dari cracker), dan memblokir situs dari koneksi lebih lanjut hingga seseorang menjalankan perintah mysqladmin flush-hosts Secara default, mysqld memblokir host setelah 10 kesalahan koneksi. Anda dapat dengan mudah menyesuaikan ini dengan memulai server seperti ini shell> safe_mysqld -O max_connect_errors=10000 & Perhatikan bahwa jika Anda mendapatkan pesan kesalahan ini untuk host tertentu, pertama-tama Anda harus memeriksa bahwa tidak ada yang salah dengan koneksi TCP/IP dari host tersebut. Jika koneksi TCP/IP Anda tidak berfungsi, tidak ada gunanya meningkatkan nilai variabel max_connect_errors Terlalu banyak sambungan GalatJika Anda mendapatkan kesalahan Terlalu banyak koneksi saat Anda mencoba terhubung ke MySQL, ini berarti sudah ada klien max_connections yang terhubung ke server mysqld Jika Anda membutuhkan lebih banyak koneksi daripada default (100), Anda harus me-restart mysqld dengan nilai yang lebih besar untuk variabel max_connections Perhatikan bahwa mysqld sebenarnya mengizinkan (max_connections+1) klien untuk terhubung. Koneksi terakhir dicadangkan untuk pengguna dengan hak istimewa proses. Dengan tidak memberikan hak istimewa ini kepada pengguna biasa (mereka seharusnya tidak membutuhkan ini), administrator dengan hak istimewa ini dapat masuk dan menggunakan SHOW PROCESSLIST untuk mencari tahu apa yang salah. Lihat Jumlah maksimum koneksi yang diizinkan ke MySQL bergantung pada seberapa bagus pustaka thread pada platform tertentu. Linux atau Solaris harus dapat mendukung 500-1000 koneksi simultan, tergantung berapa banyak RAM yang Anda miliki dan apa yang dilakukan klien Anda Beberapa tabel yang diubah non-transaksional tidak dapat dibatalkan KesalahanJika Anda mendapatkan kesalahan/peringatan. Peringatan. Beberapa tabel yang diubah non-transaksional tidak dapat dibatalkan saat mencoba melakukan ROLLBACK, ini berarti beberapa tabel yang Anda gunakan dalam transaksi tidak mendukung transaksi. Tabel non-transaksional ini tidak akan terpengaruh oleh pernyataan ROLLBACK Biasanya, ini terjadi ketika Anda mencoba membuat tabel dengan tipe yang tidak didukung oleh biner mysqld Anda. Jika mysqld tidak mendukung tipe tabel (atau jika tipe tabel dinonaktifkan oleh opsi startup), ia malah akan membuat tipe tabel dengan tipe tabel yang paling mirip dengan yang Anda minta, mungkin MyISAM Anda dapat memeriksa jenis tabel untuk tabel dengan melakukan TAMPILKAN STATUS TABEL SEPERTI 'nama_tabel'. Lihat Anda dapat memeriksa ekstensi yang didukung oleh biner mysqld Anda dengan melakukan tampilkan variabel seperti 'memiliki_%'. Lihat Jika Anda mengeluarkan kueri dan mendapatkan sesuatu seperti kesalahan berikut mysql: Out of memory at line 42, 'malloc.c' mysql: needed 8136 byte (8k), memory in use: 12481367 bytes (12189k) ERROR 2008: MySQL client ran out of memory_ perhatikan bahwa kesalahan mengacu pada mysql klien MySQL. Alasan kesalahan ini hanyalah karena klien tidak memiliki cukup memori untuk menyimpan seluruh hasil Untuk memperbaiki masalah, periksa dulu apakah kueri Anda sudah benar. Apakah masuk akal untuk mengembalikan begitu banyak baris? . Ini menempatkan lebih sedikit beban pada klien (tetapi lebih banyak pada server) Ketika klien MySQL atau server mysqld mendapatkan paket yang lebih besar dari byte max_allowed_packet, itu mengeluarkan kesalahan Paket terlalu besar dan menutup koneksi Di MySQL3. 23 paket terbesar yang mungkin adalah 16M (karena batasan dalam protokol klien/server). Di MySQL4. 0. 1 dan lebih tinggi, ini hanya dibatasi oleh jumlah memori yang Anda miliki di server Anda (hingga maksimum teoretis 2G) Paket komunikasi adalah pernyataan SQL tunggal yang dikirim ke server MySQL atau satu baris yang dikirim ke klien Ketika klien MySQL atau server mysqld mendapatkan paket yang lebih besar dari byte max_allowed_packet, itu mengeluarkan kesalahan Paket terlalu besar dan menutup koneksi. Dengan beberapa klien, Anda juga dapat kehilangan koneksi ke server MySQL selama kesalahan kueri jika paket komunikasi terlalu besar Perhatikan bahwa klien dan server memiliki variabel max_allowed_packet sendiri. Jika Anda ingin menangani paket besar, Anda harus meningkatkan variabel ini baik di klien maupun di server Aman untuk meningkatkan variabel ini karena memori hanya dialokasikan saat dibutuhkan; Jika Anda menggunakan klien mysql, Anda dapat menentukan buffer yang lebih besar dengan memulai klien dengan mysql --set-variable=max_allowed_packet=8M. Klien lain memiliki metode berbeda untuk mengatur variabel ini Anda dapat menggunakan file opsi untuk mengatur max_allowed_packet ke ukuran yang lebih besar di mysqld. Misalnya, jika Anda ingin menyimpan panjang MEDIUMBLOB ke dalam tabel, Anda harus memulai server dengan opsi set-variable=max_allowed_packet=16M Anda juga bisa mendapatkan masalah aneh dengan paket besar jika Anda menggunakan blob besar, tetapi Anda belum memberikan akses mysqld ke memori yang cukup untuk menangani kueri. Jika Anda menduga ini masalahnya, coba tambahkan ulimit -d 256000 ke awal skrip safe_mysqld dan mulai ulang mysqld Kesalahan Komunikasi/ Koneksi DibatalkanDimulai dengan MySQL 3. 23. 40 Anda hanya mendapatkan kesalahan koneksi yang dibatalkan jika Anda memulai mysqld dengan --warnings Jika Anda menemukan kesalahan seperti berikut di log kesalahan Anda (lihat ) 010301 14:38:23 Aborted connection 854 to db: 'users' user: 'josh'_ ini berarti bahwa salah satu dari berikut ini telah terjadi
Saat ini terjadi, variabel server Aborted_clients bertambah Variabel server Aborted_connects bertambah
Perhatikan bahwa ini dapat menunjukkan bahwa seseorang mencoba masuk ke database Anda Lihat Alasan lain untuk masalah dengan klien yang dibatalkan/koneksi yang dibatalkan
Kesalahan ini terjadi di versi MySQL yang lebih lama ketika tabel sementara dalam memori menjadi lebih besar dari byte tmp_table_size. Untuk menghindari masalah ini, Anda dapat menggunakan opsi -O tmp_table_size=# ke mysqld untuk menambah ukuran tabel sementara atau menggunakan opsi SQL SQL_BIG_TABLES sebelum Anda mengeluarkan kueri yang bermasalah. Lihat Anda juga dapat memulai mysqld dengan opsi --big-tables. Ini persis sama dengan menggunakan SQL_BIG_TABLES untuk semua kueri Di MySQL Versi 3. 23, tabel sementara dalam memori akan secara otomatis diubah menjadi tabel MyISAM berbasis disk setelah ukuran tabel menjadi lebih besar dari tmp_table_size Tidak dapat membuat/menulis ke file ErrorJika Anda mendapatkan kesalahan untuk beberapa jenis kueri Can't create/write to file '\\sqla3fe_0.ism'. ini berarti MySQL tidak dapat membuat file sementara untuk hasil yang ditetapkan di direktori sementara yang diberikan. (Kesalahan ini adalah pesan kesalahan khas pada Windows, dan pesan kesalahan Unix serupa. ) Cara mengatasinya adalah memulai mysqld dengan --tmpdir=path atau menambahkan ke file opsi Anda [mysqld] tmpdir=C:/temp dengan asumsi bahwa direktori shell> mysqladmin -h `hostname` version_6 ada. Lihat Periksa juga kode kesalahan yang Anda dapatkan dengan perror. Salah satu alasannya mungkin juga karena kesalahan disk penuh shell> perror 28 Error code 28: No space left on device Perintah tidak sinkron Kesalahan di KlienJika Anda membuat Perintah tidak sinkron; Hal ini dapat terjadi, misalnya, jika Anda menggunakan mysql_use_result() dan mencoba menjalankan kueri baru sebelum Anda memanggil mysql_free_result(). Itu juga bisa terjadi jika Anda mencoba mengeksekusi dua kueri yang mengembalikan data tanpa mysql_use_result( ) atau mysql_store_result( ) di antaranya Jika Anda mendapatkan kesalahan berikut Ditemukan kata sandi yang salah untuk pengguna. 'some_user@some_host'; ini berarti ketika mysqld dimulai atau ketika memuat ulang tabel izin, ia menemukan entri di tabel pengguna dengan kata sandi yang tidak valid. Akibatnya, entri tersebut diabaikan begitu saja oleh sistem izin Kemungkinan penyebab dan perbaikan untuk masalah ini
Tabel 'xxx' tidak ada KesalahanJika Anda mendapatkan kesalahan Tabel 'xxx' tidak ada atau Tidak dapat menemukan file. 'xxx' (errno. 2), ini berarti tidak ada tabel di database saat ini dengan nama xxx Perhatikan bahwa karena MySQL menggunakan direktori dan file untuk menyimpan database dan tabel, nama database dan tabel peka terhadap huruf besar-kecil. (Pada Windows, nama database dan tabel tidak peka huruf besar/kecil, tetapi semua referensi ke tabel tertentu dalam kueri harus menggunakan huruf besar/kecil yang sama. ) Anda dapat memeriksa tabel mana yang Anda miliki di database saat ini dengan SHOW TABLES. Melihat Tidak dapat menginisialisasi kesalahan kumpulan karakter xxxJika Anda mendapatkan kesalahan seperti shell> mysqladmin -h `hostname` version0 ini berarti salah satu dari hal-hal berikut
Jika Anda mendapatkan KESALAHAN '. ' tidak ditemukan (errno. 23), Tidak dapat membuka file. . (errno. 24), atau kesalahan lainnya dengan errno 23 atau errno 24 dari MySQL, itu berarti Anda belum mengalokasikan cukup deskriptor file untuk MySQL. Anda dapat menggunakan utilitas perror untuk mendapatkan gambaran tentang arti nomor kesalahan shell> mysqladmin -h `hostname` version_1 Masalahnya di sini adalah mysqld mencoba membuka terlalu banyak file secara bersamaan. Anda dapat memberi tahu mysqld untuk tidak membuka begitu banyak file sekaligus, atau menambah jumlah deskriptor file yang tersedia untuk mysqld Untuk memberi tahu mysqld agar membuka lebih sedikit file sekaligus, Anda dapat membuat cache tabel lebih kecil dengan menggunakan opsi -O table_cache=32 ke safe_mysqld (nilai defaultnya adalah 64). Mengurangi nilai max_connections juga akan mengurangi jumlah file yang terbuka (nilai defaultnya adalah 90) Untuk mengubah jumlah deskriptor file yang tersedia untuk mysqld, Anda dapat menggunakan opsi --open-files-limit=# menjadi safe_mysqld atau -O open-files-limit=# menjadi mysqld. Lihat. Cara termudah untuk melakukannya adalah dengan menambahkan opsi ke file opsi Anda. Lihat. Jika Anda memiliki versi mysqld lama yang tidak mendukung ini, Anda dapat mengedit skrip safe_mysqld. Ada baris yang dikomentari ulimit -n 256 dalam skrip. Anda dapat menghapus karakter '#' untuk menghapus tanda komentar pada baris ini, dan mengubah angka 256 untuk memengaruhi jumlah deskriptor file yang tersedia di mysqld ulimit (dan open-files-limit) dapat menambah jumlah deskriptor file, tetapi hanya sampai batas yang ditentukan oleh sistem operasi. Ada juga batas "keras" yang hanya dapat diganti jika Anda memulai safe mysqld atau mysqld sebagai root (ingat saja bahwa Anda juga perlu menggunakan --user=. pilihan dalam hal ini). Jika Anda perlu menambah batas OS pada jumlah deskriptor file yang tersedia untuk setiap proses, lihat dokumentasi untuk sistem operasi Anda Perhatikan bahwa jika Anda menjalankan tcsh shell, ulimit tidak akan berfungsi. tcsh juga akan melaporkan nilai yang salah saat Anda meminta batas saat ini. Dalam hal ini Anda harus memulai safe_mysqld dengan sh Bagaimana cara memperbaiki database MySQL yang rusak?Menjalankan Proses Pemulihan InnoDB . Temukan dan buka file konfigurasi global menggunakan editor teks favorit Anda. . Tambahkan opsi berikut ke my. file cnf. [mysqld] innodb_force_recovery=4. . Simpan dan tutup file Mulai ulang server MySQL untuk memastikan file konfigurasi baru berlaku. systemctl me-restart mysql Bagaimana kita bisa memperbaiki tabel MySQL?Pernyataan MySQL REPAIR TABLE digunakan untuk memperbaiki tabel jika rusak. Untuk menjalankan pernyataan ini, Anda memerlukan hak istimewa SELECT dan INSERT. Pernyataan ini hanya berfungsi untuk mesin tertentu.
Bagaimana cara membersihkan database MySQL?Cara mengosongkan database MySQL . Buka cPanel >> bagian Database >> menu phpMyAdmin. . Pilih database yang ingin Anda kosongkan. . Centang Periksa Semua untuk memilih semua tabel dan pilih opsi Turunkan dari daftar turun bawah Dengan yang dipilih Ini akan menjalankan kueri SQL DROP TABLE untuk mengosongkan semua tabel sekaligus Bagaimana saya tahu jika database MySQL saya rusak?Jika Anda hanya ingin memeriksa apakah database Anda rusak atau tidak, jalankan perintah berikut. . # mysqlcheck -c DATABASE_NAME -u USER_NAME -p # mysqlcheck -c -u USER_NAME -p --semua-database # mysqlcheck -a DB_NAME TABLE_NAME -u USER_NAME -p |