#php #mysql
#php #mysql
Вопрос:
Как я могу это сделать? Можно ли это сделать с помощью заданий cron? Если да, то где я могу прочитать о том, как это сделать?
Мне нужно выгружать данные из моей базы данных в файл CSV каждые столько-то часов. Я хочу, чтобы файл CSV был сохранен в папку на сервере. Возможно ли это вообще с MySQL? Я был бы признателен за любую помощь в этом.
Ответ №1:
Если у вас есть надлежащий доступ к серверу, я предлагаю mysqldump
выполнить задание cron.
Прочитайте больше об использовании mysqldump для вывода CSV-файла.
Комментарии:
1. 1, согласен, и mysqldump выполняет дампы лучше, чем mysqladmin, и уже существует действительно хороший скрипт для выполнения хороших резервных копий sourceforge.net/projects/automysqlbackup
Ответ №2:
PHP не нужен. Вы можете запланировать периодический запуск запроса через задание cron и вывод в CSV, используя код, подобный следующему:
SELECT col1, col2, col3 FROM table WHERE whatever='whatever' INTO OUTFILE 'reports/result.csv'
FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '"'
ESCAPED BY ‘\’
LINES TERMINATED BY 'n'
С приведенным выше запросом, сохраненным в файле, команда cron будет выглядеть следующим образом
mysql -u username -p password < filewiththequery.sql
Если вам нужно выгрузить всю базу данных таким образом, чтобы ее можно было повторно импортировать в базу данных, используйте mysqldump
вместо этого.
Комментарии:
1. Это входит в файл задания cron?
2. Если ваш запрос длинный, сохраните его в
.sql
файле и вызовите файл из команды cron. Полная запись в crontab будет выглядеть следующим образом:0 * * * * mysql -u username -p password < filewiththequery.sql
предполагая, что она выполняется в начале каждого часа.3. ОК. Разве мне не нужно включать имя таблицы в мой SQL?
4. @shummel7845 извините, да, вам нужна полная инструкция SQL перед
INTO OUTFILE 'filename.csv'
редактированием выше.
Ответ №3:
создайте скрипт со следующим в нем:
select * into outfile '/tmp/data.csv'
поля, завершающиеся символом ‘,’ закрываются символом ‘»‘
экранировано »
строки, заканчивающиеся ‘n’
из таблицы;
чтобы запланировать задание crontab -u username -e
0 24/4 * * * пользовательское скриптоимя
Это должно давать вам дамп каждые 6 часов.
Вам нужно будет ознакомиться с каким-нибудь языком сценариев, чтобы предоставлять уникальное имя вашей инструкции mysql при каждом ее запуске.
Комментарии:
1. Я хочу, чтобы он перезаписал старую работу, поэтому, если я использую ваш код как есть, не будет ли он этого делать?