Cara Backup Database MySQL


Mari kita kembali ke dasar dahulu, kita telah sukses membuat web server dan situs WordPress telah berjalan sempurna. Sekarang adalah hal terpenting yang wajib dilakukan setiap pemilik VPS, yaitu backup data yang ada didalamnya. Kali ini fokusnya adalah database yang menggunakan MySQL server.
Karena pada umumnya di VPS jenis unmanaged tidak ada control panel seperti cPanel atau Plesk maka kita harus secara manual melakukan proses backup seluruh data yang dalam MySQL.
Mengenal mysqldump
Maka dari itu kita seharusnya mulai mengenal perintah mysqldump, syntax penulisannya adalah sebagai berikut:
mysqldump -u [username] -p [password] [nama_database] > [nama_file_backup.sql]
Nah… bagaimana contoh pemakaiannya? Saya akan mendemokan beberapa jenis cara backup MySQL tergantung tujuannya apa. Disini seluruhnya akan menggunakan username root MySQL dan diketikkan didalam shell/terminal VPS berbasis Linux.
Backup satu database
Nanti didalam file SQLnya akan terdapat perintah DROP untuk menghapus seluruh tabel, setelah itu membuat tabel dan kemudian akan dimasukkan kembali data – datanya. Semua ini untuk proses pemulihan data (restore backup) agar tidak terjadi konflik atau duplikat data.
mysqldump -u root -p test sharmad > sharmad.sql
Backup lebih dari satu database
Disini ditambahkan parameter --databases untuk menginstruksikan ke programnya bahwa ada lebih dari satu nama database yang akan dibuat backupnya. Nama database yang akan diproses dipisahkan dengan spasi.
mysqldump -u root -p test --databases sharmad ahmad > sharmad_ahmad.sql
Backup semua database MySQL
Malas repot atau memilih databasenya? Backup saja semua database MySQL yang ada dengan parameter --all-databases. Contohnya:
mysqldump -u root -p test --all-databases > sharmad.sql
Backup satu tabel saja
Ternyata kita cuma membutuhkan satu tabel spesifik saja, tentu mubazir kalau dibackup semuanya. Caranya tidaklah sulit kok:
mysqldump -u root -p test sharmad web > sharmad_web.sql
Perintah diatas akan melakukan backup tabel blog dari database sharmadkedalam file sharmad_web.sql.
Cara restore backup MySQL
Oke, sekarang kita sudah paham bagaimana cara melakukan backup dan contoh penggunaannya. Sekarang bagaimana cara melakukan pemulihan (restore) data backupnya ke server MySQL? Ikuti saja perintah berikut:
mysql -u root -p test sharmad < sharmad.sql
Jangan lupa kita menggunakan perintah mysql (tidak ada dumpnya), dan arah panahnya menjadi sebaliknya (<). Cara ini berlaku baik untuk restore database atau hanya tabel saja. Perintah diatas akan mengembalikan data dari file sharmad.sql menuju database dengan nama sharmad.
Catatan saja, kalau anda menggunakan MariaDB (seperti saya) atau Percona Server maka perintah – perintah diatas bisa digunakan karena mereka adalah fork dari MySQL dan sampai sekarang masih kompatibel.
Read more

Cara Blokir IP di Linux


Ternyata ada satu VPS yang saya kecolongan belum setting fail2ban. Alhasil dihajar bruteforce dan malah saya sendiri kesulitan login. 😀 Untungnya yang menyerang cuma satu alamat IP saja dari log error Nginx. Jadi masih ada solusi cepat dan singkat mengatasinya: blokir alamat IP tersebut. 🙂 Korbannya pakai CentOS 6 dan firewallnya masih pakai iptables. Jadi asumsi tutorialnya pakai ini.
Misalkan kita tahu alamat IP yang bermasalah adalah 192.168.1.27 maka ketikkan perintah ini:
iptables -A INPUT -s 192.168.1.27 -j DROP
Trafik yang bersumber dari IP diatas keseluruh port akan dibuang. Niscaya akan langsung enteng server Linux anda.
Kalau hanya ingin blokir untuk port 80 bisa pakai ini:
iptables -A INPUT -s 192.168.1.27 -p tcp --destination-port 80 -j DROP
Jangan lupa peraturan barunya disimpan, kalau tidak pas reboot ya lenyap semua:
service iptables save
Bagaimana kalau anda maafkan dosa – dosanya? Atau ternyata salah blokir? Eksekusi saja perintah berikut:
iptables -D INPUT -s 192.168.1.27 -j DROP
Dan jangan lupa disimpan lagi modifikasinya.
Read more

