Чем открыть sql файл большого размера
Перейти к содержимому

Чем открыть sql файл большого размера

  • автор:

Как просмотреть всё содержимое .sql файла в 1ГБ?

импортировать куда-нибудь, например в БД, и уже с помощью неё смотреть то, что нужно. А вы через блокнотик смотрите? 😀 Ну попробуйте notepad++, у меня спокойно открывает файлы весом 500мб.

4 фев 2013 в 13:12
lister в Totalcmd
4 фев 2013 в 13:13
Еще можно порезать на пару-тройку файлов приемлимого размера.
4 фев 2013 в 13:14

@lampa, проблема в том, что импортируется 3 таблицы из 6. Вот я хочу и заглянуть в сам файл, может там действительно 3 таблицы. Нотепад ошибку выбивает.

4 фев 2013 в 13:17
4 фев 2013 в 13:24

8 ответов 8

Сортировка: Сброс на вариант по умолчанию

Вы ведь не хотите просмотреть весь гигабайт данных, правда? То есть вам и не нужно открывать такой файл.

Вы скорее всего хотели запустить в файле поиск, правильно? Это можно сделать и не открывая файл редактором, для этого существуют более адекватные средства, например, grep .

Eсли вы хотите всего лишь узнать, сколько там таблиц, вам нужно что-то вроде

grep -i "CREATE TABLE" /path/to/sql 

(Чтобы посмотреть первые 100 строк и увидеть, как там описана первая таблица, используйте sed 100q /path/to/sql .)

Отслеживать
ответ дан 4 фев 2013 в 13:35
206k 28 28 золотых знаков 291 291 серебряный знак 526 526 бронзовых знаков
что бы посмотреть первые сто строк, нужно использовать head -n 100.
4 фев 2013 в 13:53
сдается мне, что у ТС идет речь о windows 😉 а вообще линух не виснет на таких файлах 🙂
4 фев 2013 в 14:27
@KoVadim: sed 100q тоже работает, известная же идиома.
4 фев 2013 в 15:49

Встроенный просмотрщик в FAR открывает любые файлы моментально, так как он их не читает полностью при открытии, а считывает нужные части файла по мере просмотра.

Отслеживать
ответ дан 4 фев 2013 в 20:48
Mr Trololo Mr Trololo
401 2 2 серебряных знака 7 7 бронзовых знаков

Так нужно просто пользоваться правильными текстовыми редакторами! В свое время пользовался emeditor. 200-400 Мб открывал с пол пинка.

Но если по правильному, то такие файлы обычно смотрят в консоли с помощью less, grep и компании.

Отслеживать
ответ дан 4 фев 2013 в 13:18
112k 6 6 золотых знаков 93 93 серебряных знака 159 159 бронзовых знаков
@KoVadim, как использовать то? less отклоняет
4 фев 2013 в 13:24
less /var/www/user1734_modal/data/www/montytool.com/bigdump.sql угловые скобки не нужны.
4 фев 2013 в 13:25
Отслеживать
ответ дан 4 фев 2013 в 13:19
Zhukov Roman Zhukov Roman
9,085 14 14 серебряных знаков 26 26 бронзовых знаков
@Zhukov Roman, как использовать то? less отклоняет
4 фев 2013 в 13:24
@Modal, поподробнее, как это less отклоняет? Что говорит?
4 фев 2013 в 17:51

Если дело происходит в Unix системе можно открыть из шелла выполнив

получите указанное количество строк текста из файла с начала. хотите с конца — замените head на tail

Отслеживать
371 1 1 золотой знак 5 5 серебряных знаков 13 13 бронзовых знаков
ответ дан 4 фев 2013 в 16:46
411 2 2 серебряных знака 11 11 бронзовых знаков

notepad++ спокойно открывает такие файлы

Отслеживать
ответ дан 4 фев 2013 в 13:29
134 9 9 бронзовых знаков
@levantez, нет. Пишет, что размер файла слишком большой для открытия.
4 фев 2013 в 13:31

В дополнение про FAR скажу, что mcedit из Midnight Commander работает аналогично. Последний раз большой дамп просматривал именно с его помощью.

Отслеживать
ответ дан 5 фев 2013 в 10:37
gorodezkiy gorodezkiy
331 2 2 серебряных знака 20 20 бронзовых знаков

Под какой платформой вы пытаетесь это сделать, Windows или Linux? В любом случае если вас интересует только просмотр, а не редактирования, лучше использовать просмотр а не редактирование. В windows в Total commander или Far В Linux mightnight commander. Ну или как советовали консольные средства поиска. findstr в windows grep в linux. Кстати в linux меня приятно удивил vim для редактирования больших файлов. Открыл файл в 400~ мб практически мгновенно. Так понимаю это связано с тем что он не пытается загрузить сразу всю информация в оперативную память, в отличии от большинства других текстовых редакторов.

