使用mysqldump命令備份恢復MySQL資料庫

来源:http://www.cnblogs.com/crxis/archive/2017/06/29/7094056.html
-Advertisement-
Play Games

使用mysqldump命令備份恢復MySQL資料庫: mysqldump -u user -p password database-name > backup.sql mysql -u root -p [dbname] < backup.sql ...


1、各種用法說明

     A. 最簡單的用法:

mysqldump -uroot -pPassword [database name] 
> [dump file]

     上述命令將指定資料庫備份到某dump文件(轉儲文件)中,比如:

mysqldump -uroot -p123 test > test.dump

     生成的test.dump文件中包含建表語句(生成資料庫結構哦)和插入數據的insert語句。

 

     B. --opt

     如果加上--opt參數則生成的dump文件中稍有不同:

     . 建表語句包含drop table if exists tableName

     . insert之前包含一個鎖表語句lock tables tableName write,insert之後包含unlock tables


     C. 跨主機備份

     使用下麵的命令可以將host1上的sourceDb複製到host2的targetDb,前提是host2主機上已經創建targetDb資料庫:

mysqldump --host=host1 --opt sourceDb| mysql --host=host2 -C targetDb

     -C指示主機間的數據傳輸使用數據壓縮

 

     D. 只備份表結構

mysqldump --no-data --databases mydatabase1 mydatabase2 mydatabase3 > test.dump

     將只備份表結構。--databases指示主機上要備份的資料庫。如果要備份某個MySQL主機上的所有資料庫可以使用--all-databases選項,如下:

mysqldump --all-databases
> test.dump

 

     E. 從備份文件恢複數據庫

mysql [database name] < [backup file name]

 

  備份多個資料庫

  語法:

mysqldump -u username -p --databases dbname2 dbname2 > Backup.sql

  加上了--databases選項,然後後面跟多個資料庫

mysqldump -u root -p --databases test mysql > D:\backup.sql

  備份所有資料庫

  mysqldump命令備份所有資料庫的語法如下:

mysqldump -u username -p -all-databases > BackupName.sql

  示例:

mysqldump -u -root -p -all-databases > D:\all.sql

 

 

2、結合Linux的cron命令實現定時備份

    比如需要在每天凌晨1:30備份某個主機上的所有資料庫並壓縮dump文件為gz格式,那麼可在/etc/crontab配置文件中加入下麵代碼行:

30 1 * * * root mysqldump -u root -pPASSWORD --all-databases | gzip > /mnt/disk2/database_`date '+%m-%d-%Y'`.sql.gz

    前面5個參數分別表示分鐘、小時、日、月、年,星號表示任意。date '+%m-%d-%Y'得到當前日期的MM-DD-YYYY格式。

 

3、一個完整的Shell腳本備份MySQL資料庫示例

複製代碼
#vi /backup/backup.sh

#!bin/bash
cd /backup
echo "You are in backup dir"
mv backup* /oldbackup
echo "Old dbs are moved to oldbackup folder"
File = backup-$Now.sql
mysqldump -u user -p password database-name > $File
echo "Your database backup successfully completed"
複製代碼

     上面腳本文件保存為backup.sh,並且系統中已經創建兩個目錄/olcbackup和/backup。每次執行backup.sh時都會先將/backup目錄下所有名稱為backup開頭的文件移到/oldbackup目錄。

      為上述腳本制定執行計劃如下:

#crontab -e
30 1 * * * /backup.sh

 

4、mysqldump全量備份+mysqlbinlog二進位日誌增量備份

    從mysqldump備份文件恢複數據會丟失掉從備份點開始的更新數據,所以還需要結合mysqlbinlog二進位日誌增量備份。確保my.ini或者my.cnf中包含下麵的配置以啟用二進位日誌,或者mysqld ---log-bin:

[mysqld]
log-bin=mysql-bin

    mysqldump命令必須帶上--flush-logs選項以生成新的二進位日誌文件:

mysqldump --single-transaction --flush-logs --master-data=2 > backup.sql

    這樣生成的增量二進位日誌文件比如為mysql-bin.000003,那麼恢複數據時如下:

1 2 shell> mysql -uroot -pPwd < backup_sunday_1_PM.sql shell> mysqlbinlog mysql-bin.000003 | mysql -uroot -pPwd

   此外mysqlbinlog還可以指定--start-date、--stop-date、--start-position和--stop-position參數,用於精確恢複數據到某個時刻之前或者跳過中間某個出問題時間段恢複數據,直接摘錄MySQL文檔說明中相關內容如下:

複製代碼
5.9.3.1. 指定恢復時間
對於MySQL 4.1.4,可以在mysqlbinlog語句中通過--start-date和--stop-date選項指定DATETIME格式的起止時間。舉例說明,假設在今天上午10:00(今天是2005年4月20日),執行SQL語句來刪除一個大表。要想恢復表和數據,你可以恢復前晚上的備份,並輸入:
mysqlbinlog --stop-date="2005-04-20 9:59:59" /var/log/mysql/bin.123456 \
     | mysql -u root -pmypwd
