Loading...
Sunday, December 1, 2013

Partitioning, Backup and Recovery MySQL


2.1     PARTISI TABEL PADA MYSQL
Partitioning memungkinkan kita untuk mendistribusikan data-data di suatu tabel yang sama ke filesystem yang berbeda di tempat yang berbeda pula. MySQL mendukung horizontal partitioning yang berarti row-row yang berbeda akan didistribusikan ke partisi yang berbeda. Partisi berlaku untuk semua data dan indeks dari tabel, kita tidak dapat melakukan partisi hanya data dan bukan indeks, atau sebaliknya, Anda juga tidak bisa partisi hanya sebagian dari tabel.
Beberapa keuntungan dari partisi tercantum di sini:
                      a.      Partisi memungkinkan untuk menyimpan lebih banyak data dalam satu meja daripada yang dapat diselenggarakan pada disk tunggal atau berkas partisi sistem.
                     b.      Data-data yang kehilangan kegunaannya sering dapat dengan mudah dihapus dari tabel dipartisi dengan menjatuhkan partisi (atau partisi) yang hanya berisi data tersebut. Sebaliknya, proses penambahan data baru dapat di beberapa kasus sangat difasilitasi dengan menambahkan satu atau lebih partisi baru untuk menyimpan data yang khusus.
                      c.      Beberapa pertanyaan dapat sangat dioptimalkan dalam kebajikan fakta bahwa data memenuhi klausa WHERE yang diberikan dapat disimpan hanya pada satu atau lebih partisi, yang secara otomatis tidak termasuk partisi yang tersisa dari pencarian. Karena partisi dapat diubah setelah tabel partisi telah dibuat, Anda dapat mengatur ulang data Anda untuk meningkatkan permintaan sering yang tidak mungkin telah sering digunakan ketika skema partisi pertama kali didirikan. Kemampuan untuk mengecualikan partisi non-pencocokan (dan dengan demikian setiap baris mengandung) adalah sering disebut sebagai pemangkasan partisi, dan dilaksanakan di MySQL.

            Manfaat lain biasanya berhubungan dengan partisi termasuk yang di daftar berikut. Fitur-fitur ini tidak saat ini diterapkan di MySQL Partisi, tetapi tinggi pada daftar prioritas.
                   a.         Pertanyaan yang melibatkan fungsi agregat seperti SUM() dan COUNT() dapat dengan mudah diparalelkan. Sederhana contoh permintaan tersebut mungkin salesperson_id SELECT, COUNT (order) sebagai order_total FROM GROUP BY penjualan salesperson_id;. Dengan "diparalelkan," kita berarti bahwa query dapat dijalankan secara bersamaan pada setiap partisi, dan hasil akhir yang diperoleh hanya dengan menjumlahkan hasil yang diperoleh untuk semua partisi.
                  b.         Mencapai throughput yang lebih besar permintaan dalam kebajikan menyebarkan data yang berusaha selama beberapa disk.

2.2     JENIS-JENIS PARTISI
Ada empat tipe partition yang didukung oleh MySQL, berikut adalah deskripsi dari keempat tipe tersebut:
A.     RANGE partitioning
Tabel yang dipartisi menggunakan range dipartisi dimana setiap partisinya memiliki row yang mengandung variabel yang berada pada rentang nilai tertentu. Rentang nilai (range) dapat kontinu tetapi tidak overlap dan didefinisikan melalui operator VALUES LESS THAN.
Partisi jenis ini akan berguna pada kondisi sebagai berikut:
-        jika kita ingin menghapus data lama, terutama untuk data yang besar, kita dapat melakukan penghapusan ataupun perubahan secara efisien, contoh: DELETE FROM employees WHERE YEAR(separated) <= 1990;.
-        jika kita ingin menggunakan kolom berisikan tanggal atau waktu
-        jika kita akan sering menjalan query yang bergantung pada kolom yang dipartisi.
Partisi Range, adalah membuat partisi berdasarkan sebuah range, misalkan berdasarkan tanggal, sebuah nilai, contoh nya seperti di bawah ini
CREATE TABLE tbl_penjualan (
        id INT NOT NULL,
        nama VARCHAR(30),
        tgl_transaksi DATE NOT NULL DEFAULT '1970-01-01') PARTITION BY RANGE ( YEAR(tgl_transaksi) ) (
PARTITION p0 VALUES LESS THAN (1990),
PARTITION p1 VALUES LESS THAN (1995),
PARTITION p2 VALUES LESS THAN (2000),
PARTITION p3 VALUES LESS THAN MAXVALUE
);
contoh  di  atas  membuat  partisi  berdasarkan  tahun  transaksi,  jadi  transaksi  yg  dari  tahun  1990 akan masuk ke partisi  p0, kemudian dari tahun  1995  akan masuk ke partisi  p1, kemudian yang dari tahun 2000 akan masuk ke partisi p2 dan selebihnya akan masuk ke partisi p3.

