Sebagian besar konten di Internet disimpan di database yang mana MySQL adalah pilihan populernya. Namun apa yang harus dilakukan ketika tiba-tiba konten dinamis Anda tidak dapat dimuat, atau ketika kembali ke situs web Anda, Anda akan disambut oleh halaman putih yang hampir kosong dengan pesan “Kesalahan saat membuat koneksi database.” Panduan ini ditujukan untuk membantu memecahkan masalah database MySQL di server cloud , dan dengan mengikuti langkah-langkah yang tercantum di sini Anda diharapkan dapat memulihkan fungsionalitas database Anda.
Periksa apakah layanan sedang berjalan
Jika situs web Anda tidak dapat terhubung ke database Anda, mungkin layanan tersebut tidak mendengarkan. Periksa status MySQL Anda, pada sistem Ubuntu dan Debian, ini dapat dilakukan dengan perintah berikut.
sudo service mysql status
CentOS dan varian Red Hat lainnya juga menggunakan MySQL, tetapi namanya MariaDB, jadi gunakan perintah ini sebagai gantinya.
sudo service mariadb status
Output dari pemeriksaan status pada CentOS dan Debian akan menampilkan sesuatu seperti contoh dari CentOS di bawah ini, output Debian akan hampir sama dengan pengecualian nama layanan yang berbeda.
mariadb.service - MariaDB database server
Loaded: loaded (/usr/lib/systemd/system/mariadb.service; enabled)
Active: active (running) since Wed 2015-08-05 11:53:38 EEST; 3h 23min ago
Main PID: 2451 (mysqld_safe)
CGroup: /system.slice/mariadb.service
├─2451 /bin/sh /usr/bin/mysqld_safe --basedir=/usr
└─2609 /usr/libexec/mysqld --basedir=/usr --datadir=/var/lib/mysql...
Hasil cetakannya agak bertele-tele, tetapi bagian yang penting biasanya diwarnai agar lebih menonjol. Yang berwarna hijau ‘aktif (berjalan)’ berarti layanan seharusnya berjalan normal jika sebaliknya, dikatakan ‘aktif (keluar)’ atau ‘tidak aktif (mati)’ prosesnya telah dihentikan atau dihentikan.
Ubuntu memadatkan informasi yang sama menjadi satu baris seperti contoh keluaran di bawah.
mysql start/running, process 5897
Jika status layanan Anda menyatakan selain ‘berjalan’, coba mulai ulang proses menggunakan perintah layanan yang sama seperti sebelumnya tetapi dengan ‘restart’ dan bukan ‘status’.
sudo service mysql restart
sudo service mariadb restart
Jika layanan database dimulai ulang tanpa mengalami kesalahan, Anda dapat mencoba menyambungkannya menggunakan perintah di bawah ini. Masukkan kata sandi root saat diminta.
mysql -u root -p
Jika Anda disambut dengan “Selamat datang di monitor MySQL/MariaDB” berarti koneksi berhasil dan layanan database berjalan. Jika sebaliknya, Anda mendapatkan kesalahan seperti contoh di bawah ini, Anda mungkin salah mengetik kata sandi untuk pengguna root. Coba lagi, atau jika Anda tidak yakin dengan kata sandi root, masuklah dengan akun pengguna lain yang dapat Anda akses hanya dengan mengganti root dengan nama pengguna lain.
ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: YES)
Jika Anda menyiapkan database di server terpisah dari host web Anda, pastikan kedua server dapat saling menjangkau. Anda dapat menguji koneksi database dari server web Anda dengan perintah di bawahnya menggunakan nama pengguna yang benar untuk instalasi Anda.
mysql -u <user name> -p -h <database server private IP>
Periksa konfigurasinya
Ketika MySQL berjalan tetapi situs web Anda masih tidak dimuat sebagaimana mestinya, atau ketika mencoba menyambung ke database Anda secara manual, Anda mendapatkan pesan kesalahan seperti di bawah ini, Anda harus melihat konfigurasi layanan.
ERROR 2002: Can't connect to local MySQL server through socket '/tmp/mysql.sock' (111)
Pada server Debian dan Ubuntu file konfigurasi MySQL biasanya disimpan di /etc/mysql/. Pengaturan khusus pengguna juga dapat disimpan di /home//.my.cnf, yang akan menggantikan konfigurasi global. Periksa apakah ada penggantian tingkat pengguna yang telah ditetapkan. Biasanya disarankan untuk memiliki nama pengguna terpisah untuk aplikasi web yang berbeda, jadi periksa setidaknya nama pengguna yang relevan dengan masalah pemuatan halaman Anda. Anda dapat membuka file konfigurasi global dengan perintah pertama dari dua perintah berikut di bawah ini, dan perintah khusus pengguna dengan perintah terakhir dengan menggantidengan nama pengguna basis data.
sudo nano /etc/mysql/my.cnf
sudo nano /home/<user>/.my.cnf
Dengan menggulir ke bawah melewati pengaturan [klien] dan [mysqld_safe] Anda akan menemukan sesuatu seperti contoh di sini.
[mysqld]
#
# * Basic Settings
#
user = mysql
pid-file = /var/run/mysqld/mysqld.pid
socket = /var/run/mysqld/mysqld.sock
port = 3306
basedir = /usr
datadir = /var/lib/mysql
tmpdir = /tmp
lc-messages-dir = /usr/share/mysql
skip-external-locking
#
# Instead of skip-networking the default is now to listen only on
# localhost which is more compatible and is not less secure.
bind-address = 127.0.0.1
Dengan CentOS dan Red Hat lainnya, file konfigurasi utama disimpan di lokasi yang sedikit berbeda, buka untuk diperiksa
sudo vi /etc/my.cnf
[mysqld]
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock
Baris di sini yang harus diperhatikan adalah ‘socket’, ‘datadir’ dan ‘bind-address’. Parameter pada contoh di atas menggunakan nilai defaultnya, dan pada sebagian besar kasus, konfigurasi Anda akan terlihat sama. Pastikan pengaturannya mengarah ke direktori yang benar sehingga MySQL benar-benar dapat menemukan file yang diperlukan. Cara termudah untuk memeriksa ‘datadir’ adalah dengan menggunakan perintah di bawah ini
sudo ls -l /var/lib/mysql/
Outputnya akan mencantumkan semua file dalam direktori itu, setidaknya harus berisi yang berikut ini ditambah database apa pun yang telah Anda buat.
drwx------ 2 mysql root 4096 Aug 5 12:23 mysql
drwx------ 2 mysql mysql 4096 Aug 5 12:29 performance_schema
Jika direktori data atau soket telah dipindahkan dan MySQL tidak mengetahui di mana letaknya, perbaiki file konfigurasi agar mengarah ke direktori yang benar. Anda dapat mencari folder dengan perintah berikut.
sudo find / -name performance_schema && sudo find / -name mysql.sock
Parameter ketiga yang perlu Anda periksa adalah alamat pengikatan, ini hanya relevan jika database Anda perlu diakses dari jarak jauh. Dalam instalasi Debian dan Ubuntu, pengikatan secara default diatur ke alamat loopback, yang mencegah panggilan database dari luar localhost. CentOS tidak memiliki parameter yang sama kecuali diatur secara manual. Untuk pengaturan apa pun saat layanan web Anda berada di server yang berbeda dengan database, alamat pengikatan ini harus disetel ke IP pribadi server itu sendiri.
Periksa log kesalahan
Jika konfigurasi tampak benar dan layanan berjalan, namun situs web Anda masih tidak dimuat sebagaimana mestinya, coba periksa log untuk mengetahui petunjuk apa yang mungkin menjadi penyebabnya.
Server Debian dan Ubuntu menyimpan log kesalahan ke /var/log/mysql/error.log. Anda dapat membaca log dengan ‘lebih sedikit’, tetapi ini mungkin tidak nyaman karena log berisi lebih dari sekadar kesalahan kritis. Sebaliknya, cari log menggunakan ‘grep’.
sudo grep -i error /var/log/mysql/error.log
Jika Anda tidak dapat menemukan apa pun di log terbaru, periksa juga log yang diarsipkan. Untuk melakukan ini, gunakan ‘zgrep’ dengan perintah yang sama seperti ‘grep’ biasa
sudo zgrep -i error /var/log/mysql/error.log.1.gz
Karena database di bawah CentOS diberi nama MariaDB dan bukan MySQL, log juga disimpan dengan nama yang berbeda. Anda dapat mencari log dengan perintah berikut.
sudo grep -i error /var/log/mariadb/mariadb.log
Sistem Debian juga melaporkan kejadian MySQL ke /var/log/syslog, untuk memfilter yang lainnya, gunakan ‘grep’ dengan dua kata kunci yang dipisahkan oleh .* untuk menyatakan ‘dan’ seperti pada perintah di bawah ini.
sudo grep -i -E 'mysql.*error' /var/log/syslog
Jika Anda kesulitan menemukan sesuatu yang bermanfaat, cobalah kata kunci lain seperti ‘mulai’ untuk melihat kapan layanan terakhir kali dimulai ulang, atau ‘gagal’ untuk menemukan masalah yang kurang kritis yang mungkin tidak dilaporkan sebagai kesalahan.