搜尋
首頁資料庫mysql教程MySQL什麼是實體備份(lvm-snapshot)

這篇文章帶給大家的內容是介紹MySQL什麼是實體備份(lvm-snapshot)。有一定的參考價值,有需要的朋友可以參考一下,希望對你們有幫助。

lvm-snapshot(工具備份)

優點:

幾乎是熱備(穿件快照前把表上鎖,創建完成後立即釋放)

#支援所有引擎
  • 備份速度快
  • 不需要使用昂貴的商業軟體(它是作業系統層級的)
  • 缺點:

#可能需要跨部門協作(使用作業系統層級的命令,DBA一般沒有權限)

無法預期服務停止時間

#資料如果分佈在多個磁碟區上比較麻煩(針對儲存層級而言)

#邏輯磁碟區快照的原則

為什麼選擇lvm快照備份?

原因:因為鎖定表的時間不一致,在鎖定表的瞬間是不能寫入的,對其進行快照備份,備份完成後立即解鎖,然後服務可以正常使用(寫入等操作)例如資料量大的時候,做快照一下子就拍了,然後立即解鎖,就不影響寫入等操作。如果用mysqldump備份,那麼資料量大的時候,鎖定表時間長,就會影響效率。

操作流程
  • 1、flush table with read locak;   
    2、create snapshot  
    3、show master status; show slave status; [可选]
    4、unlock tables;
    5、Copy files from the snapshot
    6、Unmount the snapshot. 
    7、Remove snapshot
    快照备份:
    1.迁移数据到逻辑卷(不是必须,视情况而定)
    2.锁表(时间)
    3.给数据库所在的逻辑卷拍快照
    4.解锁
    5.将快照挂载到临时挂载点上
    6.将快照上的所有数据拷贝到相应的备份目录里(不同主机)
    7.卸载快照并删除
#lvm備份範例

  • #一、資料移轉到邏輯磁碟區上
     環境:資料檔案不在邏輯磁碟區上,那麼就需要將資料檔案移轉到邏輯磁碟區上
  • ##1 、建立一個邏輯磁碟區
    [root@Admin ~]# pvcreate /dev/sdb
    [root@Admin ~]# vgcreate vg01 /dev/sdb
    [root@Admin ~]# lvcreate -n lv_mysql -L 4G vg01
    [root@Admin ~]# mkfs.ext4 /dev/mapper/vg01-lv_mysql
  • 2、將目前的mysql資料庫移轉到邏輯磁碟區上
##
1>先停止应用
2>停止mysql服务
[root@Admin ~]# service mysqld stop
3>备份所有的数据文件到指定的地方
[root@Admin ~]# tar -czvf /tmp/backmysql/mysql.tar.gz /data/DB/*
4>挂载逻辑卷到当前mysql的数据目录里
[root@Admin ~]# mount /dev/mapper/vg01-lv_mysql /data/DB/
5>将刚刚备份的数据解压到数据目录里
[root@Admin ~]# tar xf /tmp/backmysql/mysql.tar.gz -C /data/DB/
[root@Admin ~]# mv /data/DB/data/DB/* /data/DB/ && rm -rf /data/DB/data/
6>启动数据库
[root@Admin ~]# service mysqld start
此处启动失败原因/data/DB/数据目录的权限变成了root,
更改权限重新启动
[root@Admin ~]# chown mysql. -R /data/DB/ && service mysqld start
     
  • 二、快照備份資料庫

  •  1、新增讀取資料庫
  • mysql> flush table with read lock;

  • 2、給mysql的資料庫所在的邏輯磁碟區建立快照
  • [root@Admin ~]# lvcreate -n lv_mysql_s -L 50M -s /dev/vg01/lv_mysql
    [root@Admin ~]# dmsetup --tree ls
    vg01-lv_mysql (253:0)
     └─vg01-lv_mysql-real (253:1)
        └─ (8:16)
    vg01-lv_mysql_s (253:3)
     ├─vg01-lv_mysql_s-cow (253:2)
     │  └─ (8:16)
     └─vg01-lv_mysql-real (253:1)
        └─ (8:16)

  • #3、解鎖資料庫
  • [root@Admin ~]# unlock tables

上面1~3步驟可以合併為一步
  • [root@Admin ~]# echo "flush tables with read lock; system lvcreate -n lv_mysql_s -L 50M -s /dev/vg01/lv_mysql;unlock tables;" |mysql -p123

4、將快照掛載到暫存目錄裡

[root@Admin ~]# mkdir /mnt/mysql && mount /dev/vg01/lv_mysql_s /mnt/mysql/

5、備份資料

