<form id="hz9zz"></form>
  • <form id="hz9zz"></form>

      <nobr id="hz9zz"></nobr>

      <form id="hz9zz"></form>

    1. 明輝手游網中心:是一個免費提供流行視頻軟件教程、在線學習分享的學習平臺!

      MySQL什么是物理備份(lvm-snapshot)

      [摘要]本篇文章給大家帶來的內容是介紹MySQL什么是物理備份(lvm-snapshot)。有一定的參考價值,有需要的朋友可以參考一下,希望對你們有所幫助。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中文網其它相關文章!


      學習教程快速掌握從入門到精通的SQL知識。




      日韩精品一区二区三区高清