Lindungi Situs dengan Password pada Apache


Melindungi akses ke halaman tertentu pada suatu website tidaklah harus menggunakan PHP atau script khusus. Apabila kita menggunakan web server Apache maka ada fitur proteksi lokasi yang apabila diakses akan muncul permintaan username dan password baru bisa masuk. Keunggilannya ini lebih baik performanya karena langsung diproses Apache.
Apakah sulit? Sangat mudah malah, dan mungkin bisa dimanfaatkan sebagai perlindungan ganda halaman login administrasi websitenya. Langkah pertama adalah membuat file .htpasswd yang berisikan daftar username dan password yang diperbolehkan login:
htpasswd -c .htpasswd bukanadmin
Adding password for bukanadmin.
New password:
Re-type new password:
Untuk user kedua dan seterusnya tidak perlu parameter -c karena sudah tercipta filenya.
Kemudian membuat file .htaccess dan letakkan dalam lokasi/direktori hosting websitenya yang ingin diproteksi. Dan isikan kode dibawah:
AuthType Basic
AuthName "Wilayah Terbatas"
AuthUserFile /var/www/nama_domain.com/.htpasswd
require valid-user
Baris AuthUserFile ini mereferensikan letak file .htpasswd yang telah kita buat pada langkah pertama.
Terakhir restart Apache:
  • Debian/Ubuntu:
    service apache2 restart
  • CentOS
    service httpd restart
Sekian. 😀 Dan untuk Nginx secara default tidak ada fitur serupa, tapi ada script Python yang bisa menggantikannya.
Read more

Mengaktifkan login root lewat SSH pada Debian 8


Saya baru tahu kalau pada Debian 8 “Jessie” akses SSH untuk login root defaultnya dalam keadaan mati. Misal kebetulan provider VPS yang anda gunakan tidak mengedit template sistem operasinya dijamin akan muncul pesan error mirip seperti ini saat berusaha masuk: Permission denied, please try again.. Nah… kalau anda ingin atau sudah terbiasa pakai root untuk mengutak – atik VPS (Enggan pakai sudo?) maka bisa mengaktifkannya lagi.
Sebenarnya tidaklah sulit solusinya, silahkan anda edit konfigurasi SSH dulu:
nano /etc/ssh/sshd_config
Kemudian modifikasi setting dibawah:
PermitRootLogin without-password
Menjadi berikut ini, ya cuma menukar without-password menjadi yes saja esensinya:
PermitRootLogin yes
Simpan perubahan yang telah dilakukan dan keluar dari teks editor nano.
Langkah terakhir silahkan restart proses SSH:
/etc/init.d/ssh restart
Oh ya, perintah – perintah diatas mungkin memerlukan akses sudo selama akses root belum bisa digunakan lewat SSH.
Saya perhatikan hal ini hanya berlaku pada template OS Debian 8 pada VPS yang menggunakan KVM dan bisa diminta membuat user baru yang biasa, sedangkan yang memakai virtualisasi OpenVZ tidaklah perlu karena dari sumbernya sudah diaktifkan lagi.
Read more

Tips Setting Permission Web Server Linux