[root@Admin ~]# ls /mnt/mysql/    # 可以看到新的挂载目录里面的数据
Admin.pid  db01     ib_logfile0  mysql             mysql-bin.000003  mysql-bin.000006  mysql-bin.000009  performance_schema
auto.cnf   db02     ib_logfile1  mysql-bin.000001  mysql-bin.000004  mysql-bin.000007  mysql-bin.000010  test
binlog     ibdata1  login        mysql-bin.000002  mysql-bin.000005  mysql-bin.000008  mysql-bin.index
[root@Admin ~]# mkdir /backup && rsync -av /mnt/mysql /backup

6、解除安裝快照並刪除

[root@Admin ~]# umount /mnt/mysql/ && lvremove /dev/vg01/lv_mysql_s

7、測試驗證(將資料目錄裡面的東西全部刪除)接著再將備份的資料目錄還原過來

#####
    1>我们来点狠的,直接把mysql的数据目录/data/DB/删除。
    [root@Admin ~]# rm -rf /data/DB/* && ls /data/DB/
    2>删除后可以看到重启mysql直接报错了
    [root@Admin ~]# service mysqld restart 
    MySQL server PID file could not be found!                  [失败]
    Starting MySQL...The server quit without updating PID file [失败]/DB/Admin.pid).
    3>根据上面的/backup里面备份的数据进行恢复
    [root@Admin ~]# mv /backup/mysql/* /data/DB/
    [root@Admin ~]# ls /data/DB/
    auto.cnf  db02         ib_logfile1  mysql-bin.000001  mysql-bin.000004  mysql-bin.000007  mysql-bin.000010    test
    binlog    ibdata1      login        mysql-bin.000002  mysql-bin.000005  mysql-bin.000008  mysql-bin.index
    db01      ib_logfile0  mysql        mysql-bin.000003  mysql-bin.000006  mysql-bin.000009  performance_schema
    4>重新启动
    [root@Admin ~]# chown mysql. /data/DB/ -R 
    [root@Admin ~]# service mysqld restart
    这里权限更改了如果启动还是报错的话,查看下是否mysql进程还存在,如果存在,将其kill掉再重启就OK
    [root@Admin ~]# mysql -p123
    mysql> show databases;
    +--------------------+
    | Database           |
    +--------------------+
    | information_schema |
    | binlog             |
    | db01               |
    | db02               |
    | login              |
    | mysql              |
    | performance_schema |
    | test               |
    +--------------------+
rows in set (0.00 sec)
### # #####將上面備份整理為腳本Crontab 排程任務定時完成備份#########
#!/bin/bash
#LVM BackMysql
back_dir=/backup/`date +%F`
[ -d $back_dir ]  mkdir -p $back_dir
echo "flush tables with read lock; system lvcreate -n lv_mysql_s -L 50M -s /dev/vg01/lv_mysql;unlock tables;" |mysql -p123
mount /dev/vg01/lv_mysql_s /mnt/mysql/
rsync -a /mnt/mysql/ $back_dir
if [ $? -eq 0 ];then
    umount /mnt/mysql/ && lvremove -f /dev/vg01/lv_mysql_s
fi
#########自動化實作快照備份mylvmbackup########## ###1、安裝對應的軟體######2、兩種備份方式######  1>mylvmbackup    xxx終端機備份######  2>修改設定檔指定對應的參數## #
正常安装MySQL:
1. 安装系统
2. 准备LVM,例如 /dev/vg_back/lv-mysql,mount /usr/local/mysql
3. 源码安装MySQL到 /usr/local/mysql

可选操作: 将现在的数据迁移到LVM
1. 准备lvm及文件系统
# lvcreate -L 2G -n lv-mysql vg_back
# mkfs.ext4 /dev/vg_back/lv-mysql
 
2. 将数据迁移到LVM
# service mysqld stop
# mount /dev/vg_back/lv-mysql /u01/ //临时挂载点
# rsync -va /usr/local/mysql/ /u01/ //将MySQL原数据镜像到临时挂载点

# umount /u01/
# mount /dev/vg_back/lv-mysql /usr/local/mysql //加入fstab开机挂载
# df -Th
/dev/mapper/vg_back-lv-mysql ext4 2.0G 274M 1.7G 15% /usr/local/mysql
# service mysqld start

手动基于LVM快照实现备份:
1. 加锁
mysql> flush table with read lock;

2.创建快照
# lvcreate -L 500M -s -n lv-mysql-snap /dev/vg_back/lv-mysql
# mysql -uroot -p123 -e 'show master status' > /backup/`date +%F`_position.txt
或者
mysql> show master status;
+-------------------+----------+--------------+------------------+-------------------+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
+-------------------+----------+--------------+------------------+-------------------+
| mysqld-bin.00003 | 135 | | | |
+-------------------+----------+--------------+------------------+-------------------+

3. 释放锁
mysql> unlock tables;

