當(dāng)前位置:首頁(yè) > IT技術(shù) > 數(shù)據(jù)庫(kù) > 正文

Windows環(huán)境Mysql定時(shí)自動(dòng)批量備份數(shù)據(jù)庫(kù)
2021-10-18 17:46:39

1.編寫腳本


@title MySQL backup start 
@echo off
setlocal enabledelayedexpansion
@color 0a
:: --------------------參數(shù)設(shè)置------------------------
:: 設(shè)置時(shí)間變量
set YEAR=%date:~0,4%
set MONTH=%date:~5,2%
set DAY=%date:~8,2%
:: 如果在 dos 下輸入 time 返回的不是 24 小時(shí)制(沒(méi)有 0 填充),請(qǐng)自行修改此處 
set HOUR=%time:~0,2%
set MINUTE=%time:~3,2%
set SECOND=%time:~6,2%

set "Ymd=%YEAR%%MONTH%%DAY%"
:: 要備份的數(shù)據(jù)庫(kù)名稱,多個(gè)用空格分隔
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 自帶命令行工具的可執(zhí)行文件路徑,長(zhǎng)文件名注意用 Dos 長(zhǎng)文件名書寫方式
set WINRAR=C:Progra~1WinRARRar.exe
:: 備份天數(shù),會(huì)自動(dòng)刪除30天之前的數(shù)據(jù)
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已存在,無(wú)需創(chuàng)建
    ) else (
        echo 創(chuàng)建%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"
)
:: --------------------結(jié)束備份------------------------
@echo on

2.添加windows定時(shí)任務(wù)

? 2.1 Windows鍵+R,調(diào)出此窗口,輸入compmgmt.msc

2.2

img

2.3

2.4

2.5

2.6

2.7

2.8

2.9

3.附錄

3.1警告提示

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

3.2參數(shù)釋義,括號(hào)中為簡(jiǎn)寫

--host(-h)
需要導(dǎo)出的主機(jī)信息

--port(-P)
連接數(shù)據(jù)庫(kù)端口號(hào)

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

--password(-p)
連接數(shù)據(jù)庫(kù)密碼

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

--skip-opt
禁用–opt選項(xiàng).

--single-transaction
該選項(xiàng)在導(dǎo)出數(shù)據(jù)之前提交一個(gè)BEGIN SQL語(yǔ)句,BEGIN 不會(huì)阻塞任何應(yīng)用程序且能保證導(dǎo)出時(shí)數(shù)據(jù)庫(kù)的一致性狀態(tài)。它只適用于多版本存儲(chǔ)引擎,僅InnoDB。本選項(xiàng)和--lock-tables 選項(xiàng)是互斥的,因?yàn)長(zhǎng)OCK TABLES 會(huì)使任何掛起的事務(wù)隱含提交。要想導(dǎo)出大表的話,應(yīng)結(jié)合使用--quick 選項(xiàng)。

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

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

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

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

--ignore-table
不導(dǎo)出指定表。指定忽略多個(gè)表時(shí),需要重復(fù)多次,每次一個(gè)表。每個(gè)表必須同時(shí)指定數(shù)據(jù)庫(kù)和表名。例如:--ignore-table=database.table1 --ignore-table=database.table2 ……

--events(-E)
導(dǎo)出事件。

--routines(-R)
導(dǎo)出存儲(chǔ)過(guò)程以及自定義函數(shù)。

--lock-all-tables(-x)
提交請(qǐng)求鎖定所有數(shù)據(jù)庫(kù)中的所有表,以保證數(shù)據(jù)的一致性。這是一個(gè)全局讀鎖,并且自動(dòng)關(guān)閉--single-transaction 和--lock-tables 選項(xiàng)。

--lock-tables(-l)
開始導(dǎo)出前,鎖定所有表。用READ LOCAL鎖定表以允許MyISAM表并行插入。對(duì)于支持事務(wù)的表例如InnoDB和BDB,--single-transaction是一個(gè)更好的選擇,因?yàn)樗静恍枰i定表。請(qǐng)注意當(dāng)導(dǎo)出多個(gè)數(shù)據(jù)庫(kù)時(shí),--lock-tables分別為每個(gè)數(shù)據(jù)庫(kù)鎖定表。因此,該選項(xiàng)不能保證導(dǎo)出文件中的表在數(shù)據(jù)庫(kù)之間的邏輯一致性。不同數(shù)據(jù)庫(kù)表的導(dǎo)出狀態(tài)可以完全不同。

--add-drop-database
每個(gè)數(shù)據(jù)庫(kù)創(chuàng)建之前添加drop數(shù)據(jù)庫(kù)語(yǔ)句。

