mylvmbackup adalah skrip Perl untuk membuat cadangan MySQL dengan cepat. Ini menggunakan fitur snapshot LVM untuk melakukannya. Untuk melakukan pencadangan, mylvmbackup memperoleh kunci baca di semua tabel dan menghapus semua cache server ke disk, membuat snapshot volume yang berisi direktori data MySQL, dan membuka kunci tabel lagi. Artikel ini menunjukkan cara menggunakannya di server Debian Squeeze.
Saya tidak memberikan jaminan apa pun bahwa ini akan berhasil untuk Anda!
1 Catatan Awal
Saya berasumsi bahwa MySQL sudah diatur dan berjalan di sistem Anda. Sistem harus menggunakan LVM, dan direktori data MySQL (/var/lib/mysql) harus memiliki partisi LVM sendiri (walaupun itu opsional).
Jika Anda telah membaca Cadangkan (Dan Pulihkan) Partisi LVM Dengan LVM Snapshots, Anda tahu bahwa snapshot LVM memerlukan beberapa partisi LVM yang tidak digunakan untuk snapshot. Sistem pengujian saya memiliki hard drive /dev/sdb kedua yang saat ini tidak digunakan yang akan digunakan oleh mylvmbackup untuk membuat volume logis sementara untuk cadangan.
Ini adalah situasi saya saat ini:
[email protected]:~# df -h
Filesystem Size Used Avail Use% Mounted on
/dev/mapper/server1-root
8 > TMPFS 252M 0 252M 0%/lib/init/rw
Varrun 252m 56k 251m 1%/var/run
varlock 252m 0 252m 0%/var/kunci
udev 252m 2.6m 249m 2% /dev
tmpfs 252M 0 252M 0% /dev/shm
/dev/sda1 471M 23M 425J/> 6% G 170M 8.3G 2% /var/lib/mysql
[email protected]:~#
Seperti yang Anda lihat, saya memiliki dua partisi LVM, / dan /var/lib/mysql (ditambah partisi swap LVM tidak ditampilkan di sini). Grup volume diberi nama server1, dan volume diberi nama swap, root, dan mysql:
[email protected]:~# pvdisplay
--- Physical volume ---
PV Name /dev/sda5
VG Name 1
Dapat dialokasikan ya (tetapi penuh)
PE Ukuran (KByte) 4096
Total PE 7557
< PEPV 0gCmpE-FGel-9ayg-E2yg-kkEu-B72X-kFvaye
[dilindungi email]:~#
[dilindungi email]:~# vgdisplay
--- Volume group ---
VG Name server1
System ID
Format lvm2
Metadata Area Metadata
Format lvm2
Metadata Baca /Tulis
Status VG Diubah Ulang
Max Lv 0
Cur lv 3
Buka LV 3
Max PV 0
Cur PV 1
ACT PV 1
VG Ukuran 29.52 GB
PE Ukuran 4.00 MB
Total PE 7557
Alloc PE /Ukuran 7557 /29.52 GB
PE /Ukuran GRATIS 0 /0
VG UUID PH5HPC-JQEP- BFYs-wWlA-hu03-qwuQ-0cNIu3
[email protected]:~#
[email protected]:~# lvdisplay
-- - Logical volume ---
LV Name /dev/server1/swap
VG Name server1
MOLV UUID Gattt Akses Baca /Tulis
Status LV Tersedia
#Buka 2
Ukuran LV 1,00 GB
LE saat ini LE 256
Segmen 1
Alokasi Warisan
Baca sektor depan otomatis
- saat ini setel ke 256
Blokir perangkat 254:0
--- Logical volume ---
LV Name < server br /> VG Name server1
LV UUID 5wen7n-xymh-mqz1-fkh5-0xxa-1y2t-v3pybb
lv menulis akses baca /tulis
status lv tersedia
#buka 1
ukuran LV 19.53 gb
saat ini LE 5000
Segmen 1
Alokasi mewarisi
Baca depan sektor otomatis
saat ini - Logical volume ---
LV Name /dev/server1/mysql
VG Name server1
LV UUID > Akses Baca /Tulis
Status LV Tersedia
#Buka 1
Ukuran LV 8.99 GB
LE saat ini LE 2301
Segmen 1
Alokasi Warisan
Baca sektor depan otomatis
- saat ini setel ke 256
Blokir perangkat 254:2
[dilindungi email]:~#Berikut ini ikhtisar dari dua hard drive saya:
[email protected]:~# fdisk -l
Disk /dev/sda: 32.2 GB, 32212254720 bytes
255 heads, 63 sektor/track, 3916 silinder
Unit =silinder 16065*512 =8225280 byte
Disk Identifier:0x0009353f
Perangkat boot start blok end ID sistem
/sda1*1 62 497983+ 83 Linux
/dev/sda2 63 3916 30957255 5 Diperpanjang
/dev/sda5 63 3916 8 240 VM/Sda> 63 3916 > 240 VM/
8 byte{} head, 63 sektor/track, 1305 silinder
Satuan = silinder 16065 * 512 = 8225280 byte
Pengidentifikasi disk: 0x00000000
Disk /dev/sdb tidak berisi a valid tabel partisi
[dilindungi email]:~#
2 Mempersiapkan /dev/sdb
Sebelum kita dapat membuat snapshot di /dev/sdb, kita harus mempartisinya (Linux LVM) dan menambahkannya ke grup volume kita (server1).
Sekarang saya akan membuat partisi /dev/sdb1 dan menambahkannya ke grup volume server1:
fdisk /dev/sdbserver1:~# fdisk /dev/sdb
Perangkat tidak berisi tabel partisi DOS yang valid, juga disklabel Sun, SGI, atau OSF
Membuat label disk DOS baru. Perubahan akan tetap di memori,
sampai Anda memutuskan untuk menulisnya. Setelah itu, tentu saja, konten
sebelumnya tidak akan dapat dipulihkan.
Jumlah silinder untuk disk ini disetel ke 1305.
Tidak ada apa-apa salah dengan itu, tetapi ini lebih besar dari 1024,
dan dalam pengaturan tertentu dapat menyebabkan masalah dengan:
1) perangkat lunak yang berjalan pada saat boot (mis., LILO versi lama)
2) boot dan partisi perangkat lunak dari OS lain
(mis., DOS FDISK, OS/2 FDISK)
Peringatan: bendera 0x0000 tidak valid dari tabel partisi 4 akan dikoreksi dengan w(ritus)
Perintah (m untuk bantuan): <-- n
Tindakan perintah
e diperpanjang
p partisi primer (1-4)
<-- p
Nomor partisi (1-4): <-- 1
Silinder pertama (1-1305, default 1):<-- [ENTER]
Menggunakan nilai default 1
Silinder terakhir atau +ukuran atau + sizeM atau +sizeK (1-1305, default 1305):<-- [ENTER]
Menggunakan nilai default 1305
Command (m for help): <-- t
Partisi yang dipilih 1
Kode hex (ketik L untuk mencantumkan kode): <-- 8e
Ch jenis sistem partisi 1 hingga 8e (Linux LVM)
Command (m untuk bantuan): <-- w
Tabel partisi telah diubah!
Memanggil ioctl() untuk membaca ulang tabel partisi.
Menyinkronkan disk.pvcreate /dev/sdb1
vgextend server1 /dev/sdb1Itu saja - kita tidak perlu membuat volume apa pun di dalamnya - ini akan dilakukan oleh mylvmbackup secara otomatis.
3 Memasang Dan Menggunakan mylvmbackup
Debian Squeeze menyediakan paket untuk mylvmbackup, oleh karena itu kita cukup menginstalnya sebagai berikut:
apt-get install mylvmbackupLihat di
man mylvmbackupuntuk mempelajari cara menggunakannya (baca bagian tentang tabel InnoDB dengan cermat jika Anda menggunakan InnoDB).
File konfigurasi mylvmbackup adalah /etc/mylvmbackup.conf, jadi Anda dapat menentukan opsi Anda di baris perintah atau di file itu (opsi baris perintah akan menggantikan opsi di /etc/mylvmbackup.conf).
Direktori pencadangan default adalah /var/cache/mylvmbackup/backup (kecuali jika Anda menentukan lokasi lain).
Contoh perintah untuk membuat cadangan tabel MyISAM adalah:
mylvmbackup --user=root --password=yourrootsqlpassword --mycnf=/etc/mysql/my.cnf --vgname=server1 --lvname=mysql --backuptype=tarDan untuk InnoDB:
mylvmbackup --user=root --password=yourrootsqlpassword --innodb_recover --skip_flush_tables --mycnf=/etc/mysql/my.cnf --vgname=server1 --lvname=mysql --backuptype=tarPastikan Anda mengisi password yang benar, nama grup volume (server1 di sini) dan nama volume volume yang berisi data MySQL (volumenya adalah /dev/server1/mysql, jadi namanya mysql).
Saya semuanya berjalan dengan baik, Anda akan melihat banyak output:
[email protected]:~# mylvmbackup --user=root --password=yourrootsqlpassword --mycnf=/etc/mysql/my.cnf --vgname=server1 --lvname=mysql --backuptype=tar
20120416 19:16:58 Info: Menyambungkan ke database...
20120416 19:16:58 Info: Membilas tabel dengan read lock...
20120416 19:16:58 Info: Mengambil posisi record...
20120416 19:16:58 Info: Mengambil snapshot...
Descriptor file 3 kiri terbuka
Logical volume "mysql_snapshot" dibuat
20120416 19:16:58 Info: Membuka kunci tabel...
20120416 19:16:58 Info: Memutuskan dari database...
20120416 19:16:58 Info: Memasang snapshot...
20120416 19:16 :59 Info: Menyalin my.cnf...
20120416 19:16:59 Info: Mengambil cadangan sebenarnya...
20120416 19:16:59 Info: Membuat arsip tar /var/cache/mylvmbackup /backup/backup-20120416_191658_mysql.tar.gz
backup/
backup/mydb/
backup/mydb/sys_modules.MYI
backup/mydb/dns_a.frm
backup/mydb/isp_dienste.MYD
backup/mydb/isp_server_ip.frm
kembali up/mydb/dns_spf.frm
backup/mydb/dns_a.MYI
backup/mydb/isp_fakt_dep.frm
backup/mydb/multidoc_dep.frm
backup/mydb/isp_isp_web_template. MYI
backup/mydb/sys_nodes.MYD
backup/mydb/listtype.MYD
backup/mydb/help_documents.MYD
backup/mydb/help_tickets.MYI
cadangan /mydb/doctype.frm
backup/mydb/login.MYI
backup/mydb/isp_com.frm
backup/mydb/help_documents.MYI
backup/mydb/isp_dep.MYD
backup/mydb/help_documents.frm
backup/mydb/isp_server.MYD
backup/mydb/isp_fakt_nodes.MYD
backup/mydb/sys_config.MYD
backup/ mydb/dns_nodes.MYI
backup/mydb/sys_config.MYI
backup/mydb/isp_monitor.frm
backup/mydb/isp_server_ip.MYI
backup/mydb/isp_isp_datenbank.frm
backup/mydb/dns_secondary.frm
backup/mydb/isp_nodes.MYI
backup/mydb/dns_isp_dns.MYI
backup/mydb/help_nodes.frm
backup/mydb /isp_fakt_nodes.frm
backup/mydb/isp_server.MYI
backup/mydb/isp_isp_domain.frm
backup/mydb/dns_ dep.frm
backup/mydb/session.frm
backup/mydb/isp_isp_cron.MYD
backup/mydb/isp_fakt_record.MYI
backup/mydb/isp_monitor.MYI
backup/mydb/isp_fakt_rechnung.MYI
backup/mydb/listtype.MYI
backup/mydb/isp_fakt_rechnung.MYD
backup/mydb/isp_traffic.frm
backup/mydb_isp_ .MYI
backup/mydb/user_groups.frm
backup/mydb/isp_fakt_record.frm
backup/mydb/isp_fakt_artikel.MYD
backup/mydb/isp_htaccess.MYD
backup/mydb/sys_nodes.frm
backup/mydb/groups.frm
backup/mydb/login.MYD
backup/mydb/isp_firewall.MYD
backup/mydb/isp_server. dari
backup/mydb/help_tickets.frm
backup/mydb/multidoc_dep.MYD
backup/mydb/dns_nodes.frm
backup/mydb/dns_a.MYD
backup /mydb/sys_config.frm
backup/mydb/dns_isp_dns.frm
backup/mydb/dns_mx.MYI
backup/mydb/isp_isp_web.MYD
backup/mydb/isp_serverstatus.MYI
backup/mydb/isp_serverstatus.MYD
backup/mydb/sys_dep.MYD
backup/mydb/isp_isp_cron.MYI
backup/mydb/session.MYD
backup/mydb/isp_isp_admin.MYD
backup/mydb/dns_ptr.frm
backup/mydb/dns_mx.frm
backup/ mydb/isp_isp_domain.MYD
backup/mydb/sys_dep.MYI
backup/mydb/dns_spf.MYD
backup/mydb/user_groups.MYD
backup/mydb/sys_news.frm
backup/mydb/isp_isp_actions.MYI
backup/mydb/doctype.MYD
backup/mydb/multidoc_nodes.frm
backup/mydb/isp_fakt_artikel.frm
backup/mydb /sys_news.MYD
backup/mydb/isp_traffic.MYD
backup/mydb/user_groups.MYI
backup/mydb/sys_news.MYI
backup/mydb/listtype.frm
backup/mydb/del_status.frm
backup/mydb/isp_fakt_nodes.MYI
backup/mydb/isp_isp_kunde.MYD
backup/mydb/isp_dienste.frm
backup/mydb/ dns_mx.MYD
backup/mydb/doctype.MYI
backup/mydb/help_tickets.MYD
backup/mydb/dns_secondary.MYI
backup/mydb/dns_ptr.MYD
backup/mydb/isp_isp_reseller.frm
backup/mydb/isp_dienste.MYI
backup/mydb/isp_isp_datenbank.MYD
backup/mydb/isp_isp _actions.MYD
backup/mydb/isp_isp_web.frm
backup/mydb/db.opt
backup/mydb/isp_server_ip.MYD
backup/mydb/multidoc_nodes.MYI
backup/mydb/dns_nodes.MYD
backup/mydb/isp_fakt_rechnung.frm
backup/mydb/isp_isp_reseller.MYI
backup/mydb/isp_nodes.MYD
backup/mydbaccess/isp_ht .MYI
backup/mydb/isp_isp_web_template.frm
backup/mydb/isp_isp_domain.MYI
backup/mydb/dns_secondary.MYD
backup/mydb/dns_dep.MYD
backup/mydb/isp_firewall.MYI
backup/mydb/help_nodes.MYI
backup/mydb/isp_isp_admin.frm
backup/mydb/isp_isp_cron.frm
backup/mydb/isp_isp_datenbank. MYI
backup/mydb/isp_traffic_ip.frm
backup/mydb/isp_fakt_dep.MYD
backup/mydb/isp_dep.MYI
backup/mydb/dns_dep.MYI
backup /mydb/isp_isp_reseller.MYD
backup/mydb/dns_isp_dns.MYD
backup/mydb/isp_fakt_artikel.MYI
backup/mydb/multidoc_dep.MYI
backup/mydb/multidoc_nodes.
cadangan/mydb/del_status.MYD
cadangan/mydb/groups.MYD
backup/mydb/isp_isp_web_template.MYD
backup/mydb/isp_htaccess.frm
backup/mydb/isp_dep.frm
backup/mydb/isp_isp_web.MYI
backup/mydb/ isp_isp_user.frm
backup/mydb/session.MYI
backup/mydb/isp_isp_admin.MYI
backup/mydb/isp_isp_kunde.MYI
backup/mydb/isp_isp_user.MYI
backup/mydb/isp_fakt_record.MYD
backup/mydb/isp_nodes.frm
backup/mydb/groups.MYI
backup/mydb/del_status.MYI
backup/mydb/dns_spf .MYI
backup/mydb/isp_com.MYD
backup/mydb/isp_isp_user.MYD
backup/mydb/dns_cname.frm
backup/mydb/isp_com.MYI
backup/mydb/dns_cname.MYD
backup/mydb/sys_modules.MYD
backup/mydb/isp_traffic_ip.MYI
backup/mydb/help_nodes.MYD
backup/mydb/sys_user. frm
backup/mydb/isp_traffic_ip.MYD
backup/mydb/sys_user.MYD
backup/mydb/sys_modules.frm
backup/mydb/isp_serverstatus.frm
backup /mydb/sys_dep.frm
backup/mydb/isp_firewall.frm
backup/mydb/isp_monitor.MYD
backup/mydb/isp_is p_kunde.frm
backup/mydb/dns_cname.MYI
backup/mydb/isp_isp_actions.frm
backup/mydb/sys_user.MYI
backup/mydb/sys_nodes.MYI
backup/mydb/dns_ptr.MYI
backup/mydb/isp_traffic.MYI
backup/mydb/login.frm
backup/ib_logfile0
backup/mysql_upgrade_info
backup/ debian-5.0.flag
backup/mysql/
backup/mysql/host.MYD
backup/mysql/procs_priv.MYD
backup/mysql/time_zone_transition.MYD
backup/mysql/proc.MYI
backup/mysql/time_zone_name.frm
backup/mysql/time_zone_name.MYD
backup/mysql/help_relation.MYI
backup/mysql/user. MYD
backup/mysql/help_category.MYI
backup/mysql/time_zone.frm
backup/mysql/func.MYD
backup/mysql/help_category.MYD
cadangan /mysql/time_zone_transition.frm
backup/mysql/time_zone_name.MYI
backup/mysql/help_category.frm
backup/mysql/time_zone_leap_second.frm
backup/mysql/time_zone_transition.MYI
backup/mysql/help_relation.MYD
backup/mysql/host.frm
backup/mysql/db.frm
backup/mysql/db.MYI
backup/mysql/columns_priv.frm
backup/mysql/time_zone.MYI
backup/mysql/time_zone_leap_second .MYD
backup/mysql/func.frm
backup/mysql/columns_priv.MYI
backup/mysql/help_topic.MYD
backup/mysql/host.MYI
backup/mysql/proc.frm
backup/mysql/user.MYI
backup/mysql/help_topic.MYI
backup/mysql/help_relation.frm
backup/mysql/tables_priv. frm
backup/mysql/help_keyword.frm
backup/mysql/user.frm
backup/mysql/time_zone_transition_type.MYI
backup/mysql/procs_priv.frm
backup /mysql/help_topic.frm
backup/mysql/procs_priv.MYI
backup/mysql/time_zone_transition_type.MYD
backup/mysql/func.MYI
backup/mysql/proc.MYD
backup/mysql/tables_priv.MYD
backup/mysql/help_keyword.MYI
backup/mysql/help_keyword.MYD
backup/mysql/time_zone_leap_second.MYI
backup/ mysql/tables_priv.MYI
backup/mysql/db.MYD
backup/mysql/time_zone_transition_type.fr m
backup/mysql/time_zone.MYD
backup/mysql/columns_priv.MYD
backup/lost+found/
backup/ibdata1
backup/ib_logfile1
backup-pos/backup-20120416_191658_mysql.pos
backup-pos/backup-20120416_191658_my.cnf
20120416 19:17:00 Info: SELESAI
20120416 19:17:00 Info: Pembersihan ...
20120416 19:17:00 Info: LVM Statistik penggunaan:
20120416 19:17:00 Info: LV VG Attr LSize Origin Snap% Move Log Copy%: 2012 17:00 Info: mysql_snapshot server1 swi-a- 5.00G mysql 0,00
Logical volume "mysql_snapshot" berhasil dihapus
[email protected]:~#Setelah itu Anda dapat menemukan cadangan di direktori /var/cache/mylvmbackup/backup (kecuali Anda telah menentukan lokasi lain):
ls -l /var/cache/mylvmbackup/backup[email protected]:~# ls -l /var/cache/mylvmbackup/backup
total 248
-rw-r--r-- 1 root root 246847 2012-04-16 19 :17 backup-20120416_191658_mysql.tar.gz
[email protected]:~#File tar.gz berisi dua direktori, backup (dengan database dan tabel dari /var/lib/mysql yang dapat Anda salin kembali setelah database crash - database harus dihentikan ketika Anda melakukan ini) dan backup-pos yang berisi file my.cnf Anda (cadangan dari /etc/mysql/my.cnf):
cd /var/cache/mylvmbackup/backup
tar xvfz backup-20120416_191658_mysql.tar.gz
ls -l[dilindungi email]:/var/cache/mylvmbackup/backup# ls -l
total 256
drwxr-xr-x 5 mysql mysql 4096 16-16 19:10 cadangan
-rw-r--r-- 1 root root 246847 2012-04-16 19:17 backup-20120416_191658_mysql.tar.gz
drwxr-xr-x 2 root root 4096 2012-04-16 19:24 pos cadangan
[dilindungi email]:/var/cache/mylvmbackup/backup#
4 Tautan
- mylvmbackup:http://www.lenzg.net/mylvmbackup/
- MySQL:http://www.mysql.com/
- Debian:http://www.debian.org/