B.     LIST partitioning
Pada list partitioning, setiap partisi didefinisikan dan diklasifikasikan berdasarkan keanggotaan sebuah nilai suatu kolom terhadap suatu daftar nilai. Partisi dilakukan oleh perintah PARTITION BY LIST(expr) di mana expr adalah nama kolom yang hendak dijadikan dasar partisi dan setiap partisi didefinisikan melalui perintah VALUES IN (value_list) di mana value_list adalah daftar bilangan bulat yang dipisahkan oleh koma.
Partisi  List,  adalah  membuat  partisi  berdasarkan  kondisi  dari  sebuah  nilai yang nilainya cocok dengan yang sudah di tentukan, contohnya seperti dibawah ini. 
CREATE TABLE tbl_pegawai (
kode_pegawai VARCHAR(30),
kode_golongan INT,
nama_lengkap VARCHAR(255)
)
PARTITION BY LIST(kode_golongan) (
PARTITION p0 VALUES IN (1, 2, 3),
PARTITION p1 VALUES IN (4, 5, 6)
);
contoh diatas membuat partisi berdasarkan golongan pegawai, jadi pegawai dengan golongan 1,2 dan 3 akan masuk ke partisi p0 sedangkan karyawan dengangolongan 4,5 dan 6 akan masuk ke partisi p1.

C.     HASH partitioning
Partisi dengan hash dilakukan untuk menjamin pendistribusian yang adil (seragam) pada setiap data yang dimasukkan. Dengan partisi jenis ini, kita tidak perlu mendefinisikan keanggotaan setiap partisi. Kita hanya perlu menspesifikasi suatu ekspresi yang memiliki input suatu nilai kolom dan mempunyai output nomor partisi dari data tersebut. MySQL juga mendukung suatu varian dari hash partitioning yaitu LINEAR HASH partitioning.
Partisi Hash, adalah membuat partisi berdasarkan sebuah kolom yg sudah ditentukan dengan pembagian segmen nya diatur oleh MySQL, contohnya seperti dibawah ini.
CREATE TABLE tbl_pegawai (
kode_pegawai VARCHAR(30),
kode_golongan INT,
nama_lengkap VARCHAR(255)
)
PARTITION BY HASH( kode_pegawai )
PARTITIONS 4;
contoh  diatas  membuat  partisi  berdasarkan  kode  pegawai,  jadi  data  pegawai  akan  di  pecah menjadi  empat  partisi,  dan  yg  mengatur  sebuah  kode  pegawai  masuk  ke  partisi  yang  mana langsung di atur otomatis oleh MySQL.

D.    KEY partitioning
Partisi dengan key memiliki prinsip yang hampir sama dengan hash partitioning. Yang menjadi perbedaan adalah fungsi hashing untuk partisi jenis ini dibuat langsung oleh server MySQL dengan fungsi MD5() pada MySQL Clusters. Untuk storage engine yang lain, server telah mengembangkan fungsi yang menerapkan algoritma yang hampir sama bernama PASSWORD().
            Partisi  Key,  adalah  membuat  partisi  berdasarkan  sebuah  key  dari  tabel,  contoh  nya  seperti dibawah ini.
CREATE TABLE tbl_nama (
id INT NOT NULL PRIMARY KEY,
nama_lengkap VARCHAR(255)
)
PARTITION BY KEY()
PARTITIONS 2;
            Contoh  diatas  membuat  partisi  berdasarkan  primary  key  yang  bernama  id,  jadi  data  dari tbl_nama  akan  di  pecah  menjadi  2  partisi,  dan  yang  mengatur  sebuah  data  masuk kepartisi yang mana, diatur otomatis oleh MySQ. Misalkan saya mempunyai tabel seperti dibawah ini..
CREATE TABLE anggota (
username VARCHAR(16) NOT NULL,
namalengkap VARCHAR(25) NOT NULL,
tanggal DATE NOT NULL,
PRIMARY KEY(username)
)
PARTITION BY KEY(username)
PARTITIONS 6;
            Dari table diatas kita ingin melihat apakah tabel anggota mempunyai 6 partisi, dan sebuah data berada di partisi yang mana.
1.      Untuk melihat partition dari tabel, bisa dengan cara di bawah ini
explain partitions select * from anggota;
2.      Untuk melihat sebuah data berada di partisi yang mana, bisa dengan cara explain partitions select * from anggota where username='50000' ; Membuat benchmark antara tabel yang tidak di partisi, dengan tabel yang di partisi dengan KEY, dan tabel yang di partisi dengan RANGE, di bawah ini adalah struktur tabel nya, jumlah data untuk ekperimen ini sebanyak 100.000 record.

1. Tabel Tanpa Partisi
CREATE TABLE anggota
            username INT NOT NULL,
            namalengkap VARCHAR(25) NOT NULL,
            tanggal DATE NOT NULL,
            PRIMARY KEY(username);

2. Tabel Dengan Partisi KEY
CREATE TABLE anggota2 (
            username INT NOT NULL,
            namalengkap VARCHAR(25) NOT NULL,
            tanggal DATE NOT NULL,
            PRIMARY KEY(username)
)
PARTITION BY KEY(username)
PARTITIONS 6;

3. Partisi Dengan Partisi RANGE
CREATE TABLE anggota3 (
            username INT NOT NULL,
            namalengkap VARCHAR(25) NOT NULL,
            tanggal DATE NOT NULL,
            PRIMARY KEY(username)
)
PARTITION BY RANGE(username) (
PARTITION P0 VALUES LESS THAN (20000),
PARTITION P1 VALUES LESS THAN (40000),
PARTITION P2 VALUES LESS THAN (60000),
PARTITION P3 VALUES LESS THAN (80000),
PARTITION P4 VALUES LESS THAN (100001)
)
            Pengukurannya dengan query sederhana saja dan yang menjadi ukuran nya adalah waktu yang di butuhkan dalam eksekusi query tersebut, dibawah ini adalah hasilnya:
1. TIDAK MENGGUNAKAN PARTISI
Select count(*) from anggota where username > 25000 and username < 85000

2.  MENGGUNAKAN PARTISI KEY
Select count(*) from anggota2 where username > 25000 and username < 85000 

3. Menggunakan Partisi RANGE
Select count(*) from anggota3 where username > 25000 and username < 85000

            Ternyata yang terlama adalah tabel yang menggunkan partisi KEY (0.20 sec) dan yang tercepat adalah tabel yang menggunakan partisi RANGE (0.07)

2.3     BACKUP DAN RECOVERY
            Data dan database merupakan komponen terpenting dalam suatu sistem informasi manajemen, disamping tentu saja aplikasi untuk sistem informasi harus tersedia, keduanya saling tergantung. Suatu aplikasi sistem informasi manajemen tidak ada gunanya jika tidak mempunyai data yang lengkap, demikian juga sebaliknya jika punya data tetapi tidak mempunyai aplikasi yang digunakan untuk mengelolanya sehingga tidak dapat dihasilkan suatu laporan, statistik atau pun informasi.

