Mysql
特定數據庫日期的 MySQLdump
我是新來的,我真的不知道從哪裡開始,但這是我的擔憂。我需要每周備份一次在 Windows 下執行的 MySQL 數據庫。例如,每個星期五我需要將星期四創建的 MYSQL DB 備份並傳輸到另一台伺服器。
我使用以下命名創建了數據庫:YYMMDD_HHMM_dbname。
到目前為止,我已經嘗試了很多 mysqldump 選項,但無法獲得我想要的特定數據庫。
如果你們能幫助我,我將不勝感激。
與thks..
您的最佳選擇如下:
- STEP 01 : 創建一個 SQL 腳本來編寫一個 Windows 批處理文件
- STEP 02 : 執行 SQL 腳本創建 Windows 批處理文件
- STEP 03 : 執行 Windows 批處理文件
步驟 01
首先讓我們創建 SQL 文件。SQL 文件將有這些規則
- 查找截至今天的最後一個星期四
- 找到數據庫
- 如果今天是星期四並且您執行此腳本,則為之前的星期四選擇 DB
- 回顯 Windows 批處理文件,以
@echo off
這是Windows批處理文件
SET @dborigin='rolando'; SET @today = DATE(NOW()); SET @this_thurs = @today - INTERVAL WEEKDAY(@today) DAY - INTERVAL 3 DAY; SET @ut1 = UNIX_TIMESTAMP(@this_thurs); SET @ut2 = UNIX_TIMESTAMP(@today); SET @last_thurs = @this_thurs - INTERVAL IF(@ut1=@ut2,1,0) WEEK; SET @user = 'root'; SET @pass = 'password'; SET @dumpfile = 'C:\\TransferDB.sql'; SELECT '@echo off'; SET @SQL='SELECT CONCAT(''mysqldump -u'',@user,'' -p'',@pass,'' --routines --triggers '',db,'' > '',@dumpfile) mysqldump_command FROM (SELECT schema_name db FROM information_schema.schemata WHERE LEFT(schema_name,6) = DATE_FORMAT(@last_thurs,''%y%m%d'') AND RIGHT(schema_name,LENGTH(@dborigin))=@dborigin) A'; PREPARE s FROM @SQL; EXECUTE s; DEALLOCATE PREPARE s;
將 SQL 腳本另存為
C:\Make_mysqldump.sql
步驟 02 和 03
C:\> mysql -uroot -ppass -AN < C:\Make_mysqldump.sql > C:\Exec_mysqldump.bat C:\> C:\Exec_mysqldump.bat
我將展示步驟 01 和 02
示範
這是我的 Windows 機器上的數據庫
mysql> show databases; +---------------------+ | Database | +---------------------+ | information_schema | | 131128_1234_rolando | | 131129_1234_rolando | | 131130_1234_rolando | | 131203_1234_rolando | | 131204_1234_rolando | | 131205_1234_rolando | | 131206_1234_rolando | | alisha | | beercan | | musicdata | | mysql | | performance_schema | | test | +---------------------+ 14 rows in set (0.00 sec) mysql>
這是文本文件:
C:\>type Make_mysqldump.sql SET @dborigin='rolando'; SET @today = DATE(NOW()); SET @this_thurs = @today - INTERVAL WEEKDAY(@today) DAY - INTERVAL 3 DAY; SET @ut1 = UNIX_TIMESTAMP(@this_thurs); SET @ut2 = UNIX_TIMESTAMP(@today); SET @last_thurs = @this_thurs - INTERVAL IF(@ut1=@ut2,1,0) WEEK; SET @user = 'root'; SET @pass = 'password'; SET @dumpfile = 'C:\\TransferDB.sql'; SELECT '@echo off'; SET @SQL='SELECT CONCAT(''mysqldump -u'',@user,'' -p'',@pass,'' --routines --triggers '',db,'' > '',@dumpfile) mysqldump _command FROM (SELECT schema_name db FROM information_schema.schemata WHERE LEFT(schema_name,6) = DATE_FORMAT(@last_thur s,''%y%m%d'') AND RIGHT(schema_name,LENGTH(@dborigin))=@dborigin) A'; PREPARE s FROM @SQL; EXECUTE s; DEALLOCATE PREPARE s;
這是批處理文件及其內容的創建:
C:\>mysql -AN < C:\Make_mysqldump.sql > C:\Exec_mysqldump.bat C:\>type C:\Exec_mysqldump.bat @echo off mysqldump -uroot -ppassword --routines --triggers 131129_1234_rolando > C:\\TransferDB.sql C:\>
CAVEAT:剩下的留給你的想像力來執行 mysqldump 並
C:\TransferDB.sql
在目標數據庫伺服器上執行。試一試 !!!
更新 2013-12-06 18:51 EST
這是一個瘋狂的想法,需要一些肘部油脂
第1步
刪除 do 它的第一行
C:\Make_mysqldump.sql
如下所示:SET @today = DATE(NOW()); SET @this_thurs = @today - INTERVAL WEEKDAY(@today) DAY - INTERVAL 3 DAY; SET @ut1 = UNIX_TIMESTAMP(@this_thurs); SET @ut2 = UNIX_TIMESTAMP(@today); SET @last_thurs = @this_thurs - INTERVAL IF(@ut1=@ut2,1,0) WEEK; SET @user = 'root'; SET @pass = 'password'; SET @dumpfile = 'C:\\TransferDB.sql'; SELECT '@echo off'; SET @SQL='SELECT CONCAT(''mysqldump -u'',@user,'' -p'',@pass,'' --routines --triggers '',db,'' > '',@dumpfile) mysqldump_command FROM (SELECT schema_name db FROM information_schema.schemata WHERE LEFT(schema_name,6) = DATE_FORMAT(@last_thurs,''%y%m%d'') AND RIGHT(schema_name,LENGTH(@dborigin))=@dborigin) A'; PREPARE s FROM @SQL; EXECUTE s; DEALLOCATE PREPARE s;
第2步
創建一個新的批處理文件(呼叫它
C:\MakeBackupJob.bat
),其唯一目的是創建一個 dborigin 變數並附加其餘部分。它應該有以下幾行:@echo off echo set @dborigin='%1'; > C:\MakeJob_%1.sql type C:\Make_mysqldump.sql >> C:\MakeJob_%1.sql
結語
要使用
C:\MakeBackupJob.bat
,只需指定數據庫標記名稱。假設數據庫是rolando
,pamela
,dominique
,diamond
. 只需執行以下命令:C: cd \ MakeBackupJob.bat rolando MakeBackupJob.bat pamela MakeBackupJob.bat dominique MakeBackupJob.bat rolando
您應該在 C:\ 中有 4 個 SQL 文件
MakeJob_rolando.sql MakeJob_pamela.sql MakeJob_dominique.sql MakeJob_diamond.sql
現在,執行以下命令:
echo @echo off > C:\Exec_mysqldump.bat C:\>mysql -AN < C:\MakeJob_rolando.sql >> C:\Exec_mysqldump.bat C:\>mysql -AN < C:\MakeJob_pamela.sql >> C:\Exec_mysqldump.bat C:\>mysql -AN < C:\MakeJob_dominique.sql >> C:\Exec_mysqldump.bat C:\>mysql -AN < C:\MakeJob_diamond.sql >> C:\Exec_mysqldump.bat
現在,
C:\Exec_mysqldump.bat
包含 4 個用於分隔文件的 mysqldump。試一試 !!!