Для нормальной работы сайта необходимо разрешить JavaScript, включая скрипты с доменов googlesyndication.com и doubleclick.net для отображения системы поиска по сайту и прочих сервисов Google.

Экспорт, импорт больших файлов MySQL базы данных

Экспорт, импорт больших файлов MySQL базы данных Когда БД MySQL превышает PHP лимит на загрузку файлов, то импорт больших файлов MySQL базы данных может стать настоящей головной болью для администратора веб ресурса. Есть два средства, которые помогут - первое это mysqldump, второе BigDump.

mysqldump

Для экспорта и импорта больших MySQL дампов лучше конечно использовать специально созданную для этих целей mysqldump, но для этого потребуется доступ к SSH консоли:

cd /var/www/home/backup
mysqldump -u username -pPASSWORS dbname > dbname_mysqldump_16022013.sql
mysql -u username -pPASSWORS dbname < dbname_mysqldump_16022013.sql

Из описания man mysqldump версии MySQL сервера 5.5.30 следует, что опция "--opt", которая автоматически включает и "--quick", включена по умолчанию:

mysql Ver 14.14 Distrib 5.5.30, for Linux (x86_64) using readline 5.1
..........
mysqldump can retrieve and dump table contents row by row, or it can
retrieve the entire content from a table and buffer it in memory before
dumping it. Buffering in memory can be a problem if you are dumping
large tables. To dump tables row by row, use the --quick option (or
--opt, which enables --quick). The --opt option (and hence --quick) is
enabled by default, so to enable memory buffering, use --skip-quick.

О чем это говорит, а говорит это о том, что mysqldump может извлекать содержимое таблиц строку за строкой, а может и извлечь содержимое таблиц в буфер оперативной памяти перед созданием дампа. В версии MySQL 5.5.30, опция --opt, а также и опция --quick автоматически включаются в ходе работы mysqldump - т.е. по умолчанию mysqldump читает таблицы строку за строкой не помещая её предварительно в буфер оперативной памяти.


Из описания же утилиты mysqldump в книге Поль Дюбуа "MySQL", для какой только версии так и не ясно но явно старее чем 5.5.30, поведение mysqldump по умолчанию полностью противоположное - т.е. по умолчанию mysqldump предварительно помещает таблицы в буфер оперативной памяти, а потом уже создаёт дамп БД.

При обработке больших объёмов данных с предварительным помещением их в буфер оперативной памяти может привести к неприятным последствиям, вплоть до полного краха msqld демона/сервиса. Поэтому лучше всего когда есть доступ/выбор к SSH консоли и phpMyAdmin, то лучше всего использовать первый вариант с явно указанными опциями --opt и --quick

Если Вы используете саму свежую версию mysqldump для создания дампа, который планируется разворачивать на более старых версиях MySQL сервера, то вы недолжны использовать опции "--opt" и "--extended-insert" option, указав "--skip-opt".

Также нужно помнить, что с опцией "--opt" полностью блокируется чтение/запись БД на время создания дампа и поэтому создавать дампы с опцией "--opt" лучше всего ночью, когда мозгвыносящие спят:)

Дополнительные полезные опции для утилиты mysqldump:

  • --add-drop-table и --add-drop-database — опция добавляет команду DROP TABLE перед восстановлением таблиц или DROP DATABASE перед восстановлением дампа БД - т.е. перед восстановлением таблиц БД из дампа, уже имеющиеся в рабочей БД таблицы с таким же именем будут сначала удалены, а потом пересозданы из резервной копии;
  • --quote-names — названия таблиц и столбцов заключает в кавычки, рекомендуется для использования mysqldump на MySQL сервере младше 4.1.1, в более новых версиях --quote-names активирован по умолчанию;
  • --compatible=mysql40 - если создаваемый дам планируется разворачивать на MySQL 4.0.x или других серверах БД, то для этого используйте эту опцию, для опции --compatible= также доступны значения: "ansi", "mysql323", "mysql40", "postgresql", "oracle", "mssql", "db2", "maxdb", "no_key_options", "no_table_options", "no_field_options";
  • --comments, -i - позволяет в дамп добавить комментарий с дополнительной информацией, например о версии mysqldump, MySQL сервере, имени хоста и т.д;
  • --all-databases - сделает дамп всех имеющихся на данном MySQL-сервере баз данных.

