Как сделать копию большой базы данных из phpmyadmin?

Я хочу создать среду dev на моем веб-сайте на том же сервере. Но у меня есть 7Gb of database which contains 479 tables, и я хочу сделать копию этой базы данных в новую БД.

Я пробовал это с помощью PHPmyadmin >> Operations >> copy database to. Но каждый раз, когда он сбой и возвращает ошибку Error in processing request Error code: 500 Error text: Internal Error.

Пожалуйста, дайте мне знать, есть ли какой-либо другой метод/решение для копирования этой базы данных в новую базу данных из cpanel, пожалуйста, сообщите

Спасибо заранее!

Ответ 1

ПРИМЕЧАНИЕ: Я только что прочитал ваш комментарий, и, насколько я понимаю, у вас нет доступа к командной строке. Проверьте Solution Two, это определенно сработает.

Единственное решение, которое будет работать для вас (которое работает для меня в базе данных 12 ГБ), находится непосредственно из командной строки:

Решение One

mysql -u root -p

set global net_buffer_length=1000000; --Set network buffer length to a large byte number

set global max_allowed_packet=1000000000; --Set maximum allowed packet size to a large byte number

SET foreign_key_checks = 0; --Disable foreign key checking to avoid delays, errors and unwanted behavior

source file.sql --Import your sql dump file

SET foreign_key_checks = 1; --Remember to enable foreign key checks when the procedure is complete!

Если у вас есть root-доступ, вы можете создать bash script:

#!/bin/sh 

# store start date to a variable
imeron=`date`

echo "Import started: OK"
dumpfile="/home/bob/bobiras.sql"

ddl="set names utf8; "
ddl="$ddl set global net_buffer_length=1000000;"
ddl="$ddl set global max_allowed_packet=1000000000; "
ddl="$ddl SET foreign_key_checks = 0; "
ddl="$ddl SET UNIQUE_CHECKS = 0; "
ddl="$ddl SET AUTOCOMMIT = 0; "
# if your dump file does not create a database, select one
ddl="$ddl USE jetdb; "
ddl="$ddl source $dumpfile; "
ddl="$ddl SET foreign_key_checks = 1; "
ddl="$ddl SET UNIQUE_CHECKS = 1; "
ddl="$ddl SET AUTOCOMMIT = 1; "
ddl="$ddl COMMIT ; "

echo "Import started: OK"

time mysql -h 127.0.0.1 -u root -proot -e "$ddl"

# store end date to a variable
imeron2=`date`

echo "Start import:$imeron"
echo "End import:$imeron2"

Источник

Решение Два

Кроме того, есть еще один вариант, который очень хорош для тех, кто находится на общедоступном хостинге и не имеет доступа к командной строке. Это решение работало для меня на 4-5GB файлах:

  • MySQL Dumper: Загрузить (Вы можете выполнить резервное копирование/восстановление SQL файла непосредственно из "MySQL Dumper", вам больше не нужен phpmyadmin).
  • Большой дамп: Загрузить (Просто восстановить из файла сжатия и файла SQL, нужно BIGDUMP PHP-редактирование файлов для большого импорта $linespersession = 3000; Изменить на $linespersession = 30000;)

Решение три:

Это решение определенно работает, оно работает медленно, но работает.

Загрузите пробную версию (32 или 64 бит): Navicat MySQL Version 12

Установить → и RUN в качестве пробной версии.

После этого добавьте IP-адрес вашего компьютера (IP-адрес Интернета, а не локальный IP-адрес) в Удаленный сервер MySQL в cPanel (новая база данных/хостинг). Вы можете использовать подстановочный IP-адрес в cPanel для доступа к MySQL с любого IP-адреса.

Goto Navicat MySQL: нажмите Соединение, чтобы установить имя подключения.

В следующем "Hostname/IP" добавьте свой "IP-адрес хостинга" (не используйте localhost). Оставьте порт как есть (если ваш хостинг определил другой порт, поставьте его здесь).

добавьте свое Имя пользователя базы данных и Пароль

Нажмите Проверить соединение. Если оно выполнено успешно, нажмите "ОК"

Теперь на главном экране вы увидите всю базу данных, связанную с именем пользователя в столбце слева.

Дважды щелкните по своей базе данных, где вы хотите импортировать файл SQL:

Цвет значка базы данных изменится, и вы увидите "Таблицы/представления/функция и т.д.".

