Solusi untuk MySQL yang tiba-tiba mati pada Webuzo

Mungkin pengalaman saya ini cukup bisa memberi pelajaran.

Jadi saya beberapa waktu lalu menjual web wallpaper saya. Spesifikasi hosting untuk web wallpaper itu yang paling penting adalah space yang besar. Web wallpaper yang saya jual kemaren memiliki ukuran 30GB.

Si klien nanya spek hosting yang cocok, dia pengennya Shared hosting dari Hotgator, cuma saya tidak direkomendasikan, saya tolak karena meskipun judul nya Unlimited, tetep saja Hosgator membatasi jumlah inode maksimal 250.000 buah inode.

Sebagai informasi yang saya tahu, inode adalah jumlah seluruh file dan folder dalam suatu folder. Misal saya punya folder bernama Foto di dalam folder itu ada 10 foto, maka total inode adalah 11 yang terdiri dari 10 file foto dan 1 folder Foto.

Kembali lagi ke masalah hosting, saya kemudian menyarankan klien untuk menyewa VPS saja karena inode web wallpaper saya lebih dari 250rb buah.

Setelah diskusi saya menyarankan dia untuk nyewa di Vultr karena dengan $5 per bulan bisa mendapat ruang HD 125GB, memang belum SSD, tapi spek itu sdh lebih dari cukup (kalo yang SSD hanya 30GB).

Spek detail VPS nya adalah: 512 MB RAM, 1 core CPU, 125GB SATA, CentOS 6 64 bit.

Si klien ini ngga ngerti cara mengoperasikan VPS, dia minta saya untk install cPanel.

Berhubung saya ngga ngerti cara nginstall cPanel (karena ngga kebeli) saya carikan alternatif panel yaitu Webuzo.

Skip skip skip…

Setelah saya install Webuzo, lalu kok aneh ya, penggunaan RAM oleh MySQL cukup besar, padahal NS belum diarahkan ke VPS, masih ke Dedicated Server saya.

Setelah semua file saya pindahkan dari server saya ke VPS Vultr, saya minta klien untuk arahkan NS nya ke IP VPS.

Namun beberapa jam setelah itu VPS selalu mati, saya reboot server, 20 menit kemudian mati lagi. Begitu terus… Saya ganti MySQL jadi MariaDB tapi tetep aja ngga nyelesain masalah.

Aneh memang, padahal saya punya beberapa VPS yang memiliki spek lebih rendah (256MB RAM, Debian 7) yang saya install LEMP lancar-lancar aja tanpa downtime.

Tadinya saya mau nyaranin si klien buat diinstall LEMP aja (tanpa Webuzo) agar lebih ringan, atau minta dia buat upgrade RAM jadi 1GB. Dia udah setuju tapi saya masih penasaran atas penyakit MySQL tiba-tiba mati tersebut.

Saya kemudian melihat error log mysql dengan perintah

tail -f /var/log/mysqld.log

Dan hasilnya seperti ini:

webuzo mysql error log

Setelah Googling dengan kata kunci “Fatal error: cannot allocate memory for the buffer pool” akhirnya saya nemu jawaban dan narik kesimpulan seperti berikut.

Sesuai informasi dari situs resmi Webuzo, bahwa minimal RAM untuk Webuzo adalah 1GB, sementara itu, VPS yang saya seting hanya punya 512MB RAM, artinya ada kekurangan.

Konyol nya saya, saya ngga ngeuh kalo saya blm membuat file SWAP memory sebagai backup jika sewaktu-waktu memori utama habis. Vultr sendiri secara default ngga membuatkan memori swap saat instalasi.

Kemudian saya membuat file swap dan sampe sekarang MySQL pada VPS pun lancar dan tidak mati lagi seperti sebelumnya.

Bagi yang belum tau, swap memory itu semacam memory virtual / RAM tambahan yang diambil dari harddisk, jadi sangat membantu memori utama.