--add-drop-table
每個(gè)數(shù)據(jù)表創(chuàng)建之前添加drop數(shù)據(jù)表語(yǔ)句。(默認(rèn)為打開狀態(tài),使用--skip-add-drop-table取消選項(xiàng))

--add-locks
在每個(gè)表導(dǎo)出之前增加LOCK TABLES并且之后UNLOCK TABLE。(默認(rèn)為打開狀態(tài),使用--skip-add-locks取消選項(xiàng))

--allow-keywords
允許創(chuàng)建是關(guān)鍵詞的列名字。這由表名前綴于每個(gè)列名做到。

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

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

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

--compact
導(dǎo)出更少的輸出信息(用于調(diào)試)。去掉注釋和頭尾等結(jié)構(gòu)??梢允褂眠x項(xiàng):--skip-add-drop-table --skip-add-locks --skip-comments --skip-disable-keys

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

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

--create-options(-a)
在CREATE TABLE語(yǔ)句中包括所有MySQL特性選項(xiàng)。(默認(rèn)為打開狀態(tài))

--databases(-B)
導(dǎo)出幾個(gè)數(shù)據(jù)庫(kù)。參數(shù)后面所有名字參量都被看作數(shù)據(jù)庫(kù)名。

--default-character-set
設(shè)置默認(rèn)字符集,默認(rèn)值為utf8

--delayed-insert
采用延時(shí)插入方式(INSERT DELAYED)導(dǎo)出數(shù)據(jù)

--extended-insert(-e)
使用具有多個(gè)VALUES列的INSERT語(yǔ)法。這樣使導(dǎo)出文件更小,并加速導(dǎo)入時(shí)的速度。默認(rèn)為打開狀態(tài),使用--skip-extended-insert取消選項(xiàng)。

--fields-terminated-by
導(dǎo)出文件中忽略給定字段。與--tab選項(xiàng)一起使用,不能用于--databases和--all-databases選項(xiàng)

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

--flush-logs
開始導(dǎo)出之前刷新日志。

--flush-privileges
在導(dǎo)出mysql數(shù)據(jù)庫(kù)之后,發(fā)出一條FLUSH PRIVILEGES 語(yǔ)句。為了正確恢復(fù),該選項(xiàng)應(yīng)該用于導(dǎo)出mysql數(shù)據(jù)庫(kù)和依賴mysql數(shù)據(jù)庫(kù)數(shù)據(jù)的任何時(shí)候。

--force
在導(dǎo)出過(guò)程中忽略出現(xiàn)的SQL錯(cuò)誤。

--hex-blob
使用十六進(jìn)制格式導(dǎo)出二進(jìn)制字符串字段。如果有二進(jìn)制數(shù)據(jù)就必須使用該選項(xiàng)。影響到的字段類型有BINARY、VARBINARY、BLOB。

--insert-ignore
在插入行時(shí)使用INSERT IGNORE語(yǔ)句.

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

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

--max_allowed_packet
服務(wù)器發(fā)送和接受的最大包長(zhǎng)度。

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

--no-create-db(-n)
只導(dǎo)出數(shù)據(jù),而不添加CREATE DATABASE 語(yǔ)句。

--no-create-info(-t)
只導(dǎo)出數(shù)據(jù),而不添加CREATE TABLE 語(yǔ)句。

--no-data(-d)
不導(dǎo)出任何數(shù)據(jù),只導(dǎo)出數(shù)據(jù)庫(kù)表結(jié)構(gòu)。

--quick(-q)
不緩沖查詢,直接導(dǎo)出到標(biāo)準(zhǔn)輸出。默認(rèn)為打開狀態(tài),使用--skip-quick取消該選項(xiàng)。

--quote-names(-Q)
使用(`)引起表和列名。默認(rèn)為打開狀態(tài),使用--skip-quote-names取消該選項(xiàng)。

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

--set-charset
添加'SET NAMES default_character_set'到輸出文件。默認(rèn)為打開狀態(tài),使用--skip-set-charset關(guān)閉選項(xiàng)。

--dump-date
將導(dǎo)出時(shí)間添加到輸出文件中。默認(rèn)為打開狀態(tài),使用--skip-dump-date關(guān)閉選項(xiàng)。

--tab(-T)
為每個(gè)表在給定路徑創(chuàng)建tab分割的文本文件。注意:僅僅用于mysqldump和mysqld服務(wù)器運(yùn)行在相同機(jī)器上。

--triggers
導(dǎo)出觸發(fā)器。該選項(xiàng)默認(rèn)啟用,用--skip-triggers禁用它。

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

開通會(huì)員,享受整站包年服務(wù)立即開通 >