Kembali ada yang berkonsultasi lewat email dan hal yang ditanyakan adalah mengenai permission di Linux yang kita manfaatkan sebagai web server. Ini bisa Nginx, Apache, LiteSpeed, Hiawatha, dan sebagainya. Apapun yang kita install dan jalankan dalam VPS maka akan membutuhkan ijin untuk mengakses atau memodifikasi folder dan file didalamnya. Dan ini bukan sembarangan juga mengaturnya karena akan berpengaruh akan keamanan sistem dan kemampuan web server yang kita pakai.
Tujuannya nanti agar direktori dan file hanya bisa diakses dan diedit oleh aplikasi yang berhak, karena itu harus benar kita setting permissionnya. Daripada nanti menyesal karena server hosting kita dapat dengan mudah dibobol hacker disebabkan sistem perijinan yang terlalu longgar.
Oke, yang pertama anda harus tahu apa nama user untuk web server yang digunakan. Secara umum Nginx biasanya nginx, Apache menggunakan www-data, dan yang lainnya bisa jadi root atau nobody. Pakai perintah top untuk melihat sebuah software menggunakan username apa untuk prosesnya.
top - 19:57:32 up 41 days, 2:06, 1 user, load average: 0.01, 0.00, 0.00
Tasks: 18 total, 1 running, 17 sleeping, 0 stopped, 0 zombie
Cpu(s): 0.3%us, 0.0%sy, 0.0%ni, 99.7%id, 0.0%wa, 0.0%hi, 0.0%si, 0.0%st
Mem: 524288k total, 236288k used, 288000k free, 0k buffers Swap: 65536k total, 9280k used, 56256k free, 190020k cached
1 root 20 0 2896 112 4 S 0.0 0.0 0:00.16 init
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND 2 root 20 0 0 0 0 S 0.0 0.0 0:00.00 kthreadd/48963
1108 root 20 0 7752 1444 1220 S 0.0 0.3 6:31.46 litespeed
3 root 20 0 0 0 0 S 0.0 0.0 0:00.00 khelper/48963 552 root 20 0 8632 568 464 S 0.0 0.1 0:00.80 sshd
1111 nobody 20 0 160m 5204 4892 S 0.0 1.0 1:40.29 lsphp5
1109 root 20 0 7580 276 212 S 0.0 0.1 1:53.82 litespeed 1110 nobody 20 0 12792 5840 1960 S 0.0 1.1 32:29.85 litespeed 2277 newrelic 20 0 5444 384 360 S 0.0 0.1 0:00.00 nrsysmond
9276 root 20 0 2572 1068 884 R 0.0 0.2 0:00.51 top
2279 newrelic 20 0 39340 3364 2196 S 0.0 0.6 68:49.71 nrsysmond 9261 root 20 0 11944 3724 2976 S 0.0 0.7 0:00.13 sshd 9263 root 20 0 3048 1528 1296 S 0.0 0.3 0:00.00 bash 9277 nobody 20 0 162m 20m 16m S 0.0 4.0 0:00.43 lsphp5
29849 mysql 20 0 648m 115m 6040 S 0.0 22.6 9:51.60 mysqld
9283 nobody 20 0 160m 14m 12m S 0.0 2.9 0:00.07 lsphp5 29696 root 16 -4 2464 552 320 S 0.0 0.1 0:00.00 udevd
29756 root 20 0 2988 1212 1016 S 0.0 0.2 0:00.00 mysqld_safe
Untuk mengganti pemilik dari suatu direktori atau file di Linux jalankan perintah berikut:
chown -R www-data /lokasi/direktori/situs/
Maksudnya nanti seluruh file dan folder yang berada dalam lokasi yang diisikan akan diubah ownernya ke www-data. Anda bisa mengganti www-data menjadi apa nama user yang digunakan dalam VPS anda, karena itu saya minta anda memperhatikan lewat hasil top sebelumnya.
Setelah kita mengidentifikasi siapa pemiliknya maka selanjutnya berpindah ke direktori yang berisi data – data website anda, istilahnya direktori root virtual hosting. Jadi jangan eksekusi perintah dibawah kalau belum, karena bukannya menjadi solusi malah memperparah keadaan.
Artinya nanti kalau ketemu direktori maka akan disetting permissionnya menjadi 755:
find /lokasi/virtualhost/situs/ -type d -exec chmod 755 {} \;
  • Pemilik bisa baca, tulis, dan eksekusi.
  • Grup bisa baca dan eksekusi.
  • Yang lainnya bisa baca dan eksekusi.
Bila anda periksa menggunakan perintah ls -l akan muncul seperti berikut:
drwxr-xr-x 54 root root 4096 Dec 26 13:40 servernesia
Sedangkan bila jenisnya adalah file akan dimodifikasi hak aksesnya menjadi 644:
find /lokasi/virtualhost/situs/ -type f -exec chmod 644 {} \;
  • Pemilik bisa baca dan tulis.
  • Grup bisa baca.
  • Yang lainnya bisa baca.
