Mysql

特定數據庫日期的 MySQLdump

  • January 6, 2014

我是新來的,我真的不知道從哪裡開始,但這是我的擔憂。我需要每周備份一次在 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。

試一試 !!!

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