Lalu bagaimana cara membuat file swap?

Memory VPS yang saya setting memiliki RAM 512 MB. Untuk cari aman, saya buat Swap memory menjadi 2 x memori utama, artinya 1GB. 1GB = 1024k. Maka, tinggal lakukan perintah ini lewat SSH Client.

dd if=/dev/zero of=/swap.file bs=1024 count=1024k
mkswap /swap.file
swapon /swap.file

Lalu edit file konfigurasi, saya edit pake vi editor

vi /etc/fstab

Lalu tambahkan kode ini di baris paling akhir

/swap.file none swap sw 0 0

Beres deh.

Setelah itu, silahkan cek dengan perintah free -m, harus nya nanti bakal keliatan di kolom total pada baris Swap ada berapa (punya saya di bawah ini: 1023).

free m linux command

Selain itu, saya tuning konfigurasi mysql yang ada di Webuzo. Di bawah bagian [mysqld] saya tambahkan kode berikut:

innodb_buffer_pool_size=64M

Lalu saya restart MySQL server nya.

Lihat penampakan htop saya setelah dibuat memori swap

htop

Kalo ditotal memori yang dipakai adalah 359+190 = 549. Sebelumnya pantas saja MySQL sering mati (down) tiap 20 menit karena RAM nya abis karena hanya punya 512MB.

Nah kalo ada yang memiliki error seperti di atas (Fatal error: cannot allocate memory for the buffer pool) kemungkinan VPS nya kekurangan memori, silahkan buat memori swap, mudah-mudahan lancar.

Solusi Tambahan: Menghidupkan MySQL / MariaDB Yang Mati Di Webuzo

Agar lebih afdol, maka kita harus melakukan langkah selanjutnya. Ini diperlukan jika solusi di atas gagal (mysql / mariadb tetap suka mati sendiri), jadi ikuti saja ya langkah selanjutnya. Tidak susah kok.

Kita akan membuat suatu perintah yang akan mengecek program mysql setiap menit.

Setiap menitnya, program akan mememerika service mysql, jika mysql hidup, maka program tidak melakukan apa-apa, jika mysql mati, maka program akan berusaha menghidupkannya.

Pertama kita buat dulu programnya, ketik perintah berikut:

cd ~
vi jalankan-mysql.sh

Copy paste kode di bawah!

#!/bin/bash
PATH=/usr/sbin:/usr/bin:/sbin:/bin:/usr/local/bin
if [[ ! "$(service mysqld status)" =~ "start/running" ]]
then
     service mysqld start
fi

Kalau Anda menggunakan mariadb maka ganti kode “service mysqld status” di atas, menjadi “service mariadb status“. Juga ganti kode “service mysqld start” menjadi “service mariadb start

Save kalo sudah, dan jalankan

chmod +x jalankan-mysql.sh

Setelah selesai membuat program nya, kita harus integrasikan dengan cronjob. Cronjob itu kaya “to do list” yang akan dijalankan sesuai jadwal yang kita tentukan (Ibarat kita nyeting alarm maka di jam tersebut alarm akan hidup).

Cara setting cronjob-nya adalah sbb.

Tapi sebelum setting, pastikan cron sudah terinstall, kalau belum terinstall silahkan install dulu.

Untuk CentOS, perintahnya yum install cronie

Untuk Ubuntu, perintahnya apt-get install cron

Setelah terinstall tinggal jalankan perintah ini

crontab -e

Lalu tambahkan kode ini di baris paling awal (sisa baris yang ada diturunkan ke bawah aja)

*/1 * * * * /root/jalankan-mysql.sh

Jika editor untuk crontab bernama nano maka save dengan menekan kombinasi tombol CTRL+O diakhiri dengan Enter. Jika editor nya vi maka tinggal eksekusi perintah :wq.

Selesai.

