Mysql

如何刷新 innodb 表,複製文件,然後從 Windows bat 文件中解鎖表?

  • October 10, 2015

我可以成功執行“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_SLEEPTIME_TO_PAUSE如果複製需要超過 30 秒

引用自:https://dba.stackexchange.com/questions/117635