Anda di halaman 1dari 14

BACKUP

6.1 Menjadwalkan Backup Otomatis


pada Windows
Sebagai administrator database, Anda tentu sering menjadwalkan
backup database, baik dalam kaitannya dengan rutinitas pekerjaan
atau untuk tujuan keamanan dan kenyamanan dalam administrasi
database. Dengan tip berikut ini, Anda dapat melakukan penjad-
walan backup pada Windows dengan mudah. Misalkan Anda ingin
mem-backup sebuah file yang diberi nama menggunakan tanggal.
Ada banyak cara untuk melakukan backup tersebut, contohnya
menggunakan MySQL Tools yang dapat digunakan secara umum,
seperti MySQL Administrator, MySQL Service Center, PHPMyAdmin,
dan sebagainya. Akan tetapi, cara yang paling mudah untuk mela-
kukan backup secara otomatis pada Windows adalah menggunakan
sebuah file batch.
Berikut skrip yang dapat Anda gunakan untuk melakukan backup
pada Windows.
Nama File: BACKUP.bat
Skrip ini diketikkan pada NOTEPAD & disave dengan ekstensi
.bat

@echo off
title BACKUP DATABASE NOW
color b

95
echo .
echo +-+-+-+-+-+-+-+-+-+-+-+--+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-
+-+
echo *
echo RUNNING SCHEDULED JOB FOR MySQL 5 BACKUP ON
WINDOWS
echo .
echo AUTHOR: Tomy
echo .
echo %DATE:~7,2%-%DATE:~4,2%-%DATE:~10,4%
echo +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+--+-+-+-+-+-+-+-+-
+-+
echo .
echo .
echo Current Time is:
echo ~
time /t
echo .
echo .
echo [ ]
pause
IF NOT EXIST C:\BACKUP. (
mkdir C:\BACKUP.
echo Directory is OK
echo Continuing process
echo ..
)

IF EXIST C:\BACKUP\*.sql goto tryagain


IF NOT EXIST c:\BACKUP\*.sql. (
cd c:\appserv\mysql\bin\
mysqldump -uroot -p05400679 --databases 555 --result-
file="c:\BACKUP\backup.%DATE:~0,3%.sql".
) ELSE (
cd c:\appserv\mysql\bin\
mysqldump -uroot -p05400679 --databases 555 --result-
file="c:\BACKUP\backup.%DATE:~0,3%.sql".
)

echo End of batch program.

Skrip di atas merupakan sebuah file batch yang berisi perintah


mysqldump. Perintah mysqldump ini terdapat pada bagian berikut:
mysqldump -uroot -p05400679 --databases db1 --result-
file="c:\BACKUP\backup.%DATE:~0,3%.sql".

File batch di atas akan dieksekusi secara otomatis menggunakan


perintah AT yang terdapat pada Command Prompt. Untuk dapat
menjalankan backup secara otomatis pada Windows melalui
Command Prompt, ketikkan pada Command Prompt sebagai
berikut:
AT 02:00 /every:M,T,W,Th,F,S,Su c:\BACKUP\backup.bat

96
Misalkan Anda melakukan backup database db1 pada hari Senin
pada jam 2 sore dengan menjalankan skrip di atas, maka dengan
otomatis Anda telah mem-backup semua data dari dalam [db1]
MySQL ke suatu file yang bernama backup.Mon.sql. String yang
berupa % DATE:~0,3% artinya menjalankan tanggal DOS dan
menguraikan tiga karakter yang pertama.
Jika Anda ingin menggunakan format YYYYMMDD, gunakan
%DATE:~10,4%%DATE:~7,2%%DATE:~4,2%. Keuntungan penggu-
naan nama hari pada nama file backup tersebut adalah bahwa Anda
nantinya akan mempunyai tujuh file backup.
Setelah menjalankan perintah AT melalui Command Prompt, Anda
dapat melihat file job yang telah dibuat melalui Control Panel, lalu
pilih Scheduled Task dan Anda akan melihat sebuah file yang
bernama At1.job yang siap melakukan backup sesuai dengan waktu
yang ditetapkan di atas.

Gambar 6.1 Scheduled Task pada Windows

