Использование MySQL на хостинге
| |
|
Что такое MySQL?
MySQL - это
многопользовательский, многопоточный сервер базы данных SQL.
SQL (Structured Query Language) - наиболее популярный и стандартизированный
язык для работы с базами данных. Например, Вы можете использовать SQL для
хранения и быстрого доступа к информации о клиенте Вашего сайта. MySQL также
быстр и достаточно гибок при использовании его для хранения файлов и
изображений. Главные достоинства MySQL - скорость, устойчивость и легкость
в использовании. Именно поэтому MySQL используется в огромном числе
популярных веб-проектов.
Как начать работать с MySQL?
Внимание! Для первого
обращения к MySQL Вам необходимо установить пароль обращения к Вашей базе
на Сервере Статистики.
Выберите услугу "www.domain_name" (domain_name - имя Вашего домена), далее - ссылка "Пароль MySQL".
Имя пользователя и базы формируются в соответствии с названием Вашего
сервера по следующему правилу: все точки заменяются на знак
подчеркивания.
Несколько примеров: если Ваш сервер называется host.ru, то имя пользователя
и название базы MySQL будет host_ru. Если Ваш сервер называется
subdomain.new-host.com, то имя пользователя
и название базы MySQL будет subdomain_new-host_com.
К MySQL необходимо обращаться по tcp на машину baze.domain_name,
где domain_name - имя Вашего домена. Например, baze.host.ru.
Если зону DNS для домена поддерживаете Вы сами, нужно
сделать в ней такую запись:
baze IN CNAME baze.domain_name.postman.ru.
Или же просто используйте адрес baze.domain_name.postman.ru для подключения к
серверу MySQL.
Порт для подключения - 64000.
Для контрактов "Стартовый" и "Стандартный" обращения к базе MySQL возможны только с хостинговой
машины, а для контрактов
"Активный",
"Максимальный" и
"МаксимальныйПлюс"
может быть заведен
отдельный MySQL-сервер, соединения к которому можно устанавливать из любого
места сети интернет. Подробнее о заведении отдельного MySQL-сервера читайте
в разделе "Как получить персональный
MySQL-сервер?".
Существует несколько способов доступа к базе данных MySQL. Самый простой
способ - управление базой данных, используя программу-клиент. Данная
программа запускается из Unix-shell следующей командой:
mysql --host=baze.domain_name --port=64000
--user=<Ваш логин> --password=<Ваш пароль> <Имя базы>
или
mysql -hbaze.domain_name -P64000
-u<Ваш логин> -p <Имя базы>
В данных примерах мы использовали следующие ключи программы-клиента mysql:
- --host (-h) - адрес сервера;
- --port (-P) - порт для подключения;
- --user (-u) - имя пользователя;
- --password (-p) - пароль для подключения; если оставить его пустым, пароль будет запрошен интерактивно;
- последним параметром указывается имя базы данных, с которой мы будем работать.
Не могу получить доступ к базе данных.
Наиболее частой причиной отказа в доступе к базе данных - неправильный
пароль. Исправить данную ситуацию можно, изменив пароль доступа к базе на
сервере статистики. Зайдите туда с Управляющим или техническим хостинговым
логином, выберите услугу www.domain_name и пройдите по ссылке "Пароль MySQL".
Также причиной отказа в доступе может стать несоответствие имени хоста, с
которого производится подключение к MySQL. Единственным хостом, с которого
возможно получить доступ к MySQL - это хостинговая машина (хост home.domain_name).
Как получить доступ к базе данных из cgi-скриптов?
Для написании cgi-скриптов очень часто используется язык perl, поэтому
приведем пример обращения к базе данных используя этот язык. Для доступа к
базе данных необходимо воспользоваться perl-модулем DBI. С помощью данного
модуля можно работать со многими популярными базами данных. Ниже приводится
простой perl-скрипт, который выводит список таблиц в базе данных.
#!/usr/local/bin/perl
#
# Используемые модули
#
use DBI;
# Имя хоста, на котором работает MySQL
$hostname="baze.domain_name";
# Номер порта
$port="64000";
# Имя пользователя
$user="login";
# Пароль доступа к базе данных
$password="password";
# Имя базы (совпадает с именем пользователя)
$database=$user;
# Вывод http-заголовка
print "Content-type: text/html\n\n";
# Подключение к базе
$dbh =
DBI->connect("DBI:mysql:$database:$hostname:$port",$user,$password);
# Подготовка запроса
$sth = $dbh->prepare("SHOW TABLES");
# Выполнение запроса
$sth->execute;
while ($ref = $sth->fetchrow_arrayref)
{
print "$$ref[0]\n" # Печатаем результат
}
# Отключаемся от базы
$rc = $sth->finish;
$rc = $dbh->disconnect;
Дополнительную информацию о модуле DBI можно получить из документации,
набрав в Unix-shell следующую команду:
perldoc DBI
Как получить доступ к базе данных из php-скриптов?
PHP - это удобный язык программирования, предназначенный для встраивания в
web-страницы.
На Вашем сервере PHP собран с поддержкой соединений с MySQL. Ниже приводится фрагмент
php-документа, который выполняет такую же функцию, как и описанный выше perl-скрипт.
<?php
$conn=mysql_connect("baze.domain_name:64000","login","password");
$result = mysql("login","SHOW TABLES",$conn);
while (list($table) = mysql_fetch_row($result)) {
print("$table<br>\n");
}
?>
Дополнительную информацию по использованию функций для работы с MySQL из
php можно получить на сайте разработчиков PHP:
http://www.php.net/mysql
Как получить доступ к базе данных из mod_perl модулей?
Apache/Perl - проект, включающий всю мощь языка программирования Perl и
http-сервера Apache. Доступ к MySQL осуществляется точно так же, как и из
perl-скриптов. Для оптимизации работы mod_perl-модулей рекомендуется
использовать модуль Apache::DBI. Данный модуль поддерживает соединение c
базой данных на все время работы процесса, что значительно ускоряет работу с
базой данных. При использовании данного модуля нет необходимости изменять
Ваши скрипты, т.к. модуль работает абсолютно прозрачно. Дополнительную
информацию о модуле DBI можно получить из документации, набрав в Unix-shell
следующую команду:
perldoc Apache::DBI
Дополнительные web-серверы и дополнительные базы MySQL
Для каждой услуги "Дополнительный web-сервер"
автоматически создается дополнительный пользователь в общем MySQL с именем,
соответствующем имени дополнительного сервера, - все точки заменяются
на подчеркивание. Кроме того, создается дополнительная база с таким же именем.
Новый пользователь имеет права доступа только к новой базе.
Пример: если Вы зарегистрировали дополнительный сервер new-host.ru, в MySQL будет создана база new-host_ru и создан пользователь new-host_ru с доступом к базе new-host_ru.
Все прочие параметры подключения к базе MySQL устанавливаются
аналогично основному серверу:
- пароль для MySQL задается на Сервере Статистики (нужно выбрать соответствующую
www-услугу для дополнительного web-сервера);
- порт для подключения - 64000;
- хост для подключения baze.имя_дополнительного_сервера.
Кроме того, существует возможность зарегистрировать дополнительные базы
MySQL без регистрации дополнительного web-сервера. Услуга "Дополнительная
база MySQL" регистрируется только для основного сервера. Для того, чтобы
ее зарегистрировать, нужно зайти на Сервер Статистики, выбрать услугу
www.имя_основного_сервера, а затем - "Добавить: доп. база MySQL".
Задайте имя для новой услуги. После этого в общем MySQL будет создан дополнительный пользователь с именем,
соответствующем имени дополнительной услуги, - все точки заменяются
на подчеркивание. Кроме того, создается дополнительная база с таким же именем.
Новый пользователь имеет права доступа только к новой базе.
Пример: если Вы зарегистрировали дополнительную базу MySQL вида
add-baza.host.ru, в MySQL будет создана база add-baza_host_ru и создан
пользователь add-baza_host_ru с доступом к базе add-baza_host_ru.
В качестве хоста для подключения нужно использовать адрес
baze.имя_основного_сервера.
Как получить персональный MySQL-сервер?
На тарифных планах
"Активный",
"Максимальный" и
"МаксимальныйПлюс"
Вы имеете возможность бесплатно
завести дополнительную услугу - персональный MySQL-сервер. С его помощью Вы
сможете решать более сложные задачи и получите дополнительные возможности по
сравнению с общим MySQL. Основные отличия персонального MySQL-сервера
следующие:
- Возможность администрирования и настройки сервера, в т.ч. создания
нескольких баз данных и заведения пользователей. При заведении персонального
сервера Вы получаете на нём логин root и, соответственно, все права по
его администрированию и управлению, вплоть до возможности ручной остановки и
перезапуска сервера.
- Возможность доступа к базе данных извне, т.е. не
с хостинговой машины.
- Более высокая производительность. Персональные MySQL-серверы
работают на отдельном физическом сервере и в случае, если Ваш проект требует
интенсивной работы с базами данных, использование персонального сервера
может дать Вам некоторый выигрыш в скорости работы.
Кроме того, мы сами можем предложить Вам перейти на персональный MySQL в
том случае, если нагрузка, создаваемая Вами на общий MySQL-сервер, слишком
велика.
Завести персональный MySQL-сервер Вы можете самостоятельно с помощью Cервера Cтатистики. Для этого Вам нужно
авторизоваться на нем с техническим или управляющим логином и
соответствующим паролем, далее выбрать в списке услуг нужный виртуальный
сервер по ссылке "www.domain_name", где domain_name - название основного
домена, и пройти по ссылке "Добавить: персональный MySQL". Будьте
внимательны и пройдите процесс регистрации до конца! По окончании его Вы
сможете распечатать регистрационную карточку, в которой будут указаны все
необходимые параметры для подключения к серверу: имя хоста, логин, пароль,
номер порта. Сохраните эти данные и не теряйте. Для персонального MySQL у
Вас будут другие настройки доступа к базе, отличные от общего MySQL:
Хост, где работает MySQL-сервер - mysql.baze.domain_name, где
domain_name имя Вашего основного домена. Например, mysql.baze.aaa.ru или
mysql.baze.bbb.com. Если зону DNS для домена поддерживаете Вы сами, нужно
сделать в ней такую запись:
mysql.baze IN CNAME mysql.baze.domain_name.postman.ru.
Порт, на котором работает Ваш персональный сервер - не стандартный для
нашего хостинга порт 64000, обратите внимание на это. Номер порта Вы
увидите в регистрационной карточке после заведении услуги. В любой момент
его также можно посмотреть на Сервере Статистики в информации по услуге
"PersonalMySQL".
Логин. По умолчанию в персональном MySQL заводится один логин - root.
Пароль для базы MySQL Вы задаёте при регистрации услуги. Также его Вы
можете изменять в любое время с помощью Сервера Статистики.
Обратите внимание: мы не рекомендуем заводить
персональный MySQL-сервер в том случае, если Вы никогда раньше не занимались
самостоятельным администрированием MySQL или у Вас в штате нет
соответствующего специалиста. В любом случае, пожалуйста, предварительно
проконсультируйтесь на эту тему с отделом технической поддержки. Напишите
нам на адрес support@zenon.net,
опишите свою конфигурацию и тонкости, расскажите, почему Вы хотите получить
отдельный сервер. Возможно, Ваши проблемы решаются без заведения этой
услуги.
Как получить общий MySQL 5 версии?
Обращаем Ваше внимание, что для клиентов тарифных планов "Активный",
"Максимальный" и
"МаксимальныйПлюс" мы настоятельно рекомендуем использовать
Персональный MySQL, который Вы можете подключить самостоятельно той версии, которая Вам необходима,
и который обладает гораздо более широкими возможностями и производительностью, по сравнению с общим.
Кроме явной выгоды в производительности и удобстве, переход на него гораздо менее затруднителен,
и осуществляется практически без простоев в работе сайта и ошибок, которые часто возникают при смене
версии общего MySQL.
Вы можете поменять текущую используемую версию общего MySQL с 4 на 5,
написав заявку в нашу техническую поддержку support@zenon.net.
В письме желательно указать желаемое время изменения версии MySQL, т.к.
данные работы занимают около часа времени, в течение которого Ваш сайт может оказаться
временно недоступен.
Можно ли получить доступ к MySQL не с хостинговой
машины?
Да, можно. Для этого нужен персональный
MySQL-сервер. После регистрации этой услуги зайдите в MySQL под
пользователем root или имеющим аналогичные права и замените текущее значение
поля Host для нужных логинов в таблице mysql.user на тот IP-адрес, с
которого Вы будете обращаться к MySQL. Пример команды:
mysql> update mysql.user set Host='1.2.3.4' where User='пользователь';
где 1.2.3.4 - IP адрес, с которого Вы будете обращаться к MySQL, а 'пользователь' -
логин пользователя в MySQL. Обращаться нужно к машине mysql.baze.domain_name, где
domain_name - имя Вашего домена. Порт - тот, что Вам сообщали при заведении
персонального MySQL.
Если Вы хотите пускать в MySQL отовсюду, вместо IP-адреса используйте
символ '%' (процент). Однако, мы бы не советовали так поступать по
соображениям безопасности.
Если же Вы хотите ограничить доступ к серверу MySQL только с хостинговой
машины, мы рекомендуем Вам задать в качестве разрешенного хоста подсети
195.2.72.0/24 и 62.113.86.0/24, что в нотации MySQL выражается как "195.2.72.%" (и,
соответственно, "62.113.86.%"). Чтобы задать две подсети, необходимо продублировать
строку в таблице user с нужным пользователем. Отличаться в этих строках будет лишь поле
Host: в одной строке - 195.2.72.%, в другой - 62.113.86.%.
В данных сетях
размещаются только серверы хостинга, поэтому, с точки зрения
безопасности, данные маски практически соответствует заданию имени хоста с
размещенными на нем виртуальными серверами. Обратите особое внимание на то,
что нужно указывать полностью две сети, а не тот отдельный IP, на котором сейчас
находится Ваш сервер. Дело в том, что из-за применяемой на хостинге системы
балансировки нагрузки IP-адрес той машины, на которой расположен Ваш сервер,
может изменяться. Но он всегда будет в блоках 195.2.72.0/24 и 62.113.86.0/24.
Если Вы использовали для добавления нового пользователя не специальную
команду GRANT, а
вручную вставили в таблицы mysql.user и mysql.db новые записи, MySQL не
будет пускать таких пользователей, возвращая сообщение вида "ERROR 1044:
Access denied for user...". Для того, чтобы новый пользователь смог
воспользоваться выданными ему правами, необходимо выполнить команду FLUSH
PRIVILEGES или запустить из unix-shell программу mysqladmin с параметром
flush-privileges, чтобы сообщить MySQL-серверу о необходимости перечитать
таблицу прав доступа. Более подробно об этой особенности MySQL написано в
разделе документации "Когда
изменения в привилегиях вступают в силу".
Обращаем Ваше внимание на то, что в случае изменения поля Host,
ответственность за неправомерные действия третьих лиц, которые могут
наступить в результате подбора пароля, кражи его у Вас и так далее, ложится
исключительно на Вас.
Доступ к серверу персонального MySQL по FTP и SSH.
Если Вы используете персональный MySQL-сервер, у
Вас есть возможность обращаться на ту физическую машину, на которой запущен
MySQL-сервер, по протоколу FTP.
Имя сервера, к которому нужно обращаться по FTP -
mysql.baze.domain_name, где domain_name - имя Вашего основного домена. В
соответствии с документацией по управлению виртуальным сервером, у Вас есть
технический логин вида login@postman.ru. Для входа на сервер по FTP в
качестве логина (имени пользователя) нужно указывать то, что содержится до
символа @ в техническом логине. То есть, если Ваш технический логин (для
сервера статистики, например) vasya@postman.ru, то для входа по FTP
используйте просто логин vasya и соответствующий пароль.
Возможность работать с сервером MySQL по FTP может быть полезна, например, в
том случае, если по Вашему запросу на support@zenon.net для Вашего сервера
было включено ведение протокола "медленных запросов". Файл протокола будет находиться в
Вашей домашней директории на той машине, на которой работает MySQL.
Кроме доступа по FTP, также имеется возможность доступа на персональный
MySQL-сервер по протоколу ssh, если Вы предпочитаете работать в unix-shell.
Для этого Вы можете заходить ssh-клиентом
на хост mysql.baze.domain_name с техническим логином и паролем точно
так же, как и на виртуальный сервер.
Изменение пароля для доступа к базе данных.
Изменить пароль доступа к базе данных общего MySQL можно самостоятельно,
зайдя на сервер статистики https://stat.zenon.net/ под Управляющим или
техническим логином для Вашего сервера. Выберите услугу "www.Ваш_домен" -
далее ссылка "Пароль MySQL". В поле MySQL password указываете новый пароль.
После нажатия кнопки Update пароль доступа к базе будет изменен. Если Вы
меняете пароль для персонального сервера MySQL, то нужно выбрать в списке
услуг "PersonalMySQL4" или "PersonalMySQL5", далее ссылку "Пароль PersonalMySQL4" ("Пароль PersonalMySQL5"). Новый пароль
будет установлен для пользователя root.
Поддержка русского языка в MySQL
Вопрос с поддержкой русского возникает при попытке сортировать данные на
русском языке в базе. Для того, чтобы сортировка работала корректно,
необходимо помещать данные в базу в кодировке Windows-1251.
Используя услугу "PersonalMySQL5", Вы можете работать с любыми кодировками
в MySQL, в том числе с UTF-8.
На общем MySQL-сервере версии 4.x доступен тип таблиц MyISAM.
На Персональном MySQL-сервере и общем MySQL-сервере версии 5.x есть возможность использовать как MyISAM, так и InnoDB.
Чтобы перевести тип таблицы из MyISAM в InnoBD необходимо выполнить следующий запрос в MySQL:
ALTER TABLE table_name ENGINE = innodb;
Импорт/экспорт данных из MySQL
Для создания резервной копии базы MySQL и переноса её на другой сервер
используется утилита mysqldump. Данная утилита позволяет получить
SQL-скрипт (дамп базы), с помощью которого на другом сервере можно полностью
восстановить базу данных (таблицы и данные в них).
Для того, чтобы создать дамп базы, можно использовать такую команду:
mysqldump -u<логин1> -p -h<хост1> -P<порт1> <база1> > database.sql
После выполнения этой команды в файле database.sql и будет дамп базы
данных. Этот файл Вы можете копировать и переносить на другие серверы, где
восстановить структуру и содержание базы.
Восстановить базу из дампа можно вот так:
mysql -u<логин2> -p -h<хост2> -P<порт2> <база2> <
database.sql
Обратите внимание на следующую особенность. Если Вы посмотрите
содержимое файла дампа, то увидите, что он представляет из себя обычный
текстовый файл, в котором содержится последовательность команд для
заполнения базы - создание таблиц и запись в них данных. В процессе
восстановления базы эти команды выполняются, таким образом перенося данные в
базу. Если в дампе database.sql и в базе база2 содержится
таблица с одинаковым именем, то восстановление базы прервётся и Вы получите
сообщение об ошибке, поскольку нельзя будет создать таблицу с уже
существующим именем. С другой стороны, при успешном завершении
восстановления базы уже существующие в ней таблицы не будут затронуты, в
базу просто добавятся новые таблицы из дампа. Поэтому, если Вы хотите
полностью заменить содержимое базы без сохранения старых данных, то
предварительно нужно удалить все таблицы из базы командой DROP
TABLE.
В случае, если база данных имеет большой объем, то дамп можно сразу
заархивировать, а при восстановлении базы передать команде mysql данные из
архива, например, таким образом:
mysqldump -q -u<логин1> -p -h<хост1> -P<порт1> <база1> | gzip -c > dump.gz
gunzip -cd dump.gz | mysql -u<логин2> -p -h<хост2> -P<порт2> <база2>
Обратите внимание на ключ -q (--quick).
Его обязательно нужно использовать.
При очень больших объемах данных размер файла дампа может превысить 2
Гб - это максимально допустимый размер файла на хостинге. В этом
случае при переносе базы можно вообще не создавать дамп, а выполнить подряд
команды mysqldump и mysql:
mysqldump -q -u<пользователь1> -P<порт1> -h<хост1> -p<пароль1>
<база1> | mysql -u<пользователь2> -P<порт2> -h<хост2>
-p<пароль2> <база2>
Более подробно о переносе данных в MySQL Вы можете узнать из нашей
статьи "Резервное копирование баз MySQL".
Как сделать web-интерфейс к MySQL.
Для этого Вы можете воспользоваться phpMyAdmin,
который централизованно установлен на виртуальном unix-хостинге. Подробно о
phpMyAdmin можно прочитать в соответствующем
разделе нашей документации.
Некоторые полезные ссылки по MySQL
Ниже приводится список полезных ссылок на сайты, посвященные MySQL.