• 當前位置:首頁 > IT技術 > 數據庫 > 正文

    Windows環境Mysql定時自動批量備份數據庫
    2021-10-18 17:46:39

    1.編寫腳本


    @title MySQL backup start 
    @echo off
    setlocal enabledelayedexpansion
    @color 0a
    :: --------------------參數設置------------------------
    :: 設置時間變量
    set YEAR=%date:~0,4%
    set MONTH=%date:~5,2%
    set DAY=%date:~8,2%
    :: 如果在 dos 下輸入 time 返回的不是 24 小時制(沒有 0 填充),請自行修改此處 
    set HOUR=%time:~0,2%
    set MINUTE=%time:~3,2%
    set SECOND=%time:~6,2%
    
    set "Ymd=%YEAR%%MONTH%%DAY%"
    :: 要備份的數據庫名稱,多個用空格分隔
    set DATABASES=data1 data2
    :: HOST IP
    set HOST=127.0.0.1
    :: PROT 端口
    set PROT=3306
    :: MySQL 用戶名
    set USERNAME=root
    :: MySQL 密碼
    set PASSWORD=123456
    :: MYSQLDUMP 目錄
    set MYSQLDUMP="C:Program FilesMySQLMySQL Server 5.7inmysqldump.exe"
    :: WinRAR 自帶命令行工具的可執行文件路徑,長文件名注意用 Dos 長文件名書寫方式
    set WINRAR=C:Progra~1WinRARRar.exe
    :: 備份天數,會自動刪除30天之前的數據
    set DT=30
    :: 備份放置的盤,加 
    set BACKUP_PATH=D:
    :: 備份放置的路徑,加 
    set FILE=Backup
    :: --------------------開始備份------------------------
    for %%D in (%DATABASES%) do (
         if exist %BACKUP_PATH%%FILE%%%D (
            echo 目錄%BACKUP_PATH%%FILE%%%D已存在,無需創建
        ) else (
            echo 創建%BACKUP_PATH%%FILE%%%D        
            md %BACKUP_PATH%%FILE%%%D
        )
        :: 刪除
        forfiles /p "%BACKUP_PATH%%FILE%%%D" /m %%D_*.sql -d -%DT% /c "cmd /c del /f @path"
        :: 備份
        %MYSQLDUMP%  --opt --single-transaction=TRUE --user=%USERNAME% --password=%PASSWORD% --host=%HOST% --protocol=tcp --port=%PROT% --default-character-set=utf8mb4 --single-transaction=TRUE --routines --events "%%D" >"%BACKUP_PATH%%FILE%%%D\%%D_%Ymd%.sql"
    )
    :: --------------------結束備份------------------------
    @echo on
    

    2.添加windows定時任務

    ? 2.1 Windows鍵+R,調出此窗口,輸入compmgmt.msc

    2.2

    img

    2.3

    2.4

    2.5

    2.6

    2.7

    2.8

    2.9

    3.附錄

    3.1警告提示

    該提示不影響文件生成,是一個不建議你在命令行中出現明文密碼的警告。

    3.2參數釋義,括號中為簡寫

    --host(-h)
    需要導出的主機信息

    --port(-P)
    連接數據庫端口號

    --user(-u)
    指定連接的用戶名。

    --password(-p)
    連接數據庫密碼

    --opt
    等同于--add-drop-table, --add-locks, --create-options, --quick, --extended-insert, --lock-tables, --set-charset, --disable-keys 該選項默認開啟, 可以用--skip-opt禁用.

    --skip-opt
    禁用–opt選項.

    --single-transaction
    該選項在導出數據之前提交一個BEGIN SQL語句,BEGIN 不會阻塞任何應用程序且能保證導出時數據庫的一致性狀態。它只適用于多版本存儲引擎,僅InnoDB。本選項和--lock-tables 選項是互斥的,因為LOCK TABLES 會使任何掛起的事務隱含提交。要想導出大表的話,應結合使用--quick 選項。

    --protocol
    使用的連接協議,包括:tcp, socket, pipe, memory.

    --all-tablespaces(-Y)
    導出全部表空間。

    --tables
    覆蓋--databases (-B)參數,指定需要導出的表名。

    --no-tablespaces(-y)
    不導出任何表空間信息。

    --ignore-table
    不導出指定表。指定忽略多個表時,需要重復多次,每次一個表。每個表必須同時指定數據庫和表名。例如:--ignore-table=database.table1 --ignore-table=database.table2 ……

    --events(-E)
    導出事件。

    --routines(-R)
    導出存儲過程以及自定義函數。

    --lock-all-tables(-x)
    提交請求鎖定所有數據庫中的所有表,以保證數據的一致性。這是一個全局讀鎖,并且自動關閉--single-transaction 和--lock-tables 選項。

    --lock-tables(-l)
    開始導出前,鎖定所有表。用READ LOCAL鎖定表以允許MyISAM表并行插入。對于支持事務的表例如InnoDB和BDB,--single-transaction是一個更好的選擇,因為它根本不需要鎖定表。請注意當導出多個數據庫時,--lock-tables分別為每個數據庫鎖定表。因此,該選項不能保證導出文件中的表在數據庫之間的邏輯一致性。不同數據庫表的導出狀態可以完全不同。

    --add-drop-database
    每個數據庫創建之前添加drop數據庫語句。

    --add-drop-table
    每個數據表創建之前添加drop數據表語句。(默認為打開狀態,使用--skip-add-drop-table取消選項)

    --add-locks
    在每個表導出之前增加LOCK TABLES并且之后UNLOCK TABLE。(默認為打開狀態,使用--skip-add-locks取消選項)

    --allow-keywords
    允許創建是關鍵詞的列名字。這由表名前綴于每個列名做到。

    --apply-slave-statements
    在'CHANGE MASTER'前添加'STOP SLAVE',并且在導出的最后添加'START SLAVE'。

    --character-sets-dir
    字符集文件的目錄

    --comments
    附加注釋信息。默認為打開,可以用--skip-comments取消

    --compact
    導出更少的輸出信息(用于調試)。去掉注釋和頭尾等結構??梢允褂眠x項:--skip-add-drop-table --skip-add-locks --skip-comments --skip-disable-keys

    --complete-insert(-c)
    使用完整的insert語句(包含列名稱)。這么做能提高插入效率,但是可能會受到max_allowed_packet參數的影響而導致插入失敗。

    --compress(-C)
    在客戶端和服務器之間啟用壓縮傳遞所有信息

    --create-options(-a)
    在CREATE TABLE語句中包括所有MySQL特性選項。(默認為打開狀態)

    --databases(-B)
    導出幾個數據庫。參數后面所有名字參量都被看作數據庫名。

    --default-character-set
    設置默認字符集,默認值為utf8

    --delayed-insert
    采用延時插入方式(INSERT DELAYED)導出數據

    --extended-insert(-e)
    使用具有多個VALUES列的INSERT語法。這樣使導出文件更小,并加速導入時的速度。默認為打開狀態,使用--skip-extended-insert取消選項。

    --fields-terminated-by
    導出文件中忽略給定字段。與--tab選項一起使用,不能用于--databases和--all-databases選項

    --fields-enclosed-by
    輸出文件中的各個字段用給定字符包裹。與--tab選項一起使用,不能用于--databases和--all-databases選項

    --flush-logs
    開始導出之前刷新日志。

    --flush-privileges
    在導出mysql數據庫之后,發出一條FLUSH PRIVILEGES 語句。為了正確恢復,該選項應該用于導出mysql數據庫和依賴mysql數據庫數據的任何時候。

    --force
    在導出過程中忽略出現的SQL錯誤。

    --hex-blob
    使用十六進制格式導出二進制字符串字段。如果有二進制數據就必須使用該選項。影響到的字段類型有BINARY、VARBINARY、BLOB。

    --insert-ignore
    在插入行時使用INSERT IGNORE語句.

    --lines-terminated-by
    輸出文件的每行用給定字符串劃分。與--tab選項一起使用,不能用于--databases和--all-databases選項。

    --log-error
    附加警告和錯誤信息到給定文件

    --max_allowed_packet
    服務器發送和接受的最大包長度。

    --net_buffer_length
    TCP/IP和socket連接的緩存大小。

    --no-create-db(-n)
    只導出數據,而不添加CREATE DATABASE 語句。

    --no-create-info(-t)
    只導出數據,而不添加CREATE TABLE 語句。

    --no-data(-d)
    不導出任何數據,只導出數據庫表結構。

    --quick(-q)
    不緩沖查詢,直接導出到標準輸出。默認為打開狀態,使用--skip-quick取消該選項。

    --quote-names(-Q)
    使用(`)引起表和列名。默認為打開狀態,使用--skip-quote-names取消該選項。

    --replace
    使用REPLACE INTO 取代INSERT INTO.

    --set-charset
    添加'SET NAMES default_character_set'到輸出文件。默認為打開狀態,使用--skip-set-charset關閉選項。

    --dump-date
    將導出時間添加到輸出文件中。默認為打開狀態,使用--skip-dump-date關閉選項。

    --tab(-T)
    為每個表在給定路徑創建tab分割的文本文件。注意:僅僅用于mysqldump和mysqld服務器運行在相同機器上。

    --triggers
    導出觸發器。該選項默認啟用,用--skip-triggers禁用它。

    本文摘自 :https://www.cnblogs.com/

    開通會員,享受整站包年服務
    国产呦精品一区二区三区网站|久久www免费人咸|精品无码人妻一区二区|久99久热只有精品国产15|中文字幕亚洲无线码