Nanti kalau dicek akan seperti ini permissionnya:
-rw-r--r--  1 root root 116981 Nov 10 11:22 index.php
Jadi kita tidak perlu memberikan kemampuan lebih dari yang dibutuhkan web servernya. Selain lebih aman juga fitur – fiturnya akan tetap berfungsi normal.
Saya memang belum pernah menjelaskan mengenai setting permissions di Linux jadi anda harus mencari sendiri pemahaman mengenai sistem hak aksesnya. Tapi jangan pernah menggunakan hak akses 777 karena ini sangat teledor.
Semoga bermanfaat. 🙂
Read more

Cara Edit Variabel PATH di Linux


Melanjutkan seri dalam perjuangan saya menginstall Nginx dilengkapi modul PageSpeed, setelah sebelumnya berurusan dengan init script agar bisa dieksekusi setiap server Linux hidup maka kali ini menambahkan program Nginx agar bisa dipanggil lewat shell misal dengan perintah: service nginx reload. Jadi tidak perlu menjalankan dengan lokasi direktori lengkapnya.
Agar mendapatkan hasil yang kita inginkan maka diperlukan menambahkan lokasi direktori yang berisi binary/program kedalam variabel $PATH. Dan ini aslinya cukup mudah, tapi jarang tersentuh kalau sudah terbiasa menginstall semua paket aplikasi dari repository. Masalahnya untuk kasus saya perlu dicompile dari source code jadi semua komponen pelengkapnya perlu dilakukan secara manual.
Untuk melihat apa isi variabel PATH sekarang ketikkan”
echo $PATH
Akan muncul balasan seperti berikut:
/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin
Linux akan mencari suatu program yang anda panggil secara berurutan dari awal, dari kiri ke kanan. Jadi akan lebih cepat respon aplikasi yang sering digunakan direktorinya ada didepan.
Disini saya ingin menambahkan direktori program Nginx 1.9.6. Nah… untuk menambahkan direktori di awal maka eksekusi perintah ini:
export PATH=/usr/local/nginx/sbin/:$PATH
Sebaliknya kalau ingin di akhir jalankan perintah ini:
export PATH=$PATH:/usr/local/nginx/sbin/
Kemudian reboot saja agar konfigurasi barunya dikenali Linux. Semoga bermanfaat
Read more

Cara cek penggunaan bandwidth server Linux

Salah satu batasan sumber daya sebuah server adalah bandwidth, walau rata – rata penyedia memberikan kuota yang cukup besar tapi kalau website anda sibuk atau malah dijadikan VPN pasti ada resiko jebol juga. Nah… sebenarnya kita dapat dengan mudah mengetahui berapa GB yang sudah kita pakai lewat control panel di billing providernya atau di SolusVM/Virtualizor. Tapi namanya sebagai administrator server harus tahu caranya di Linux kan? 😉
Ya, silahkan akses VPS anda dan install aplikasi vnstat:
  • RHEL/CentOS/Fedora
    yum install vnstat
  • Debian/Ubuntu/Mint
    apt-get install vnstat
Untuk melihat statistik penggunaan bandwidth server tersebut tinggal ketikkan perintah:
vnstat
Dan akan muncul informasi seperti berikut:
rx / tx / total / estimated
gre0: Not enough data available yet. venet0:
Nov '15 999.25 MiB / 6.48 GiB / 7.46 GiB / 12.65 GiB
yesterday 49.99 MiB / 402.17 MiB / 452.17 MiB
today 32.39 MiB / 258.46 MiB / 290.85 MiB / 418 MiB
gretap0: Not enough data available yet.
Dimana rx adalah transfer bandwidth masuk (download), tx adalah transfer bandwidth keluar (upload) dan ini yang dibatasi biasanya, total adalah keseluruhan, dan estimated merupakan perkiraan konsumsi bandwidth sampai hari ini dihitung dari awal bulan.
Jadi kalau anda dapat tagihan lagi karena dinyatakan melebihi kuota maka bisa diverifikasi juga datanya dari dalam Virtual Private Server yang bermasalah.
Semoga bermanfaat. 🙂
Read more

