Backup MySQL dengan Mudah

Kita telah membincangkan bagaimana untuk menjalankan proses backup fail dan backup mysql melalui artikel-artikel sebelum ini:

Kali ini, kita akan gabungkan keduanya bagi memudahkan proses automasi backup ini.

Merujuk kepada Tip Linux #3, kita sudah boleh backup fail-fail Web Server yang terletak di /var/www/html.

Tetapi ini tidak memadai kerana kita belum backup mysql database bagi web server tersebut.

Oleh itu, login ke Web server dan bina direktori dan script ringkas seperti berikut:

1. Dengan privilege ‘root’, bina direktori di mana kita hendak letak script:

sudo mkdir -p /var/datalead/script

2. Bina direktori atau lokasi bagi database yang hendak kita backup:

sudo mkdir -p /var/datalead/backup

3. Bina script berikut:

cd /var/datalead/script
vi mysqlbackup.pl

Masukkan kandungan:

#!/usr/bin/perl
# Perform a mysqldump on all the databases specified in db.conf file
use warnings;
use File::Basename;
# example config file
# You may use a comment to bypass any database that you don't want to backup
# # Unwanted_DB (commented - will not be backed up)
# twtr
# cbgc
# set the directory where you will keep the backup files

# make sure that the directory exists
$backup_folder = '/var/datalead/backup';

my $config_file = dirname($0) . "/db.conf";
# retrieve a list of the databases from the config file
my @databases = removeComments(getFileContents($config_file));

# change to the directory of the backup files.
chdir($backup_folder) or die("Cannot go to folder '$backup_folder'");

# grab the local time variables
my ($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst) = localtime(time);
$year += 1900;
$mon++;
#Zero padding
$mday = '0'.$mday if ($mday<10);
$mon = '0'.$mon if ($mon<10);
$hour = "0$hour" if $hour < 10;
$min = "0$min" if $min < 10;

# create the name of the backup folder that will contain all of the backup files
my $folder = "$year-$mon-$mday-$hour$min";
mkdir($folder) or die("Cannot create a folder called '$folder'");

# backup each database contained in the @databases array
foreach my $database (@databases) {
   next if ($database eq '');
   chomp($database);
   my $table = '';

   if(index($database,' ')+1) {
      my @parts = split(' ',$database);
      $database = $parts[0];
      $table = $parts[1];
   }

   print "Backing up $database ... ";
   my $file = $database;
   $file .= '_' . $table if($table ne '');
   $file .= ".sql";

   # perform a mysqldump on each database
   # change the path of mysqldump to match your system's location
   # make sure that you change the root password to match the correct password
   
   
   `/usr/bin/mysqldump -R --triggers -u root --password="password#susah!NakTeka" $database $table > $folder/$file`;
   `/bin/tar cvfz $folder-$file.tar.gz $folder/$file`;
   `rm -rf $folder`;
   
   you may comment out this print statement if you don't want to see this information
   print "Done\n\n";
   exit;
}

# this subroutine simply creates an array of the list of the databases
sub getFileContents {
        my $file = shift;
        open (FILE,$file) || die("Can't open '$file': $!");
        my @lines=<FILE>;
        close(FILE);
        return @lines;
}

