tFF.msk.ru :: Sharing tFFed mind
Май 28, 2024, 13:14:09 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.

Войти
Новости: Пропал ребенок. Вся информация и фотографии здесь.
 
   Начало   Помощь Поиск Войти Регистрация  
Страниц: [1]   Вниз
  Печать  
Автор Тема: MySQL: export-import  (Прочитано 5680 раз)
0 Пользователей и 1 Гость смотрят эту тему.
tFF
Administrator
Sr. Member
*****
Offline Offline

Сообщений: 422



WWW
« : Август 30, 2009, 16:17:41 »

Импорт и экспорт данных MySQL

Экспорт и импорт данных в MySQL обычно требуется при переносе информации из одной базы данных MySQL в другую и для осуществления резервного копирования.

Резервное копирование данных носит чисто технологический характер. Это означает, что в случае какого-либо программного или аппаратного сбоя оборудования, мы сможем восстановить актуальные данные клиента. Мы гарантируем сохранность самих данных, а не их резервных копий.

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

Единственный способ быть уверенным в 100% восстановлении данных — самостоятельно выполнять регулярное резервное копирование информации. Для этого необходимо воспользоваться утилитой mysqldump, которая доступна через unix shell.

Пример команд для экспорта и импорта базы данных:
Код:
mysqldump -u имя_пользователя -p -h имя_сервера_БД
имя_базы > dump.sql

Данные будут сохранены в файле dump.sql. Далее (в случае необходимости) восстанавливаем данные из резервной копии (дампа) так:
Код:
mysql -u имя_пользователя -p -h имя_сервера_БД
имя_базы < dump.sql

Запускаемые указанным образом утилиты для работы с MySQL будут запрашивать пароль к базе данных. Нужно вводить пароль соответствующего пользователя БД. Если пароль был утерян, вы можете самостоятельно изменить его в панели управления, в разделе Древо услуг (выпадающее меню расположено в самой верхней строчке панели управления справа).

По умолчанию система считает, что данные в базе хранятся в кодировке UTF-8. Если ваши данные хранятся в другой кодировке, то после создания резервной копии (дампа) для последующего корректного восстановления данных необходимо открыть созданный файл текстовым редактором и исправить в нём строчку:
Код:
/*!40101 SET NAMES utf8 */;

Например, для кодировки Windows-1251 нужно указать:
Код:
/*!40101 SET NAMES cp1251 */;

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

--add-drop-table — опция, которая добавляет команду DROP TABLE перед созданием таблиц. Перед восстановлением таблиц из дампа, таблицы с таким же именем в рабочей базе данных будут удалены и пересозданы из резервной копии. Рекомендуется использовать для предотвращения возможных ошибок после восстановления;

--add-locks — опция, которая добавляет команды LOCK TABLES перед выполнением и UNLOCK TABLE после выполнения каждого дампа таблицы. Применяется для ускорения доступа к MySQL;

--quote-names — опция, сообщающая утилите о необходимости ставить кавычки для названий таблиц и столбцов. Рекомендуется к использованию для MySQL версий, младше 4.1.1. В старших версиях она активирована по умолчанию.

Опции --quick и --opt рекомендуется использовать, если база данных MySQL слишком большая для того, чтобы целиком поместиться в памяти.

При этом утилита mysqldump выдает ошибку: mysqldump: Out of memory (Needed XXXXX bytes)
mysqldump:
Код:
Got error: 2008: MySQL client
run out of memory when retrieving data from server


В итоге строчка для создания копии базы данных получается следующей:
Код:
mysqldump --opt -u имя_пользователя -p -h имя_сервера_БД
--add-drop-table имя_базы > dump.sql

либо такой:
Код:
mysqldump --quick -u имя_пользователя -p -h имя_сервера_БД
--add-drop-table имя_базы > dump.sql

Для совместимости дампа, сделанного на стороннем сервере мы рекомендуем создавать дамп базы данных с ключом:
Код:
--set-variable max_allowed_packet=1M

либо
Код:
-O max_allowed_packet=1M

Если во время импорта вы получите ошибку вида
Код:
mysqldump: Error 2020:
Got packet bigger than 'max_allowed_packet'
bytes when dumping table `some_table_name ` at row: 2
значит в вашей базе данных присутствуют данные, которые невозможно разделить на отдельные части, каждая не больше одного мегабайта.

Как правило, такое случается, если базу данных MySQL используют для хранения содержимого различных файлов, например, картинок или музыки, не размещая их непосредственно в файловой системе. В таком случае, если размер какого-нибудь файла превышает определённое значение — база данных становится непригодной для использования на наших серверах и потребуется либо удалить такие данные из вашей базы, либо рассмотреть вариант использования сервера баз данных на VPS-сервере , где можно установить нужное ограничение max_allowed_packet в необходимое значение, либо не использовать его вообще.

Если на вашем сервере установлена версия MySQL 4.0.x, то для корректного переноса данных со сторонних серверов необходимо при экспорте базы данных использовать ключ:
Код:
--compatible=mysql40

Источник: Мастерхост
« Последнее редактирование: Август 30, 2009, 18:03:58 от tFF » Записан

So it goes...
tFF
Administrator
Sr. Member
*****
Offline Offline

Сообщений: 422



WWW
« Ответ #1 : Август 30, 2009, 23:31:37 »

скрипт
Код:
#!/bin/bash -e
echo "0. repair"
myisamchk -r --tmpdir=/tmp --verbose --information /var/lib/mysql/DATABASE/*.MYI
echo "1. export";
mysqldump -uUSER -pPASSWORD -hlocalhost --quick --opt --add-drop-table DATABASE > /home/backup/imexport/DATABASE.sql
echo "2. codepage -> cp1251";
perl -pi.bak -e 's/^\/\*!40101 SET NAMES utf8 \*\/;/\/\*!40101 SET NAMES cp1251 \*\/;/' /home/backup/imexport/DATABASE.sql
echo "3. import";
mysql -uUSER -pPASSWORD -hlocalhost DATABASE < /home/backup/imexport/DATABASE.sql
« Последнее редактирование: Август 30, 2009, 23:33:38 от tFF » Записан

So it goes...
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  

 ONLINECHANGE
Powered by MySQL Powered by PHP Powered by SMF 1.1.4 | SMF © 2006-2007, Simple Machines LLC Valid XHTML 1.0! Valid CSS!


Google visited last this page Ноябрь 01, 2020, 05:33:42