Mysql
如何刷新 innodb 表,複製文件,然後從 Windows bat 文件中解鎖表?
我可以成功執行“FLUSH TABLES myTable FOR EXPORT;” 在 MySql 工作台中。然後我可以複製我需要的 cfg 和 ibd 文件,然後我可以回到工作台並執行“UNLOCK TABLES”,一切都很好。但我想從 Windows 批處理文件中執行此操作。但是,如果我執行以下 bat 文件:
mysql -username u -password < prepareTableForCopy.txt
prepareTableForCopy.txt 包含以下內容:
use mydata; FLUSH TABLES myTable FOR EXPORT;
我沒有收到任何錯誤,但是當我查看數據文件夾時,我需要複製的文件不存在。似乎只要執行刷新並且腳本返回文件就消失了。
我該如何解決這個問題,以便實現我的目標,即擁有一個準備導出表的 .bat 文件,將正確的文件複製到另一個目錄。壓縮文件然後解鎖表?
你的問題是維持兩個會話
- 會話#1:鎖定表
- 會話#2:複製
.ibd
文件請注意以下事項
- 會話 #1 必須保持活動狀態才能持有鎖
- 會話 #1 必須保持足夠長的活動時間,以便會話 #2 複製
.ibd
文件執行步驟
- 會話 #1 在發出鎖後休眠 30 秒
- 暫停 5 秒,讓 Session #1 有時間鎖定表
- 會話 #2 複製 .ibd 文件
- 當 Session #1 終止時,鎖被隱式釋放(解鎖)
這使 Session #2 有 25 秒的時間來複製
.ibd
文件這是 Windows BAT 文件
@echo off rem rem Setup Path to MySQL Folders rem set BASE_FOLDER="C:\Program Files\MySQL\MySQL Server 5.6" set DATADIR=%BASE_FOLDER%\data rem rem Setup Path to .ibd file and Destination Folder rem set COPY_FROM_DB=mydata set TABLE_TO_COPY=mytable set IBD_TO_COPY=%DATADIR%\%COPY_FROM_DB%\%TABLE_TO_COPY%.ibd rem rem Setup Destination Folder rem set TARGET_FOLDER=D:\BackupFolder rem rem Setup MySQL Username and Password rem set MYSQL_USER=root set MYSQL_PASS=rootpassword set MYSQL_CONN=-u%MYSQL_USER% -p%MYSQL_PASS% rem rem Setup Session to Lock Table and Hold Lock for 30 seconds in the Background rem Pause 5 Seconds rem Perform Physical Copy rem set TIME_TO_SLEEP=30 set TIME_TO_PAUSE=5 set SQL=FLUSH TABLES %TABLE_TO_COPY% FOR EXPORT ; DO SLEEP(%TIME_TO_SLEEP%) start mysql %MYSQL_CONN% -D%COPY_FROM_DB% -ANe"%SQL%" mysql %MYSQL_CONN% -D%COPY_FROM_DB% -ANe"DO SLEEP(%TIME_TO_PAUSE%)" copy %IBD_TO_COPY% %TARGET_FOLDER%\.
試一試 !!!
注意:您可以更改
TIME_TO_SLEEP
,TIME_TO_PAUSE
如果複製需要超過 30 秒