使用LVM快照進行數據庫備份

mysql> show global varibable like '%log%';

sql_log_bin 是否記錄二進制日誌

mysql> set sql_log_bin=off; 臨時關閉二進制日誌


mysql> show master status;查看二進制日誌

mysql> show binlog events in 'mysql-bin.000001'; 查看指定二進制文件內容


還原數據庫時先關閉二進制文件

mysql> set sql_log_bin=off; 

mysql> \. /root/students.sql


mysqldump

 --database DB1,DB2,...

 --all-databases


MyISAM:溫備份

 --lock-all-tables

 --lock-tables


InnoDB:熱備份

  --single-transaction

  

  --flush-logs

  --events 備份事件

  --routines存儲過程和存儲函數

  --triggers觸發器

  

  --master-data{0|1|2}


邏輯備份:

   1.浮點數據丟失精度

   2.備份出來的數據可能比原數據大,壓縮以後可大大節省空間

   3.不適合對大數據庫做完全備份

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

對InnoDB:溫備

mysql> flush tables with read lock ;

等待後臺同步到數據文件後

show engine innodb status; 查看後臺數據同步情況 Ibuf:


mvcc,repeatable-read 多版本併發控制

      --single-transaction



此還原不寫入2進制日誌:

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

select * into outfile '/tmp/t1.txt' from t1; 備份

create table t1s like t1;先創建一張表結構相同的空表

load data infile '/tmp/t1.txt'into table t1s;還原

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


# mysqlbinlog '/mydata/data/mysql-bin.00001'

#at 605

# mysqlbinlog --start-position=605  /mydata/data/mysql-bin.00001 > /root/a.sql 從605開始到結束 從新執行一遍 並保存下來


create table tutors like  tutor; 創建一張新表

truncte table tutor;清空表裏的數據


set sql_log_bin=0; 關閉二進制日誌

# source /root/a.sql;  恢復


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


幾乎熱備: LVM 

  snapshot:

  

  前提:

     1.數據文件要在邏輯捲上

     2.此邏輯卷所在卷組必須有足夠空間使用快照卷

     3.數據文件和事務日誌要在同一個捲上


  步驟:

     1.打開會話施加讀鎖名鎖定所有表;

       mysql> flush tables  with read lock;

       mysql> flush logs;

     2.通過另一個終端,保存二進制日誌文件及相關位置信息;

       $ mysql -uroot -p -e `show master status\G` >  /path/to/master.info

     3.創建快照卷

       #lvcreate -L # -s -p r -n LV_NAME /path/to/source_lv

     4.釋放鎖

        mysql> unlock tables;

     5.掛載快照卷,備份

        mount

         cp

     6.刪除快照卷

     7.增量備份二進制日誌 


load data infile '/tmp/tutor.txt' info table tutors;

start transaction 啓動事務

use jiaowu;

desc tuors;

insert into tutors (Tname) value ('stu001');



select @@tx_isolation; 查看隔離級別


commit;提交事務


flush tables with read lock; 刷新表,並以只讀方式鎖表

執行完以後

flush logs;刷新日誌


show master status; 確保當前二進制文件信息的位置


# mysql -e  'show master status\G' > /backup/master-`date +%F`.info 


創建快照卷,只讀,大小50M

# lvcreate -L 50M -s -p r -n mydata-snap /dev/myvg/mydata


unlock tables;釋放鎖


mount /dev/myvg/mydata/mydata-snap /mnt -o ro 掛載


mkdir /backup/full-backup-2016-10-21/

[root@localhost data]# cp -a ./* /backup/full-backup-2016-10-21

umount /mnt

lvremove --force /dev/myvg/mydata-snap 刪除快照

刪除備份文件裏的二進制日誌


cat /backup/master-2016-10-21.info


事件掛文件了 就要基於事件來做限定

mysqlbinlog --start-datetime='2016-10-21 11:10:10' mysql-bin.00003 mysql-bin.00004 > /backup/incremental-`date +%F-%H-%M-%S`.sql;


[root@localhost data]# rm -rf ./* 刪除數據

# cp -a /backup/full-backup-2016-10-21/* /mydata/data


# server mysqld start


mysql > set sql_log_bin=0

mysql > soure /backup/incremental -...





發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章