Отслеживать
ответ дан 7 фев 2013 в 4:37
111 8 8 бронзовых знаков

  • файлы
  • sql
    Важное на Мете
Похожие

Подписаться на ленту

Лента вопроса

Для подписки на ленту скопируйте и вставьте эту ссылку в вашу программу для чтения RSS.

Дизайн сайта / логотип © 2023 Stack Exchange Inc; пользовательские материалы лицензированы в соответствии с CC BY-SA . rev 2023.10.27.43697

Нажимая «Принять все файлы cookie» вы соглашаетесь, что Stack Exchange может хранить файлы cookie на вашем устройстве и раскрывать информацию в соответствии с нашей Политикой в отношении файлов cookie.

Как импортировать базы данных больших размеров?

Как импортировать базы данных больших размеров?

Недавно мне потребовалось немного расширить функционал на своём сайте http://srs.myrusakov.ru. Разумеется, встал вопрос о его импортировании на Denwer, чтобы я спокойно мог его модернизировать, а затем залить свежую версию обратно. С файлами никаких проблем не было, а вот с импортом базы возникла серьёзная трудность. Дело в том, что на данном сайте я собираю информацию о каждом посещении каждой страницы. Таким образом, количество записей в соответствующей таблице составляет несколько сотен тысяч. Эта таблица весит около 40 МБ. Разумеется, импортировать её, как и все другие, через PHPMyAdmin не представляется возможным. Можно было бы, конечно, менять настройки php.ini, но делать мне этого не хотелось, тем более, решение это временное, поскольку таблица увеличивается очень быстро. Поэтому мне пришлось найти способ, как импортировать базы данных больших размеров. Об этом я и расскажу в данной статье.

Помогла мне в этом одна программа, которая называется Sypex Dumper. Вот здесь можно скачать свежую версию: http://sypex.net/ru/products/dumper/downloads/. Версия Pro является платной, и она Вам не нужна, поэтому выбирайте другую. У данной программы много возможностей, но нам потребуется лишь импорт базы данных.

Разархивируйте папку с программой на какой-нибудь виртуальный хост на Denwer (либо в отдельную папку на своём хостинге). Там появится папка backup, и в эту папку Вам надо поместить SQL-файл Вашей большой базы данных.

Теперь зайдите на данный виртуальный хост, и Вы увидите следующее:

Авторизация в базе данных

Вам необходимо ввести логин и пароль от базы данных и нажать на кнопку «Войти«.

После этого откроется следующее окно, на котором Вам нужно выбрать вкладку «Импорт«:

Выбор вкладки импорт

Далее Вам нужно выбрать базу данных, в которую будет идти импорт (перед этим её лучше очистить через PHPMyAdmin), файл (который находится в папке backup) и затем нажать на кнопку «Выполнить«.

Импорт базы данных большого размера

После нажатия на кнопку «Выполнить» Ваша база данных будет практически моментально импортирована (причём намного быстрее, чем это делает PHPMyAdmin).

Безусловно, если Ваша база не очень большая (в пределах 10 МБ), то данный способ Вам и вовсе не нужен. А вот если Вам нужно импортировать базы данных больших размеров, то данный скрипт станет для Вас незаменимым помощником.

