-1

私の小さなバックアップシステムを自動化するために、私は今苦労しています。なんとかコードを集めましたが、作ることができません。

SET @sql_text = 
   CONCAT (
   "SELECT * FROM commandes INTO OUTFILE 'Y:/folder/Archives/BDD-commandes-CSV"
   , DATE_FORMAT( NOW(), '%Y%m%d')
   , "commandes.csv'"
);

PREPARE s1 FROM @sql_text;

CREATE EVENT BackUpCSV
ON SCHEDULE EVERY 1 HOUR
STARTS CURRENT_TIMESTAMP + INTERVAL 1 DAY
ENDS CURRENT_TIMESTAMP + INTERVAL 1 YEAR
DO
  BEGIN
    EXECUTE s1;
  END |

DROP PREPARE s1;

これが私がやろうとしたことです。実際には空白行である 7 行目にエラーが見つかります ('#1064 - SQL 構文にエラーがあります。MySQL サーバーのバージョンに対応するマニュアルを参照して、7 行目の近くで使用する正しい構文を確認してください。 ')

この助けをいただければ幸いです。どうも

4

2 に答える 2

1

区切り文字がすべてです。コンパイルに適したバージョンは次のとおりです。

SET @sql_text = 
   CONCAT (
   "SELECT * FROM commandes INTO OUTFILE 'Y:/folder/Archives/BDD-commandes-CSV"
   , DATE_FORMAT( NOW(), '%Y%m%d')
   , "commandes.csv'"
);

PREPARE s1 FROM @sql_text;

delimiter |

CREATE EVENT BackUpCSV
ON SCHEDULE EVERY 1 HOUR
STARTS CURRENT_TIMESTAMP + INTERVAL 1 DAY
ENDS CURRENT_TIMESTAMP + INTERVAL 1 YEAR
DO
  BEGIN
    EXECUTE s1;
  END |

delimiter ;

DROP PREPARE s1;

また、追加することをお勧めしますdrop event if exists BackUpCSV |

ps。このスクリプトが機能するかどうかはわかりません

于 2012-10-16T17:36:31.517 に答える
0

そのためには、シェル スクリプトまたはコマンド ラインを使用することをお勧めします。このようなもの:

#!/bin/bash

mysqldump --add-drop-table -h <hostname> -u <username> --password=<password> --all-databases > filename.sql
filename="filename.sql."`eval date +%Y%m%d`".tgz"
tar -czf $filename filename.sql 
rm filename.sql 

これをファイルに保存し、そのファイルを cron ジョブとして実行できます。必要に応じて、同じスクリプトを使用してそのアーカイブ ファイルを別のシステムにプッシュすることもできます。

もちろん、この場合、データベース資格情報をプレーン ファイルに保存していることを理解する必要があります。しかし、誰かがファイルシステムにアクセスできる場合、その人はあなたがまったく同じことをしているアプリケーション構成ファイルを見つけると確信しています。

于 2012-10-16T17:44:51.297 に答える