使用mysqldump對數據庫備份

 mysqldump是一個簡單而有效的數據庫備份程 序,它會將需要備份的數據庫的結構轉換爲mysql語言組成的一個文本文件,這個文本文件包含了創建這個數據庫所進行的所有mysql語句,所以當我們恢 復時,便是程序讀取這些語句重新創建數據庫、創建表以及插入數據的過程,但因爲其是單線程的,所以對於比較大的數據庫操作會比較慢。

mysqldump支持InnoDB熱備,MyISAM的溫備,可以基於二進制日誌進行增量備份,根據二進制文件文件中記錄的操作點進行有選擇的恢復。

mysqldump命令介紹

語法:

        mysqldump [OPTIONS] database [tables]:備份單個庫,或庫指定的一個或多個表

mysqldump [OPTIONS] –databases [OPTIONS] DB1 [DB2 DB3…]:備份一個或多個庫

mysqldump [OPTIONS] –all-databases [OPTIONS]:備份所有庫

其他選項:

        -x, –lock-all-tables:鎖定所有表

 -l, –lock-tables:鎖定備份的表,這兩個選項可用於MyISAM和InnoDB的溫備

        –single-transaction:啓動一個大的單一事務實現備份,實現對InnoDB的熱備

        –flush-logs:備份前,請求到鎖之後滾動日誌,可用於實現備份後二進制日誌寫入到新的日誌文件,便於進行二進制日誌備份時尋找恢復點

        –master-data=[0|1|2]:用於確定是否在備份文件中添加CHANGE MASTER語句,0:不記錄;1:記錄爲CHANGE MASTER語句;2:記錄爲註釋的CHANGE MASTER語句;CHANGE MASTER語句記錄了備份的操作記錄處於哪個日誌文件的哪個位置上,加上此選項備份時將打開–lock-all-tables選項,備份完成會自動關閉–lock-all-tables選項。

mysqldump備份以及恢復步驟

請求鎖:可使用–lock-all-tables,如果使用了–master-data=1|2,則不須指定此項,如果爲InnoDB則使用–single-transaction選項實現熱備

滾動日誌:可使用選項–flush-logs

實驗過程:

修改mariadb的配置文件,將日誌文件單獨存放在日誌目錄

創建所需要的目錄

mkdir /mydata/binlog[root@node1 ]# chown -R mysql.mysql /mydata/mkdir /backup

導入實驗用數據庫

[root@node1 ~]# mysql  < /tem/hellodb.sql


MariaDB [(none)]> USE hellodb;Database changedMariaDB [hellodb]> SHOW TABLES;+-------------------+| Tables_in_hellodb |+-------------------+| classes           || coc               || courses           || scores            || students          || teachers          || toc               |+-------------------+7 rows in set (0.00 sec)

備份數據庫

[root@node1 ~]# mysqldump --database hellodb --flush-logs --master-data=2 > /backup/backup1.sql

備份完之後我們在對數據進行操作

  1. MariaDB [hellodb]> CREATE TABLE city (id int auto_increment not null primary key,code varchar(30)); 

  2. Query OK, 0 rows affected (0.21 sec)


  3. MariaDB [hellodb]> SHOW TABLES;

  4. +-------------------+

  5. | Tables_in_hellodb |

  6. +-------------------+

  7. | city              |

  8. | classes           |

  9. | coc               |

  10. | courses           |

  11. | scores            |

  12. | students          |

  13. | teachers          |

  14. | toc               |

  15. +-------------------+

  16. 8 rows in set (0.01 sec)

新的表已經添加到數據庫中,我們模擬刪除hellodb數據庫

  1. MariaDB [hellodb]> DROP DATABASE hellodb;

  2. Query OK, 8 rows affected (0.20 sec)


  3. MariaDB [(none)]> SHOW DATABASES;

  4. +--------------------+

  5. | Database           |

  6. +--------------------+

  7. | information_schema |

  8. | mysql              |

  9. | performance_schema |

  10. | test               |

  11. +--------------------+

  12. 4 rows in set (0.01 sec)

        如 果現在就恢復我們備份的文件是不能恢復備份之後進行的操作的,所以現在我們需要二進制文件裏進行定點恢復,爲了確定恢復點,首先導出全部的二進制文件,這 裏所使用的二進制文件是在我們備份之後產生的,因爲我們備份是使用的–flush-logs,所以日誌文件在備份之後重新生成了一個

[root@node1 binlog]# mysqlbinlog mysql-bin.000003 > /backup/bin3.sql[root@node1 binlog]# vim /backup/bin3.sql

由此可以看出我們刪除數據庫是在586這個點,所以我們就可以以586作爲導出二進制文件的停止點

[root@node1 binlog]# mysqlbinlog --stop-position=586 /mydata/binlog/mysql-bin.000003 > /backup/bin586.sql

現在我們開始恢復數據庫

[root@node1 ~]# mysql < /backup/backup1.sql

查看數據庫

MariaDB [(none)]> USE hellodb;Database changedMariaDB [hellodb]> SHOW TABLES;+-------------------+| Tables_in_hellodb |+-------------------+| classes           || coc               || courses           || scores            || students          || teachers          || toc               |+-------------------+7 rows in set (0.01 sec)

此時並沒有我們創建的city表

下面就可以使用二進制文件進行恢復操作了

[root@node1 ~]# mysql < /backup/bin586.sql

再來看一下,表city已經回來了

  1. MariaDB [(none)]> USE hellodb;

  2. Database changed

  3. MariaDB [hellodb]> SHOW DATABASES;

  4. +--------------------+

  5. | Database           |

  6. +--------------------+

  7. | hellodb            |

  8. | information_schema |

  9. | mysql              |

  10. | performance_schema |

  11. | test               |

  12. +--------------------+

  13. 5 rows in set (0.00 sec)


  14. MariaDB [hellodb]> SHOW TABLES;

  15. +-------------------+

  16. | Tables_in_hellodb |

  17. +-------------------+

  18. | city              |

  19. | classes           |

  20. | coc               |

  21. | courses           |

  22. | scores            |

  23. | students          |

  24. | teachers          |

  25. | toc               |

  26. +-------------------+

  27. 8 rows in set (0.01 sec) 

這樣我們就完成了一次數據誤刪除並 根據備份以及二進制文件恢復的過程,從這裏可以看出二進制文件是很重要的,所以需要將二進制文件單獨放在一個存儲的地方,儘量不要和數據庫放在一個磁盤 中,當然備份的數據也要專門存放,這樣數據庫出現意外或者數據庫磁盤損壞,就可以通過備份和二進制文件恢復了。


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