4. 从快照中备份
# mount -o ro /dev/vg_back/lv-mysql-snap /u01/
# mkdir /backup/`date +%F`
# rsync -a /u01/ /backup/2015-07-02/

5. 移除快照
# umount /u01/
# lvremove -f /dev/vg_back/lv-mysql-snap

脚本 + Cron完成:
#!/bin/bash
#LVM backmysql...
back_dir=/backup/`date +%F`

[ -d $back_dir ] || mkdir -p $back_dir

mysql -uroot -p123 -e 'flush table with read lock'
lvcreate -L 500M -s -n lv-mysql-snap /dev/vg_back/lv-mysql
mysql -uroot -p123 -e 'show master status' |grep mysql > $back_dir/position.txt
mysql -uroot -p123 -e 'flush logs'
mysql -uroot -p123 -e 'unlock tables'

mount -o ro /dev/vg_back/lv-mysql-snap /u01

rsync -a /u01/ $back_dir

if [ $? -eq 0 ];then
umount /u01/
lvremove -f /dev/vg_back/lv-mysql-snap
fi
===============================================================
mylvmbackup

功能:利用LVM快照实现物理备份,即LVM快照备份的自动版

安装perl模块
1. 在线安装
http://www.lenzg.net/mylvmbackup
它依赖于perl 模块,可用以下命令安装
perl -MCPAN -e 'install Config::IniFiles'

2. 离线安装
# rpm -ivh mylvmbackup-0.16-0.noarch.rpm
warning: mylvmbackup-0.16-0.noarch.rpm: Header V4 DSA/SHA1 Signature, key ID b27291f2: NOKEY
error: Failed dependencies:
perl(Config::IniFiles) is needed by mylvmbackup-0.16-0.noarch
perl(Date::Format) is needed by mylvmbackup-0.16-0.noarch
perl(File::Copy::Recursive) is needed by mylvmbackup-0.16-0.noarch

解决:
# yum -y localinstall atrpms-77-1.noarch.rpm perl-File-Copy-Recursive-0.38-1.el6.rfx.noarch.rpm perl-IO-stringy-2.110-1.2.el6.rfx.noarch.rpm perl-Config-IniFiles-2.56-1.el6.rf.noarch.rpm

安装mylvmbackup软件包
# yum -y install mylvmbackup-0.15-0.noarch.rpm 解决依赖关系perl-TimeDate

备份方法一:
# mylvmbackup --user=root --password=123 --host=localhost --mycnf=/etc/my.cnf --vgname=vg_back --lvname=lv-mysql --backuptype=tar --lvsize=100M --backupdir=/backup

# tar xf backup-20140903_000236_mysql.tar.gz
# ls
backup backup-cnf-20150702_000236_mysql
backup-20150702_000236_mysql.tar.gz backup-pos

备份方法二:
# vim /etc/mylvmbackup.conf
[mysql] #连接数据库配置
user=root
password=123456
host=localhost
port=3306
socket=/tmp/mysql.sock
mycnf=/etc/my.cnf
[lvm] #LVM逻辑卷的配置
vgname=vg_server #卷组名称
lvname=lv_mysql #逻辑卷名称
backuplv=mysql_snap #快照卷名称
lvsize=500M
[fs] #文件系统配置
xfs=0
mountdir=/var/tmp/mylvmbackup/mnt/ #挂载目录
backupdir=/backup #备份目录,也可以备份到行程主机
[misc] #定义备份选项
backuptype=tar #定义备份的类型
backupretention=0
prefix=backup #定义备份文件名前缀
suffix=_mysql #定义备份文件名后缀
tararg=cvf #定义tar参数,默认为cvf
tarfilesuffix=.tar.gz #定义备份文件后缀名格式
datefmt=%Y%m%d_%H%M%S #定义备份文件名时间戳格式
keep_snapshot=0 #是否保留snaphot
keep_mount=0 #是否卸载snaphot
quiet=0 #定义记录日志类型
注释:其他配置保持输入即可

然后直接执行mylvmbackup即可

mylvmbackup 参考示例

以上是MySQL什麼是實體備份(lvm-snapshot)的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述
本文轉載於:博客园。如有侵權,請聯絡admin@php.cn刪除
解釋InnoDB緩衝池及其對性能的重要性。解釋InnoDB緩衝池及其對性能的重要性。Apr 19, 2025 am 12:24 AM

InnoDBBufferPool通過緩存數據和索引頁來減少磁盤I/O,提升數據庫性能。其工作原理包括:1.數據讀取:從BufferPool中讀取數據;2.數據寫入:修改數據後寫入BufferPool並定期刷新到磁盤;3.緩存管理:使用LRU算法管理緩存頁;4.預讀機制:提前加載相鄰數據頁。通過調整BufferPool大小和使用多個實例,可以優化數據庫性能。

