Рубрика «Базы данных»

Настраиваем MySQL для работы на VPS с 512Mb RAM

Saturday, 08 Oct 2011

Прикупил я тут клиенту хостинг под его новый сайт. Поскольку была необходимость в прикручивании библиотеки ffmpeg на сайт под Drupal, для того чтобы видюшки конвертились сами во флешки при добавлении, хотя для меня это не убедительно, так как на локальном компе можно нормально законвертить ручками. Ну вообщем по причине наличия ffmpeg решил взять самый дешевый VPS за 5,95$ у Burst.NET с 512 оперативы, 1MHz, 20Gb HDD, 10Tb трафа и 2IP + Direct Admin за 7$, так как настраивать руками меня ломало.

Взять то я его взял, но вебмастера не могли ничего делать, так как на любую операцию система ругалась:
ERROR 1135 (HY000): Can’t create a new thread (errno 11); if you are not out of available memory
gzip: error while loading shared libraries: cannot create cache for search path: Cannot allocate memory

подключившись, я обнаружил что при попытке логина по ssh вылетала ошибка:
bash: fork: Cannot allocate memory

(more…)

VN:F [1.9.21_1169]
Rating: 10.0/10 (6 votes cast)
VN:F [1.9.21_1169]
Rating: +2 (from 2 votes)

Настройка скриптов для импорта баз данных в mysql

Sunday, 17 Jul 2011

Данный пост является продолжением темы с импортом больших баз данных в mysql и здесь я расскажу как именно надо настроить скрипт для импорта базы данных.

Процедура установки обоих скриптов проста и начинается с их редактирования, после чего скрипты закачиваются на хост, куда, в ту же папку, кладется и выгрузка из базы данных, которую нам необходимо импортировать в новую базу на сервере mysql. На скрипт устанавливаем права доступа 755.
Теперь немного подробнее о настройке каждой из программ:

1. BigDump
Открываем файл скрипта bigdump.php, в котором отыскиваем и меняем следующие строки на необходимые значения
$db_server   = ‘localhost’;
$db_name     = ‘DB_NAME’;
$db_username = ‘DB_USER’;
$db_password = ‘DB_PASSWORD’;
$filename           = ‘OUR_DUMP.SQL’; /* Наш дамп базы данных который мы выгрузили вместе со скриптом*/
$db_connection_charset = ‘Charset’; /*Поскольку мы работаем с русскими базами, то вероятнее всего это utf8 или cp1251*/

После этого открываем в бродилке скрипт хттп://наш-сайт/папка/bigdump.php и видим свой файлец, после чего наживаем на линк Start import

2. Sypex Dumper
С этим скриптом еще проще, так как у него есть графический интерфейс, через который можно вводить все данные, а также делать экспорт и импорт баз данных. Собственно заливаем файлец скрипта dumper.php на хостинг, но с одной оговоркой- опять же в плане кодировок. По умолчанию скрипт работает с cp1251, так что если надо залить utf-8, то добавляем в следующую строку параметр принудительной замены кодировки:
define(‘RESTORE_CHARSET’, ‘forced->utf8′);

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

VN:F [1.9.21_1169]
Rating: 10.0/10 (7 votes cast)
VN:F [1.9.21_1169]
Rating: +3 (from 3 votes)

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

Sunday, 17 Jul 2011

Бывает возникает ситуация, в которой необходимо загрузить на сервер хостинга базу данных больше разрешенного хостингом в утилите управления базами данных 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

VN:F [1.9.21_1169]
Rating: 8.4/10 (31 votes cast)
VN:F [1.9.21_1169]
Rating: +7 (from 7 votes)

Создание форума без использования сервера баз данных

Friday, 10 Jun 2011

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

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

Так что если вы также морочитесь вопросом какие бывают форумы, для того чтобы не использовать сервер баз данных, то могу дать вам наводку, чисто куда копать. Ибо при нонешних ценах на хостинг, от 220 до 280 рублей за анлим, морочиться такой темой излишний головняк. Так что собственно гугль вам в помощь, для поиска описалова для форумов без использования баз данных – первые два, наиболее крутых продукта:

ExBB, Ikonboard, eForum 2.5, Forum203, QuickForum, Simple BBS, Tiny php forum, Ultimate PHP Board (UPB), x.forum, ZZ PHP Board, TextDB forum, PHPWind

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

VN:F [1.9.21_1169]
Rating: 10.0/10 (2 votes cast)
VN:F [1.9.21_1169]
Rating: +1 (from 1 vote)

Установка сервера БД MySQL

Wednesday, 30 Dec 2009

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

Итак установка мускуля. Ставить будем, актуальную на данный момент, версию MySQL 5.1.41. Существует три вида подобной установки и я пойду сверху вниз по мере усложнения.

(more…)

VN:F [1.9.21_1169]
Rating: 4.0/10 (1 vote cast)
VN:F [1.9.21_1169]
Rating: 0 (from 0 votes)

Дефрагментация и сжатие InnoDB

Wednesday, 02 Dec 2009

Есть у меня отличный почтарь, да не один, а несколько. Все они крутятся в связке Exim + DBmail + MySQL, конечно там есть много чего еще, но это основная связка, и нас из неё интересует последняя составляющая mySQL. Дело в том, что база пользователей и всего имеющегося мусора крутится по мускулем и хостится в базе типо InnoDB, которую необходимо постоянно сжимать и сканировать. Желательно каждую ночь, чтобы мусор скопившийся за день, не забивал место в табличном пространстве.

К большому сожалению база InnoDB работает по принципу ниппеля, т.е. туда дуй, оттуда х… Объясняя это доступным языком- табличное пространство может как расширяться так и уменьшаться, но физический размер базы при этом изменяется только в сторону увеличения. Проще говоря если у вас база была на максимуме 20гигов, и после этого вы её почистив освободили 90% пространства, внутри база у вас будет свободна на 90% (посмотреть свободное пространство можно командой в консоли управления сервером: mysql> show table status; ), но снаружи она так и будет занимать на диске 20 Гиг физического пространства диска. Так вот у меня, на одном из серверов, она успела разрастись, пока я прочухал тот факт, что забыл установить чистящий скриптик, до 250 Гигов, которые конечно работают как часы, но самой цифрой действуют мне на нервы. В этой связи надо что то делать. Но делать можно только одним способом, а именно перегнать базу в дамп sql и затянуть его обратно, предварительно дропнув имеющегося монстра. В этой связи, ровно как и для дефрагментации табличного пространства, нашим лучшим другом является системная утилита mysqldump, входящая в стандартный комплект поставки сервера mySQL.

*** Для дефрагментации InnoDB также можно использовать способ двойной перегонки :) базы, с помощью команды ALTER преобразовать её в тип MyISAM, а затем обратно в тип InnoDB.
(more…)

VN:F [1.9.21_1169]
Rating: 8.5/10 (2 votes cast)
VN:F [1.9.21_1169]
Rating: -2 (from 2 votes)