Теперь щелкните правой кнопкой мыши в базе данных и выберите " Выполнить файл SQL" (http://prntscr.com/gs6ef1). выберите файл, выберите "продолжить по ошибке", если хотите и, наконец, запустить его. Это займет некоторое время в зависимости от скорости вашего сетевого подключения и производительности компьютера.

Ответ 2

Создайте экспорт своей базы данных. Это должно быть легко сделано через интерфейс PhpMyAdmin. После того, как вы загрузили экспорт БД, вам нужно создать новую БД, куда вы поместите свои экспортированные данные. Это также должно быть легко выполнено через пользовательский интерфейс PhpMyAdmin.

Чтобы загрузить его, мы не можем использовать Import -> Browse your computer, потому что он имеет ограничение в 2 МБ. Одним из решений является использование Import -> Select from the web server upload directory /var/lib/phpMyAdmin/upload/. Загрузите экспортированные данные в этот каталог. После этого ваши загруженные данные должны быть указаны в раскрывающемся списке рядом с ним.

введите описание изображения здесь

Если это тоже не удается, вы можете использовать импорт командной строки.

mysql -u user -p db_name < /path/to/file.sql

Ответ 3

Самый простой способ - попробовать экспортировать данные из phpmyadmin. Он создаст резервную копию ваших данных.

Но иногда передача большого количества данных с помощью импорта/экспорта приводит к ошибкам.

Вы можете попробовать mysqldump для резервного копирования данных.

Я нашел для вас несколько ссылок здесь и здесь.

Это резервная копия базы данных mysqldump документация.

Надеюсь, это поможет.: D

Ответ 4

Я подозреваю, что PHPMyAdmin будет обрабатывать базы данных такого размера (ограничения на загрузку/загрузку PHP, ограничения памяти, время выполнения script). Если у вас есть доступ к консоли, я бы рекомендовал делать экспорт/импорт через командную строку mysql:

Экспорт

    $ mysqldump -u <user> -p<pass> <liveDatabase> | gzip > export.sql.gz

И импорт:

    $ gunzip < export.sql.gz | mysql -u <user> -p<pass> <devDatabase>

после того, как вы создали новую базу данных dev, например. PHPMyAdmin или через командную строку.

В противном случае, если у вас есть доступ к среде Apache/PHP, я бы поискал утилиту экспорта, которая разбивает экспорт на более мелкие куски. MySQLDumper приходит на ум, но ему несколько лет и AFAIK он больше не поддерживается и не совместим с PHP 7+. Но я думаю, что есть хотя бы pull request, который заставляет его работать с PHP7 (untested).

Изменить на основе вашего комментария:

Если экспорт уже существует и возникает ошибка при импорте, вы можете попытаться увеличить лимиты в своей среде PHP либо через записи в .htaccess, изменив php.ini или ini_set, что доступно в вашей среде, Соответствующие настройки являются, например, для установки через .htaccess (помните, что это будет работать только для сред Apache с mod_php, а также может управляться вашим хостером):

      php_value max_execution_time 3600
      php_value post_max_size 8000M
      php_value upload_max_filesize 8000M
      php_value max_input_time 3600

Это может работать или не работать, в зависимости от проблем x32/x64 и/или ограничений вашего хостера. Кроме того, вам нужно настроить параметры PHPmyadmin для ExecTimeLimit - обычно найденные в config.default.php для вашей установки PHPMyAdmin: Заменить

      $cfg['ExecTimeLimit'] = 300;

с

      $cfg['ExecTimeLimit'] = 0;

И, наконец, вам, вероятно, нужно настроить свою конфигурацию MySQL, чтобы позволить большие пакеты и избавиться от ошибки "потерянного соединения": [mysqld] в my.ini:

      max_allowed_packet=256M

Ответ 5

Вы можете использовать mysqldump, как следует

mysqldump —user= —password= --default-character-set=utf8

Вы также можете использовать мою оболочку script, которая на самом деле долго писала для создания резервной копии базы данных MySQL на регулярной основе с использованием задания cron.

#!/bin/sh
now="$(date +'%d_%m_%Y_%H_%M_%S')"
filename="db_backup_$now".gz
backupfolder=""
fullpathbackupfile="$backupfolder/$filename"
logfile="$backupfolder/"backup_log_"$(date +'%Y_%m')".txt
echo "mysqldump started at $(date +'%d-%m-%Y %H:%M:%S')" >> "$logfile"
mysqldump —user= —password= --default-character-set=utf8  | gzip > "$fullpathbackupfile"
echo "mysqldump finished at $(date +'%d-%m-%Y %H:%M:%S')" >> "$logfile"
chown  "$fullpathbackupfile"
chown  "$logfile"
echo "file permission changed" >> "$logfile"
find "$backupfolder" -name db_backup_* -mtime +2 -exec rm {} \;
echo "old files deleted" >> "$logfile"
echo "operation finished at $(date +'%d-%m-%Y %H:%M:%S')" >> "$logfile"
echo "*****************" >> "$logfile"
exit 0

Я уже написал статью о Расписание резервного копирования базы данных MySQL на CPanel или Linux.

Ответ 6

Вот как я справился с этой проблемой, когда столкнулся с ней... К сожалению, это работает только для Mac OS.

  • Загрузите Sequel Pro - Полностью бесплатный, и он отлично поработал у меня уже более года.
  • Удаленное подключение к базе данных сервера. Вероятно, вам нужно будет добавить свой IP-адрес в раздел "Удаленный MYSQL" в CPANEL. Если у вас нет учетных данных, вы можете получить их из своего конфигурационного файла веб-сайта.
  • После того, как вы на сервере, вы можете выбрать все свои таблицы, вторичный щелчок и выбрать "Экспорт" > "Как SQL-дамп". Вам, вероятно, не нужно будет редактировать какие-либо настройки. Нажмите "Экспорт".
  • Войдите в свою локальную базу данных серверов и выберите "Запрос" в верхнем меню.
  • Перетащите файл, который был загружен из экспорта, и он автоматически установит базу данных из дампа sql.

Надеюсь, это поможет. Это немного сработало, но для меня это работало очень хорошо, особенно когда PMA не удалось.

Ответ 7

Поскольку требования включают PHPMyAdmin, мое предложение:

  • выберите нужную вам базу данных
  • перейдите на вкладку "Экспорт"
  • нажмите кнопку "Пользовательский - показать все возможные варианты".
  • в опции "Сохранить вывод в файл", выберите "gzipped" для "Сжатие:"
  • Снимите отметку "Показать комментарии" (чтобы сохранить некоторое пространство)
  • Завершить экспорт

Затем попробуйте импортировать сгенерированный файл в новую имеющуюся у вас базу данных (если у вас достаточно ресурсов - это должно быть возможно).

Примечание. Мой предыдущий опыт показывает, что использование сжатия позволяет более крупные операции экспорта и импорта DB, но не проверяет, что является верхним пределом в средах с общим хостингом (в предположении, что это ваш комментарий к cPanel).

Изменить: при создании файла экспорта выберите новую базу данных (если она уже создана), перейдите на вкладку "Импорт", выберите файл, созданный из экспорта, и запустите процесс импорта.

Ответ 8

Ограничено до phpMyAdmin? Не делайте все сразу

Большие наборы данных не должны быть сброшены (если только для резервной копии), а вместо экспортировать базу данных без данных, а затем скопировать одну таблицу за раз (DB to DB напрямую).

Схема экспорта/импорта

Сначала экспортируйте только схему базы данных через phpMyAdmin (снимите отметку с данных в опциях экспорта). Затем импортируйте это в новое имя базы данных.

В качестве альтернативы вы можете использовать что-то вроде ниже для создания таких инструкций, как показано ниже, после создания БД. Ловушка с этим методом заключается в том, что вы, вероятно, потеряете ограничения, sprocs и т.п.

CREATE TABLE [devDB].[table] LIKE [prodDB].[table]

Копировать данные, по одной таблице за раз.

Используйте хороший редактор, чтобы создать необходимые операторы вставки 470. Начните с списка имен таблиц и используйте старый добрый find-and-replace.

INSERT INTO [devDB].[table] SELECT * FROM [prodDB].[table];

Это может задохнуться, в зависимости от вашей среды. Если это так, отпустите и заново создайте базу данных dev (или очистите все таблицы через phpMyAdmin). Затем запустите команды INSERT несколько таблиц за раз.

Администрирование базы данных требует CLI

Реальная проблема, с которой вы сталкиваетесь, заключается в том, что вы пытаетесь выполнить администрирование базы данных без доступа к интерфейсу командной строки. Существуют значительные сложные детали для эффективного переноса больших наборов данных, большинство из которых можно решить только с помощью таких инструментов, как mysqldump.

Ответ 9

Если у вас есть база данных на локальном сервере, вы можете экспортировать ее и использовать BigDump для вставки в новую базу данных на глобальном сервере BigDump