Техническая поддержка

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 или утилиту mysqldumpXX (где XX - версия Вашей базы данных, например, mysqldump55). Инструкция по работе с phpMyAdmin доступна по ссылке.

Утилита mysqldump позволяет получить SQL-скрипт (дамп базы), с помощью которого на другом сервере можно полностью восстановить базу данных (таблицы и данные в них).

Для того, чтобы создать дамп базы, можно использовать такую команду:

mysqldumpXX -u<логин1> -p -h<хост1> -P<порт1> <база1> > database.sql

После выполнения этой команды в файле database.sql и будет дамп базы данных. Этот файл Вы можете копировать на другие серверы.

Восстановить базу из дампа можно вот так:

mysqlXX -u<логин2> -p -h<хост2> -P<порт2> <база2> < database.sql

Обратите внимание на следующую особенность: если Вы посмотрите содержимое файла дампа, то увидите, что он представляет из себя обычный текстовый файл, в котором содержится последовательность команд для заполнения базы - создание таблиц и запись в них данных. В процессе восстановления базы эти команды выполняются, таким образом перенося данные в базу. Если в дампе database.sql и в базе "база2" содержится таблица с одинаковым именем, то восстановление базы прервётся, и Вы получите сообщение об ошибке, поскольку нельзя будет создать таблицу с уже существующим именем. С другой стороны, при успешном завершении восстановления базы уже существующие в ней таблицы не будут затронуты, в базу просто добавятся новые таблицы из дампа. Поэтому, если Вы хотите полностью заменить содержимое базы без сохранения старых данных, то предварительно нужно удалить все таблицы из базы командой DROP TABLE.

В случае, если база данных имеет большой объем, то дамп можно сразу заархивировать, а при восстановлении базы передать команде mysql данные из архива, например, таким образом:

mysqldumpXX -q -u<логин1> -p -h<хост1> -P<порт1> <база1> | gzip -c > dump.gz
  gunzip -cd dump.gz | mysqlXX -u<логин2> -p -h<хост2> -P<порт2> <база2>

Обратите внимание на ключ -q (–quick). Его обязательно нужно использовать.

При очень больших объемах данных размер файла дампа может превысить 2 Гб - это максимально допустимый размер файла на хостинге. В этом случае при переносе базы можно вообще не создавать дамп, а выполнить подряд команды mysqldump и mysql:

mysqldumpXX -q -u<пользователь1> -P<порт1> -h<хост1> -p<пароль1> <база1> | mysqlXX -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