Во-первых, я собираюсь предположить, что вы не в состоянии просто скопировать каталог данных /, потому что если вы затем используете существующий снимок / резервного копирования / восстановления, вероятно, будет достаточно (и протестируйте свои процедуры резервного копирования / восстановления всделка).
В этом случае, если две таблицы имеют одинаковую структуру, как правило, самый быстрый и, как ни странно, самый простой подход - использовать SELECT ... INTO OUTFILE ... на одном конце и LOADDATA INFILE ... с другой стороны.
См. http://dev.mysql.com/doc/refman/5.1/en/load-data.html и ... / select.html для получения подробной информации.
Для тривиальных таблиц будет работать следующее:
SELECT * FROM mytable INTO OUTFILE '/tmp/mytable.csv'
FIELDS TERMINATED BY ','
OPTIONALLY ENCLOSED BY '"'
ESCAPED BY '\\\\'
LINES TERMINATED BY '\\n' ;
LOAD DATA INFILE '/tmp/mytable.csv' INTO TABLE mytable
FIELDS TERMINATED BY ','
OPTIONALLY ENCLOSED BY '"'
ESCAPED BY '\\\\'
LINES TERMINATED BY '\\n' ;
Мы также использовали большие возможности FIFO, чтобы избежать накладных расходов на фактическую запись на диск или, если нам по какой-то причине нужно записать на диск, для передачи его через gzip.
т. е.
mkfifo /tmp/myfifo
gzip -c /tmp/myfifo > /tmp/mytable.csv.gz &
... SEL
ECT... INTO OUTFILE '/tmp/myfifo' .....
wait
gunzip -c /tmp/mytable.csv.gz > /tmp/myfifo &
... LOAD DATA INFILE /tmp/myfifo .....
wait
По сути, если вы перенаправляете данные таблицы в FIFO, вы можете сжимать их, разбирать их или туннелировать через сеть для вашего сердца.