# remove any commented tables from the @lines array
sub removeComments {
        my @lines = @_;
        @cleaned = grep(!/^\s*#/, @lines); #Remove Comments
        @cleaned = grep(!/^\s*$/, @cleaned); #Remove Empty lines
        return @cleaned;
}

Script ringkas ini menggunakan ‘perl’, menjalankan arahan ‘mysqldump’ dengan output nama fail mengandungi tarikh dan masa backup dijalankan.

Tukar file permission:

sudo chmod +x mysqlbackup.pl

Bina juga fail konfigurasi dalam direktori yang sama dengan nama “db.conf“.  Kandungan fail ini adalah nama database yang hendak kita backup.

Contoh:

sudo vi db.conf

Kandungan:

wordpress
nazri_db
mysql

4. Masukkan ke dalam crontab

sudo crontab -e

Masukkan:

0 23 * * * /var/datalead/script/mysqlbackup.pl > /dev/null 2>&1 &

Ok done.  Ini akan backup database yang kita define dalam fail “db.conf” pada jam 11:00 p.m. Database yang telah kita backup akan disimpan dalam direktori /var/datalead/backup.

Ini adalah contoh pada server yang saya pasang (saya hanya define “db_nazri_wp” dalam fail “db.conf”):

root@vps1:/var/datalead/backup# ls -la
total 4072
drwxr-xr-x 2 root root 4096 Aug 10 23:00 .
drwxr-xr-x 4 root root 4096 Jul 8 15:42 ..
-rw-r--r-- 1 root root 387577 Aug 2 22:00 2015-08-02-2200-db_nazri_wp.sql.tar.gz
-rw-r--r-- 1 root root 387915 Aug 2 23:00 2015-08-02-2300-db_nazri_wp.sql.tar.gz
-rw-r--r-- 1 root root 389153 Aug 3 23:00 2015-08-03-2300-db_nazri_wp.sql.tar.gz
-rw-r--r-- 1 root root 390510 Aug 4 23:00 2015-08-04-2300-db_nazri_wp.sql.tar.gz
-rw-r--r-- 1 root root 391827 Aug 5 23:00 2015-08-05-2300-db_nazri_wp.sql.tar.gz

5. Sekarang kita login pula ke backup server.

Merujuk kepada artikel Tip Linux #3, edit kembali fail “backup-server.sh” dengan fail asal:

#!/bin/sh 
rsync -avz -delete -e "ssh -i /home/salin/.ssh/id_rsa" salin@192.168.0.20:/var/www/html /var/backup/webserver/
cd /home/salin/bin
vi backup-server.sh

Tambah pula direktori MySQL yang hendak kita backup juga:

#!/bin/sh 
rsync -avz -delete -e "ssh -i /home/salin/.ssh/id_rsa" salin@192.168.0.20:/var/www/html /var/backup/webserver/
rsync -avz -delete -e "ssh -i /home/salin/.ssh/id_rsa" salin@192.168.0.20:/var/datalead/backup /var/backup/mysql/

Jangan lupa untuk bina direktori untuk backup database:

sudo mkdir -p /var/backup/mysql
sudo chown salin.salin /var/backup/mysql -R

Sekarang selesai sudah proses backup kita.  Kini fail web kita akan melalui proses backup dan disimpan di /var/backup/webserver dan backup MySQL pula akan disimpan di /var/backup/mysql.  Kita boleh ubah di mana jua lokasi yang direktori yang digemari!  Selamat mencuba!

Tutorial MySQL Bahagian 5 – Pengguna & Capaian Pangkalan Data

Tutorial sebelum ini ada menyentuh bagaimana kita boleh membina pangkalan data, table berkaitan dan seterusnya menjalankan arahan SQL seperti INSERT, SELECT dan DELETE.  Kesemua operasi yang kita jalankan ini menggunakan akaun pengguna ‘root’ dan tentu sahaja tidak digalakkan.

Kita perlu mempunyai akaun pengguna yang berlainan pada setiap pangkalan data.  Sehubungan dengan itu, artikel ini akan menyentuh bagaimana akaun pengguna ini boleh di bina dan seterusnya memberikan capaian atau privileges pengguna kepada pangkalan data yang dibina.

1. Bina Akaun Pengguna

Akaun pengguna boleh dibina dengan arahan SQL berikut:

CREATE USER 'akaun_pengguna'@'localhost' IDENTIFIED BY 'kata_laluan';

Tukarkan “akaun_pengguna” dan “kata_laluan” mengikut pilihan kita.  Contoh:

CREATE USER 'nazri'@'localhost' IDENTIFIED BY 'password#susah.gile!2015';

Merujuk kepada contoh di atas, kini kita telah membina akaun pengguna “nazri” dengan kata laluan yang di setkan adalah “password#susah.gile!2015“.

2. Kebenaran Capaian / Privileges

Arahan ini perlu dilaksanakan bagi membenarkan capaian pengguna yang kita bina sebelum ini terhadap pangkalan data:

GRANT ALL PRIVILEGES on nama_db.* TO 'akaun_pengguna'@'localhost';

Jika kita punya pangkalan data “wordpress“, kita boleh beri capaian kepada “nazri” dengan arahan seperti berikut:

GRANT ALL PRIVILEGES on wordpress.* TO 'nazri'@'localhost';

Kemudian kita reload keseluruhan privileges dengan arahan:

FLUSH PRIVILEGES;

Kini kita boleh login ke pangkalan data dengan menggunakan akaun pengguna baru ini.  Contoh:

mysql -u nazri -p password#susah.gile!2015 
mysql> use wordpress;

Kini kita boleh menjalan sebarang operasi terhadap pangkalan data “wordpress” dengan akaun pengguna “nazri“.

3. Capaian Terhad

Operasi pada item (2) di atas memberi keseluruhan privileges kepada pengguna “nazri”.  Kita juga boleh menghadkan privileges terhad kepada arahan SQL tertentu sahaja.  Berikut merupakan privileges yang boleh digunakan:

  • ALL PRIVILEGES- keseluruhan privileges
  • CREATE- bina pangkalan data atau table
  • DROP- hapus pangkalan data atau table
  • DELETE- Hapus row dari table
  • INSERT- Masukkan row ke dalam table
  • SELECT- kebenaran untuk jalankan arahan SQL SELECT
  • UPDATE- kebenaran untuk kemas kini rekod dalam table
  • GRANT OPTION- kebenaran untuk beri capaian atau privileges kepada akaun pengguna lain.

Jadi, untuk beri kebenaran, arahan yang dijalankan adalah:

GRANT [jenis_privileges] ON [nama pangkalan data].[nama table] TO ‘[akaun pengguna]’@'localhost’;

Contoh:

GRANT INSERT ON wordpress.* TO ‘nazri’@'localhost’;
GRANT SELECT ON wordpress.wp_users TO ‘nazri’@'localhost’;

Kita boleh revoke kebenaran capaian ini dengan arahan:

 REVOKE [jenis_privileges] ON [nama pangkalan data].[nanma table] FROM 'akaun pengguna’@‘localhost’;

4. Hapus Pengguna

Akaun pengguna ini boleh dihapuskan:

DROP 'akaun_pengguna'@'localhost' ;

Contoh:

DROP 'nazri'@'localhost';

Tutorial MySQL Bahagian 4 – Backup & Restore MySQL

Tunggu sekejap! Dah buat backup belum pangkalan data anda? Memang semua orang tahu backup adalah penting, tetapi macam anda semua kadang-kala saya juga lupa backup :-D.  Ok artikel kali ini akan membincangkan cara-cara mudah backup dan restore pangkalan data MySQL dengan menggunakan arahan “mysqldump”.

Arahan ini datang bersama dengan MySQL server yang dipasang.  Jadi kita tak perlu untuk memasang sebarang pakej tambahan bagi tujuan ini.

1. Backup dengan Arahan “mysqldump”

Arahan bagi kita membuat backup bagi pangkalan data adalah:

mysqldump -u root -p [nama_database] > namafail_dump.sql

Arahan “mysqldump” ini akan membaca pangkalan data yang berkenaan dan seterusnya membina satu fail teks dengan file extension “*.sql”.  Fail ini mengandungi arahan-arahan SQL bagi DROP TABLE, CREATE TABLE dan INSERT INTO berdasarkan sumber pangkalan data yang dipilih.

 

Mari kita lihat contoh berdasarkan pangkalan data yang kita bina sebelum ini.

Pertama, login ke server Linux seperti biasa.

Jalankan arahan “mysqldump” untuk kita backup pangkalan data “customer_db”:

mysqldump -u root -p customer_db > customer_db.sql

Anda boleh lihat fail dengan nama “customer_db.sql” dibina dengan kandungan seperti berikut:

-- MySQL dump 10.13 Distrib 5.5.43, for debian-linux-gnu (x86_64)
--
-- Host: localhost Database: customer_db
-- ------------------------------------------------------
-- Server version 5.5.43-0ubuntu0.12.04.1

/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;
/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;
/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */;
/*!40101 SET NAMES utf8 */;
/*!40103 SET @OLD_TIME_ZONE=@@TIME_ZONE */;
/*!40103 SET TIME_ZONE='+00:00' */;
/*!40014 SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0 */;
/*!40014 SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0
*/;
/*!40101 SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='NO_AUTO_VALUE_ON_ZERO' */;
/*!40111 SET @OLD_SQL_NOTES=@@SQL_NOTES, SQL_NOTES=0 */;

--
-- Table structure for table `pelanggan`
--

DROP TABLE IF EXISTS `pelanggan`;

/*!40101 SET @saved_cs_client = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `pelanggan` (
 `id` int(11) NOT NULL AUTO_INCREMENT,
 `nama` varchar(100) DEFAULT NULL,
 `email` varchar(100) DEFAULT NULL,
 `tel` int(14) DEFAULT NULL,
 `birthday` date DEFAULT NULL,
 `STATUS` char(1) DEFAULT NULL,
 PRIMARY KEY (`id`)
) ENGINE=MyISAM AUTO_INCREMENT=4 DEFAULT CHARSET=latin1;
/*!40101 SET character_set_client = @saved_cs_client */;
--
-- Dumping data for table `pelanggan`
--
LOCK TABLES `pelanggan` WRITE;
/*!40000 ALTER TABLE `pelanggan` DISABLE KEYS */;
INSERT INTO `pelanggan` VALUES (1,'Nazri Ahmad','nazri@datalead.com.my',13454343
4,'1997-04-11',NULL),(2,'Hurriya Harlinda','hurriya@datalead.com.my',163632005,'
1998-05-20',NULL);
/*!40000 ALTER TABLE `pelanggan` ENABLE KEYS */;
--
-- Dumping data for table `pelanggan`
--
LOCK TABLES `pelanggan` WRITE;
/*!40000 ALTER TABLE `pelanggan` DISABLE KEYS */;
INSERT INTO `pelanggan` VALUES (1,'Nazri Ahmad','nazri@datalead.com.my',13454343
4,'1997-04-11',NULL),(2,'Hurriya Harlinda','hurriya@datalead.com.my',163632005,'
1998-05-20',NULL);
/*!40000 ALTER TABLE `pelanggan` ENABLE KEYS */;
UNLOCK TABLES;
/*!40103 SET TIME_ZONE=@OLD_TIME_ZONE */;
/*!40101 SET SQL_MODE=@OLD_SQL_MODE */;
/*!40014 SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS */;
/*!40014 SET UNIQUE_CHECKS=@OLD_UNIQUE_CHECKS */;
/*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */;
/*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */;
/*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */;
/*!40111 SET SQL_NOTES=@OLD_SQL_NOTES */;
-- Dump completed on 2015-07-02 18:08:58

Nota: Gunakan arahan “cat customer_db” untuk melihat kandungan fail.

 

Saiz fail adalah bergantung kepada saiz database anda dan rekod-rekod yang disimpan.

Jika kita lihat, kita akan dapati fail ini mengandungi:

a) Arahan “DROP TABLE” untuk hapus jika terdapat nama table yang sama

b) Arahan “CREATE TABLE” untuk bina semula table structure

c) Arahan “INSERT INTO” untuk masukkan semula rekod-rekod yang disimpan sebelum ini.

2.  Backup Lebih dari Satu Database

Kita boleh backup lebih dari satu pangkalan data:

mysqldump -u root -p --databases [nama_database1] [nama_database1] [...] > namafail_dump.sql

Arahan ini akan membaca senarai pangkalan data yang kita pilih dan memasukkannya ke dalam satu fail “*.sql”.

Contoh:

mysqldump -u root -p customer_db test  > customerdb_test.sql

Arahan ini akan backup pangkalan data “customer_db” dan “test” ke fail “customerdb_test.sql“.

3. Backup Semua Database

Bagi proses backup semua database dalam server:

mysqldump -u root -p --all-databases  > all_databases.sql

Sekarang, kita boleh copy fail-fail “*.sql” ini ke tempat yang selamat.  Masuk dalam USB drive, DVD dan sebagainya.

4. Restore Database

Restore database pada server yang sama pula boleh dilakukan dengan arahan “mysql” seperti berikut:

mysql -u root -p [password-mysql-root] [nama_database] < namafail_dump.sql

Arahan ini pula akan membaca fail teks “*.sql” tersebut dan menjalankan arahan-arahan SQL yang dibina dari proses backup sebelum ini.

Jika kita restore pada server lain atau server baru, pastikan kita bina dulu pangkalan data yang berkaitan.

Contoh, bagi kita restore pangkalan data “customer_db” pada database server yang baru, kita perlu login ke MySQL dan bina database:

mysql -u root -p
mysql> CREATE DATABASE customer_db;
mysql> exit;

Seterusnya jalankan arahan untuk restore database:

mysql -u root -p root-password-anda customer_db < customer_db.sql

Kini kita telah berjaya untuk restore pangkalan data “customer_db” ke dalam server yang baru!  Sekian, terima kasih.

Tutorial MySQL Bahagian 3 – Bina dan Guna Pangkalan Data

Hari ini kita akan lihat bagaimana kita boleh membina dan menggunakan pangkalan data dengan server MySQL.  Antara yang akan disentuh secara ringkas adalah:

  • Menyenaraikan pangkalan data
  • Membina pangkalan data
  • Menghapus pangkalan data
  • Membina dan Kemaskini ‘Table’
  • Operasi rekod pangkalan data dengan SQL query

Seperti biasa, untuk membina pangkalan data, kita perlu login ke MySQL sebagai ‘root’:

mysql -u root -p

Contoh:

root@vps1:~# mysql -u root -p
Enter password:
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 206
Server version: 5.5.43-0ubuntu0.12.04.1 (Ubuntu)

Copyright (c) 2000, 2015, Oracle and/or its affiliates. All rights reserved.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql>