Untuk mengujinya, kita akan dengan sengaja mematikan service mysql. Caranya:

service mysqld stop

Kalau Anda menggunakan mariadb maka ganti perintah “service mysqld stop” menjadi “service mariadb stop

Cek website, seharusnya web sekarang error. Lalu, tunggu selama 1 menit dan cek kembali website, seharusnya web akan kembali live.

29 thoughts on “Solusi untuk MySQL yang tiba-tiba mati pada Webuzo

  1. wow.. keren ni mas… saya pake webuzo juga kadang2 mysqlnya mati jadi mesti restart terus… oiya nanya mas… di webuzo saya ada dua web service apache dan nginx.. nah setiap saya matiin apache.. nyalain nginx.. selalu error gamau live.. tp pas apache nya nyala baru bisa… saya mau ganti aja nih dari apache ke nginx gimana caranya mas defaultnya jadi nginx dan mau buang apachenya?? trims nuhun yah mas 🙂

    • Login Webuzo,

      1. Akses http://IPVPS:2002/kode-aneh/index.php?act=apps&app=3
      2. “Remove”
      3. Akses http://IPVPS:2002/kode-aneh/index.php?act=apps&app=18 . Pilihannya kalau ada tombol “Remove”, Remove dulu (tidak wajib tapi agar afdol), lalu jalankan ke no 4. Kalau tidak ada tombol “Remove” langsung ke no. 4.
      4. Ceklist pada pilihan “Set Default”, Klik install.

      Maka sekarang Server untuk melayani web pake Nginx

      NAMUN…

      Nginx + Webuzo + WordPress tidak akur, perlu ada modifikasi, kalau tidak dimodif akan error saat make SEO permalink. Untuk mengatasinya, login SSH, Edit file ini /usr/local/apps/nginx/etc/conf.d/common

      Tambahkan kode berikut di akhir baris.

      #PERMALINKS
      if (!-f $request_filename){
      set $rule_1 1$rule_1;
      }
      if (!-d $request_filename){
      set $rule_1 2$rule_1;
      }
      if ($rule_1 = "21"){
      rewrite /. /index.php last;
      }
      

      Save kalau sudah & restart service nginx.

      • mas sudah berhasil naik pake nginx… sudah ditambah juga file yang permalinks di atas sudah restart nginx, namun masih error mas… saat homepage ga error pas post error 404 not found (webuzo).. permalink saya saat ini set seperti ini mas domain.com/%postname%/
        gimana yah solusinya …. makasih banyak yah mas… maaf merepotkan.. hehe

        • Edit file /usr/local/apps/nginx/etc/conf.d/webuzoVH.conf

          Tambahkan kode try_files $uri $uri/ /index.php?q=$uri&$args;

          Setelah ditambahkan kode, nanti hasilnya kira2 seperti ini (sesuaikan nama domain-nya):

          ....kode lainnya dst... (kalau ada)
          server {	
          	listen		*:80;
          	server_name	hardinal.com www.hardinal.com;
          	# The Document Root
          	root		/home/hardinal/public_html/hardinal.com;	
          	error_log	/usr/local/apps/nginx/var/log/hardinal.com.err;
          	access_log	/usr/local/apps/nginx/var/log/hardinal.com.log main;
          	include		/usr/local/apps/nginx/etc/conf.d/common;
          
          	try_files $uri $uri/ /index.php?q=$uri&$args;
          	
          }
          ....kode lainnya dst... (kalau ada)
          

          Save & restart nginx.

          Cuma harus mau direpotin karena setiap tambah / hapus domain, kode yang ditambahkan akan hilang, jadi harus ulangi pekerjaan & re-create lagi.

          Sekali lagi, jangan lupa restart nginx: service nginx restart

          Kalau setelah dijalankan saran saya tapi masih error, mohon maaf saya tidak tahu.

  2. Mas kalo yang sering mati PHPnya, gimana cara benerinnya. Sebenarnya sih PHPnya gak mau running. Jadi pas setting webuzonya selesai, PHPnya gak running. Saya pake nginx+mariadb+bind+php55.

    • Kalo saya biasanya dengan menghapus semua aplikasi dan menginstallnya kembali:

      1. Uninstall Nginx
      2. Uninstall MariaDB
      3. Uninstall Bind
      4. Uninstall PHP

      Setelah yakin semua di-uninstall, install kembali.

      1. Install PHP (Kalo saya pilih yang PHP 5.3 karena masih bisa ngehandle wordpress, ato kalo mau agak baru paling mentok di PHP 5.4)
      2. Install Bind
      3. Install MariaDB
      4. Install Nginx
  3. Mas saya punya blog nongkrong di DO, pake nginx php7 mariadb, RAM cuma 512, gak pake panel. Akhir2 ini blog saya kadang error database connection, tp setelah mariadb direstart normal lg, tp ini berlangsung sehari sekali kadang 2 hari sekali. Ini kenapa ya, klo mau liat error log mariadb pake perintah apa mas?

    • Coba pastikan Memory Swap nya ada, minimal 1GB.

      Untuk error log MariaDB, misal MySQL / MariaDB server kenapa bisa mati, untuk OS Debian bisa dibaca di sini /var/log/syslog . Kalo distro lain saya kurang tahu.

      Kalo misal file di atas ngga ada, cek aja path nya dgn cara sbb.

      Misal password mysql untuk user root adalah 123456, jalankan 2 perintah di bawah beruturut-turut.

      mysql -u'root' -p'123456'
      show global variables like 'log_error';

      Cek path nya di bagian Value, seperti di bawah ini

      +---------------+---------------------+
      | Variable_name | Value               |
      +---------------+---------------------+
      | log_error     | /var/log/mysqld.log |
      +---------------+---------------------+

      kalo sdh, keluar dengan perintah exit

      • Hasilnya gini mas
        MariaDB [(none)]> show global variables like ‘log_error’;
        +—————+——-+
        | Variable_name | Value |
        +—————+——-+
        | log_error | |
        +—————+——-+
        1 row in set (0.00 sec)
        apa log error blm diaktifin ya?

        • Kemungkinan iya mas, belum di set, silahkan di edit my.cnf nya tambahkan kode di bawah [mysqld], misalnya kode nya begini

          log_error = /var/log/mysql/error.log

          Nanti kalo error mas bisa cek file /var/log/mysql/error.log nya.

          Atau siapa tau memang error nya mysql ada di /var/log/syslog jadi silahkan dipelajari, barangkali memang masuk ke situ. Karena kalo di Debian/Ubuntu secara default masuk ke situ.

          • makasih mas infonya ntar saya ubek2 dulu sistemnya, btw klo pake os debian buat server/ blog itu ntar klo ada update gt ada pemberitahuan kayak di ubuntu kah? klo ubuntu kan klo login terminal misal ada update lsg ada pemberitahuan.

          • Tidak ada mas. Solusinya bisa pake apticron yang akan kirim notif ke email jika ada yang perlu update.

  4. Pingback: Mengatasi Koneksi Database MySQL Sering terputus di WebuzoFawzya.Net

  5. nah ini yang saya cari, saya kira kenapa mysql sering mati sampai gonta ganti control panel sama vps masih tetep saja… ternyata belum ada swap memorynya hehehehe

    terima kasih bang hardinal… semoga semakin berkah

  6. mantap mas, dulu saya pake webuzo. tapi sekarang tanpa panel. wkwk

    sekarang pake openlitespeed + php + mariadb.. tapi mariadb juga kadang2 mati, tapi mampir ke blog ini. hehe..

  7. Pingback: Error Pada Codeigniter – Belajar bersama

Leave a Reply

Your email address will not be published.

This site uses Akismet to reduce spam. Learn how your comment data is processed.