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 echo +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+--+-+-+-+-+-+-+-+-
. . Current Time is: ~ 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 --resultfile="c:\BACKUP\backup.%DATE:~0,3%.sql". ) ELSE ( cd c:\appserv\mysql\bin\ mysqldump -uroot -p05400679 --databases 555 --resultfile="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 --resultfile="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 penggunaan 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.
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 dokumentasi Windows.
Query tersebut akan menghasilkan file yang bernama copypembelian.txt pada direktori c: dengan data yang berbentuk format kolom yang dipisahkan dengan tanda koma (commaseparated 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.
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.
Hasil restorasi file backup tersebut dapat dilihat pada gambar di bawah ini.
99
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 memiliki 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 ----1 2 3 firstname --------russell tim sherly lastname -------kurt worth ridd zip -----45678 45687 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 ----1 2 3 firstname --------russell tim sherly lastname -------kurt worth ridd zip -----10 20 30
101
Output:
id ---1 2 3 firstname ---------russell tim sherly lastname -------kurt worth ridd zip -----45678 45687 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 ----1 2 3 firstname --------russell tim sherly lastname -----kurt worth ridd zip ----10 20 30
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.
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 menjadwalkan 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 dibackup secara otomatis tersebut seperti yang ditunjukkan pada gambar berikut ini.
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.
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 onceand 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.
108