Создано 21.09.2012 16:11:21

  • Михаил Русаков
  • Копирование материалов разрешается только с указанием автора (Михаил Русаков) и индексируемой прямой ссылкой на сайт (http://myrusakov.ru)!

    Добавляйтесь ко мне в друзья ВКонтакте: http://vk.com/myrusakov.
    Если Вы хотите дать оценку мне и моей работе, то напишите её в моей группе: http://vk.com/rusakovmy.

    Если Вы не хотите пропустить новые материалы на сайте,
    то Вы можете подписаться на обновления: Подписаться на обновления

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

    Порекомендуйте эту статью друзьям:

    Если Вам понравился сайт, то разместите ссылку на него (у себя на сайте, на форуме, в контакте):

    1. Кнопка:
      Она выглядит вот так:
    2. Текстовая ссылка:
      Она выглядит вот так: Как создать свой сайт
    3. BB-код ссылки для форумов (например, можете поставить её в подписи):

    Комментарии ( 14 ):

    foritukxm 11.02.2013 20:20:25

    Та же проблема «Fatal error: require_once() [function.require]: Failed opening required ‘Spreadsheet/Excel/Writer.php’ (include_path=’.;/usr/local/php5/PEAR’) in Z:\home\localhost\www\Tools\phpmyadmin\libraries\export\xls.php on line 5» не могу понять где найти SQL-файл Вашей большой базы данных?

    Admin 11.02.2013 21:00:28

    Это ошибка в самом phpmyadmin, попробуйте переустановить Denwer. Также можете просто взять SQL-запрос из файла, скопировать его и вставить его во вкладку «SQL» в базе, в которую нужно импортировать данные.

    foritukxm 11.02.2013 21:48:45

    Дело в том, что уже есть сайт. Просто переустановить денвер нельзя. Я скопировал сайт из папки home и теперь осталось базу данных скопировать. Если придерживаться вашего совета. Установил программу sxd на denwer. А дальше не знаю что делать:( «Также можете просто взять SQL-запрос из файла, скопировать его и вставить его во вкладку «SQL» в базе, в которую нужно импортировать данные.» Объясните чуть подробнее пожалуйста.

    Admin 12.02.2013 09:15:46

    У Вас есть SQL-файл, откройте его в блокноте, скопируйте весь код и найдите вкладку «SQL» в phpMyAdmin, туда этот код и вставьте и выполните его.

    foritukxm 12.02.2013 20:48:58

    Извиняюсь за тупость..Не могу найти sql файл. Где он находится,чтобы его открыть?

    foritukxm 12.02.2013 20:58:06

    Подсказка Денвера Вы ошиблись при наборе URL в браузере. Вероятнее всего, сервер пытается найти файл Z:/home/localhost/www/Tools/phpMyAdmin/function.require, которого не существует. В случае использования CGI-скриптов, корректные пути к CGI-директориям следующие: URL Куда указывает http://***/cgi-glob/script.cgi /home/cgi-glob/script.cgi http://***/cgi/script.cgi /home/***/cgi/script.cgi http://***/cgi-bin/script.cgi /home/***/cgi-bin/script.cgi это если нажать [function.require..может быть как то поможет

    Admin 12.02.2013 21:27:13

    Так у Вас что не получается? Экспорт или импорт?

    foritukxm 13.02.2013 00:11:59

    Экспорт не получается. Выходит ошибка Fatal error. Я её в первом сообщении еще написал. Потом если нажать «function.require» в этой самой ошибке, выходит «Подсказка денвера». В предыдущем сообщение написал о ней. Вот так. У меня сайт на CMS Joomla 2.5 Версия: Денвер-3 2012-09-16 (Если пригодится)

    Admin 13.02.2013 09:55:23

    В настройках экспорта посмотрите, попробуйте разные настройки поставить. Там есть «Вывод в файл» или просто «Вывод в окно браузера». Попробуйте разные варианты.

    foritukxm 13.02.2013 11:01:06

    Моих мозгов не хватило разобраться в ситуации с вашей помощью. Я задал вопрос на форуме. Надеюсь помогут:) Вам спасибо за советы!

    Чем открыть sql файл большого размера

    в любом случае, я бы посоветовала через ADO+SQL — количество строк знать не надо, обращение к txt c разделителем — как к столбцам, отбор сделать нужной SQL командой. примеры примерно такие:
    Точное считывание с текстового файла
    ADO в Excel и большой размер файла

    Цитата
    tvit написал:
    1. . считать текстовый файл .
    2. . сортировать по полю ФИО. .

    — и уже в SQL-команду можно вставить нужные условия отбора WHERE, и Сортировку по нужному полю ORDER BY
    P.S.(согласна с Максимом)
    пример:
    Использование Access для обработки больших текстовых файлов #17

    Изменено: JeyCi — 26.08.2015 18:09:51

    чтобы не гадать на кофейной гуще, кто вам отвечает и после этого не совершать кучу ошибок — обратитесь к собеседнику на ВЫ — ответ на ваш вопрос получите — а остальное вас не касается (п.п.п. на форумах)

    Пользователь
    Сообщений: 11891 Регистрация: 22.12.2012
    Excel 2016, 365
    26.08.2015 20:07:19
    Доброе время суток

    Цитата
    Размер файла 1,5 — 2 ГБ и количество строк более 10 млн. Каждая строка = 1 зачисление , около 30 полей, из которых мне нужно только 5. (ФИО, Сумма, Дата операции, Дата рождения, тип зачисления) . Для одного клиента может быть несколько зачислений (строчек).
    Есть справочник клиентов (текстовый файл ~4 млн.записей), в котором хранятся только ФИО + Дата рождения

    Такой объём явно выгружен из какой-то базы данных, что-то с трудом вериться, что кто-то в блокноте ведёт эти записи. Стоит ли тогда «огород городить» с выгрузкой и анализом через сравнение массивов, или даже, как предлагают, связывать текстовые данные в Access для построения запросов? Может сразу в этой же базе SQL-запросами получать требуемое?

    Пользователь
    Сообщений: 23755 Регистрация: 22.12.2012
    26.08.2015 22:18:55

    Думаю вполне можно и кодом работу сделать — сперва читаем справочник в словарь, можно всё в массив, или построчно прочитать.
    Затем читаем построчно гигабайты, проверяем свои определённые условия и затем наличие в словаре — если нужно отобрать, то отбираем в коллекцию или другой словарь (так не нужно думать о размерности).
    В итоге собранное дописываем в справочник, реализация по вкусу (можно циклом по одному, можно сразу всё выгрузить — думаю разница на общем фоне не будет существенной).

    Пользователь
    Сообщений: 60 Регистрация: 01.04.2014
    27.08.2015 06:45:46

    Спасибо всем ответившим, только я другие вопросы задавал. 🙂
    Через SQL задача уже реализована и работает, проблема в том, что это нужно передать другому человеку в другой город, у которого есть только Excel и Word

    To HUGO: Вариант с заменой массивов словарем рабочий, вопрос только на сколько это будет медленнее по скорости чем с массивами? И еще вопрос, помню как то работал со словарем и там был глюк, который я так и не смог обойти: При проверки наличия значения в словаре оно почему-то самопроизвольно добавлялось в этот словарь, я так и не смог до конца разобраться в проблеме посему так происходит?

    PS На выгружаемый файл из внешней системы я никак повлиять не могу, считайте что мне его робот по почте присылает 🙂

    Пользователь
    Сообщений: 1252 Регистрация: 07.05.2015
    27.08.2015 08:02:56
    А версия Excel какая?
    Пользователь
    Сообщений: 11891 Регистрация: 22.12.2012
    Excel 2016, 365
    27.08.2015 08:05:07
    Доброе время суток

    Цитата
    Через SQL задача уже реализована и работает
    Цитата
    проблема в том, что это нужно передать другому человеку в другой город

    Не совсем понимаю суть проблемы, почему нужно другому человеку отправлять исходные данные, чтобы он у себя в Excel их обрабатывал? А почему нельзя отправить уже реализованный результат?
    Почему у вас ошибка со словарём — надо смотреть ваш код. Проверка наличия ключа в словаре выполняется Dictionary.Exists(KeyValue) — словарь это пара ключ/значение.

    Пользователь
    Сообщений: 9709 Регистрация: 22.12.2012
    27.08.2015 08:32:34

    Цитата
    tvit написал:
    на сколько это будет медленнее по скорости чем с массивами?

    это будет быстрее. в разы, скорее — в десятки раз.

    Цитата
    tvit написал:
    работал со словарем и там был глюк, который я так и не смог обойти: При проверки наличия значения в словаре оно почему-то самопроизвольно добавлялось в этот словарь

    это не глюк.
    для проверки следует использовать Exists, любое другое обращение к несуществующему элементу — добавляет его.
    это штатное поведение словаря.

    фрилансер Excel, VBA — контакты в профиле
    «Совершенствоваться не обязательно. Выживание — дело добровольное.» Э.Деминг

    Пользователь
    Сообщений: 60 Регистрация: 01.04.2014
    27.08.2015 09:04:35

    Цитата
    StepanWolkoff написал: А версия Excel какая?

    Пользователь
    Сообщений: 60 Регистрация: 01.04.2014
    27.08.2015 09:18:26
    Получается если считывать в Коллекцию

    Цитата
    Андрей VG написал: почему нужно другому человеку отправлять исходные данные, чтобы он у себя в Excel их обрабатывал?

    Данные никто никому не отправляет, другой человек сам их выгрузит из той же внешней системы

    Цитата
    Андрей VG написал: Проверка наличия ключа в словаре выполняется Dictionary.Exists(KeyValue) — словарь это пара ключ/значение.

    Сейчас уже не вспомню, возможно я действительно проверял более «хитрым» способом (присваивание внутри on error)

    Пользователь
    Сообщений: 11891 Регистрация: 22.12.2012
    Excel 2016, 365
    27.08.2015 09:38:01

    Цитата
    другой человек сам их выгрузит из той же внешней системы

    Вы правда не назвали, что это за система. Но всё равно не понимаю, если человек имеет к ней доступ, то кто мешает ему получать (в том числе и обновляемые) данные, используя SQL, в книгу Excel?
    Например, для MS SQL Server

    Const connStr As String = "ODBC;Driver=;Server=(localdb)\mssqllocaldb;Database=SampleDb;Trusted_Connection=yes;" Dim pLO As ListObject, pSheet As Worksheet Set pSheet = ThisWorkbook.Worksheets.Add Set pLO = pSheet.ListObjects.Add(xlSrcExternal, connStr, True, xlYes, pSheet.Range("A1")) With pLO.QueryTable .CommandType = xlCmdSql .CommandText = "Select * From Production.Products" .Refresh End With

    Естественно, CommandText может быть более сложным SQL запросом, чем в приведённом примере. Можно это же сделать и без программирования, задействовав MS Query.

    Изменено: Андрей VG — 27.08.2015 09:47:06
    Пользователь
    Сообщений: 23755 Регистрация: 22.12.2012
    27.08.2015 10:52:08

    Я думаю что SQL будет работать намного медленнее кода на словаре и массивах.
    На работе простая выборка по одному полю из 12 тысяч записей работает секунд наверное 40 на 2007 ацессе — она же ранее на 2003 отрабатывала не раздражая. хотя тоже не пулей. Не работаю регулярно с ацесс, и не вникал, т.е. это не моя каждодневная рабочая задача, но удивляет такая медлительность.

    Пользователь
    Сообщений: 17 Регистрация: 30.10.2014
    27.08.2015 12:05:29

      • Microsoft Office 2010 Professional Plus c Software Assurance
      • Microsoft Office 2013

      Пользователь
      Сообщений: 1252 Регистрация: 07.05.2015
      27.08.2015 15:23:59

      Поддерживаю Dmitryktm, поэтому и был вопрос про версию.
      Из личного опыта — скармливал одновременно три таблицы (текстовых файла) 21млн, 7млн и 300тыс.
      Тут главное оперативной памяти не жалеть)))

      Пользователь
      Сообщений: 60 Регистрация: 01.04.2014
      27.08.2015 15:36:31

      Dmitryktm, спасибо, но это не вариант. Я не администратор своей машины, и тот человек кому я передаю программу тоже ничего не сможет установить.

      Сейчас пробую вариант с коллекциями. Excel занял 1.2 ГБ оперативки. пока работает, Но я на 5 млн пробовал. В след месяцах (декабре и мае) могут быть двойные зачисления, тогда не знаю что будет

      Пользователь
      Сообщений: 47199 Регистрация: 15.09.2012
      27.08.2015 15:37:50
      Кнопка цитирования не для ответа
      Пользователь
      Сообщений: 11891 Регистрация: 22.12.2012
      Excel 2016, 365
      27.08.2015 15:38:20
      Скрытый текст

      Public Sub CreateUserTable() Dim fso As New Scripting.FileSystemObject Dim userStream As Scripting.TextStream Dim dataStream As Scripting.TextStream Dim pFuncs As WorksheetFunction, sDate As String Dim sUser As String, i As Long, k As Long Dim bStr(0 To 31) As Byte Set userStream = fso.CreateTextFile("c:\temp\user.csv", True) Set dataStream = fso.CreateTextFile("c:\temp\data.csv", True) Set pFuncs = Application.WorksheetFunction userStream.WriteLine "UserName,UserBirthday" dataStream.WriteLine "UserName,DateBuy,Amount" For i = 1 To 2000000 For k = 0 To 31 Step 2 bStr(k) = CByte(pFuncs.RandBetween(33, 96)) Next sUser = bStr sUser = Replace$(sUser, ",", "_"): sUser = Replace$(sUser, """", "_") sDate = Format$(DateSerial(CInt(pFuncs.RandBetween(1930, 2010)), CInt(pFuncs.RandBetween(1, 12)), CInt(pFuncs.RandBetween(1, 28))), "dd.mm.yyyy") userStream.WriteLine sUser & "," & sDate For k = 1 To CLng(pFuncs.RandBetween(3, 9)) sDate = Format$(DateSerial(CInt(pFuncs.RandBetween(1960, 2015)), CInt(pFuncs.RandBetween(1, 12)), CInt(pFuncs.RandBetween(1, 28))), "dd.mm.yyyy") dataStream.WriteLine sUser & "," & _ sDate & "," & _ Format$(1000# * Rnd, "0.00") Next If (i Mod 10000) = 0 Then DoEvents Debug.Print i End If Next dataStream.Close: userStream.Close MsgBox "end" End Sub Public Sub AddNotIn() Dim fso As New Scripting.FileSystemObject Dim userStream As Scripting.TextStream Dim dataStream As Scripting.TextStream Dim pFuncs As WorksheetFunction, sDate As String Dim sUser As String, i As Long, k As Long Set pFuncs = Application.WorksheetFunction Set dataStream = fso.OpenTextFile("c:\temp\data.csv", ForAppending) For i = 1 To 500000 sUser = "" For k = 1 To 16 sUser = sUser & Chr(CLng(pFuncs.RandBetween(183, 255))) Next For k = 1 To CLng(pFuncs.RandBetween(4, 9)) sDate = Format$(DateSerial(CInt(pFuncs.RandBetween(1960, 2015)), CInt(pFuncs.RandBetween(1, 12)), CInt(pFuncs.RandBetween(1, 28))), "dd.mm.yyyy") dataStream.WriteLine sUser & "," & _ sDate & "," & _ Format$(1000# * Rnd, "0.00") Next If (i Mod 10000) = 0 Then DoEvents Debug.Print i End If Next dataStream.Close End Sub

      Скрытый текст

      Public Sub TestDictionary2() Dim fso As New Scripting.FileSystemObject Dim pStream As Scripting.TextStream Dim userDict As New Scripting.Dictionary Dim notInDict As New Scripting.Dictionary Dim strOut() As String, readStr As String Dim sKey As Variant, i As Long, pSheet As Worksheet Dim t As Single t = Timer Set pStream = fso.OpenTextFile("c:\Temp\user.csv", ForReading) strOut = Split(pStream.ReadAll, vbCrLf) pStream.Close For i = 1 To UBound(strOut) userDict(Left$(strOut(i), 16)) = vbNullString If (i Mod 10000) = 0 Then DoEvents Debug.Print i End If Next Erase strOut Set pStream = fso.OpenTextFile("c:\Temp\data.csv", ForReading) strOut = Split(pStream.ReadAll, vbCrLf) pStream.Close For i = 1 To UBound(strOut) readStr = Left$(strOut(i), 16) If Not userDict.Exists(readStr) Then notInDict(readStr) = vbNullString End If If (i Mod 10000) = 0 Then DoEvents Debug.Print i End If Next Erase strOut ReDim strOut(1 To notInDict.Count, 1 To 1) i = 0 For Each sKey In notInDict.Keys i = i + 1 strOut(i, 1) = sKey Next Set pSheet = ThisWorkbook.Worksheets.Add pSheet.Range("A2").Resize(notInDict.Count, 1).Value = strOut pSheet.Range("A1").Value = "UserName" pSheet.Range("C1").Value = Timer - t End Sub

      Скрытый текст

      Public Sub CreateWithNonClustered() Const connStr As String = "OLEDB;Provider=Microsoft.ACE.OLEDB.12.0;Mode=1;Data Source=c:\Projects\Databases\Demo.accdb" Dim pLO As ListObject, pSheet As Worksheet Dim t As Single t = Timer Set pSheet = ThisWorkbook.Worksheets.Add Set pLO = pSheet.ListObjects.Add(xlSrcExternal, connStr, True, xlYes, pSheet.Range("A1")) With pLO.QueryTable .CommandType = xlCmdSql .CommandText = "SELECT DISTINCT UserData.UserName FROM UserData LEFT JOIN Users ON UserData.UserName = Users.UserName WHERE Users.UserName Is Null" .Refresh False End With pSheet.Range("C1").Value = Timer - t End Sub

      Скрытый текст

      Public Sub CreateWithNonClustered() Const connStr As String = "ODBC;Driver=;Server=(localdb)\mssqllocaldb;Database=SampleDb;Trusted_Connection=yes;" Dim pLO As ListObject, pSheet As Worksheet Dim t As Single t = Timer Set pSheet = ThisWorkbook.Worksheets.Add Set pLO = pSheet.ListObjects.Add(xlSrcExternal, connStr, True, xlYes, pSheet.Range("A1")) With pLO.QueryTable .CommandType = xlCmdSql .CommandText = "Select Distinct tud.UserName From dbo.UserDataK tud Left Join dbo.UsersK tu On (tu.UserName=tud.UserName) Where tu.UserName Is Null" .Refresh False End With pSheet.Range("C1").Value = Timer - t End Sub

      Как импортировать большую базу данных в mysql

      Бывает возникает ситуация, в которой необходимо загрузить на сервер хостинга базу данных больше разрешенного хостингом в утилите управления базами данных phpMyAdmin- обычно этот предел установлен в ~2Mb. Если это случается на виртуале, то обычно просто заливаю базу через ftp и прошу суппорт хостинга помочь в данном вопросе. Поскольку использую нормальные хостинги, то решение это проблемы занимает всего 10-15 минут, так что особо не парился, но тут столкнулся с тем что возникла необходимость подсказать человеку у которого суппорт курил бамбук, так что выделилось несколько вариантов решения данной проблемы. Оговорюсь сразу что наиболее удобен для импорта базы данных mysql последний вариант, но он подходит только тем у кого есть доступ к терминалу. Так что в статье описаны все возможные способы импорта большой базы данных в mysql, кроме общения с суппортом. 1. Варинт первый – выгружаем бэкап базы не целиком, а по несколько таблиц, чтобы файл не превышал наши лимиты. Основной минус данного решения- это то, что операцию выгрузки- загрузки необходимо будет проводить много раз, так что подойдет исключительно для тех у кого много свободного времени и нечем заняться на досуге. 2. Вариант второй – выгружать в пожатом состоянии- так как степень сжатия для текстового файла будет максимальной. Но тут опять же можно столкнуться с тем, что на хостинге не установлена поддержка архиваторов. 3. Используем сторонний скрипт, который позволяет производить экспорт и импорт базы данных, минуя общение с phpMyAdmin. Наиболее известный из имеющихся в наличии, и к тому же наиболее хорошо работающий- это BigDump. О том как его настроить – я отписался чуть позже, так что это касается и настройки по 5му пункту. 4. Как частный случай 3 вариант, возможно залить на сервер эмулятор терминала и сделать 5 пункт через него. Например можно попробовать PHPterm, но в этом варианте можно столкнуться с ограничениями хостинга в плане безопасности запуска команд и скриптов. 5. Также есть простенькая программка аналогичная BigDump, которая также позволяет импортировать большие базы данных, только в данном случае необходим Zend Optimizer либо Nu-Coder. Программка называется Sypex Dumper, и вторую версию скрипта можно даже интегрировать в наиболее популярные CMS. На сайте есть как платная утилита, так и облегченная бесплатная версия. 6. Если таки имеется доступ к консоли, то можно добавить в php.ini следующие строки (увеличиваем лимит загрузки файлов по времени и размеру), после загрузки, лучше вернуть все назад, чтобы не нагнули сервак с оказией:
      max_execution_time = 20000
      max_input_time = 20000
      upload_max_filesize = 150M
      post_max_size = 150M 7. Но на самом деле наиболее быстрым и оптимальным вариантом загрузки большой базы данных, имея доступ к консоли, будет загрузить дамп базы данных dump.sql через ftp, а затем залить её через консоль ssh:
      mysql -h hostname -u user-name -p DB_name < /path-to-dir/dump.sql
      если у вас в качестве хоста базы данных используется стандартный localhost , то ключик -h можно и опустить, так что получится вида:
      mysql -u user-name -p DB_name < /path-to-dir/dump.sql Да, чуть не забыл про самые поганые грабли всей пляски с импортом- при импорте базы данных могут возникнуть проблемы с кодировками, поэтому нам надо убедиться что дефолтная база и выгрузка sql находятся в одной кодировке, либо переконвертировать базу данных в стандартную для mysql кодировку (обычно это utf-8):
      iconv -f CP1251 -t UTF-8 dump.sql > dump.sql.utf8
      либо указать необходимую кодировку при процедуре импорта базы данных:
      mysql -h hostname -u user-name -default_character_set utf8 -p DB_name < /path-to-dir/dump.sql ---------------------------------- И ещё немного информации .

      Импорт и экспорт данных 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=2M
      -O max_allowed_packet=2M

      Если во время импорта вы получите ошибку вида

      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
      Как работать с MySQL из скриптов на Perl

      Для работы с MySQL из Perl-скриптов как правило используют модуль DBI. Это позволяет удобно открывать и закрывать соединения к СУБД, подготавливать и выполнять запросы к базе, обрабатывать ошибки и так далее. Если вы не имеете опыта работы с MySQL из Perl, рекомендуем вам книгу «Программирование на Perl DBI» (рус., англ.). Итак, пример работы с MySQL из Perl DBI:

      #!/usr/bin/perl use DBI; my $host = "u12345.mysql.masterhost.ru"; # вымышленный MySQL-сервер my $port = "3306"; # порт, на который открываем соединение my $user = "u12345"; # имя пользователя (вымышленное) my $pass = "password"; # пароль my $db = $user; # имя базы данных -по умолчанию равно имени пользователя print "Content-type: text/html\n\n"; $dbh = DBI->connect("DBI:mysql:$db:$host:$port",$user,$pass); $sth = $dbh->prepare("select field1 from table2");# готовим запрос $sth->execute; # исполняем запрос while ($ref = $sth->fetchrow_arrayref) < print "$$ref[0]\n"; # печатаем результат >$rc = $sth->finish; # закрываем $rc = $dbh->disconnect; # соединение

      В этом примере мы сначала определяем переменные с параметрами доступа к MySQL, далее выдаем HTTP-заголовок, так как это у нас скрипт для запуска через веб, затем соединяемся с базой, подготавливаем и отправляем select-запрос, получаем и печатаем результаты, после чего закрываем соединение. Это простейший скрипт для работы с MySQL из Perl. Более подробные примеры вы можете найти в этой статье.

      Как работать с MySQL из скриптов на PHP

      Для работы с MySQL вы можете использовать встроенный в язык PHP средства, поддержка которых уже осуществляется на хостинге. PHP имеет развитый и понятный интерфейс к этой СУБД, что делает работу с MySQL именно из PHP наиболее простой и удобной особенно для начинающих веб-мастеров и веб-программистов.

      # соединяемся с сервером и выбираем свою базу данных mysql_connect("u12345.mysql.masterhost.ru","u12345","password"); mysql_select_db("database"); # готовим и выполняем запрос к БД $query = "SELECT * FROM table"; $result = mysql_query($query) or die(mysql_error()); # выводим результаты выполнения запроса while($i = mysql_fetch_row($result)) 

      Полная документация на русском языке по работе с MySQL из PHP-скриптов находится здесь. Кроме описаний, там же вы найдете советы опытных пользователей и примеры использования функций, упоминаемых в документации. Также рекомендуем вам статью «Использование MySQL в PHP сценариях» на сервере hostinfo.ru.

      Загрузка данных с помощью LOAD DATA

      1. Параметр —local-infile=1
      2. Создать в домашней директории файл .my.cnf и в нем разрешить эту опцию для группы [mysql], которой пользуется данная утилита:
      [mysql] local-infile=1

      Включение данного режима из perl’а: необходимо в dsn при подключении указать файл конфигурации mysql (т.к. библиотека libmysql по умолчанию никаких дополнительных файлов конфигурации не читает) и группу в нем, в файле создать эту группу, и для этой группы выставить local-infile=1:

      Например, вписываем в ~/.my.cnf

      [perl] local-infile=1

      а в скрипте подключение оформляем так:

      my $dsn = "DBI:mysql:database:hostname;mysql_read_default_group=perl;". "mysql_read_default_file=~/.my.cnf"; my $dbh = DBI->connect($dsn, "username", "password") ||die "[err]: Can't connect to MySQL: $!";

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

      В функции mysql_connect() необходимо использовать аргумент 128 (значение константы CLIENT_LOCAL_FILES) в качестве пятого параметра.

      $dbh = mysql_connect($server, $user, $pass, false, 128);

      Дополнительные MySQL-база и MySQL-доступ (MySQL-пользователь)

      Пользователям предоставляется определенное количество баз MySQL в рамках приобретенного тарифа. При этом автоматически подключается одна база, и реквизиты доступа к ней сообщаются в письме с уведомлением о заведении услуг. Клиенты могут самостоятельно создавать дополнительные базы данных и MySQL-доступы.

      Для этого необходимо в контрольной панели в разделе Древо услуг выбрать площадку, для которой необходимо создать дополнительную услугу и в таблице «MySQL» выбрать команду «добавить» для услуги «MySQL-доступ (доп.)» или «MySQL-база (доп.)». Пароли доступа к базам данных можно изменить, вызвав команду «изменить» у требуемого MySQL-доступа.

      Вот еще немного инфы (которая, кстати работает, сам проверял)

      Импорт больших файлов sql в базу данных mysql

      Как изменить максимально допустимый размер импорта файла sql в базе данных Mysql.

      Для этого нужен доступ к папке \usr\local\mysql-5.1\ на сервере (или на локальном сервере denver).

      По умолчанию у вас установлен Максимально допустимый размер загружаемого файла 2 MB .

      По этому пути \usr\local\mysql-5.1\ открываем файл конфигурации my.cnf.

      Раскомментируйте следующие строки, если вы хотите изменить
      настройки InnoDB по умолчанию.
      #
      #innodb_data_home_dir = /usr/local/mysql-5.1/var/
      #innodb_data_file_path = ibdata1:10M:autoextend
      #innodb_log_group_home_dir = /usr/local/mysql-5.1/var/
      #innodb_log_arch_dir = /usr/local/mysql-5.1/var/
      # Вы можете установить .._buffer_pool_size размером до 50 — 80 %
      # оперативной памяти, но опасайтесь перерасхода
      innodb_buffer_pool_size = 16M
      innodb_additional_mem_pool_size = 2M — здесь меняем до нужного размера!
      #Устанавливайте .._log_file_size to 25 % от _buffer_pool_size
      innodb_log_file_size = 5M
      innodb_log_buffer_size = 8M
      innodb_flush_log_at_trx_commit=1
      innodb_lock_wait_timeout = 50

      Затем перезагружаем сервер и весело работаем с импортом больших sql файлов.

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

    Ваш адрес email не будет опубликован. Обязательные поля помечены *