mysqldump的簡單用法及其原理
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的簡單用法及其原理