MySQL 백업 · 7 min read · Dec 10, 2025
Debian Squeeze에서 mylvmbackup으로 MySQL 데이터베이스 백업하는 방법
mylvmbackup은 MySQL 백업을 빠르게 생성하기 위한 Perl 스크립트입니다. 이를 위해 LVM의 스냅샷 기능을 사용합니다. 백업을 수행하기 위해 mylvmbackup은 모든 테이블에 대한 읽기 잠금을 얻고 모든 서버 캐시를 디스크에 플러시한 후 MySQL 데이터 디렉토리를 포함하는 볼륨의 스냅샷을 생성하고 다시 테이블의 잠금을 해제합니다. 이 문서에서는 Debian Squeeze 서버에서 이를 사용하는 방법을 보여줍니다.
나는 이것이 당신에게 작동할 것이라는 보장을 하지 않습니다!
1 사전 참고
나는 MySQL이 이미 시스템에 설정되어 실행되고 있다고 가정합니다. 시스템은 LVM을 사용해야 하며 MySQL 데이터 디렉토리 (/var/lib/mysql)는 자체 LVM 파티션을 가져야 합니다(비록 선택 사항이지만).
LVM 스냅샷으로 LVM 파티션을 백업(및 복원)하는 방법을 읽었다면 LVM 스냅샷이 스냅샷을 위한 사용되지 않은 LVM 파티션을 필요로 한다는 것을 알고 있을 것입니다. 내 테스트 시스템에는 mylvmbackup이 백업을 위한 임시 논리 볼륨을 생성하는 데 사용할 현재 사용되지 않는 두 번째 하드 드라이브 /dev/sdb가 있습니다.
이것이 내 현재 상황입니다:
root@server1:~# df -h
Filesystem Size Used Avail Use% Mounted on
/dev/mapper/server1-root
20G 808M 18G 5% /
tmpfs 252M 0 252M 0% /lib/init/rw
varrun 252M 56K 251M 1% /var/run
varlock 252M 0 252M 0% /var/lock
udev 252M 2.6M 249M 2% /dev
tmpfs 252M 0 252M 0% /dev/shm
/dev/sda1 471M 23M 425M 6% /boot
/dev/mapper/server1-mysql
8.9G 170M 8.3G 2% /var/lib/mysql
root@server1:~#보시다시피, 나는 두 개의 LVM 파티션, /와 /var/lib/mysql(여기에는 표시되지 않은 LVM 스왑 파티션이 추가로 있음)를 가지고 있습니다. 볼륨 그룹의 이름은 server1이며, 볼륨의 이름은 swap, root 및 mysql입니다:
root@server1:~# pvdisplay
--- Physical volume ---
PV Name /dev/sda5
VG Name server1
PV Size 29.52 GB / not usable 3.66 MB
Allocatable yes (but full)
PE Size (KByte) 4096
Total PE 7557
Free PE 0
Allocated PE 7557
PV UUID 0gCmpE-FGel-9ayg-E2yg-kkEu-B72X-kFvaye
root@server1:~#
root@server1:~# vgdisplay
--- Volume group ---
VG Name server1
System ID
Format lvm2
Metadata Areas 1
Metadata Sequence No 4
VG Access read/write
VG Status resizable
MAX LV 0
Cur LV 3
Open LV 3
Max PV 0
Cur PV 1
Act PV 1
VG Size 29.52 GB
PE Size 4.00 MB
Total PE 7557
Alloc PE / Size 7557 / 29.52 GB
Free PE / Size 0 / 0
VG UUID PH5Hpc-jqeP-BFYs-wWlA-hu03-qwuQ-0cNIu3
root@server1:~#
root@server1:~# lvdisplay
--- Logical volume ---
LV Name /dev/server1/swap
VG Name server1
LV UUID RCeLCK-MO5p-xoMq-SwTT-n2NV-GaP6-GaemDp
LV Write Access read/write
LV Status available
# open 2
LV Size 1.00 GB
Current LE 256
Segments 1
Allocation inherit
Read ahead sectors auto
- currently set to 256
Block device 254:0
--- Logical volume ---
LV Name /dev/server1/root
VG Name server1
LV UUID 5Wen7n-xYmh-MQz1-fKH5-0XXa-1y2t-V3PYbb
LV Write Access read/write
LV Status available
# open 1
LV Size 19.53 GB
Current LE 5000
Segments 1
Allocation inherit
Read ahead sectors auto
- currently set to 256
Block device 254:1
--- Logical volume ---
LV Name /dev/server1/mysql
VG Name server1
LV UUID wk8yb6-fDl8-4tg3-tneT-1dDe-wWdy-AfGZ5I
LV Write Access read/write
LV Status available
# open 1
LV Size 8.99 GB
Current LE 2301
Segments 1
Allocation inherit
Read ahead sectors auto
- currently set to 256
Block device 254:2
root@server1:~#내 두 개의 하드 드라이브에 대한 개요는 다음과 같습니다:
root@server1:~# fdisk -l
Disk /dev/sda: 32.2 GB, 32212254720 bytes
255 heads, 63 sectors/track, 3916 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Disk identifier: 0x0009353f
Device Boot Start End Blocks Id System
/dev/sda1 * 1 62 497983+ 83 Linux
/dev/sda2 63 3916 30957255 5 Extended
/dev/sda5 63 3916 30957223+ 8e Linux LVM
Disk /dev/sdb: 10.7 GB, 10737418240 bytes
255 heads, 63 sectors/track, 1305 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Disk identifier: 0x00000000
Disk /dev/sdb doesn't contain a valid partition table
root@server1:~#2 /dev/sdb 준비하기
/dev/sdb에서 스냅샷을 생성하기 전에, 우리는 그것을 파티셔닝(리눅스 LVM)하고 우리의 볼륨 그룹(server1)에 추가해야 합니다.
이제 나는 파티션 /dev/sdb1을 만들고 그것을 server1 볼륨 그룹에 추가할 것입니다:
fdisk /dev/sdbserver1:~# fdisk /dev/sdb
Device contains neither a valid DOS partition table, nor Sun, SGI or OSF disklabel
Building a new DOS disklabel. Changes will remain in memory only,
until you decide to write them. After that, of course, the previous
content won’t be recoverable.
The number of cylinders for this disk is set to 1305.
There is nothing wrong with that,
but this is larger than 1024,
and could in certain setups cause problems with:
- software that runs at boot time (e.g., old versions of LILO)
- booting and partitioning software from other OSs
(e.g., DOS FDISK, OS/2 FDISK)
Warning: invalid flag 0x0000 of partition table 4 will be corrected by w(rite)
Command (m for help): <– n
Command action
e extended
p primary partition (1-4)
<– p
Partition number (1-4): <– 1
First cylinder (1-1305, default 1): <– [ENTER]
Using default value 1
Last cylinder or +size or +sizeM or +sizeK (1-1305, default 1305): <– [ENTER]
Using default value 1305
Command (m for help): <– t
Selected partition 1
Hex code (type L to list codes): <– 8e
Changed system type of partition 1 to 8e (Linux LVM)
Command (m for help): <– w
The partition table has been altered!
Calling ioctl() to re-read partition table.
Syncing disks.
pvcreate /dev/sdb1
vgextend server1 /dev/sdb1그게 전부입니다 - 우리는 그 위에 볼륨을 생성할 필요가 없습니다 - 이는 mylvmbackup에 의해 자동으로 수행됩니다.
3 mylvmbackup 설치 및 사용
Debian Squeeze는 mylvmbackup에 대한 패키지를 제공하므로, 우리는 다음과 같이 간단히 설치할 수 있습니다:
apt-get install mylvmbackupman mylvmbackup를 통해 사용 방법을 알아보세요(인노DB 테이블을 사용하는 경우 인노DB에 대한 부분을 주의 깊게 읽으세요).
mylvmbackup 구성 파일은 /etc/mylvmbackup.conf입니다. 따라서 명령줄에서 옵션을 지정하거나 해당 파일에서 지정할 수 있습니다(명령줄 옵션은 /etc/mylvmbackup.conf의 옵션을 덮어씁니다).
기본 백업 디렉토리는 /var/cache/mylvmbackup/backup입니다(다른 위치를 지정하지 않는 한).
MyISAM 테이블을 백업하기 위한 샘플 명령은 다음과 같습니다:
mylvmbackup --user=root --password=yourrootsqlpassword --mycnf=/etc/mysql/my.cnf --vgname=server1 --lvname=mysql --backuptype=tar인노DB의 경우:
mylvmbackup --user=root --password=yourrootsqlpassword --innodb_recover --skip_flush_tables --mycnf=/etc/mysql/my.cnf --vgname=server1 --lvname=mysql --backuptype=tar올바른 비밀번호, 볼륨 그룹 이름(여기서는 server1) 및 MySQL 데이터가 포함된 볼륨의 볼륨 이름(볼륨은 /dev/server1/mysql이므로 이름은 mysql)을 입력해야 합니다.
모든 것이 잘 진행되면 많은 출력이 표시됩니다:
root@server1:~# mylvmbackup --user=root --password=yourrootsqlpassword --mycnf=/etc/mysql/my.cnf --vgname=server1 --lvname=mysql --backuptype=tar
20120416 19:16:58 Info: Connecting to database...
20120416 19:16:58 Info: Flushing tables with read lock...
20120416 19:16:58 Info: Taking position record...
20120416 19:16:58 Info: Taking snapshot...
File descriptor 3 left open
Logical volume "mysql_snapshot" created
20120416 19:16:58 Info: Unlocking tables...
20120416 19:16:58 Info: Disconnecting from database...
20120416 19:16:58 Info: Mounting snapshot...
20120416 19:16:59 Info: Copying my.cnf...
20120416 19:16:59 Info: Taking actual backup...
20120416 19:16:59 Info: Creating tar archive /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
backup/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
backup/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_fakt_dep.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.frm
backup/mydb/help_tickets.frm
backup/mydb/multidoc_dep.MYD
backup/mydb/dns_nodes.MYD
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/mydb/isp_htaccess.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.MYD
backup/mydb/del_status.MYD
backup/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_isp_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.MYI
backup/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.frm
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: DONE
20120416 19:17:00 Info: Cleaning up...
20120416 19:17:00 Info: LVM Usage stats:
20120416 19:17:00 Info: LV VG Attr LSize Origin Snap% Move Log Copy% Convert
20120416 19:17:00 Info: mysql_snapshot server1 swi-a- 5.00G mysql 0.00
Logical volume "mysql_snapshot" successfully removed
root@server1:~#그 후, /var/cache/mylvmbackup/backup 디렉토리에서 백업을 찾을 수 있습니다(다른 위치를 지정하지 않은 경우):
ls -l /var/cache/mylvmbackup/backuproot@server1:~# 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
root@server1:~#tar.gz 파일에는 두 개의 디렉토리, 백업(데이터베이스와 /var/lib/mysql의 테이블이 포함되어 있으며, 데이터베이스 충돌 후 간단히 복사할 수 있음 - 이 작업을 수행할 때 데이터베이스는 중지되어야 함)과 backup-pos가 포함되어 있습니다. 이 디렉토리에는 my.cnf 파일이 포함되어 있습니다(/etc/mysql/my.cnf의 백업):
cd /var/cache/mylvmbackup/backup
tar xvfz backup-20120416_191658_mysql.tar.gz
ls -lroot@server1:/var/cache/mylvmbackup/backup# ls -l
total 256
drwxr-xr-x 5 mysql mysql 4096 2012-04-16 19:10 backup
-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 backup-pos
root@server1:/var/cache/mylvmbackup/backup#4 링크
- mylvmbackup: http://www.lenzg.net/mylvmbackup/
- MySQL: http://www.mysql.com/
- Debian: http://www.debian.org/
새 게시물을 받은 편지함에서 받기
스팸은 없습니다. 언제든지 구독 해지 가능합니다.