該命令將恢復截止到在--stop-date選項中以DATETIME格式給出的日期和時間的所有數據。如果你沒有檢測到幾個小時後輸入的錯誤的SQL語句,可能你想要恢復後面發生的活動。根據這些,你可以用起使日期和時間再次運行mysqlbinlog:

mysqlbinlog --start-date="2005-04-20 10:01:00" /var/log/mysql/bin.123456 \
     | mysql -u root -pmypwd \
在該行中,從上午10:01登錄的SQL語句將運行。組合執行前夜的轉儲文件和mysqlbinlog的兩行可以將所有數據恢復到上午10:00前一秒鐘。你應檢查日誌以確保時間確切。下一節介紹如何實現。

5.9.3.2. 指定恢複位置
也可以不指定日期和時間,而使用mysqlbinlog的選項--start-position和--stop-position來指定日誌位置。它們的作用與起止日選項相同,不同的是給出了從日誌起的位置號。使用日誌位置是更準確的恢復方法,特別是當由於破壞性SQL語句同時發生許多事務的時候。要想確定位置號,可以運行mysqlbinlog尋找執行了不期望的事務的時間範圍,但應將結果重新指向文本文件以便進行檢查。操作方法為:
mysqlbinlog --start-date="2005-04-20 9:55:00" --stop-date="2005-04-20 10:05:00" \
      /var/log/mysql/bin.123456 > /tmp/mysql_restore.sql
該命令將在/tmp目錄創建小的文本文件,將顯示執行了錯誤的SQL語句時的SQL語句。你可以用文本編輯器打開該文件,尋找你不要想重覆的語句。如果二進位日誌中的位置號用於停止和繼續恢復操作,應進行註釋。用log_pos加一個數字來標記位置。使用位置號恢復了以前的備份文件後,你應從命令行輸入下麵內容:

mysqlbinlog --stop-position="368312" /var/log/mysql/bin.123456 \
    | mysql -u root -pmypwd 
 
mysqlbinlog --start-position="368315" /var/log/mysql/bin.123456 \
    | mysql -u root -pmypwd \ 
上面的第1行將恢復到停止位置為止的所有事務。下一行將恢復從給定的起始位置直到二進位日誌結束的所有事務。因為mysqlbinlog的輸出包括每個SQL語句記錄之前的SET TIMESTAMP語句,恢復的數據和相關MySQL日誌將反應事務執行的原時間。
複製代碼

 


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • http://dev.mysql.com/doc/refman/5.7/en/resetting-permissions.html親測方法3,已成功重置密碼。(感謝@非常,告訴我官網就有重置方法,網上搜了一堆堆...另外,step1和2來源於http://www.2cto.com/database/ ...
  • 1、查找表中多餘的重覆記錄,重覆記錄是根據單個欄位(Id)來判斷 select * from 表 where Id in (select Id from 表 group byId having count(Id) > 1) 2、刪除表中多餘的重覆記錄,重覆記錄是根據單個欄位(Id)來判斷,只留有ro ...
  • ## ## 需求場景: 由於MySQL沒有類似於SQL SERVER那樣的系統表來存放備份記錄,且大規模的MySQL伺服器需要集中管理和查看。 伺服器出現性能問題或複製延遲時,需要先判斷是否由數據備份引起。 ## ## 第一版 按照需求,考慮到需要記錄的備份信息有備份伺服器信息、備份開始結束時間、備 ...
  • 知識點:EXISTS子查詢、NOT EXISTS子查詢、分頁查詢、UNION聯合查詢 一.單詞部分 ①exist存在②temp臨時的③district區域 ④content內容⑤temporary暫時的 二.預習部分 1.表連接都可以用子查詢替換嗎 是的 2.檢測某列是否存在某個範圍可以在子查詢中使 ...
  • 當跳轉到user頁面時,右邊的uiview是為空的,要點擊了左側的導航才能插入模板,如何在路由中設置二級視圖的預設顯示頁面呢? app.config(function($stateProvider, $urlRouterProvider) { $urlRouterProvider.when('', ...
  • 一.單詞部分 ①constraint約束②foreign外鍵③references參考 ④subquery子查詢⑤inner內部的⑥join連接 二.預習部分 1.修改表SQL語句的關鍵字是什麼 RENAME 修改表名CHANGE修改欄位 2.哪個關鍵字可以按指定行數返回查詢結果集 LIMIT 3. ...
  • 首先安裝MySQL: 一.單詞部分: ①networking網路②option選擇③port埠④firewall防火牆⑤engine引擎 ⑥standard標準⑦character字元⑧collation校對⑨stirage存儲 create 創建 drop 刪除 comment 評論 varia ...
  • 日前宣佈,其基於MySQL的關係型雲資料庫已經正式上線公測,用戶可通過易雲管理控制台創建、監控與管理mysql資料庫。此服務包括線上擴容、自動備份、靈活配置和監控告警等功能,旨在幫助用戶實現便捷的運維管理。 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...