1.         Backup Data
            Backup data merupakan salah satu kegiatan yang harus dilakukan oleh pengelola database untuk melakukan penyalinan sistem, data dan aplikasi. Backup data harus dilakukan untuk menjaga jangan sampai terjadi kerusakan sistem dari luar ataupun dari dalam sistem, yang disengaja atau pun tidak disengaja.
            Proses backup data dilakukan secara rutin sesuai dengan jadwal yang telah ditentukan, jika dimisalkan pada sebuah perusahaan memiliki 1 database yang melayani 100 transaksi perhari bisa kita bayangkan berapa banyak data yang terkumpul dalam 1 bulan, dan jika terjadi kerusakan system maka data yang begitu banyak akan hilang atau akan menjadi pekerjaan input data baru yang membuang buang waktu, dengan adanya proses backup data kejadian tersebut bisa dihindari, misalnya secara rutin administrator database melakukan penyimpanan data setiap minggu sehingga jika pada minggu ketiga hari kedua terjadi crash system atau kerusakan system yang terjadi akibat gangguan system atau factor gangguan cuaca seperti gempa, banjir dan tanah longsor yang merusak data secara fisik. Maka data yang hilang hanya 2 hari, sehingga total data yang hilang adalah 200 transaksi, dari ilustrasi diatas kita bisa mengetahui betapa pentingnya proses backup data untuk daur hidup suatu system database.

2.      Restore Data
            Restore adalah proses mengembalikan backup ke dalam sistem. Restore dilakukan untuk mengembalikan keadaan sistem kembali pada keadaan semula, keadaan terakhir pada saat operasional, sebelum terjadi kerusakan sistem. Pada proses ini akan dilakukan pengembalian data baik struktur maupun isi dari database, secara teori proses ini adalah proses minimum pengembalian system tergantung dari waktu scheduling yang menjadi dasar proses backup, jika waktu scheduling dijadwalkan terlalu lama maka akan banyak data nya hilang.


3.      Skenario kegagalan dan Resiko Backup
            Kegagalan sebuah sistem bisa disebabkan oleh banyak sekali faktor, salah satu faktor bencana alam yang tidak pernah diduga dan diperkirakan sehingga skenario kegagalan sistem harus diperhitungkan dengan pembangunan sistem backup harian dengan media backup yang disimpan ditempat berbeda. Dengan menggunakan basis data web ini semuanya bisa dilakukan dengan mudah.

4.      Metoda backup dan recovery
            Proses backup data sangatlah penting bagi keamanan data agar bisa terjaga dengan baik terutama saat terjadi crash pada sistem basis data yang disebabkan oleh kerusahakan fisik hardware ataupun karena faktor alam. Banyak sekali cara untuk melakukan backup data, berikut ini metoda yang bisa dlakukan saat akan melakukan backup data :
a) Backup Logika vs backup Physic
b) Backup online vs backup offline
c) Backup local vs backup remote
d) backup penuh vs backput bertambah sebagian
e) Point in time recovery
f) Backup scheduling, compression dan encryption
g) Table Maintenance

MYSQL BACKUP DAN RECOVERY
Lebih jauh berikut ini penjelasan tentang masing masing metoda backup :
1. Backup Logika vs backup Physic
            Backup logika adalah menyimpan perintah logic dari struktur database dan isinya yang direpresentasikan dalam perintah SQL. Seperti CREATE DATABASE, CREATE TABLE dan INSERT DATA. Backup fisik adalah mengambil datatabase dalam bentuk fisik, untuk database yang menggunakan Appserv secara fisik data disimpan pada folder C:\\Appserv\Mysql\data\. Pada folder tersebut terdapat file database, setiap table diciptakan dari 3 file yaitu .MYD, ,FRM dan .MYI, pada saat pengambilan data dilakukan dengan mengcopy folder yang didalamnya menyimpan data dari database yang kita punya. Data yang diambil adalah seluruh database dan tidak bisa terpilih, sangat berbeda dengan backup secara logika, data yang diambil bisa dipilih sesuai dengan yang diinginkan.
Berikut ini karakteristik backup secara logika :
a.       Backup dilakukan melalui server MySQL untuk mengambil struktur dan informasi data.
b.      Backup berjalan lebih lambat karena server harus mengakses informasi data dan mengirimkannya dalam bentuk logika pada file backup.
c.       Output bisa lebih besar dari pada bentuk fisik, misalkan data yang disimpan 5 MB dalam bentuk file sql maka pada saat recovery akan terjadi kehabisan memori karena prosesnya akan menghabiskan banyak memori untuk mengembalikan dalam bentuk semula.
d.      Backup dan Restore dilakukan dengan mengabaikan mesin yang digunakan.
e.       Backup logika tidak melibatkan banyak file hanya satu file logika yang biasanya disimpan dalam file .SQL
f.        Data disimpan dalam bentuk logika yang merupakan bahasa DDL dan DML.
g.       Backup data dilakukan saat server sudah dijalankan.
h.       Program untuk backup digunakan mysqldump.exe yang memanggil file dikeluarkan dalam bentuk logika file, seperti tsiswa.sql
i.         Untuk mengeluarkan data dalam bentuk file lain bisa digunakan perintah : SELECT …..INTO OUTFILE