MySQL與其他編程語言:一種比較MySQL與其他編程語言:一種比較Apr 19, 2025 am 12:22 AM

MySQL与其他编程语言相比,主要用于存储和管理数据,而其他语言如Python、Java、C 则用于逻辑处理和应用开发。MySQL以其高性能、可扩展性和跨平台支持著称,适合数据管理需求,而其他语言在各自领域如数据分析、企业应用和系统编程中各有优势。

學習MySQL:新用戶的分步指南學習MySQL:新用戶的分步指南Apr 19, 2025 am 12:19 AM

MySQL值得學習,因為它是強大的開源數據庫管理系統,適用於數據存儲、管理和分析。 1)MySQL是關係型數據庫,使用SQL操作數據,適合結構化數據管理。 2)SQL語言是與MySQL交互的關鍵,支持CRUD操作。 3)MySQL的工作原理包括客戶端/服務器架構、存儲引擎和查詢優化器。 4)基本用法包括創建數據庫和表,高級用法涉及使用JOIN連接表。 5)常見錯誤包括語法錯誤和權限問題,調試技巧包括檢查語法和使用EXPLAIN命令。 6)性能優化涉及使用索引、優化SQL語句和定期維護數據庫。

MySQL:初學者的基本技能MySQL:初學者的基本技能Apr 18, 2025 am 12:24 AM

MySQL適合初學者學習數據庫技能。 1.安裝MySQL服務器和客戶端工具。 2.理解基本SQL查詢,如SELECT。 3.掌握數據操作:創建表、插入、更新、刪除數據。 4.學習高級技巧:子查詢和窗口函數。 5.調試和優化:檢查語法、使用索引、避免SELECT*,並使用LIMIT。

MySQL:結構化數據和關係數據庫MySQL:結構化數據和關係數據庫Apr 18, 2025 am 12:22 AM

MySQL通過表結構和SQL查詢高效管理結構化數據,並通過外鍵實現表間關係。 1.創建表時定義數據格式和類型。 2.使用外鍵建立表間關係。 3.通過索引和查詢優化提高性能。 4.定期備份和監控數據庫確保數據安全和性能優化。

MySQL:解釋的關鍵功能和功能MySQL:解釋的關鍵功能和功能Apr 18, 2025 am 12:17 AM

MySQL是一個開源的關係型數據庫管理系統,廣泛應用於Web開發。它的關鍵特性包括:1.支持多種存儲引擎,如InnoDB和MyISAM,適用於不同場景;2.提供主從復制功能,利於負載均衡和數據備份;3.通過查詢優化和索引使用提高查詢效率。

SQL的目的:與MySQL數據庫進行交互SQL的目的:與MySQL數據庫進行交互Apr 18, 2025 am 12:12 AM

SQL用於與MySQL數據庫交互,實現數據的增、刪、改、查及數據庫設計。 1)SQL通過SELECT、INSERT、UPDATE、DELETE語句進行數據操作;2)使用CREATE、ALTER、DROP語句進行數據庫設計和管理;3)複雜查詢和數據分析通過SQL實現,提升業務決策效率。

初學者的MySQL:開始數據庫管理初學者的MySQL:開始數據庫管理Apr 18, 2025 am 12:10 AM

MySQL的基本操作包括創建數據庫、表格,及使用SQL進行數據的CRUD操作。 1.創建數據庫:CREATEDATABASEmy_first_db;2.創建表格:CREATETABLEbooks(idINTAUTO_INCREMENTPRIMARYKEY,titleVARCHAR(100)NOTNULL,authorVARCHAR(100)NOTNULL,published_yearINT);3.插入數據:INSERTINTObooks(title,author,published_year)VA

See all articles

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

AI Hentai Generator

AI Hentai Generator

免費產生 AI 無盡。

熱工具

DVWA

DVWA

Damn Vulnerable Web App (DVWA) 是一個PHP/MySQL的Web應用程序,非常容易受到攻擊。它的主要目標是成為安全專業人員在合法環境中測試自己的技能和工具的輔助工具,幫助Web開發人員更好地理解保護網路應用程式的過程,並幫助教師/學生在課堂環境中教授/學習Web應用程式安全性。 DVWA的目標是透過簡單直接的介面練習一些最常見的Web漏洞,難度各不相同。請注意,該軟體中

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

SublimeText3 英文版

SublimeText3 英文版

推薦:為Win版本,支援程式碼提示!

ZendStudio 13.5.1 Mac

ZendStudio 13.5.1 Mac

強大的PHP整合開發環境

PhpStorm Mac 版本

PhpStorm Mac 版本

最新(2018.2.1 )專業的PHP整合開發工具