首頁  >  文章  >  資料庫  >  詳細介紹mysql針對單張表的備份與還原的範例程式碼

詳細介紹mysql針對單張表的備份與還原的範例程式碼

黄舟
黄舟原創
2017-03-18 13:55:351185瀏覽

下面小編就為大家帶來一篇淺談mysql 針對單張表的備份與還原。小編覺得蠻不錯的,現在就分享給大家,也給大家做個參考。一起跟著小編過來看看吧

A、MySQL 備份工具xtrabackup 的安裝

1. percona 官方xtrabackup 的二進位版本;二進位版本解壓縮就能用了。

2. 解壓縮xtrabackup & 建立連線

tar -xzvf percona-xtrabackup-2.3.4-
Linux
-x86_64.tar.gz -C /usr/local/
ln -s /usr/local/percona-xtrabackup-2.3.4 /usr/local/xtrabackup

3. 設定PATH環境變數
##

export PATH=/usr/local/xtrabackup/bin/:$PATH

#B、在mysql資料庫中建立一個使用者備份的使用者& 授權

#1. 建立使用者

    create user backuper@'localhost' ident
if
ied by 'backup123';
        create user backuper@'127.0.0.1' identified by 'backup123';

2. 授權

grant reload,lock tables,replication client,process,
super
 on *.* to 'backuper'@'localhost';
        grant create,insert,select on percona_schema.xtrabackup_history to 'backuper'@'localhost';
        grant reload,lock tables,replication client,process,super on *.* to 'backuper'@'127.0.0.1';
        grant create,insert,select on percona_schema.xtrabackup_history to 'backuper'@'127.0.0.1';

C、備份前的檢查,這一步的主要目地是在之後做還原作業時,驗證還原是不是有效;(生產是沒有這一步驟的,

1.

select * from tempdb.dictmajor;   
select * from dictmajor;
        +--------------+-----------------+        
        | column_value | column_mean     |        
        +--------------+-----------------+        
        |            1 | 汉语言文学      |        
        |            2 | 精算            |        
        |            3 | 生物制药        |        
        |            4 | 材料化学        |        
        |            5 | 商务英语        |        
        |            6 | 考古            |        
        |            7 | 外交            |        
        |            8 | 导游            |        
        +--------------+-----------------+

D、備份tempdb.dictmajor 表

#1. 備份指令

innobackupex --host=127.0.0.1 --user=backuper --password=backup123 --port=3306 --include='tempdb.dictmajor' /tmp/tempdb

#2. 備份完成後會在備份目錄(/tmp/tempdb) 下產生目前時間命名的目錄,裡面保存的是備份檔案

   tree /tmp/tempdb/
        /tmp/tempdb/
        └── 2016-09-10_18-25-16
            ├── backup-my.cnf
            ├── ibdata1
            ├── tempdb
            │   ├── dictmajor.frm
            │   └── dictmajor.ibd
            ├── xtrabackup_binlog_info
            ├── xtrabackup_checkpoints
            ├── xtrabackup_info
            └── xtrabackup_logfile

           


#E、備份完成後刪除E、備份完成後就可以刪除

刪除

tempdb.dictmajor表了(注意這裡一定要保存一份表的定義,還原時會用到)

mysql>drop table tempdb.dictmajor;

F、為了得到一個一致的備份集在還原作業前還要進行一次日誌的前滾和回滾

#1. 前滾&回滾日誌

innobackupex --apply-log --export /tmp/tempdb/2016-09-10_18-25-16/

2.  與前滾& 回滾前的比較

  tree /tmp/tempdb/
        /tmp/tempdb/
        └── 2016-09-10_18-25-16
            ├── backup-my.cnf
            ├── ibdata1
            ├── ib_logfile0
            ├── ib_logfile1
            ├── tempdb
            │   ├── dictmajor.cfg
            │   ├── dictmajor.exp
            │   ├── dictmajor.frm
            │   └── dictmajor.ibd
            ├── xtrabackup_binlog_info
            ├── xtrabackup_binlog_pos_innodb
            ├── xtrabackup_checkpoints
            ├── xtrabackup_info
            └── xtrabackup_logfile
            

##、還原tempdb.dictmajor表

1. 建立tempdb.dictmajor表

  create table dictmajor(
        column_value tinyint not null,
        column_mean varchar(32) not null,
        constraint pkdictmajor primary key (column_value));

2. 刪除tempdb.dictmajor的表空間檔

alter table tempdb.dictmajor discard tablespace;

3. 把備份中的表空間檔案複製到tempdb.dictmajor 表空間應該在的位置


   cp /tmp/tempdb/2016-09-10_18-25-16/tempdb/dictmajor.ibd /usr/local/mysql/data/tempdb/
        cp /tmp/tempdb/2016-09-10_18-25-16/tempdb/dictmajor.exp /usr/local/mysql/data/tempdb/
        cp /tmp/tempdb/2016-09-10_18-25-16/tempdb/dictmajor.cfg /usr/local/mysql/data/tempdb/
        chown -R mysql:mysql /usr/local/mysql/data/tempdb/*
       

4. 導入表空間檔案

alter table tempdb.dictmajor import tablespace;

#5. 檢視dictmajor表恢復情況

      select * from dictmajor;
        +--------------+-----------------+
        | column_value | column_mean     |
        +--------------+-----------------+
        |            1 | 汉语言文学      |
        |            2 | 精算            |
        |            3 | 生物制药        |
        |            4 | 材料化学        |
        |            5 | 商务英语        |
        |            6 | 考古            |
        |            7 | 外交            |
        |            8 | 导游            |
        +--------------+-----------------+

- -------------------------------------------------- ------------

上一節用的是xtrabackup 對錶進行備份,它的應用場景是單表的資料量大且在備份的過程中還要支持對錶的寫入操作;也就是說在目前的場景下mysqldump 這個簡單的

備份工具也是可以滿足要求的;現給出mysqldump 備份的一般步驟


A:創建備份用戶


1.       

  create user dumper@'127.0.0.1' identified by 'dumper123';
        grant select on *.* to dumper@'127.0.0.1';
        grant show view on *.* to dumper@'127.0.0.1';
        grant lock tables on *.* to dumper@'127.0.0.1';
        grant trigger on *.* to dumper@'127.0.0.1';
       


B:備份tempdb.dictmajor表

1.

mysqldump --host=127.0.0.1 --port=3306 --user=dumper --password=dumper123 --quick tempdb dictmajor >/tmp/tempdb.dictmajor.sql


##C: 刪除已備份的表

1.

mysql>drop table tempdb.dictmajor;

#D:還原tempdb.dictmajor表

1.

mysql -uroot -pxxxxx -h127.0.0.1 -p3306 tempdb </tmp/tempdb.dictmajor.sql

E:檢證還原的有效性

#########1.###select * from dictmajor;###
   +--------------+-----------------+
        | column_value | column_mean     |
        +--------------+-----------------+
        |            1 | 汉语言文学      |
        |            2 | 精算            |
        |            3 | 生物制药        |
        |            4 | 材料化学        |
        |            5 | 商务英语        |
        |            6 | 考古            |
        |            7 | 外交            |
        |            8 | 导游            |
        +--------------+-----------------+

以上是詳細介紹mysql針對單張表的備份與還原的範例程式碼的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn