1. 程式人生 > >mysqldump的簡單用法及其原理

mysqldump的簡單用法及其原理

tar 實現 業務 sna 觀察 utf ppa ner mys

mysqldump
生產備份:
  搭建主從: mysqldump -A -B -R --master-data=2 >backup.sql

  備份單庫(包含建庫語句): mysqldump -B 數據庫名 --single-transaction >db.sql

  備份單庫:(不包含建庫語句):mysqldump db_name --single-transaction >db_date.sql

  備份表的數據及結構:mysqldump -u username -ppassword database --tables table_name1 table_name2 table_name3 >create_date.sql

  備份指定表的結構:mysqldump -u username -ppassword -d database --tables table_name1 table_name2 table_name3 >create_table.sql

  備份指定表的數據:mysqldump -u username -ppassword -t database --tables table_name1 table_name2 table_name3 >table_data.sql

  數據庫中,某些表除外,其余表都需導出
    mysqldump -h IP -u username -ppassword --default-character-set=utf8
    --database database_name --ignore-table=database_name.table_name1
    --ignore-table=database_name.table_name2 --ignore-table=database_name.table_name3 >ignore_table.sql
恢復:
  對應好服務器、數據庫
  source backup.sql;

mysqldump的原理:(可以在dump時自行打開general log,觀察日誌的輸出)

  1. mysqldump的本質是通過select * from tab來獲取表的數據的。

  2. START TRANSACTION /*!40100 WITH CONSISTENT SNAPSHOT */必須放到FLUSH TABLES WITH READ LOCK和UNLOCK TABLES之間,放到之前會造成START   TRANSACTION /*!40100 WITH CONSISTENT SNAPSHOT */和FLUSH TABLES WITH READ LOCK之間執行的DML語句丟失,放到之後,會造成從庫重復插入數據。

  3. mysqldump只適合放到業務低峰期做,如果備份的過程中數據操作很頻繁,會造成Undo表空間越來越大,undo表空間默認是放到共享表空間中的,而ibdata的特性是一旦增大,就不會收縮。

  4. mysqldump的效率還是比較低下,START TRANSACTION /*!40100 WITH CONSISTENT SNAPSHOT */只能等到所有表備份完後才結束,其實效率比較高的做法是備份完一張表就提交一次,這樣可盡快釋放Undo表空間快照占用的空間。但這樣做,就無法實現對所有表的一致性備份。

mysqldump的簡單用法及其原理