Sekarang kita boleh memulakan perjalankan kita untuk belajar MySQL..

1. Menyenaraikan Pangkalan Data

Arahan untuk menyenaraikan pangkalan data: SHOW DATABASES;

Contoh:

mysql> SHOW DATABASES;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
| test               |
+--------------------+
4 rows in set (0.00 sec)

2. Membina Pangkalan Data

Arahan untuk membina pangkalan data: CREATE DATABASE <nama pangkalan data>;

Contoh, kita hendak membina pangkalan data ‘customer_db‘ bagi menyimpan maklumat senarai pelanggan perniagaan kita:

mysql> CREATE DATABASE customer_db;
Query OK, 1 row affected (0.00 sec)

Jika kita jalankan arahan SHOW DATABASES:

mysql> SHOW DATABASES;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| customer_db        |
| mysql              |
| performance_schema |
| test               |
+--------------------+
5 rows in set (0.00 sec)

Jika kita lihat, pangkalan data ‘customer_db’ telah pun dibina.

3. Menggunakan pangkalan data

Sebelum melakukan apa juga operasi ke atas pangkalan data, kita perlu melaksanakan arahan: USE <nama pangkalan data>;

Contoh:

mysql> USE customer_db; 
Database changed

4. Bina dan Lihat maklumat Table

Sekarang kita akan bina table (rasanya tak perlu untuk translate jadi meja pulak kan..) untuk pangkalan data ‘customer_db‘ ini.  Katakanlah maklumat pelanggan yang akan disimpan adalah seperti berikut:

  • Nama Pelanggan – NAMA dengan data type VARCHAR(100)
  • Email Pelanggan – EMAIL dengan data type VARCHAR(100)
  • Nombor Telefon –  TEL dengan data type INT(14)
  • Tarikh Lahir – BIRTHDAY dengan data type DATE

Kita juga perlu mempunyai maklumat ‘id’ yang unik bagi setiap rekod pelanggan yang hendak disimpan.

Bina table dengan arahan berikut: CREATE TABLE <maklumat table>;

Kita namakan table ini sebagai ‘pelanggan‘.

Contoh:

mysql> CREATE TABLE pelanggan (id INT NOT NULL PRIMARY KEY AUTO_INCREMENT, nama VARCHAR(100), email VARCHAR(100), tel INT(14), birthday DATE);
Query OK, 0 rows affected (0.00 sec)

Kita kini boleh melihat yang kita bina dengan arahan SQL: SHOW TABLES;

Contoh:

mysql> SHOW TABLES;
+-----------------------+
| Tables_in_customer_db |
+-----------------------+
| pelanggan             |
+-----------------------+
1 row in set (0.00 sec)

Bagi melihat maklumat atau description bagi table yang kita bina, guna arahan SQL: DESCRIBE <nama table>;

Contoh:

mysql> DESCRIBE pelanggan;
+----------+--------------+------+-----+---------+----------------+
| Field    | Type         | Null | Key | Default | Extra          |
+----------+--------------+------+-----+---------+----------------+
| id       | int(11)      | NO   | PRI | NULL    | auto_increment |
| nama     | varchar(100) | YES  |     | NULL    |                |
| email    | varchar(100) | YES  |     | NULL    |                |
| tel      | int(14)      | YES  |     | NULL    |                |
| birthday | date         | YES  |     | NULL    |                |
+----------+--------------+------+-----+---------+----------------+
5 rows in set (0.00 sec)

5. Tambah Rekod ke Pangkalan Data

Bila dah ada table, barulah kita gunakan arahan INSERT untuk memasukkan rekod pelanggan.

Contoh:

mysql> INSERT INTO `pelanggan` (`id`, `nama`, `email`, `tel`, `birthday`) VALUES (NULL, "Nazri Ahmad", "nazri@datalead.com.my", 0173732005, "1997-04-11");
Query OK, 1 row affected (0.00 sec)

Kini kita telah add satu (1) rekod pengguna ke dalam pangkalan data ‘customer_db’;

6. Senarai Rekod

Macam mana nak lihat rekod? Betul ke dah masuk database? Ok, kita guna arahan SQL: SELECT

Contoh:

mysql> SELECT * FROM pelanggan;
+----+-------------+-----------------------+-----------+------------+
| id | nama        | email                 | tel       | birthday   |
+----+-------------+-----------------------+-----------+------------+
| 1  | Nazri Ahmad | nazri@datalead.com.my | 173732005 | 1997-04-11 |
+----+-------------+-----------------------+-----------+------------+
1 row in set (0.00 sec)

Mari kita tambah dua lagi rekod pelanggan:

INSERT INTO `pelanggan` (`id`, `nama`, `email`, `tel`, `birthday`) VALUES (NULL, "Hurriya Harlinda", "hurriya@datalead.com.my", 0163632005, "1998-05-20");
INSERT INTO `pelanggan` (`id`, `nama`, `email`, `tel`, `birthday`) VALUES (NULL, "Ahmad Albab", "albab@datalead.com.my", 0183832005, "1997-04-11");

Senaraikan kembali dengan Arahan SQL: SELECT

mysql> SELECT * FROM pelanggan;
+----+------------------+-------------------------+-----------+------------+
| id | nama             | email                   | tel       | birthday   |
+----+------------------+-------------------------+-----------+------------+
| 1  | Nazri Ahmad      | nazri@datalead.com.my   | 173732005 | 1997-04-11 |
| 2  | Hurriya Harlinda | hurriya@datalead.com.my | 163632005 | 1998-05-20 |
| 3  | Ahmad Albab      | albab@datalead.com.my   | 183832005 | 1997-04-11 |
+----+------------------+-------------------------+-----------+------------+
3 rows in set (0.00 sec)

Tadaaa.. dah ada 3 pelanggan!

7. Hapus Rekod

Kita juga boleh hapus rekod dengan arahan: DELETE

Contoh:
 mysql> DELETE FROM pelanggan WHERE nama="Ahmad Albab";
 Query OK, 1 row affected (0.00 sec)

Sekarang kita senaraikan kembali:

mysql> select * from pelanggan;
+----+------------------+-------------------------+-----------+------------+
| id | nama             | email                   | tel       | birthday   |
+----+------------------+-------------------------+-----------+------------+
| 1  | Nazri Ahmad      | nazri@datalead.com.my   | 173732005 | 1997-04-11 |
| 2  | Hurriya Harlinda | hurriya@datalead.com.my | 163632005 | 1998-05-20 |
+----+------------------+-------------------------+-----------+------------+
2 rows in set (0.01 sec)

Hilang dah Ahmad Albab.  Ini harta Ahmad Albab yang punya!

8. Kemaskini Rekod

Katalah “Nazri Ahmad” dan tukar nombor telefon.. Macam mana? Gunakanlah arahan SQL: UPDATE

Contoh:

mysql> UPDATE pelanggan SET tel=0134543434 WHERE id=1;
Query OK, 1 row affected (0.00 sec)
Rows matched: 1 Changed: 1 Warnings: 0

Senaraikan kembali rekod pelanggan untuk melihat perubahan:

mysql> SELECT * FROM pelanggan;
+----+------------------+-------------------------+-----------+------------+
| id | nama             | email                   | tel       | birthday   |
+----+------------------+-------------------------+-----------+------------+
| 1 | Nazri Ahmad       | nazri@datalead.com.my   | 134543434 | 1997-04-11 |
| 2 | Hurriya Harlinda  | hurriya@datalead.com.my | 163632005 | 1998-05-20 |
+----+------------------+-------------------------+-----------+------------+
2 rows in set (0.00 sec)

9. Kemaskini Table

Katakan kita hendak tambah maklumat yang perlu ada pada rekod pelanggan, kita boleh kemas kini column di dalam table dengan arahan SQL ALTER.

Contoh, kita hendak mempunyai maklumat status sama ada pelanggan aktif atau tidak.  Ia hanya perlu maklumat ‘Y’ untuk ‘yes’ dan ‘N’ untuk ‘No’.  Kita boleh gunakan nama column ‘status’ dan data type CHAR(1).

Contoh:

mysql> ALTER TABLE pelanggan ADD status CHAR(1);
Query OK, 2 rows affected (0.01 sec)
Records: 2 Duplicates: 0 Warnings: 0

Lihat kembali description bagi table:

mysql> DESCRIBE pelanggan;
+----------+--------------+------+-----+---------+----------------+
| Field    | Type         | Null | Key | Default | Extra          |
+----------+--------------+------+-----+---------+----------------+
| id       | int(11)      | NO   | PRI | NULL    | auto_increment |
| nama     | varchar(100) | YES  |     | NULL    |                |
| email    | varchar(100) | YES  |     | NULL    |                |
| tel      | int(14)      | YES  |     | NULL    |                |
| birthday | date         | YES  |     | NULL    |                |
| status   | char(1)      | YES  |     | NULL    |                |
+----------+--------------+------+-----+---------+----------------+
6 rows in set (0.00 sec)

Untuk hapus column dalam pangkalan data pula, kita gunakan ALTER TABLE DROP.

Contoh:

ALTER TABLE pelanggan DROP status;

Penutup

Sekian sahaja pengenalan ringkas bagi pangkalan data, cara-cara membina table dan memasukkan, mengemaskini serta menghapuskan rekod dalam pangkalan data.

Oh ya, sebelum terlupa.. kalau nak hapus pangkalan data: DROP DATABASE <nama pangkalan data>;

Kalau nak hapus table: DROP TABLE <nama table>;

Sekian, Jumpa lagi!

Tutorial MySQL Bahagian 2 – Start / Stop / Restart Perkhidmatan MySQL

Kali ini kita akan menyentuh bagaimana kita hendak menyemak status, hidupkan, matikan atau restart perkhidmatan MySQL dalam Ubuntu secara ringkas.

Semak Status

Kita boleh menyemak status sama ada MySQL server kita hidup atau pun mati dengan arahan berikut:

sudo service mysql status

Nota: Kita gunakan arahan ‘sudo‘ bagi menjalankan arahan dengan privilegeroot‘.

Hidupkan MySQL

Gunakan arahan berikut untuk menghidupkan MySQL jika perkhidmatan ini mati:

sudo service mysql start

Matikan MySQL

Matikan perkhidmatan MySQL:

sudo service mysql stop

Restart

Pada bila-bila masa untuk restart perkhidmatan MySQL:

sudo service mysql restart

 

Sekian sahaja tutorial MySQL ringkas pada hari ini.  Selamat maju jaya!

Tutorial MySQL Bahagian 1 – Pasang MySQL Server

Kali ini kita akan membincangkan tentang penggunaan teknologi database server dalam siri artikel Tutorial MySQL dalam tiga (3) bahagian.

 

Pengenalan

Kita sedia maklum pada masa kini, kebanyakkan laman web memerlukan data-data dan rekod disimpan ke dalam pangkalan data.  Sebagai contoh, data-data atau rekod pelanggan adalah sangat kritikal dalam bidang perniagaan.  Tak kira sama ada perniagaan yang dijalankan secara offline atau pun online.

Pelbagai teknologi laman web yang menggunakan konsep Content Management System (CMS) seperti Drupal, Joomla dan WordPress juga memerlukan pangkalan data untuk menyimpan data-data yang berkaitan.

Siri artikel Tutorial MySQL ini akan menyentuh bagaimana pangkalan data dengan menggunakan MySQL server dipasang dan disenggara dengan menggunakan sistem pengoperasian Ubuntu Linux 14.04 (atau versi yang terkini).  Versi MySQL yang digunakan dalam artikel ini pula adalah versi 5.6.

Juga akan dibincangkan adalah bagaimana rekod-rekod boleh dibina dan dimasukkan ke dalam pangkalan data.

Tutorial MySQL bahagian pertama ini akan menyentuh bagaimana MySQL server boleh dipasang dengan langkah-langkah berikut:

Langkah 1 – Login ke sistem pengoperasian Linux

Login ke sistem sama ada terus ke console atau menggunakan Secure Shell (SSH) secara jarak jauh.

Langkah 2 – Pasang MySQL server dengan arahan ‘apt-get’

Pasang pakej perisian MySQL server dengan arahan ‘apt-get‘.  Pastikan kita menggunakan privilege ‘root’ dengan arahan ‘sudo‘:

sudo apt-get update
sudo apt-get install mysql-server-5.6

Langkah 3 – Set password

Semasa pemasangan pada Langkah 2, kita perlu set password pada akaun ‘root’ MySQL.  Perlu dijelaskan bahawa akaun ini adalah akaun yang berbeza dengan akaun ‘root’ pada sistem pengoperasian Linux.

Set password bila skrin berikut muncul:

 

Set semula password yang sama seperti di atas pada skrin di bawah ini:

 

Pastikan password yang digunakan adalah kukuh! Kombinasi aksara, nombor dan simbol diperlukan untuk memilih password yang sukar untuk diceroboh!

Langkah 4 – Login ke MySQL server

Server akan dihidupkan secara automatik apabila selesai kita memasang password bagi akaun ‘root‘ MySQL. Sekarang kita boleh login ke MySQL server dengan arahan berikut:

mysql -u root -p

Di mana, option-u <user>” adalah pengguna yang dipilih untuk login dan “-p” adalah option untuk memasukkan password yang dipilih.  Contoh berikut adalah contoh arahan yang digunakan untuk login ke MySQL server:

nazri@datalead:~$ mysql -u root -p
Enter password: 
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 36
Server version: 5.6.17-0ubuntu0.14.04.1 (Ubuntu)

Copyright (c) 2000, 2014, Oracle and/or its affiliates. All rights reserved.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
+--------------------+
3 rows in set (0.04 sec)

mysql> exit;
Bye

Contoh di atas memperlihatkan bagaimana kita boleh login ke MySQL server melalui command prompt Linux.  Kemudian terdapat dua contoh arahan iaitu ‘show databases‘ untuk melihat pangkalan data yang wujud dan seterusnya arahan ‘exit‘ untuk keluar.

Arahan-arahan yang dijalankan dalam pangkalan data MySQL perlu diakhiri dengan simbol semi-colon (“;“) seperti contoh di atas.

Penutup

Sekian sahaja Tutorial MySQL bahagian satu (1) secara ringkas.  Kita akan sambung Tutorial MySQL ini pada bahagian ke-dua di lain masa.  Selamat mencuba!

Lupa password MySQL!

Saya lupa password MySQL! Ini kisah benar, bukan jadi-jadian.

Macam biasa, Google sana sini.

Lupa password mySQL ini boleh di atasi dengan mudah!

Mari kita tengok macam mana kita atasi masalah lupa password MySQL ini:

1. Login ke database server kita seperti biasa dan gunakan privilege ‘root’ .

2. Matikan database server:

service mysql stop

3. Jalankan arahan mysqld_safe dengan option –skip-grant-tables:

mysqld_safe --skip-grant-tables

4. Login ke database MySQL, dan pilih databasemysql‘:

mysql -uroot mysql

5. Tukar password anda dengan SQL query berikut:

mysql> update user set Password=PASSWORD('new-password') where user='root';
mysql> flush privileges;

6. Keluar dari database dengan arahan:

mysql> exit;

7. Restart kembali mysql:

service mysql restart

Sekian, selamat mencuba kalau lupa password MySQL anda!