Selanjutnya, Anda dapat merestorasi file backup tersebut sampai


dengan hari ke-7. Setiap harinya file backup tersebut akan ditindih.
Jadi, dengan format YYYYMMDD akan memungkinkan Anda untuk
menciptakan file backup dengan jumlah yang tak terbatas, dan
merestorasi file backup ke tanggal manapun yang Anda inginkan.
Untuk merestorasi file dump ke dalam tabelspace, caranya sebagai
berikut:
c:\mysql -e "source /c:\BACKUP\backup.Mon.sql"

97
atau
c:\mysql db1 < c:\BACKUP\backup.Mon.sql

Catatan: Selain menggunakan perintah AT, untuk menjalankan job


melalui Command Prompt juga dapat digunakan perintah
Schtasks (perintah Schtasks sama artinya dengan perintah
AT). Untuk itu, Anda dapat lihat kembali pada dokumen-
tasi Windows.

6.2 Mem-backup Data Tabel Menggunakan


SELECT … INTO OUTFILE
Proses backup data tabel dapat dilakukan secara manual dengan
perintah SELECT … INTO OUTFILE. Untuk lebih jelasnya perhatikan
contoh berikut:
select *
into outfile 'c:/copypembelian.txt'
fields terminated by ','
lines terminated by '\n'
from pembelian;

Query tersebut akan menghasilkan file yang bernama


copypembelian.txt pada direktori c: dengan data yang berbentuk
format kolom yang dipisahkan dengan tanda koma (comma-
separated value/CSV). Anda juga dapat mengganti tanda koma
dengan tanda lainnya yang tentunya harus digunakan secara
konsisten. Berikut ini contoh gambar dari sebuah file backup yang
dihasilkan dengan SELECT … INTO OUTFILE.

Gambar 6.2 Isi File Backup (SELECT … INTO OUTFILE)

Jika Anda ingin menyimpan nilai BLOB ke dalam sebuah file


backup, gunakanlah SELECT … INTO DUMPFILE sebagai pengganti
dari SELECT … INTO OUTFILE. Dengan SELECT .. INTO

98
DUMPFILE, MySQL akan menuliskan data yang di-backup ke file
backup dalam sebuah baris tanpa terminasi kolom atau baris, dan
tanpa melakukan proses escape karakter.

6.3 Restore File Backup ke dalam Tabel


File backup yang telah Anda backup dengan perintah SELECT …
INTO OUTFILE dapat direstorasi ke dalam tabel dengan contoh
seperti berikut.

Gambar 6.3 File Backup yang Bernama copypembelian.txt

LOAD DATA LOCAL INFILE 'c:/copypembelian.txt'


INTO TABLE pembelian
FIELDS TERMINATED BY ','
LINES TERMINATED BY '\n'
(nofaktur,noreff,tgl,kontan,disc,ppn,jatuhtempo,kodestock,nama
barang,qtydisc,

`harga@`,jumlah,totpembelian,totdisc,totpembelian_disc,totppn,
netto);

Hasil restorasi file backup tersebut dapat dilihat pada gambar di


bawah ini.

99
Gambar 6.4 Restorasi Data ke dalam Tabel Pembelian

6.4 Meng-update Kolom Menggunakan


LOAD DATA INFILE dan REPLACE INTO
Jika Anda ingin memuat file ke dalam tabel dengan hanya menindih
suatu kolom tertentu, Anda dapat menggunakan REPLACE INTO …
Misalkan Anda memiliki suatu tabel yang bernama test dan memiliki
kolom id, firstname, lastname, zip. Disamping itu, Anda juga me-
miliki sebuah file backup.txt yang misalkan isinya adalah sebagai
berikut:
backup.txt
1,kurt,russell,45678
2,worth,tim,45687
3,ridd,sherly,45698
Anda dapat mengisikan data dari file backup.txt tersebut ke dalam
tabel test dengan query berikut:
LOAD DATA LOCAL INFILE 'c:/backup.txt'
INTO TABLE test

100
FIELDS TERMINATED BY ','
LINES TERMINATED BY '\n'
(id, lastname, firstname, zip);
SELECT * FROM test;

Output:
id firstname lastname zip
----- --------- -------- ------
1 russell kurt 45678
2 tim worth 45687
3 sherly ridd 45698

Jika Anda menggunakan REPLACE, maka baris yang diinput akan


menggantikan baris yang ada. Dengan kata lain, baris-baris yang
mempunyai nilai yang sama bagi primary key atau unique index
sebagai baris yang ada.
Misalkan isi file backup.txt pada kolom 4 (kolom zip) nilainya telah
diubah atau di-update menjadi seperti di bawah ini:
backup.txt
1,kurt,russell,10
2,worth,tim,20
3,ridd,sherly,30
Selanjutnya, Anda dapat menggunakan REPLACE INTO … untuk
merestorasi data dari file backup.txt tersebut ke dalam tabel test
dengan menjalankan query sebagai berikut:
LOAD DATA LOCAL INFILE 'c:/backup.txt'
REPLACE INTO TABLE test
FIELDS TERMINATED BY ','
LINES TERMINATED BY '\n'
(id, lastname, firstname, zip);

SELECT * FROM test;

Output:
id firstname lastname zip
----- --------- -------- ------
1 russell kurt 10
2 tim worth 20
3 sherly ridd 30

101
6.5 Meng-update Kolom Menggunakan
LOAD DATA INFILE dan UPDATE
Mengacu pada contoh di atas, misalkan file backup.txt mempunyai
isi seperti berikut:
backup.txt
1,10
2,20
3,30
kemudian pada tabel test berisi data seperti di bawah ini:
SELECT * FROM test;

Output:
id firstname lastname zip
---- ---------- -------- ------
1 russell kurt 45678
2 tim worth 45687
3 sherly ridd 45698

Jika Anda hendak merestorasi data file backup.txt ke dalam tabel


test, Anda tidak dapat menggunakan statement REPLACE INTO …
di dalamnya karena REPLACE INTO hanya akan meng-update data
berdasarkan data pada tabel backup.txt. Untuk itu, gunakanlah cara
sebagai berikut:
DROP TEMPORARY TABLE IF EXISTS temporarytest;

CREATE TEMPORARY TABLE IF NOT EXISTS temporarytest


ENGINE=MEMORY SELECT id, zip FROM test LIMIT 0;

LOAD DATA LOCAL INFILE 'c:/backup.txt'


INTO TABLE temporarytest
FIELDS TERMINATED BY ','
LINES TERMINATED BY '\n'
(id, zip);

UPDATE test, temporarytest SET test.zip = temporarytest.zip


WHERE test.id = temporarytest.id;
DROP TEMPORARY TABLE IF EXISTS temporarytest;
SELECT * FROM test;

102
Ouput:
id firstname lastname zip
----- --------- ------ -----
1 russell kurt 10
2 tim worth 20
3 sherly ridd 30

6.6 Mem-backup Seluruh Trigger


Stored procedure Backuptrigger yang diulas pada tip berikut ini
diciptakan secara khusus untuk mem-backup seluruh trigger dari
seluruh database yang digunakan pada Server MySQL 5.0.1x atau
yang mempunyai fitur INFORMATION_SCHEMA.TRIGGERS. Anda
dapat mengecek keberadaan fitur trigger tersebut melalui
INFORMATION_SCHEMA.
/*** 12 September 2007 - By Tomy ***/
DELIMITER $$
DROP PROCEDURE IF EXISTS `555`.`backuptrigger`$$

CREATE DEFINER=`root`@`localhost` PROCEDURE `backuptrigger`()


COMMENT 'backuptrigger'
begin
set collation_server='utf8_general_ci';
set collation_database='utf8_general_ci';
set collation_connection='utf8_general_ci';
set character_set_connection='utf8';
set character_set_results='utf8';
set character_set_client='utf8';
set @@session.sql_mode='pipes_as_concat';
prepare backuptrigger
from "SELECT 'CREATE TRIGGER '||
SENDER.TRIGGER_SCHEMA||
'.'||SENDER.TRIGGER_NAME||
CONVERT(char(32),char)
||SENDER.ACTION_TIMING||
CONVERT(char(32),char)
||SENDER.EVENT_MANIPULATION||
' ON '||
SENDER.EVENT_OBJECT_SCHEMA||
'.'||SENDER.EVENT_OBJECT_TABLE||
' FOR EACH ROW '||
SENDER.ACTION_STATEMENT||
'$$'
INTO OUTFILE 'c:/Triggers.sql'
FROM INFORMATION_SCHEMA.TRIGGERS AS SENDER;";
execute backuptrigger;
end$$
DELIMITER ;