Contoh init script untuk Nginx


Ternyata saya sudah lupa – lupa ingat setting init script untuk Nginx. Baru saya sadari saat menginstall web server untuk Nginx 1.9.6 dan dilengkapi ngx_pagespeed 1.9.32.10-beta dari GitHub ternyata tidak semudah itu dihidupkan bersamaan saat booting Linux. Haha. 😀 Akhirnya setelah beberapa kali membuat dan mengedit ketemu yang pas.
Membuat init script secara manual perlu dilakukan karena saya menginstall Nginx dari source code, jadi tidak otomatis dibuatkan seperti dari repository.
Ini saya menggunakan CentOS 6.7 dan selama distro Linux yang anda gunakan masih memakai SysInitV maka masih bisa diterapkan, dan pertama kita perlu membuat filenya:
nano /etc/init.d/nginx
Kemudian silahkan copy-paste kode dibawah:
#!/bin/sh
#
# nginx - this script starts and stops the nginx daemon
#
# chkconfig: - 85 15
# description: Nginx is an HTTP(S) server, HTTP(S) reverse \
# proxy and IMAP/POP3 proxy server
# processname: nginx
# config: /usr/local/nginx/conf/nginx.conf
# pidfile: /usr/local/nginx/logs/nginx.pid
# Source function library.
. /etc/rc.d/init.d/functions
# Source networking configuration.
. /etc/sysconfig/network
# Check that networking is up.
[ "$NETWORKING" = "no" ] && exit 0
nginx="/usr/local/nginx/sbin/nginx"
prog=$(basename $nginx)
NGINX_CONF_FILE="/usr/local/nginx/conf/nginx.conf"
lockfile=/var/lock/subsys/nginx
start() {
[ -x $nginx ] || exit 5
[ -f $NGINX_CONF_FILE ] || exit 6
echo -n $"Starting $prog: "
daemon $nginx -c $NGINX_CONF_FILE
retval=$?
echo
[ $retval -eq 0 ] && touch $lockfile
return $retval
}
stop() {
echo -n $"Stopping $prog: "
killproc $prog -QUIT
retval=$?
echo
[ $retval -eq 0 ] && rm -f $lockfile
return $retval
}
restart() {
configtest || return $?
stop
start
}
reload() {
configtest || return $?
echo -n $"Reloading $prog: "
killproc $nginx -HUP
RETVAL=$?
echo
}
force_reload() {
restart
}
configtest() {
$nginx -t -c $NGINX_CONF_FILE
}
rh_status() {
status $prog
}
rh_status_q() {
rh_status >/dev/null 2>&1
}
case "$1" in
start)
rh_status_q && exit 0
$1
;;
stop)
rh_status_q || exit 0
$1
;;
restart|configtest)
$1
;;
reload)
rh_status_q || exit 7
$1
;;
force-reload)
force_reload
;;
rh_status
status) ;;
condrestart|try-restart)
rh_status_q || exit 0
;;
*)
echo $"Usage: $0 {start|stop|status|restart|condrestart|try-restart|reload|force-reload|configtest}"
exit 2
esac
Simpan dan keluar dari editor nano. Mungkin yang peru anda perhatikan ada di bagian:
  1. nginx="/usr/local/nginx/sbin/nginx" – Ini menunjukkan lokasi program nginx, ganti kalau di server anda bukan disini.
  2. NGINX_CONF_FILE="/usr/local/nginx/conf/nginx.conf" – Sedangkan ini file konfigurasi nginx, ubah ke lokasi yang sesuai kalau berbeda.
Kemudian lanjutkan dengan:
chmod +x /etc/init.d/nginx
chmod 0755 /etc/init.d/nginx
chown root:root /etc/init.d/nginx
chkconfig nginx on
Setelah itu silahkan reboot dan cek apakah proses nginx sudah ikut dijalankan, lewat top juga bisa.
Oh ya, nanti anda tidak perlu melakukan ini untuk menjalankan nginx:
/usr/local/nginx/sbin/nginx start
Anda bisa langsung memanfaatkan perintah:
service nginx start
service nginx restart
service nginx reload
Selesai dan semoga bermanfaat. 🙂
Read more