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' identified 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.dict__major;
        select * from dict__major;
        +--------------+-----------------+
        | column_value | column_mean     |
        +--------------+-----------------+
        |            1 | 漢語言文學      |
        |            2 | 精算            |
        |            3 | 生物制葯        |
        |            4 | 材料化學        |
        |            5 | 商務英語        |
        |            6 | 考古            |
        |            7 | 外交            |
        |            8 | 導游            |
        +--------------+-----------------+

D、備份tempdb.dict__major 表
    1. 備份命令
        innobackupex --host=127.0.0.1 --user=backuper --password=backup123 --port=3306 --include='tempdb.dict__major' /tmp/tempdb
        
    2. 備份完成后會在備份目錄(/tmp/tempdb) 下生成用當前時間命名的目錄,里面保存的就是備份文件
        tree /tmp/tempdb/
        /tmp/tempdb/
        └── 2016-09-10_18-25-16
            ├── backup-my.cnf
            ├── ibdata1
            ├── tempdb
            │   ├── dict__major.frm
            │   └── dict__major.ibd
            ├── xtrabackup_binlog_info
            ├── xtrabackup_checkpoints
            ├── xtrabackup_info
            └── xtrabackup_logfile
            
E、備份完成后就可以刪除tempdb.dict__major表了(注意這里一定要保存一份表的定義,還原時會用到)
    mysql>drop table tempdb.dict__major;
    

            
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
            │   ├── dict__major.cfg
            │   ├── dict__major.exp
            │   ├── dict__major.frm
            │   └── dict__major.ibd
            ├── xtrabackup_binlog_info
            ├── xtrabackup_binlog_pos_innodb
            ├── xtrabackup_checkpoints
            ├── xtrabackup_info
            └── xtrabackup_logfile
            
G、還原tempdb.dict__major表
    1. 創建 tempdb.dict__major表
        create table dict__major(
            column_value tinyint not null,
            column_mean varchar(32) not null,
            constraint pk__dict__major primary key (column_value));
    2. 刪除 tempdb.dict__major的表空間文件
        alter table tempdb.dict__major discard tablespace;
        
    3. 把備份中的表空間文件復制到tempdb.dict__major 表空間應該在的位置
        cp /tmp/tempdb/2016-09-10_18-25-16/tempdb/dict__major.ibd /usr/local/mysql/data/tempdb/
        cp /tmp/tempdb/2016-09-10_18-25-16/tempdb/dict__major.exp /usr/local/mysql/data/tempdb/
        cp /tmp/tempdb/2016-09-10_18-25-16/tempdb/dict__major.cfg /usr/local/mysql/data/tempdb/
        chown -R mysql:mysql /usr/local/mysql/data/tempdb/*
        
    4. 導入表空間文件
        alter table tempdb.dict__major import tablespace;
        
    5. 查看dict__major表恢復情況
        select * from dict__major;
        +--------------+-----------------+
        | 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.dict__major表
    1.
        mysqldump --host=127.0.0.1 --port=3306 --user=dumper --password=dumper123 --quick tempdb dict__major >/tmp/tempdb.dict__major.sql
    
C: 刪除已經備份的表
    1.
        mysql>drop table tempdb.dict__major;
        
D:還原tempdb.dict__major表
    1.
        mysql -uroot -pxxxxx -h127.0.0.1 -p3306 tempdb </tmp/tempdb.dict__major.sql
        
E:檢證還原的有效性
    1.
        select * from dict__major;
        +--------------+-----------------+
        | column_value | column_mean     |
        +--------------+-----------------+
        |            1 | 漢語言文學      |
        |            2 | 精算            |
        |            3 | 生物制葯        |
        |            4 | 材料化學        |
        |            5 | 商務英語        |
        |            6 | 考古            |
        |            7 | 外交            |
        |            8 | 導游            |
        +--------------+-----------------+

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM