×
Техническая документация

MySQL — базы данных

Наши пользователи могут использовать СУБД MySQL на своих виртуальных веб-серверах в рамках, предусмотренных соответствующими тарифами. Работающая в данный момент Версия: 5.0.x. Основная кодировка: cp1251 (Windows). Дополнительно поддерживается KOI8-R и UTF-8.

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

Что такое «базы данных» вообще и MySQL в частности

Под базами данных (БД) понимаются системы хранения и обработки данных, для доступа к которым используется язык SQL (Structured Query Language). Существует множество различных систем управления базами данных (СУБД), но в условиях хостинга как правило применяется СУБД MySQL. Причинами тому являются фактическая ориентация этой СУБД на хостинговые задачи, доступность на всех популярных серверных операционных системах, а также простота настройки и администрирования.

Выбирая между различными СУБД нужно учитывать, что если ваш веб-проект не отличается особой на него нагрузкой и сложностью решений, а вы, как программист и администратор, не обладаете достаточной квалификацией и опытом в работе с различными СУБД, альтернатив MySQL для вас в этом случае не очень много и наверняка стоит остановить выбор именно на MySQL. Адресуем вас к статье «Почему MySQL?» на сервере hostinfo.ru, где вы в подробностях узнаете о плюсах и минусах именно этой системы. Также на сайте разработчиков MySQL есть полная документация на русском языке.

Параметры и способы соединения с MySQL

  • Имя хоста (сервера), на котором размещен MySQL: uXXXXX.mysql.masterhost.ru
  • Порт: 3306
  • Логин: соответствует названию виртуальной площадки — uXXXXX
  • Пароль: указан в письме, которое пользователь получает при регистрации
  • Имя базы данных: соответствует названию виртуальной площадки — uXXXXX

В целях безопасности прямой доступ к серверам MySQL из интернета закрыт (исключение составляет ssh-туннель), а клиентам предоставляются следующие возможности администрирования и использования БД:

  • доступ к командной строке MySQL из unix shell
  • работа с БД из скриптов пользователя на Perl, PHP и т.д.
  • управление базой через веб-интерфейс phpMyAdmin. Реквизиты доступа сообщаются при регистрации, логин и пароль совпадают с реквизитами доступа к самой базе данных

SSH-туннелирование для соединения с удаленной базой данных MySQL

Используем ПО: Putty v.0.56 (последний стабильный релиз)


рис. 1

Первоначальные установки удаленного соединения:

  • Host Name: uXXXX.ssh.masterhost.ru — Хост для соединения по SSH, где uXXXX — номер вашей площадки.
  • Port: 22
  • Protocol: SSH

Далее переходим в закладку «Tunnels», как показано на следующем рисунке, используя данные параметры для подключения:

  • Source Port: 3306 — порт для локального подключения после установки туннеля.
  • Destination: Local — указываем явным образом, что подключение будет осуществляться на локальный порт, указанный выше.
  • Destination: uXXXX.mysql.masterhost.ru:3306 — хост, с которым будет осуществляться туннелирование по определенному порту (3306 — стандартно для MySQL)


рис. 2

Теперь необходимо добавить настройки в меню Forwarded ports нажатием кнопки «Add» как показано на рисунке ниже, для достижения следующего результата:

Оригинальная документация доступна на сайте разработчиков.


рис. 3

Настройка закончена, переходим в первое меню «Session», как на рисунке 1, и нажимаем кнопку «Open» для установки соединения с удаленным сервером по протоколу SSH. Проходим авторизацию по логину и паролю, и попадаем в bash, находясь локально на вашей площадке /home/uXXXX.

Тем временем, согласно нашим настройкам, происходит туннелирование соединения c локальным MySQL сервером, используя SSH протокол и внутренние средства Putty. Таким образом, соединяясь на локальный порт localhost:3306 и используя любое ПО для работы с MySQL сервером, мы получаем доступ к администрированию удаленной базы данных, одновременно защищая свое соединение по протоколу SSH.

phpMyAdmin — доступ к MySQL через веб-браузер

Для доступа к MySQL из обычного веб-браузера клиенты могут воспользоваться инструментом phpMyAdmin. Для этого обратитесь к странице http://phpmyadmin.masterhost.ru.

Реквизиты доступа к нему высылаются автоматически на контактный адрес, с момента приобретения тарифного плана с поддержкой БД MySQL.

phpMyAdmin — некоммерческое приложение, написанное на языке PHP, реализующее довольно удобный и функциональный Web-интерфейс к базе данных MySQL.

Подробное справочное руководство по phpMyAdmin вы можете посмотреть по адресам:

Для входа в интерфейс вам необходимо ввести:

  • Логин: соответствует названию виртуальной площадки — uXXXXX
  • Пароль: указан в письме, которое пользователь получает при регистрации

Вместо ХХХХХ необходимо прописать номер вашей виртуальной площадки.

Импорт и экспорт данных 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)) {
echo $i[0];
echo $i[1];
.....
} 

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

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

Начиная с версии MySQL 3.23.49, LOAD DATA LOCAL по умолчанию запрещено по соображениям безопасности, и его надо специально включать.

MySQL-сервер у нас работает с включенным LOAD DATA LOCAL, но необходимо включение данной функциональности со стороны клиента.

Для утилиты mysql есть несколько вариантов включения данной опции:

  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-доступа.

MySQL является самой популярной среди разработчиков СУБД. Популярность ее сопровождается и наличием исчерпывающей и очень качественной документации. Научившись пользоваться ею, вы не будете иметь проблем с доступом к качественным описанием нужных возможностей MySQL.

Также, рекомендуем ознакомиться со статьёй на нашем сайте, посвящённой оптимизации баз данных MySQL.