Для автоматического создания MySQL дампа можно использовать приведённый ниже bash скрипт:

{pub}

 

{/pub} {reg}

#!/bin/bash
# http://remoteshaman.com/
# Script for auto mysqldump
# 
# Add this line in your crontab: crontab -u root -e
# 0 0 */3 * * /root/scripts/sqlautodump.sh >/dev/null 2>&1
# chmod +x /root/scripts/sqlautodump.sh
# Run script every each 3 day in 00:00
# 
 
# Get current day month and year
CUR_TIME=`date '+%d%m%Y'`
 
# Set file name and full path
DUMP_NAME=/var/www/user/backup/dbname_"$CUR_TIME".sql
 
# Run mysqldump
mysqldump -u username -pPASSWORS dbname > $DUMP_NAME && chown user:user $DUMP_NAME

{/reg}

Или вот такой вариант, для регулярного и автоматического создания всех доступных баз данных:

{pub}

 

{/pub} {reg}

#!/bin/bash
DIR="/backups/mysql_dump"
mkdir -p $DIR
LOG="/var/log/mysql_dump.log"
touch $LOG
TIMENAME=`date +%d.%m.%Y-%H.%M`
db=`mysql -u root -h localhost -pRootPassword -Bse 'show databases'`
for n in $db; do
        TIMEDUMP=`date '+%T %x'`
        echo "backup has been done at $TIMEDUMP : $TIMENAME on db: $n" >> $LOG
  mysqldump -u root -h localhost -pRootPassword $n | gzip -c > "$DIR/mysql-$n-$TIMENAME-db.dump.gz" 
done

{/reg}

Незабываем добавить скрипт в crontab -u user -e.

BigDump

В случае когда БД будет превышать РНР лимит на загрузку файлов, обычно это 20-50-100 МБ, и нет возможности использовать mysqldump, то для импорта таких файлов phpMyAdmin нам не поможет.

В таких случаях для импорта таких файлов нужно или обращаться в тех. поддержку для ручного импорта БД администратором или же использовать какие-то скрипты на подобии BigDump, настройки которого в bigdump.php равны примерным значениям:

// Database configuration
 
$db_server = 'localhost';
$db_name = '';
$db_username = '';
$db_password = ''; 
 
$filename = '';
 
$db_connection_charset = '';
 
define ('MAX_QUERY_LINES',300);

Думаю особых пояснений не нужно, что и как заполнять - $filename "путь к файлу дампа", а MAX_QUERY_LINES это количество строк которое может считаться за один запрос, которое подбирается индивидуально для каждого отдельно взятого дампа.

Например для полноценного импорта дампа OpenCart размером в 10-15 МБ, лимит РНР ограничивал загрузку в 2 МБ, значение MAX_QUERY_LINES пришлось постепенно увеличить до 3000.

Рекомендуемый контент


Об авторе
АдМинь БагоИскатель
АдМинь БагоИскатель ярый борец за безглючную работу любых механизмов и организмов во всей вселенной и потому пребывает в вечном поиске всяческих багов, а тот кто ищет как известно всегда находит. Когда что-то или кого-то вылечить не в состоянии, то со словами "Я в аду, а вы все черти" уходит в запой выйдя из которого снова берётся лечить неизлечимое.
Ещё статьи автора

Добавить комментарий

АХТУНГ! Все комменты модерасятся модерастом. Мессаги исключительно рекламного или оскорбительного содержания не публикуются, а поэтому злостным спамерам, пранкерам и прочей сетевой нечисти рекомендуем напрасно не тратить своего времени и удовлетворять свои больные фантазии на специализированных Интернет ресурсах! Разумная же критика, замечания, дополнения и хвалебные оды приветствуются, также допускается легкий флуд или троллинг :)


Защитный код
Обновить

Рейтинг@Mail.ru 2 megabytes