MySQL INTO OUTFILE varolan dosyayı overide?

4 Cevap php

Ben bir CSV dosyası oluşturur büyük bir sql komut dosyası yazdık. Ben yeni bir CSV dosyası oluşturun ve internet sitesinde kullanılabilir olması için her gece bir cronjob aramak istiyorum.

Örneğin ben '/ home / siteler / example.com / www / files / yedek kopyası.csv' dosyamı saklamak söylüyorlar

ve benim SQL olduğunu

SELECT * INTO OUTFILE '/home/sites/example.com/www/files/backup.csv'
  FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '"'
  LINES TERMINATED BY '\n'
  FROM ( ....

Dosya zaten varsa, MySQL bana bir hata veriyor

Dosya '/ home / siteler / example.com / www / files / yedek kopyası.csv' zaten var

MySQL dosyanın üzerine yapmak için bir yolu var mı?

Ben PHP yeniden oluşturmadan önce dosya varsa algılamak ve silmek olabilir ama ben MySQL doğrudan yapabilirsiniz eğer daha özlü olurdu.

4 Cevap

Hayır, üzerine yazmak için hiçbir yolu yoktur. Kimden docs:

file_name diğer şeyler arasında tahrip olmaktan vb / passwd ve veritabanı tabloları / gibi dosyaları engeller varolan bir dosya, olamaz.

Birden yedekleri olan bir gün daha var olan sorunlardan kurtarmak anlamına gelir gibi, her gece farklı bir dosya adı kullanmak daha iyi bir fikir olabilir. Daha sonra hep tamamlanmış en son csv de işaret eden bir sembolik bağ korumak olabilir.

Böyle bir iş için bir bash dosyası içine yerleştirmek istiyorum, dosyayı silmek

#!/bin/bash
rm /path/to/backup.csv
./backup_sql_query.sh  <<-- This contains the script to backup to CSV.

Daha iyi bir seçenek aslında olsa bir zaman damgası eklemek için. Disk alanı bu gün ve yaş pahalı değildir.

Tarihli bir soru tür, ama umarım bu kimse yardımcı olacaktır.

Sadece mysql içinde bir kabuk kaçmak ve bunu yazmaya çalışmadan önce dosyayı kaldırmak için rm komutunu çalıştırın. Örneğin:

Mysql> \! rm-f / home / siteler / example.com / www / files / yedek kopyası.csv

Tadını çıkarın!

Neden rm -f /home/sites/example.com/www/files/backup.csv komut cron tarafından koştu?

You can run this from inside mysql. Just escape to the shell with '!' For example:

Mysql> \! rm-f / home / siteler / example.com / www / files / yedek kopyası.csv