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/sdb

server1:~# 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:

  1. software that runs at boot time (e.g., old versions of LILO)
  2. 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 mylvmbackup
man 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/backup
root@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 -l
root@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 링크

Share: X/Twitter LinkedIn

새 게시물을 받은 편지함에서 받기

스팸은 없습니다. 언제든지 구독 해지 가능합니다.