Berikut ini karakteristik backup fisik
1.         Backup terdiri dari salinan file dan database, ini adalah salinan dari semua bagian direktori MySQL, data dari table memori tidak disampan pada disk.
2.         Backup data secara fisik lebih cepat karena tidak melakukan memrosesan logika, hanya pengcopian secara fisik.
3.         Outputnya lebih sederhana dibandingkan backup logika.
4.         Sebagai tambahan dari database, backup dapat meliputi file manapun yang terdiri dari file MYi, MYD dan FRM.

2. Backup online vs backup offline
            Backup online dilakukan saat server MySQL sedang berjalan sedangkan backup offline dilakukan saat server sedang dihentikan.
Metoda Backup Online mempunyai karakteristik :
a.       Lebih sedikit mengganggu klien lain karena dapat menggunakan mysql server tanpa harus menghentikan pekerjaan selama proses backup.
b.      Backup data hanya dilakukan pada data yang tidak sedang terlibat dalam transaksi.
Metoda Backup Offline mempunyai karakteristik :
a.       Mempengarui klien yang kurang baik sebab server tidak berjalan selama proses berlangsung.
b.      Backup lebih sederhana memeriksa prosedur sebab tidak ada kemungkinan gangguan campur tangan dari aktifitas klien.

3. Backup local vs backup remote
            Suatu backup local dilakukan pada host yang sama pada server MySQL yang sedang running, sedangkan suatu backup remote diaktifkan dari suatu host yang berbeda.
a.       Mysqldump dapat menghubungkan ke server remote atau local. Karena output SQL (perintah create dan insert) local atau remote dapat diselesaikan dan degenerate dari client.
b.      Mysqlhotcopy melaksanakan hanya backup local, menghubungkan ke server untuk menguncinya untuk menghindari modifikasi data dan kemudian menyalin file ke local.
c.       Select ………into outfile dapat diaktifkan dari satu host remote dari client, tetapi field output diciptakan pada host server.
d.      Backup fisik secara khas diaktifkan pada server mysql sedemikian hingga server dapat diambil saat ofline, walaupun cara pengambilannya bisa dengan remote.
4. Snapshot Backup
            Beberapa file system implementasi memungkinkan snapshot untuk diambil. Ini menyeddiakan salinan logika menyangkut file system pada titik yang telah ditentukan waktunya, tanpa keharusan untuk secara fisik mengcopy seluruh file system. MySQL sendiri tidak menghasilkan kemampuan untuk mengambil file system snapshot. Itu tersedia melalui aplikasi lain seperti veritas atau LVM.

5. Backup penuh vs Backup bertambah sebagian
            Suatu backup penuh meliputi semua data yang diatur oleh suatu MySQL Server pada titik ditentukan pada waktunya. Suatu incremental backup terdiri dari perubahan pada data sesuai dengan log pada server.

6. Point in time recovery
            Metoda lain menggunakan log binary untuk mencapai point in time recovery. Ini dilaksanakan dengan recovery yang pertama dari backup yang pertama dan merecovery seperti semula dan memodifikasi prosesnya sampai waktu yang kita tentukan.

7. Backup scheduling, compression dan encryption
            Backup scheduling adalah suatu yang penting untuk otomatisasi prosedur backup. Proses ini bisa menghindari proses hacking yang dilakukan diinternet sehingga data selalu terjaga. Proses ini biasa diterapkan pada system online yang mengcover banyak data pada transaksi.

8. Table Maintenance
            Integritas data dapat disepakati jika table mengalami corrupt. My SQL menyediakan program untuk memeriksa table dan perbaikan jika terdapat masalah yang ditemukan, program ini biasa diterapkan pada table MyIsam.

0 comments:

Post a Comment

 
TOP