103
Definisi procedure backup trigger di atas menggunakan pernyataan
INTO OUTFILE. File backup akan diciptakan pada server host. Anda
dapat menggunakan nama file yang sesuai dengan keinginan Anda.
Agar 100% aman, periksa definisi dalam file .sql, dan tentunya Anda
bisa membuat copy-an file tersebut.
Untuk menggunakan stored procedure backuptrigger tersebut,
caranya cukup dengan mengetikkan:
Call backuptrigger();

File backup akan diciptakan pada direktori c:/, dengan nama


Triggers.sql. Anda dapat memodifikasi stored procedure di atas
menggunakan direktori dan nama yang sesuai dengan keinginan
Anda.
Seluruh trigger yang telah berhasil direstorasi ke dalam
INFORMATION_SCHEMA bisa Anda lihat menggunakan perintah
SHOW TRIGGERS.

6.7 Mem-backup Database Menggunakan


Event Scheduler
Event scheduler adalah fitur terbaru saat ini yang diperkenalkan dari
MySQL 5.1. Dengan adanya fitur event scheduler, Anda dapat
menjalankan perintah secara otomatis di mana Anda hanya tinggal
menjadwalkan perintah SQL ke dalam event scheduler untuk
dieksekusi oleh server MySQL 5.1 secara otomatis sesuai dengan
waktu yang ditentukan.
Berikut ini sebuah procedure untuk mem-backup database meng-
gunakan event scheduler. Procedure di bawah ini akan digunakan
sebagai perintah SQL dalam event scheduler.
/*** 16 September 2007 - By Tomy ***/

DELIMITER $$

DROP PROCEDURE IF EXISTS `555`.`speventbackup`$$

CREATE DEFINER=`root`@`localhost` PROCEDURE `speventbackup`(in


existdb varchar(65),in newdb varchar(65))
BEGIN
declare table_name2 varchar(64);
set global log_bin_trust_routine_creators=true;

104
/*-- mengaktifkan variabel global event_scheduler --*/
Set global event_scheduler = 1;
/*-- memberikan hak kepada user1 untuk mengakses database 555-
-*/
Grant event on `555`.* to user1;

/*-- membuat database baru untuk backup --*/


set @q1=concat('drop database if exists ',newdb,';');
set @q2=concat('create database if not exists ',newdb,';');
prepare stmt from @q1;
execute stmt;
prepare stmt from @q2;
execute stmt;

/*-- membackup database --*/


Scan: loop
drop table if exists temp;
create table temp(id int(10) auto_increment,foundtable
varchar(65),primary key(id));
insert into temp(id,foundtable)select '', table_name from
information_schema.tables as t where t.table_type = 'BASE
TABLE' and t.table_schema=existdb;

set @r=0;
set @maks=(select max(id)from temp);
while @r <= @maks do
set table_name2=(select foundtable from temp where id=@r);
If @r>0 then
Set @q0=concat('drop table if exists
','`',newdb,'`','.',table_name2,'backup',';');
Set @q1=concat('create table if not exists
','`',newdb,'`','.',table_name2,'backup',' ','as select * from
','`',existdb,'`','.',table_name2,';');
Set @q2=concat('alter table
','`',newdb,'`','.',table_name2,'backup','
','engine=InnoDB;');
Prepare stmt from @q0;
Execute stmt;
Prepare stmt from @q1;
Execute stmt;
Prepare stmt from @q2;
Execute stmt;
End if;
set @r=@r+1;
end while;

If @r=0 then
Leave scan;
end if;
End loop scan;
drop table if exists temp;
END$$

DELIMITER ;

105
Cara menggunakan speventbackup adalah dengan menginputkan
2 parameter yang terdiri atas existdb(nama database sumber atau
yang akan di-backup) dan newdb(nama database sebagai backup).
Contoh:
Call speventbackup('555','tombackup')

Dari pernyataan sql tersebut di atas, sekarang kita akan menjad-


walkan backup database dengan membuat event scheduler seperti
berikut ini:
set global event_scheduler=1;
grant event on `555`.* to user1;

create event eventbackup


on schedule every '14:00:00' day
do call speventbackup('555','tombackup');

Nama dari event scheduler pada contoh ini adalah eventbackup dan
eventbackup secara otomatis akan dijalankan oleh server MySQL
setiap hari pada jam 14:00:00(jam:menit:detik). Pada jam 14:00:00
setiap harinya, Anda akan mendapatkan database yang telah di-
backup secara otomatis tersebut seperti yang ditunjukkan pada
gambar berikut ini.

Gambar 6.5 Backup Database dengan speventbackup

106
Nama tabel hasil backup otomatis tersebut akan berekstensi backup
pada akhir dari nama tabel sumber. Anda dapat memodifikasi nama
tabel tersebut menggunakan speventbackup yang telah dikemukakan
di atas.

6.8 Ekspor-Impor Data Menggunakan


File Excel
Jika Anda sering mengolah data menggunakan aplikasi Excel atau
StarOffice Calc, kini Anda dapat mengekspor dan mengimpor data
menggunakan data dari aplikasi Excel tersebut untuk diolah atau
disimpan ke dalam database MySQL.
Untuk dapat melakukan ekspor dan impor data Excel, MySQL
memperkenalkan sebuah fitur yang berbentuk storage engine (tabel)
yang bernama CSV (Comma-Separated Values). Tabel CSV menyim-
pan 3 jenis file yang terdiri atas file .CSV, file .frm sebagai file data,
dan file .CSM sebagai Meta-file. (File .CSM ini diperkenalkan sejak
MySQL 5.1.9, yaitu sebuah file yang berhubungan dengan tabel yang
berguna untuk menyimpan keadaan tabel dan jumlah baris pada
tabel.)
Anda dapat mengekspor dan mengimpor data menggunakan file
.CSV. File .CSV dapat dibuka menggunakan aplikasi Excel atau
StarOffice Calc. Jika Anda menggunakan file Excel sebagai data
untuk diekspor ke dalam tabel MySQL, simpanlah file Excel tersebut
dengan format CSV, misalnya Book1.CSV, kemudian Anda dapat
menggunakan perintah LOAD DATA INFILE untuk memasukkan
seperti yang telah dibahas pada bab terdahulu.
Berikut ini contoh ekspor - impor data menggunakan file Excel.
CREATE TABLE excel(Id INT, Citation CHAR(250),
Author Char(80), AboutAuthor char(70),
Source CHAR(60)) ENGINE = CSV;

INSERT INTO excel VALUES(1,


"No nation can be competitive in (and can be a net exporter
of) everything.",
"Michael E. Porter (1947 - )",
"U.S. author.",
"The Competitive Advantage of Nations");

INSERT INTO excel VALUES(2,

107
"While we may need a balanced budget to discipline our
politicians, what we need for export growth is a balanced
economy.",
"Michael Armstrong",
"U.S. business executive.",
"Speech");

INSERT INTO excel VALUES(3,


"The failure of communism as an economic system is made all
the more ironic by the arrogance of the original conception,
which was no less than to export the 'revolution' to the
entire world.",
"William Keegan (1938 - )",
"British author and journalist.",
"The Spectre of Capitalism");

INSERT INTO excel VALUES(4,


"Exports are becoming obsolete, because they are too slow.
Marketers today must sell the latest product everywhere at
once—and that means producing locally.",
"Carlo de Benedetti (1934 - )",
"Italian business executive.",
"Observer (London)");

INSERT INTO excel VALUES(5,


"To attempt to export revolution is nonsense.",
"Joseph Stalin (1879 - 1953)",
"Soviet dictator.",
"Message sent to Roy Howard, U.S. newspaper owner");

Contoh sebuah file Excel dari output yang dihasilkan adalah seperti
gambar di bawah ini.

Gambar 6.6 Sebuah File Excel dari Output Tabel CSV

108

Anda mungkin juga menyukai