天天看點

Windows環境Mysql定時自動批量備份資料庫

1.編寫腳本

@title MySQL backup start 
@echo off
setlocal enabledelayedexpansion
@color 0a
:: --------------------參數設定------------------------
:: 設定時間變量
set "Ymd=%date:~0,4%%date:~5,2%%date:~8,2%%time:~0,2%%time:~3,2%%time:~6,2%"
:: 要備份的資料庫名稱,多個用空格分隔
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 Files\MySQL\MySQL Server 5.7\bin\mysqldump.exe"
:: WinRAR 自帶指令行工具的可執行檔案路徑,長檔案名注意用 Dos 長檔案名書寫方式
set WINRAR=C:\Progra~1\WinRAR\Rar.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"
    cd %MYSQL%
    :: 備份
    %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

Windows環境Mysql定時自動批量備份資料庫

2.2

Windows環境Mysql定時自動批量備份資料庫

2.3

Windows環境Mysql定時自動批量備份資料庫

2.4

Windows環境Mysql定時自動批量備份資料庫

2.5

Windows環境Mysql定時自動批量備份資料庫

2.6

Windows環境Mysql定時自動批量備份資料庫

2.7

Windows環境Mysql定時自動批量備份資料庫

2.8

Windows環境Mysql定時自動批量備份資料庫

2.9

Windows環境Mysql定時自動批量備份資料庫

3.附錄

3.1警告提示

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

Windows環境Mysql定時自動批量備份資料庫

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

導出更少的輸出資訊(用于調試)。去掉注釋和頭尾等結構。可以使用選項:--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關閉選項。