MySQL
Что такое MySQL?
MySQL - это многопользовательский, многопоточный сервер базы данных SQL. SQL (Structured Query Language) - наиболее популярный и стандартизированный язык для работы с базами данных. Например, Вы можете использовать SQL для хранения и быстрого доступа к информации о клиенте Вашего сайта. MySQL также быстр и достаточно гибок при использовании его для хранения файлов и изображений. Главные достоинства MySQL - скорость, устойчивость и легкость в использовании. Именно поэтому MySQL используется в огромном числе популярных веб-проектов.
Как начать работать с MySQL?
На нашем хостинге доступны два варианта использования сервера MySQL - общий и персональный. Общий существует на всех тарифных планах, кроме "Битрикс", персональный только на "Зенон-420", "Зенон-630" и "Зенон-840" и "Битрикс". Базы общего MySQL расположены на общем сервере, к ним предоставляется пользовательский доступ и только с сервера хостинга. Для персонального MySQL предоставляется доступ root, есть возможность подключения из любого места, а также использование собственного файла настроек my.cnf (по запросу). Количество баз для персонального MySQL не ограничено.
Данные для подключения к MySQL содержатся в инструкции, которая приходить в электронном сообщении на указанный при заключении договора электронный адрес (e-mail) , сразу после регистрации тарифного плана. С инструкциями к тарифным планам, так же можно ознакомится на нашем сайте.
Так же хост, порт, логин и имя базы можно посмотреть в Панели управления (инструкция). Там же можно проверить или поменять пароль логина в случае его утери.
Обратите внимание, что пароль нужно будет также сменить в конфигурации сайта, если он уже используется, в противном случае сайт может работать некорректно.
Существует несколько способов доступа к базе данных MySQL. Самый простой способ - использовать web-интерфейс phpMyAdmin.
Также можно управлять базой данных из командной строки, используя программу-клиент. Данная программа запускается из Unix-shell следующими командами:
для базы на общем сервере
mysql --host=baze.zenon.net --port=64000 --user=<Ваш логин> --password=<Ваш пароль> <Имя базы>
или
mysql -hbaze.zenon.net -P64000 -u<Ваш логин> -p <Имя базы>
для базы на персональном сервере
mysql --host=mysql.baze.domain_name --port=порт --user=<Ваш логин> --password=<Ваш пароль> <Имя базы>
или
mysql -hmysql.baze.domain_name -Pпорт -u<Ваш логин> -p<Ваш пароль> <Имя базы>
В данных примерах мы использовали следующие ключи программы-клиента mysql:
- –host (-h) - адрес сервера;
- –port (-P) - порт для подключения;
- –user (-u) - имя пользователя;
- –password (-p) - пароль для подключения; если оставить его пустым, пароль будет запрошен интерактивно; последним параметром указывается имя базы данных, с которой мы будем работать.
Создание баз данных MySQL
На хостинге можно создать несколько баз данных. При использовании общего сервера MySQL, база создается в Панели управления (инструкция). Имя пользователя и базы формируются путём добавления введенного Вами имени к техническому логину: техлогин_имябазы, например, vhXXXXX_dbase.
При использовании персонального сервера MySQL базу можно создать, например, в web-интерфейсе phpMyAdmin.
Обратите внимание, что при создании дополнительного web-сервера база данных для него автоматически создана не будет.
Как получить персональный MySQL-сервер?
На тарифных планах Зенон-420, Зенон-630 и Зенон-840 Вы имеете возможность бесплатно завести дополнительную услугу - персональный MySQL-сервер. На тарифном плане "Битрикс" персональный MySQL заводится по умолчанию. С его помощью Вы сможете решать более сложные задачи и получите дополнительные возможности по сравнению с общим MySQL. Основные отличия персонального MySQL-сервера следующие:
Возможность администрирования и настройки сервера, в т.ч. создания нескольких баз данных и заведения пользователей. При заведении персонального сервера Вы получаете на нём логин root и, соответственно, все права по его администрированию и управлению, вплоть до возможности ручной остановки и перезапуска сервера. Возможность доступа к базе данных извне, т.е. не с хостинговой машины.
Завести персональный 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, обратите внимание на это. Номер порта Вы увидите в регистрационной карточке после заведении услуги. В любой момент его также можно посмотреть в Панели управления.
Логин. По умолчанию в персональном MySQL заводится один логин - root.
Пароль для базы в персональном MySQL Вы задаёте при создании пользователя в PhpMyAdmin, там же его можно изменить, авторизовавшись с логином root.
Обратите внимание: мы не рекомендуем заводить персональный MySQL-сервер в том случае, если Вы никогда раньше не занимались самостоятельным администрированием MySQL или у Вас в штате нет соответствующего специалиста. В любом случае, пожалуйста, предварительно проконсультируйтесь на эту тему с отделом технической поддержки. Напишите нам на адрес support@zenon.net, опишите свою конфигурацию и тонкости, расскажите, почему Вы хотите получить отдельный сервер. Возможно, Ваши проблемы решаются без заведения этой услуги.
Можно ли получить доступ к MySQL не с хостинговой машины?
Да, можно. Для этого нужен персональный MySQL-сервер. После регистрации этой услуги зайдите в MySQL под пользователем root или имеющим аналогичные права и замените текущее значение поля Host для нужных логинов в таблице mysql.user на тот IP-адрес, с которого Вы будете обращаться к MySQL.
Если же Вы хотите ограничить доступ к серверу 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.
Пример команды:
mysql> update mysql.user set Host='1.2.3.4' where User='user_name';
где 1.2.3.4 - IP-адрес, с которого Вы будете обращаться к MySQL, а 'user_name' - логин пользователя в MySQL.
Обращаться нужно по адресу mysql.baze.domain_name, где domain_name - имя Вашего домена. Порт - тот, что Вам сообщали при заведении персонального MySQL.
Если Вы хотите пускать в MySQL отовсюду, вместо IP-адреса используйте символ '%' (процент).
Если Вы использовали для добавления нового пользователя не специальную команду 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 или SSH: mysql.baze.domain_name, где domain_name - имя Вашего основного домена. Логин - технический логин вида vhXXXXX, где XXXXX - цифры.
Возможность работать с сервером MySQL по FTP или SSH может быть полезна, например, в том случае, если по Вашему запросу на support@zenon.net для Вашего сервера было включено ведение протокола «медленных запросов». Файл протокола будет находиться в Вашей домашней директории на той машине, на которой работает MySQL.
Поддержка типов таблиц MyISAM и InnoDB
На Персональном MySQL-сервере и общем MySQL-сервере версии 5.x есть возможность использовать как MyISAM, так и InnoDB.
Чтобы перевести тип таблицы из MyISAM в InnoBD необходимо выполнить следующий запрос в MySQL:
ALTER TABLE table_name ENGINE = innodb;
Импорт/экспорт данных из MySQL
Для создания резервной копии базы MySQL и переноса её на другой сервер можно использовать web-интерфейс phpMyAdmin или утилиту mysqldump. Инструкция по работе с phpMyAdmin доступна по ссылке.
Утилита mysqldump позволяет получить SQL-скрипт (дамп базы), с помощью которого на другом сервере можно полностью восстановить базу данных (таблицы и данные в них).
Для того, чтобы создать дамп базы, можно использовать такую команду (XX - версия Вашей базы данных, например, mysql55):
/usr/local/mysqlXX/bin/mysqldump -u<логин1> -p -h<хост1> -P<порт1> <база1> > database.sql
После выполнения этой команды в файле database.sql и будет дамп базы данных. Этот файл Вы можете копировать на другие серверы.
Восстановить базу из дампа можно вот так:
/usr/local/mysqlXX/bin/mysql -u<логин2> -p -h<хост2> -P<порт2> <база2> < database.sql
Обратите внимание на следующую особенность: если Вы посмотрите содержимое файла дампа, то увидите, что он представляет из себя обычный текстовый файл, в котором содержится последовательность команд для заполнения базы - создание таблиц и запись в них данных. В процессе восстановления базы эти команды выполняются, таким образом перенося данные в базу. Если в дампе database.sql и в базе "база2" содержится таблица с одинаковым именем, то восстановление базы прервётся, и Вы получите сообщение об ошибке, поскольку нельзя будет создать таблицу с уже существующим именем. С другой стороны, при успешном завершении восстановления базы уже существующие в ней таблицы не будут затронуты, в базу просто добавятся новые таблицы из дампа. Поэтому, если Вы хотите полностью заменить содержимое базы без сохранения старых данных, то предварительно нужно удалить все таблицы из базы командой DROP TABLE.
В случае, если база данных имеет большой объем, то дамп можно сразу заархивировать, а при восстановлении базы передать команде mysql данные из архива, например, таким образом:
/usr/local/mysqlXX/bin/mysqldump -q -u<логин1> -p -h<хост1> -P<порт1> <база1> | gzip -c > dump.gz gunzip -cd dump.gz | /usr/local/mysqlXX/bin/mysql -u<логин2> -p -h<хост2> -P<порт2> <база2>
Обратите внимание на ключ -q (–quick). Его обязательно нужно использовать.
При очень больших объемах данных размер файла дампа может превысить 2 Гб - это максимально допустимый размер файла на хостинге. В этом случае при переносе базы можно вообще не создавать дамп, а выполнить подряд команды mysqldump и mysql:
/usr/local/mysqlXX/bin/mysqldump -q -u<пользователь1> -P<порт1> -h<хост1> -p<пароль1> <база1> | /usr/local/mysqlXX/bin/mysql -u<пользователь2> -P<порт2> -h<хост2> -p<пароль2> <база2>
Как получить доступ к базе данных из 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.
Как получить доступ к базе данных из mod_perl модулей?
Apache/Perl - проект, включающий всю мощь языка программирования Perl и http-сервера Apache. Доступ к MySQL осуществляется точно так же, как и из perl-скриптов. Для оптимизации работы mod_perl-модулей рекомендуется использовать модуль Apache::DBI. Данный модуль поддерживает соединение c базой данных на все время работы процесса, что значительно ускоряет работу с базой данных. При использовании данного модуля нет необходимости изменять Ваши скрипты, т.к. модуль работает абсолютно прозрачно. Дополнительную информацию о модуле DBI можно получить из документации, набрав в Unix-shell следующую команду:
perldoc Apache::DBI
Некоторые полезные ссылки по MySQL
Главный сайт разработчиков MySQL
Документация по MySQL (установка, использование, SQL)
Справочное руководство по MySQL