Mysql администрирование пакета


Содержание

Установка сервера MySQL и обзор средств его управления и администрирования

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

Начнем мы как всегда с основ и определений.

Что такое MySql?

MySql – это бесплатная система управления базами данных (СУБД). Компания, которая разработала эту СУБД, разрабатывала ее чисто для своих нужд, это было в начале 90-х годов, но впоследствии этот программный продукт вышел за рамки этой компании и приобрел просто огромную популярность, за счет своей простоты и компактности, на сколько мне известно, первые дистрибутивы этого сервера были примерно 4 мегабайта!

MySql можно запустить на разных платформах, например: Windows, Linux, Mac OS X, FreeBSD, HP-UX, Solaris и других. И это также вызывает большой интерес всех к этой СУБД.

Широкую популярность MySql приобрела в Интернете, в качестве сервера баз данных. Конечно по сравнению с другими, платными СУБД, такими как Oracle или Microsoft SQL Server, MySql немного проигрывает, но в большинстве (а для web мастеров практически во всех) случаях она полностью удовлетворяет все потребности. Кстати, MySql сегодня принадлежит Oracle, поэтому можно сделать вывод, что MySql еще долго будет жить!

Идем далее, всем рекомендую использовать версии MySql не ниже 5.1, так как версии ниже просто на порядок уступают таким версиям как 5.5. Про версии 3 и 4 можете просто забыть, это уже прошлый век, и если Вам предложат использовать эти версии (например, хостер), то отказывайтесь и ищите другой хостинг.

Теперь пару советов как можно и нужно использовать MySql при разработке сайта. Кстати, MySql поддерживают практически все популярные языки программирования, например: Delphi, C, C++, Java, Perl, PHP, Python, Rubyи другие.

Некоторые думают, что MySql это чисто база данных и в ней хранятся только данные и все, она больше ничего не умеет. На самом деле это не так, MySql обладает практически всеми возможностями, которыми должна обладать настоящая СУБД это: возможность писать собственные процедуры, функции и много чего еще. И Вы должны использовать это, так как это, просто отлично скажется на работе сайта (например, в быстроте его работы). Так вот, мой Вам совет, при написании web приложения используйте только вызов процедур и функций в коде, и не используйте целиковые sql запросы, так как, во-первых, это намного безопасней, во-вторых, это намного быстрей. Например, когда Вы посылаете sql запрос на сервер, сервер его сначала проверяет на синтаксис, потом выполняет запрос, потом передает данные обратно, а при вызове процедуры уже все, так сказать откомпилировано и выполняется чисто на сервере, а сервер возвращает результат, в итоге получается намного быстрей, чем при обычном запросе.

Если Вас заинтересовала эта СУБД, и Вы захотели, установить ее себе на компьютер, это делается очень просто, сейчас я немного об этом расскажу. Но с начала, скажу, где ее можно скачать, ответ один, только на официальном сайте MySql, например, для Windows скачать можно здесь, кстати, совет распространяется не только на MySql, а на все программное обеспечение.

Установка MySql сервера на Windows

Перейдем к установке, я устанавливаю версию 5.5.28.

В первом окошке просто жмите next, потом соглашайтесь с лицензией и снова next, далее не парьтесь и жмите Tupical

и все жмите на install. Дождитесь следующего окошка поставьте галку, для того чтобы запустился мастер настройки этого сервера, можно конечно не ставить, это все равно можно настроить и потом, но зачем откладывать.

И на первом же окошке просто жмите next, далее выбираем Detailed Configuration, для того чтобы Вы посмотрели по больше настроек.

На следующем окошке выберите тип вашей машины, если Вы устанавливаете на домашнем компе, то выбирайте по умолчанию – Developer Machine. Далее, лучшим вариантом будет снова оставить как есть — Multifunctional Database.

Далее предлагается выбрать, где будут располагаться файлы баз данных, оставьте как есть (если конечно хотите, то можете поменять). На следующем окне предлагается выбрать вариант работы базы данных на основе количества одновременных подключений, здесь выбирайте, как Вам хочется, я оставлю по умолчанию.

Далее указываем порт, на котором будет работать сервер, и ставим галку для внесения изменений в брандмауэр Windows.

Далее, конечно же, выбираем кодировку utf-8.

На следующем окне поставьте галку Include Bin Directory in Windows Path.

Далее введите пароль для пользователя root. Ну и все жмите Execute.

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

Обзор средств управления и администрирования MySQL

  • MySql.exe – консольное приложение (в комплекте, и понятно что бесплатное);
  • MySQL Query Browser – инструмент для разработчиков (бесплатный), не имеет возможности загрузки и выгрузки данных в excel;
  • MySQL Administrator – инструмент для администраторов (бесплатный);
  • Navicat For Mysql – хороший инструмент управления, как для администраторов, так и для программистов (платный);
  • MySQL Workbench — инструмент для визуального проектирования баз данных, также для администрирования и разработки (есть в двух редакциях платная и бесплатная);
  • PHPMyAdmin – Web-инструмент для управления MySQL, написанный на php, бесплатный, кстати, именно его используют практически все хостинговые компании в Интернете, в связи с этим имеет широкую популярность, но на домашнем компьютере я бы использовал что-нибудь другое.
  • EMS SQL Management Studio for MySQL – платное решение для разработки баз данных в MySql, а также с возможностью полного администрирования.
  • dbForge Studio for MySQL – его я оставил напоследок, так как лично меня этот инструмент устраивает больше других, поэтому про него я расскажу чуть больше.

dbForge Studio for MySQL – описание и установка

dbForge Studio for MySQL – бесплатный инструмент управления СУБД MySQL. В нем есть много всевозможных функций, такие как: загрузка и выгрузка данных в разных форматах, в том числе и в excel, удобный интерфейс для разработки процедур и функций, и много еще всяких разных прибомбасов. Короче рекомендую его всем!

Давайте рассмотрим установку этого программного обеспечения.

Примечание! Для работы этого продукта должен быть установлен .NET Framework 2.0 или выше.

На первом окошке просто жмите далее, затем принимайте лицензионное соглашение и жмите далее, потом можете, если хотите, изменить путь установки данного приложения, потом снова далее, и снова далее, затем поставьте все галочки, чтобы программа ассоциировала sql скрипты, файлы связанных таблиц и так далее.

И на последнем окошке я поставил галку «Выполнить оптимизацию», а далее жмем установить. И, наверное, можно сразу нажать запустить приложение. При первом старте у Вас появится стартовая страница, если хотите, почитайте, а если Вы нажмете на «Закрыть», то у Вас появится вот такое окно подключения к базе данных.

Заполняйте примерно вот так, если Вы подключаетесь к локальному компьютеру, только пароль укажите тот, который Вы указывали при установке сервера MySql. И выберите любую базу данных (на картинке база proba, она у меня была заранее создана, у Вас, ее не будет). И жмите проверить, если выскочило сообщение «Соединение установлено», то жмите ОК и еще раз ОК и, наконец-то, Вы подключитесь к серверу MySql.

Я думаю у Вас во всем выше перечисленном проблем возникнуть не должно, и на этом сегодня все, всем рекомендую использовать сервер баз данных MySql, причем используя все его возможности. Удачи!

Введение в администрирование MySQL

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

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


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

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

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

Обзор задач администрирования

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

  • Сервер MySQL. Сервер mysqld выполняет все операции с базами данных и таблицами. Для запуска сервера, мониторинга его работы и перезапуска в случае сбоя применяется программа safe_mysqld (демон)
  • Клиентские программы и утилиты MySQL. Для взаимодействия с сервером и выполнения ряда административных задач используются различные программы MySQL, наиболее важными среди которых являются следующие:
    • mysql. Интерактивная программа, позволяющая отправлять SQL-запросы на сервер и просматривать результаты их выполнения.
    • mysqladmin. Административная программа, позволяющая выполнять такие операции, как завершение работы сервера, создание и удаление баз данных. Эту же программу можно применять для проверки состояния сервера, если что-то в его работе не так.
    • isamchk или myisamchk. Утилиты, предназначенные для анализа и оптимизации таблиц, а также восстановления их в случае повреждения.
    • mysqldump. Средство резервирования баз данных или их копирования на другой сервер.
    • SQL — язык сервера. Некоторые задачи администрирования можно выполнить только с помощью утилиты командной строки mysqladmin . Иногда гораздо эффективней справиться с задачей может администратор, который может «общаться» с сервером на его языке. Предположим, что необходимо проверить, почему привилегии пользователя работают вовсе не так, как ожидается. Напрямую «поговорить» с сервером на человеческом языке, к сожалению, нельзя. Зато можно воспользоваться программой-клиентом mysql и послать SQL-запрос для анализа таблиц разрешений.

    Незнакомым с операторами SQL пользователям следует разобраться по крайней мере в базовых принципах их работы. Незнание SQL — достаточно серьезное препятствие, и время, затраченное на изучение этого языка, окупится очень быстро. Конечно, чтобы стать настоящим «знатоком SQL «, придется напряженно учиться и достаточно долго практиковаться. Познакомиться же с основами этого языка можно за весьма короткий промежуток времени. Более детально о языке SQL и использовании клиентской программы, работающей с командной строкой, рассказывается в курсе «Введение в MySQL».

    Создание пользователя MySQL

    После того, как вы установили и настроили MySQL, вам необходимо создать базы данных, таблицы и пользователей. Конечно, вы можете сделать это от имени суперпользователя root, но это не безопасно. Да и большинство приложений не позволят вам такой вольности, например, Phpmyadmin не даст авториrзоваться от имени суперпользователя.

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

    Создание пользователя mysql

    1. Как создать пользователя MySQL

    Предположим, что база данных уже создана и называется test_database. Нам нужно открыть клиент базы данных. Для этого наберите в терминале:

    Теперь можно работать. Для создания пользователя используется команда CREATE USER, её синтаксис такой:

    CREATE USER ‘имя_пользователя’ @ ‘хост’ IDENTIFIED BY ‘пароль’ ;

    Кроме имени пользователя, здесь нужно задать хост, с которого может авторизоваться этот пользователь. Здесь может быть доменное имя, IP-адрес, адрес подсети или знак «%», который означает все возможные хосты. Это очень удобно, потому что вы можете создать пользователя, к которому можно будет подключится только локально или настроить отдельно права для локального или удалённого пользователя.

    Например, давайте создадим локального пользователя test_user с паролем password:

    CREATE USER ‘test_user’@’localhost’ IDENTIFIED BY ‘password’;

    Или можно создать пользователя, который будет доступен со всех хостов:

    CREATE USER ‘test_user’@’%’ IDENTIFIED BY ‘password’;

    Смотрим наших пользователей:

    SELECT User,Host FROM mysql.user;

    Все пользователи созданы.

    2. Права пользователя MySQL

    Создать пользователя — это ещё далеко не всё, теперь нужно назначить ему права. Для этого используется команда GRAT. У неё такой синтаксис:

    GRANT привилегии ON база_данных . таблица TO ‘ имя_пользователя ‘ @ ‘ хост ‘ ;

    Здесь можем дать определённые привилегии для опредёленного пользователя к базе данных или таблице. Если нужно дать права для всех баз данных или таблиц, используйте вместо названия звездочку — «*». Вот основные права пользователя MySQL, которые вы можете использовать:

    • ALL PRIVILEGES — все, кроме GRANT;
    • USAGE PRIVILEGES — никаких привилегий;
    • SELECT — делать выборки из таблиц;
    • INSERT — вставлять данные в таблицу;
    • UPDATE — обновлять данные в таблице;
    • DELETE — удалять данные из таблицы;
    • FILE — разрешает читать файлы на сервере;
    • CREATE — создавать таблицы или базы данных;
    • ALTER — изменять структуру таблиц;
    • INDEX — создавать индексы для таблиц;
    • DROP — удалять таблицы;
    • EVENT — обработка событий;
    • TRIGGER — создание триггеров.

    Также доступны такие привилегии администрирования баз данных:

    • GRANT — изменять права пользователей;
    • SUPER — суперпользователь;
    • PROCESS — получение информации о состоянии MySQL;
    • RELOAD — позволяет перезагружать таблицы привилегий;
    • SHUTDOWN — позволяет отключать или перезапускать базу данных;
    • SHOW DATABASES — просмотр списка баз данных;
    • LOCK TABLES — блокирование таблиц при использовании SELECT;
    • REFERENCES — создание внешних ключей для связывания таблиц;
    • CREATE USER — создание пользователей;

    Чтобы дать права пользователю MySQL на обновление и добавление записей для базы данных test_database, выполните:

    GRANT SELECT,UPDATE,INSERT ON test_database . * TO ‘test_user’@’localhost’;

    Дальше дадим этому же пользователю все права над этой базой данных:

    GRANT ALL PRIVILEGES ON test_database . * TO ‘test_user’@’localhost’;

    Теперь посмотрим привилегии нашего пользователя:

    SHOW GRANTS FOR ‘test_user’@’localhost’;

    Мы видим, что для всех баз данных и таблиц привелегий нет, но зато есть все привилегии для базы данных test_database. Вот так это работает. После обновления прав пользователя необходимо обновить таблицу прав пользователей MySQL в памяти. Для этого выполните:

    3. Удаление прав пользователя MySQL


    Чтобы отозвать права у пользователя MySQL, используйте команду REVOKE вместо GRANT. Её синтаксис похож на GRANT:

    REVOKE привилегии ON база_данных . таблица FROM ‘ имя_пользователя ‘ @ ‘ хост ‘ ;

    Например, заберём все права на базу данных test_database у нашего пользователя:

    REVOKE ALL PRIVILEGES ON test_database . * FROM ‘test_user’@’localhost’;

    4. Создание суперпользователя MySQL

    Если вам необходимо создать пользователя со всеми правами MySQL на замену для root, то можно использовать такую конструкцию:

    GRANT ALL PRIVILEGES ON * . * TO ‘test_user’@’localhost’;

    Даём все привилегии для пользователя test_user над всеми базами данными и всеми таблицами. Но наш пользователь не сможет давать права другим пользователям. Чтобы это исправить, нужно дать ему привилегию GRANT, а для этого используется такая команда:

    GRANT ALL PRIVILEGES ON * . * TO ‘test_user’@’localhost’ WITH GRANT OPTION;

    Теперь этот пользователь является суперпользователем для MySQL и, авторизовавшись от его имени в PhpMyAdmin, вы можете делать всё то же самое, что и с помощью root.

    Выводы

    В этой статье мы рассмотрели, как создать пользователя MySQL в Ubuntu или в любом другом дистрибутиве. Работа в командной строке с MySQL может показаться довольно сложной. Но сделать это надо всего один раз -после установки базы данных. А дальше можно выполнять все действия в Phpmyadmin.

    Создание пользователей MySQL/MariaDB и предоставление прав доступа

    Учетные записи в СУБД MySQL/MariaDB представлены в виде связки @ . Это может вызвать путаницу, поэтому необходимо быть внимательнее, например, учетные записи root@localhost и root@192.168.0.15 — разные.

    Создание пользователя

    mysql> GRANT ON TO [IDENTIFIED BY ] ;

    Например, эта команда предоставляет права доступа пользователю и, если его не существует, создает его:

    mysql> GRANT ALL PRIVILEGES ON *.* TO ‘dbuser’@’localhost’ IDENTIFIED BY ‘password’ WITH GRANT OPTION;

    ALL PRIVILEGES: предоставляет полные права на использование данных.
    *.* : права предоставляются на все базы и все таблицы.
    dbuser: имя учетной записи.
    localhost: доступ для учетной записи будет предоставлен только с локального компьютера.
    password: пароль, который будет задан пользователю.
    WITH GRANT OPTION: будут предоставлены дополнительные права на изменение структуры баз и таблиц.

    Посмотреть существующих пользователей и их привилегии

    mysql> SELECT user, host FROM mysql.user;

    Список привилегий (для кажого пользователя смотряться отдельно):

    mysql> SHOW GRANTS FOR ‘root’@’localhost’;

    * где ‘root’@’localhost’ — учетная запись, для которой смотрим привилегии; если упустить FOR, команда выдаст результат для пользователя, под которым выполнено подключение к СУБД.

    Смена пароля

    MySQL

    Версия 5.7.6 и более современная:

    mysql> ALTER USER ‘root’@’localhost’ IDENTIFIED BY ‘New_Password’;

    Версия 5.7.5 и древнее:

    mysql> SET PASSWORD FOR ‘root’@’localhost’ = PASSWORD(‘New_Password’);

    * посмотреть версию СУБД можно командой mysql -V.

    MariaDB

    mysql> SET PASSWORD FOR ‘root’@’localhost’ = PASSWORD(‘New_Password’);

    Смена пароля пользователю root

    Первый раз пароль задается из командной строки операционной системы (для MySQL/MariaDB):

    mysqladmin -u root password

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

    Другие примеры

    Рассмотрим часто встречаемые операции по работе с пользователями сервера баз данных.

    1. Особые права

    Предоставление особых прав пользователю:

    mysql> GRANT SELECT, UPDATE ON base1.* TO ‘dbuser’@’localhost’ IDENTIFIED BY ‘password’;

    * права на выборку и обновление данных во всех таблицах базы base1 для пользователя dbuser
    ** список всех возможных прав: all privileges, alter, create, create temporary tables, delete, drop, execute, file, index, insert, lock tables, process, references, reload, replication client, replication slave, select, show databases, shutdown, super, update, usage

    2. Удаленное подключение

    Разрешение на удаленное подключение и использование базы MySQL:


    mysql> GRANT ALL PRIVILEGES ON *.* TO ‘dbuser’@’192.168.0.55’ IDENTIFIED BY ‘password’;

    * предоставит права пользователю dbuser, который будет подключаться с компьютера с IP-адресом 192.168.0.55.

    3. Права на резервное копирование

    Создание учетной записи MySQL с правами создания резервных копий:

    mysql> GRANT SELECT, SHOW VIEW, RELOAD, REPLICATION CLIENT, EVENT, TRIGGER, LOCK TABLES ON *.* TO ‘backup’@’localhost’ IDENTIFIED BY ‘backup’;

    4. Права доступа к определенной таблице

    По сути, это такое же предоставление прав, но с указанием конкретной таблицы после базы:

    mysql> GRANT ALL PRIVILEGES ON base1.table1 TO ‘dbuser’@’localhost’ IDENTIFIED BY ‘password’;

    * в данном примере предоставлены все права на таблицу table1 в базе base1.

    Возможные ошибки

    1. ERROR 1819 (HY000): Your password does not satisfy the current policy requirements

    Причина: в новых версиях по умолчанию активированы политики на проверку сложности пароля. Их список можно посмотреть командой:

    > SHOW VARIABLES LIKE ‘validate_password%’;

    Вывод команды будет, примерно, следующим:

    +—————————————+———+
    | Variable_name | Value |
    +—————————————+———+
    | validate_password_check_user_name | OFF |
    | validate_password_dictionary_file | |
    | validate_password_length | 8 |
    | validate_password_mixed_case_count | 1 |
    | validate_password_number_count | 1 |
    | validate_password_policy | MEDIUM |
    | validate_password_special_char_count | 1 |
    +—————————————+———+

    • validate_password_check_user_name — пароль не должен совпадать с именем пользователя.
    • validate_password_dictionary_file — использовать специальный файл со словарем запрещенных паролей.
    • validate_password_length — минимальная длина пароля.
    • validate_password_mixed_case_count — сколько, как минимум, должно быть символов в малой и большой раскладках.
    • validate_password_number_count — какое минимальное количество цифр использовать в пароле.
    • validate_password_policy — позволяет задать определенный набор правил. Доступны значения LOW (или 0), MEDIUM (1), STRONG (2).
    • validate_password_special_char_count — минимальное количество специальных символов (например, # или !).
    1. Привести пароль в соответствие требованиям политик.
    2. Отключить политику, которая не позволяет использовать желаемый пароль. Например, чтобы отключить требование использовать цифры вводим:

    2. ERROR 1728 (HY000): Cannot load from mysql.tables_priv. The table is probably corrupted

    Причина: система считает, что таблица tables_priv в базе mysql неисправна.

    Решение: чаще всего, ошибка возникает при переносе баз с одного сервера в другой. Если версии СУБД разные, таблица tables_priv может работать со сбоями. Для исправления необходимо выполнить команду mysql_upgrade — она проверяет все таблицы на совместимость с текущей версией MySQL/MariaDB и вносит исправления. Применение команды:

    Linuxoid

    OpenSource forever

    Набор инструментов для администрирования MySQL и клонов

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

    Интерфейс администрирования

    MySQL и клоны по умолчанию распространяются без графического интерфейса. В самых простых случаях с несколькими базами для управления достаточно командной строки, когда же количество серверов, баз и админов их обслуживающих переваливает за десяток необходимость в GUI становится более очевидной. Oracle предлагает свою разработку — единый инструмент для разработчиков баз данных и администраторов MySQL Workbench(mysql.com/products/workbench) для Windows, Linux, Mac OS X. Это мощная среда с большими возможностями позволяющая визуально проектировать, создавать и управлять базами данных. Доступны все инструменты для настройки серверов, администрирования учетных записей, бэкапа и восстановления, аудита и простого мониторинга состояния. Также с его помощью можно легко выполнить миграцию с других СУБД — MS SQL Server, Sybase ASE, PostreSQL и другие. Возможности к тому же можно расширить при помощи плагинов. Интерфейс не локализован. Функций очень много поэтому некоторое время придется потратить чтобы освоиться, хотя вообщем среда удобная и все понятно. Версия Community (OSS) Edition распространяется по лицензии GNU GPL. Установка проблем не вызывает, доступны пакеты под разные дистрибутивы Linux, Windows и Mac OS X. Для пользователей RedHat/CentOS лучше воспользоваться в EPEL, в Ubuntu APT репозитарием разработчика(dev.mysql.com/downloads/repo/apt).

    Очень популярен среди хостеров phpMyAdmin(phpmyadmin.net) позволяющий выполнить в интуитивной среде большинство операций по управлению базами данных, работе с таблицами, индексами, правами доступа, настройка репликации, экспорт информации, бэкап/восстановление, просматривать статистику и так далее. При этом остается возможность непосредственного ввода любых SQL запросов. Поддерживается управление несколькими серверами. Все достаточно интуитивно, и с администрированием может справиться пользователь без особой подготовки, с любого устройства где есть браузер. В Сети множество инструкций и примеров по использованию phpMyAdmin. Установка из репозитария пакетов проблем не вызывает, в качестве веб-сервера можно использовать не только Apache, но и более легкие nginx или lighttpd. Некоторые панели управления хостингом вроде cPanel и Plesk имеют поддержку phpMyAdmin.

    Пользователи Windows наверняка оценят HeidiSQL(heidisql.com) поддерживающий управление MySQL, MS SQL и PostgreSQL (пока экспериментально) и распространяемый под OpenSource лицензией. Программа имеет очень удобный интерфейс, поддерживает подключение сразу к нескольким серверам, которые доступны в одном окне, это упрощает операции по экспорту/импорту данных. Доступно создание и редактирование баз, таблиц (и т.д.), управление привилегиями, экспорт таблиц (CSV, HTML, XML, SQL …), поиск, оптимизация, мониторинг. При написании запросов помогает автодополнение. Поддерживается командная строка, возможно подключение по SSH тоннелю. Есть Portable версия, используя Wine его можно запустить и в *nix/Mac OS X.
    Для тех кому не подошли описанные продукты в интернет можно найти большое количество аналогов — SQLyog(code.google.com/p/sqlyog), dbForge Studio for MySQL(devart.com/ru/dbforge/mysql/studio), TOra(torasql.com), SQL Buddy(sqlbuddy.com) и другие.

    Утилиты мониторинга

    Как и любое приложение СУБД требует постоянного наблюдения за своей работой, чтобы в случае проблем легко можно было найти узкое место. Общую информацию о работу MySQL можно получить при помощи стандартного клиента mysqladmin, запросы вроде SLOW QUERY LOG, SHOW PROCCESSLIST, SHOW VARIABLES, SHOW GLOBAL STATUS, и другие редко дают четкую картину информацию, так как медленные запросы есть всегда, но они не обязательно влияют на работу сервиса. Есть еще утилита mysqldumpslow которая анализует данные slow.log и выводит самые частые медленные запросы.
    Версия Enterprise предлагает специальный инструмент MySQL Enterprise Monitor, который предоставляет в реальном времени информацию о производительности и доступности всех баз данных MySQL. Кроме того для большинства систем мониторинга, включая OpenSource Nagios, Cacti, Zabbix, Ganglia доступны специальные плагины. Например, Nagios(nagios.com/solutions/mysql-monitoring). Каждый из плагинов должен быть правильно настроен, чтобы представить подробную информацию о том, что происходит в MySQL, а это не редко требует опыта. Разворачивать полноценную систему мониторинга в том случае когда задача только контроль СУБД, не всегда рационально. В этом случае на помощь приходят специализированные инструменты.
    К сожалению весьма популярный MyTOP(github.com/jzawodn/mytop) уже более двух лет не развивается (хотя это не значит что его нельзя использовать), но у него есть прекрасная и более функциональная замена. Начиная с версии MySQL 3.23.41 в состав InnoDB входит InnoDB Monitor innotop(code.google.com/p/innotop), некий аналог юниксовского top для этой СУБД выводящая в удобном виде информацию по внутреннему состоянию InnoDB, которая может пригодиться при настройке производительности. Вариантов запуска утилиты много. Самый простой выполнить от имени определенного пользователя без параметров:

    По умолчанию подключение производится к локлаьному серверу, но можно указать любой узел или мониторить сразу несколько серверов. Список всех команд (Shift+клавиша) можно получить нажав клавишу вопроса. Например, Shift+Q выведет список всех текущих запросов. Параметр — write позволяет сохранить данные соединения в файл .innotop/innotop.conf:

    Единственное неудобство по указанным утилитам, они показывают информацию в реальном времени, а о сохранении и последующем анализе статистических данных следует позаботиться самому.

    Появившийся в 2009 году проект mycheckpoint(code.openark.org/forge/mycheckpoint) за несколько лет стал фактически стандартным инструментом решение для мониторинга MySQL. Причина популярности уникальный подход — для хранения и запроса используется база данных, в которую (одна операция INSERT) собираются данные о метриках мониторинга, статистики и переменных MySQL, информации об ОС Linux (состояние ОЗУ и swap, нагрузка и т.п.). Также в базу попадают результаты пользовательских запросов. Собранную информацию легко просмотреть при помощи простых SELECT запросов. При этом администратор получает наглядные графики (на основе Google Chart API), отчеты и метрики, которые генерируются на лету. Для вывода HTML отчетов может использоваться собственный веб-сервер. Также могут быть настроены предупреждения отсылаемые по email. Возможен мониторинг удаленной системы и нескольких серверов.
    Написан на Python, поэтому установка сложностей не вызывает. Разработчики предлагают deb, rpm и tar.gz пакет и сырцы.
    В Ubuntu следует ввести следующие команды:

    После чего потребуется создать базу данных для хранения информации:

    Для сбора и вывода данных используется утилита mycheckpoint, которую можно запускать вручную или через cron. Параметры подключения к MySQL и SMTP серверу указываются также в командной строке:

    Или записываются в конфигурационный файл (по умолчанию /etc/mycheckpoint.cnf)

    Теперь можем просматривать собранную информацию и генерировать отчеты при помощи SQL запросов.

    Еще один полезный инструмент позволяющий контролировать, анализировать и при необходимости изменять обмен данными между MySQL сервером и клиентским приложением, называется MySQL Proxy(dev.mysql.com/downloads/mysql-proxy). Возможности у программы очень большие. Работает как под Windows, так и под *nix системами. Установка проблем не вызывает, в настройках необходимо указать порт MySQL (по умолчанию 3306) и PHP (строка mysql.default_port в php.ini). Все запросы формируются на языке Lua, документация здесь хорошо помогает.

    Аудит MySQL

    Одной из проблем связанных с эксплуатацией любого программного продукта является его неправильная настройка. После установки присутствуют лишние демонстрационные учетные записи, тестовые базы, сами пользователи могут использовать простые пароли, которые легко подобрать. Решить эти проблемы можно лишь при помощи постоянного аудита, который к тому же будет обязателен если производится обработка конфиденциальных/персональных данных (кредитные карты, медицинские записи, и т.д.), требуется создать среду соответствующую стандартам безопасности (SOX, HIPAA и т.д.), при расследовании инцидентов, устранении неполадок и т.д. После установки следует обязательно использовать mysql_secure_installation который обеспечивает минимальный набор позволяющих произвести коррекцию общих настроек безопасности.
    Далее уже следует использовать инструменты и скрипты о которых ниже.
    Задача аудита упрощается тем, что разработчики MySQL предлагают соответствующий API. Правда в MySQL плагин audit_log доступен только для версии Enterprise(dev.mysql.com/doc/refman/5.5/en/audit-log-plugin.html). Разработчики Percona Server предлагают GPL альтернативу(percona.com/doc/percona-server/5.5/management/audit_log_plugin.html) данному модулю, которую подходит для аудита MySQL и клонов. Две других альтернативы McAfee MySQL Audit Plugin(github.com/mcafee/mysql-audit) и MariaDB Audit Plugin for MySQL(mariadb.com/kb/en/mariadb-audit-plugin-117-release-notes) также справляются со своей задачей и позволяют производить аудит MariaDB, MySQL и Percona Server, но используют свой собственный формат журнала аудита, отличающийся от стандартного MySQL. Это потребует чуть больших первоначальных настроек. Применение плагинов простым назвать нельзя и подробно освещено в документации, которую все равно требуется прочитать, поэтому останавливаться не будем.
    Кроме того Патриком Карлссоном (Patrik Karlsson) представлен(seclists.org/nmap-dev/2011/q2/att-814/mysql-audit.nse) набор тестов для сетевого сканера nmap, позволяющий протестировать сервер на наличие основных проблем безопасности. В Ubuntu после установки настройки хранятся в каталоге /usr/share/nmap/nselib/data и nmap/script, для проверки сервера необходимо указать параметры подключения и учетную запись.

    Хакер им воспользуется в любом случае, поэтому админ просто обязан периодически проверять сервера таким способом. Два пакета о которых следует рассказать отдельно также содержат инструменты аудита.

    Percona Toolkit for MySQL

    Штатные инструменты поставляемые с MySQL предоставляют лишь базовые возможности по администрированию, в результате многие операции приходится выполнять вручную. Это может быть проблемой, ведь уследить за всем очень сложно и часто потребуется определенный опыт, да и легко допустить ошибку. Пакет Percona Toolkit for MySQL(percona.com/software/percona-toolkit) собрал наработки двух проектов Maatkit и Aspersa и предоставляет скрипты позволяющие производить многие рутинные операции администрирования: проверить состояние репликации, аудит, собирать информацию, оптимизировать запросы, произвести тюнинг сервера, архивировать/восстанавливать данные и многое другое. Всего более 4000 тестов и настроек. Пакет доступен для основных дистрибутивов Linux (в Ubuntu пакет percona-toolkit). После установки получим 32 утилиты, имя которых начинается с pt-*, назначение часто понятно из названия. При запуске можно задавать различные фильтры и форматировать вывод. Поэтому документацию почитать все равно придется так как каждая утилита имеет большое количество параметров. Например, скрипт pt-summary выведет всю информацию по серверу собранную /proc/cpuinfo, /proc/meminfo, mount, df и другими утилитами, pt-show-grants — покажет все права пользователей СУБД, pt-query-digest позволяет строить отчеты основанные на анализе логов, обработанных сервером запросов, а также информации собранной processlist и tcpdump. Например, просмотр медленных запросов двумя способами:


    Еще один популярный пакет Openark Kit(code.openark.org/forge/openark-kit) предлагает 14 утилит позволяющих провести тестирование СУБД: проверка установок, проверять пароли (пустые, одинаковые, слабые), блокировать аккаунты, прерывать запросы, фильтровать записи в журнале, выводить статус репликации, исправлять кодировки, и многое другое. Распространяется по лицензии BSD. Написан на Python и требует python-mysqldb. Для установки предлагается deb и rpm пакеты и сырцы, процесс стандартный и проблем не вызывает.
    Самый популярный скрипт комплекта oak-security-audit предназначенный для периодического аудита аккаунтов, паролей, привилегий и прочих настроек сервера.
    В общем случае его можно запустить без параметров. По умолчанию используется режим наибольшего уровня контроля системы (соотвествует —audit-level=strict):

    В результате получим отчет, все что не помечено как Passed, требует пристального внимания.
    По умолчанию утилиты из Openark Kit (включая и mycheckpoint о котором выше, того же разработчика) используют по умолчанию для подключения к СУБД сокет /var/run/mysqld/mysql.sock (в это вшито в сам скрипт) в Ubuntu файл называется mysqld.sock. Чтобы не задавать каждый раз путь можно использовать заранее подкготовленный файл с настройками подключения и указывать при помощи —defaults-file. Как вариант изменить настройки MySQL в my.cnf. Править скрипты неудобно, так как при обновлении они работать не будут.
    Следующий скрипт oak-block-account очень популярен у разного рода хостеров, для временного отключения доступа к СУБД. Дело в том что стандартный механизм СУБД не позволяет отключать временно аккаунт (что-то вроде REVOKE login ON *.*) т.е. если учетная запись есть, пользователь всегда может подключаться к базе данных. Можно конечно использовать что-то вроде:

    Но в случае восстановления прав, придется помнить все настройки. И главное если посмотреть права при помощи:

    Мы убедимся, что такая команда не сбрасывает USAGE. Использование REVOKE USAGE фактически означает DROP USER. Проще изменить логин и пароль, но восстановление может быть проблемой. Вообщем возни и рисков много. В случае использования oak-block-account, учетная запись остается неизменной, ей просто задается временный пароль, поэтому подключиться с этой учетной записью нельзя.

    Дополнительный параметр —kill, позволить сразу сбросить все активные подключения. Восстановить работоспособность учетки также просто. Смотрим список аккаунтов и их статус:

    И включаем учетную запись:

    Другие скрипты из Openark Kit позволяют упростить некоторые операции. Например oak-chunk-update дает возможность выполнить большие операции UPDATE/DELETE без длительных блокировок, разбив задачу на небольшие куски. Скрипт oak-show-replication-status выводит состояние репликации, oak-kill-slow-queries — удалить выполняющиеся запросы выполняющиеся уже долго время, oak-repeat-query — выполняет запрос пока не выполняется определенное условие (количество итераций, время).

    Тюнинг MySQL

    Оптимизация настроек очень тонкий процесс, ведь нужно на основании собранной статистики изменить только то что действительно повлияет на производительность. Самым известным инструментом для MySQL является Perl скрипт [mysqltuner](mysqltuner.com), который доступен в репозитариях большинства дистрибутивов Linux. Он читает текущие настройки сервера и установки MySQL, после чего выдает рекомендации (только рекомендации) по их изменению. Если установка производилась при помощи пакетов то достаточно ввести имя скрипта, иначе следует вызывать указывая интерпретатор:

    Далее будут запрошены логин и пароль администратора, после чего мы получим метрики системы и рекомендации. Кроме этого mysqltuner показывает информацию о индексах в таблицах и фрагментации, которые также влияют на скорость работы сервера. В случае необходимости получим рекомендации произвести перестановку индексов и дефрагментацию. Для более точно работы рекомендуется запускать скрипт после как минимум 24 часа аптайма.
    Оригинальный скрипт написан под *nix, но на Codeplex(mysqltuner.codeplex.com) доступна адаптирована для Win.
    Альтернативой можно назвать MySQL Performance Tuning Primer Script(day32.com/MySQL/tuning-primer.sh), который выдает не сколько наглядную информацию, но зато больше «разговорчивый» о проблемах.

    Вывод

    Это конечно далеко не все must have инструменты, которые должны быть под рукой у администратора баз данных. Но это наверное тот необходимый минимум которые следует изучить, кроме того в процессе знакомства начинаешь больше понимать в механизмах заложенных в MySQL.

    Программное обеспечение: MySQL Администратор

    Для многих MySQL разработчиков, понятие администрирование базы данных, практически незнакомо. Для удобства администрирования MySQL серверов, MySQL AB разработало новый графический пользовательский интерфейс. С простым и подходящим названием «MySQL Administrator». Первый выход приложения состоялся ещё в прошлом году, но в нем присутствовали ошибки, которые приводили к краху системы. Я ждал следующего выпуска. Недавно, MySQL AB выпустила более стабильную версию, конечно, по прежнему есть вещи которые требуют доработки, но теперь его вполне можно использовать.

    by Russell J.T. Dyer

    перевод by: ilya

    Для многих MySQL разработчиков, понятие администрирование базы данных, практически незнакомо. Для удобства администрирования MySQL серверов, MySQL AB разработало новый графический пользовательский интерфейс. С простым и подходящим названием «MySQL Administrator». Первый выход приложения состоялся ещё в прошлом году, но в нем присутствовали ошибки, которые приводили к краху системы. Я ждал следующего выпуска. Недавно, MySQL AB выпустила более стабильную версию, конечно, по прежнему есть вещи которые требуют доработки, но теперь его вполне можно использовать.

    «MySQL Administrator» позволяет администратору очень просто настроить MySQL сервер. Вы можете управлять пользователями, настраивать соединения с сервером, потоки. Так же имеете возможность проверить производительность сервера, просмотреть логи отражающие активность базы, скорость запросов и ошибки. Некоторые опции предназначены для архивации базы или восстановления, если это необходимо. Если вы используете репликацию базы данных, «MySQL Administrator» предоставляет интерфейс для мониторинга событий. И наконец, вы имеете возможность проверить таблицы, и сделать изменения. Вы не можете делать запросы, однако, для этого можно использовать «MySQL Control Center», приложение с GUI интерфейсом. «MySQL Administrator», приложение сфокусированное на администрирование и анализе базы данных. И делает это очень хорошо.

    Копию «MySQL Администратор» вы можете загрузить свободно с MySQL AB’s зеркала http://dev.mysql.com/downloads/administrator/. Версии доступны как под Linux так под Microsoft Windows. Тем не менее, «MySQL Администратор» работает только с версией MySQL 4.0 или выше, поэтому для ее использования, некоторым понадобится обновится. К тому же, у вас появляется гораздо больше возможностей с новой версией. Я рекомендую вам взглянуть на это перед окончательным обновлением. Небольшой тест между «MySQL Administrator» и использованием API скриптов.
    Мой сервер стоит на Red Hat Linux, итак, я скачал полную версию. Это порядком 13.8 MB в архиве tar.gz. После закачки файла я переместился в свою /usr/local/ директорию и распаковал его:

    Конечно же, вы можете поменять имя файла на свое. Следующим шагом, я сделал иконку на рабочем столе моего Gnom’a для удобного запуска «MySQL Administrator» который располагался в /usr/local/mysql-administrator/bin/. После этого, я кликнул по иконке на рабочем столе и стартовал программу. Диалоговой окно выглядело так как на рис. 1 :

    Как вы видите, при старте вы должны ввести имя пользователя и пароль MySQL и имя хоста или IP адрес MySQL сервера. На моем сервере, я так же определил путь и имя файла к локальному сокету. Так как я запускал «MySQL Administrator» на своем сервере, я определил имя хоста как localhost. Однако, что бы запустить её удаленно, необходимо указать не только имя хоста (или домена) но так же и имя пользователя, который имеет права для удаленного доступа к MySQL базе. Для этого добавьте его в таблицу «user» в базу «mysql». Это можно сделать следующей командой с под mysqlclient’a с правами root:

    Это означает, что пользователь «russell» получил все права на все базы данных и таблицы (т.к. *.*) с хоста с адресом 12.127.17.72. (между прочим, это не мой настоящий адрес). Если желаете, вы можете ограничить пользователя в правах, и предоставить доступ только к определенной базе данных, для этого замените первую звездочку на имя базы. Но в моем случае, пользователь должен был администрировать все MySQL БД. Так как администратор MySQL может удалить все таблицы, вы можете отменить эту привилегию введя:

    REVOKE DROP ON *.* FROM russell@12.127.17.72;

    После первого заявления, которое давало пользователю Russell все привилегии, эта, запрещает пользователю удалять таблицы.

    Настройки Сервера

    Рис. 2 Иконки

    После того, как вы заполните диалоговое окно и подсоединитесь к MySQL серверу, появится главное окно программы. По левому краю (как на рис.2 ) находятся иконки, которые отображают доступные опции администратора:

    «Server Information» предоставляет общую информацию о состоянии сервера а так же некоторую информацию о нем. (т.к. версия MySQL, IP адрес сервера) а так же информацию о пользователе, который запустил «MySQL Administrator».

    Опция «Server Control» отображает в правой панели логи сервера а так же кнопку остановки MySQL сервера, все это работает замечательно, но нет возможности перезапустить сервер. Правда, для этого можно использовать командную строку.

    Третий пункт, это «Startup Variables» — очень удобен. Особенно если вы не знаете как настроить логи или оптимальную производительность MySQL сервера.

    Опция «Startup Variabls» представлена в виде панели с закладками. (см рис. 3).

    Первая закладка «General Parameters» предоставляет форму для изменения местонахождения файлов базы данных MySQL сервера. Так же вы можете изменить количество максимально доступной памяти используемой для обработки запросов, которая иногда приводит к увеличению скорости при обработке запросов. Многие опции для оптимизации работы памяти доступны в закладке «Performance». Изменения сделанные в этой опции отражаются в «/etc/my.cnf». Поэтому вы должны перезапустить MySQL сервер с тем, что бы новые значения вступили в силы. Вот тут то, кнопка перезапуска была бы очень удобной.

    Лог файлы, пользователи и статус сервера

    Рис. 3 Закладки

    Опция «Log Files» (см рис. 4)

    предоставляет форму для определения пути и имени лог файла. Если логирование по прежнему не включено, «MySQL Administrator» сделает это за вас, путем добавления необходимых строк в my.cnf в секцию [mysqld]. Один небольшой недостаток (если вы чистюля), в том, что приложение вставляет комментарии после каждой записи в конфигурационный файл. Записи неуклюжи, а комментарии ненужные. Тем не менее, если удалить комментарий используя редактрок, например «vi», то «MySQL Administrator» не будет их добавлять, даже при дальнейших изменениях.

    Для просмотра лог файлов в приложение служит следующая секция — «Server Logs». Она не делает каких бы то ни было изменений, как например «Startup Variables», даже если перезапустить MySQL сервер и приложение. Я использовал кнопку для обзора (т.к. «выбор файла») и выбора подходящего лог файла. Если вы установили директорию для лог файла, убедитесь что вы дали права на запись пользователю mysql , используя команды chown и chmod. Иначе, MySQL не сможет создавать лог файлы или обновлять их.

    Одной, на мой взгляд, из хороших вещей в «MySQL Administrator», это то, что предлагается графический интерфейс для просмотра и редактирования пользовательских привилегий. Я получал множество сообщений об ошибки, когда выбирал закладку «User Administration» , наверно, кто-то не мог получить таблицу с сервера. После нажатия кнопки «ОК», я ещё раз 10 получал сообщение об ошибки и в конечном счете получил доступ к панели «User Administration». Я конечно постараюсь вытерпеть это до следующего релиза. Проблема, из-за которой эта опция становилась недоступной состояла в указание имени хоста для пользовательских привилегий. В соответствии со справкой (этот раздел был достаточно хорошо описан, остальные по минимуму) каждому пользователю из списка сопоставлялся список хостов. Похоже, что они не нашли удобного способа настроить привилегии пользователя глобально (когда хост указывается в виде %). Когда я добавлял нового пользователя или изменял хост с которого возможен доступ (основанный на IP адресе) приложение каждый раз выдавало ошибку или завершало работу при нажатие кнопки «принять». Это может показаться нехорошим, но, так как это единственная опция которую я не смог использовать, я думаю что «MySQL Administrator» вполне пригодна для использования. Разработчики по прежнему работают усердно, и в скором времени обещают исправить эти ошибки.

    Опция «Server Connections» предназначена для отображения пользователей которые взаимодействуют с БД. Вы можете наблюдать, что каждый пользователь делает с базой в настоящий момент. А также имеете возможность отключить пользователя или просто убить процесс, для этого достаточно навести курсор на интересующий вас процесс
    и нажать кнопку «Kill Thread». То же самое можно делать и для пользователей из «User Connections». Однако, если вы отключили пользователя, он может восстановить
    соединение когда сгенерирует очередной SQL запрос.

    Рис. 5 Архивация

    Если вы просматриваете активность вашего сервера использую графический интерфейс, то вы так же можете наслаждаться опцией «Health». Которая показывает график, использования трафика на одной панели. На другой графически изображена загрузка памяти при обработки SQL запроса. В этой опции присутствует ещё 2 закладки, одна для отображения переменных сервера, а другая показывает статус сервера. Это очень удобно, если вы администрируете большую базу и хотите оптимально настроить её производительность. Правда вы не можете изменять эти переменные из этой панели, для этого используйте опцию «Startup Variables» или одну из других опций.

    Если вы хотите сделать архив вашей базы, то опция «Backup» поможет вам в этом. Нажатием на кнопку «New Project» , вы можете задать инструкции для архивирования базы. В левой части панели, у вас будут отображается все базы, которые есть на сервере. Выберете базу, которую вы хотите архивировать и добавьте её в список баз данных подлежащие архивированию. После того, как вы выбрали все базы, просто нажмите на кнопку «Save Project» что бы сохранить список архивируемых баз. Для ручного запуска архивации БД, кликните на кнопку «Start Backup». В открывшемся диалоговом окне введите имя дамп файла (mysqldump) и путь к нему, где он будет сохранен. Закладка «Schedule Backup» предоставляет вам планировщика для автоматического выполнения архивации БД из «cron». Так как опция использует mysqldump, то все опции для него могут быть установлены в закладке «Advanced Options».

    Для восстановления БД, вам поможет опция «Restore Backup». Как правило, вы не сможете увидеть ни одного файла с архивом БД для восстановления. Для этого нажмите на кнопку «Change Path» и укажите «MySQL Administrator»‘у путь, где располагается ваш дамп файл. Опций связанных с дамп файлом очень мало, так что вы просто запустите его. Все опции, которые вам нужны, устанавливаются при создании дамп файла. «MySQL Administrator» не дает возможности восстановить отдельную дату или таблицу не переписав все содержимое. Для этого нужно использовать текстовый редактор и править дамп файл.

    Если вы используете репликацию «MySQL Administrator» предлагает вам опцию «Replication Status». Она не предоставляет много информации, но это всего лишь начало.
    Я надеюсь в будущем она будет отображать больше информации.

    Таблицы

    рис. 6 Таблицы

    Последняя опция в «MySQL Administrator» — Catalogs. Эта опция для проверки и модификации таблиц в БД. После выбора БД в левой части панели (игнорируя сообщения об ошибки), в правой, вы увидите список таблиц принадлежащих этой БД. (см. рис. 6)

    Список, возле таблиц, предоставляет вам различную информацию о таблицах, тип, количество рядов, размер рядов, и т.д. Нажав на «Indices», он отобразит вам все индексы для всех таблиц в БД.


    Так же, в этой опции, если вы 2-ы нажмете на имени таблицы (см. рис. 7), откроется окно, в котором вы сможете поменять структуру таблицы.

    Вы можете изменять тип колонок, а так добавлять или удалять их. Так же предоставляется возможность, при желании, изменить индекс или тип (с MyISAM на InnoDb) таблицы.
    Вы даже сможете добавлять или удалять целые таблицы используя этот интерфейс. Единственное что вы не сможете сделать, я говорил уже раньше, использовать запросы к БД. Так как это не административные функции.

    Рис. 7 Редактор таблиц

    Общее представление

    Если MySQL хочет конкурировать на рынке с такими продуктами как Microsoft Access, тогда ему потребуется хороший графический интерфейс, как у «MySQL Control Center» и «MySQL Administrator». Конечно, при работе с «MySQL Administrator» обнаруживаются некоторые ошибки, но не смотря на это, более 90 % работает стабильно. Если все эти искажения зависели от моего сервера, то приложение возможно вообще не имеет ошибок.
    Конечно, для конкурировании с Microsoft, все эти проблемы должны будут ликвидированны.

    В общем, «MySQL Администратор» готовое для использования приложение и разработчики проделали большую работу для этого, особенно, принимая то факт, что
    у них по прежнему 1-я версия. Я рекомендую всем, кто предпочитает использовать графический интерфейс для администрирования использовать «MySQL Администратор» и сообщать о всех ошибках в MySQL AB.

    Russell Dyer программист на Perl, разработчик MySQL и Web разработчик проживает и консультирует в основном в New Orleans. Задолбать его можно по russell@dyerhouse.com.

    Подписывайтесь на каналы «SecurityLab» в Telegram и Яндекс.Дзен, чтобы первыми узнавать о новостях и эксклюзивных материалах по информационной безопасности.

    Sergey Danielyan

    Правильная установка и настройка MySQL в Linux

    Эта статья, по замыслу, должна служить пошаговым руководством по корректной настройки MySQL сервера в Linux в общем и в CentOS в частности, начиная от подготовки системы и заканчивая настройкой прав пользователей.
    В этот раз текста будет минимум — только команды.

    Установка MySQL

    Проверяем, установлен ли MySQL сервер

    Если установлен, шаги по установке можете пропустить, хотя ознакомиться я все же советую с ними.

    Существуют следующие основные пакеты связанные с mysql:

    • mysql — клиент mysql
    • mysql-server — сервер mysql
    • mysql-devel — для разработки и подключения библиотек и хидеров mysql
    • mysql-connector-java — JDBC коннектор (используется, например, в EJBCA)

    sudo yum install mysql mysql-server mysql-devel mysql-connector-java

    Теперь надо установить сервер mysql на запуск в определенные runlevel‘ы (2, 3 и 5):

    Если кто забыл соответствие цифрового значения runlevel‘а символьному:

    Стартуем демон mysql:

    Настройка сервера

    Теперь пора настроить сервер. Начнем с пользователей.

    Вот состояние таблицы user до начала действий с ней:

    mysql -u root
    > use mysql
    > select host,user from user;

    5 rows in set (0.00 sec)
    > quit

    Как видете, безопасность на уровне плинтуса. Хорошо хоть, что анонимного пользователя нет.

    Для настройки базовых вещей в сервере, запустим настройку сервера через mysql_secure_installation. На время этой установки, пароль будет security. Ваш же пароль, как понимаете, должен отличаться.

    Запустится скрипт, с запросами на то или иное действие. Вот ответы:

    Skip root password for root
    Мы еще не устанавливали пароль для root, поэтому при запуске скрипта и запросе пароля для root , просто нажмите Enter .

    Install new password for root: security
    А вот тут можно установить пароль для root

    Do remove an anonymous user
    На вопрос о том, удалить ли анонимного пользователя, отвечаем да

    Do not disallow remote connections
    Не запрещаем коннект к нашему северу с удаленных серверов (если, конечно, эта опция вам нужна, в другом случае, запретите ее)

    Do remove a test database
    Тестовая база нам не нужна — удаляйте ее

    Do reload the privileges
    Перегрузим привилегии для их активации

    Теперь для всех root пользователей установлен пароль.

    Если в ходе этой конфигурации вы не установили пароль для root , можете сделать это так:

    SET PASSWORD FOR ‘root’@’localhost’ = PASSWORD(‘security’);
    SET PASSWORD FOR ‘root’@’localhost.localdomain’ = PASSWORD(‘security’);
    SET PASSWORD FOR ‘root’@’127.0.0.1’ = PASSWORD(‘security’);

    UPDATE mysql.user SET Password = PASSWORD(‘security’) WHERE user = ‘root’;

    Если же вы не запускали конфигурацию через mysql_secure_installation или не хотите этого делать по каким-то другим причинам, следующие команды удалят any пользователей:

    DROP USER »@’localhost’;
    DROP USER »@’localhost.localdomain’;

    Также, пароль для IPv6 localhost (@::1) можно установить таким образом:

    Близится финал нашего действия. Осталось две вещи:

    • открыть порты для mysql:

    sudo iptables -I INPUT -p tcp —dport 3306 -m state —state NEW,ESTABLISHED -j ACCEPT
    sudo iptables -I OUTPUT -p tcp —sport 3306 -m state —state ESTABLISHED -j ACCEPT


    выставить кодировку UTF-8 по-умолчанию — файл /etc/my.cnf :

    [mysqld]
    init_connect=‘SET collation_connection = utf8_unicode_ci’
    character-set-server = utf8
    collation-server = utf8_unicode_ci

    [client]
    default-character-set = utf8

    Blogerator.org

    Эксклюзивные ИТ-новости, обзоры и интервью

    Программное окружение MySQL: Maatkit. Введение

    В цикле статей «Программное окружение MySQL» мы рассмотрим основные сторонние утилиты и расширения для MySQL, которые позволяют улучшить качество и удобство его администрирования.

    Перед тем как начать этот обзор, хотелось бы сразу умышленно сузить предметную область предстоящего разговора, в котором рассмотреть лишь системные утилиты для администраторов баз данных (DBA, Database administrator), преимущественно консольного происхождения. Многочисленные GUI-клиенты для работы с MySQL, пригодные по большей части для разработчиков и продвинутых пользователей этой СУБД, — останутся за пределами нашего исследования.

    В цикле из 3 больших статей попробуем последовательно рассказать о самом важном стороннем системном программном окружении для MySQL, сосредоточившись на самих инструментах и расширениях, и лишь вскользь касаясь концепций MySQL с ними связанных.

    И сегодня, в первой части этой серии, мы внимательно рассмотрим известный сервисный пакет для MySQL — Maatkit.

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

    В официальной поставке MySQL, к сожалению, отсутствует большинство инструментов с функциональностью аналогичной тому, что представлено в Maatkit, несмотря на то, что некоторые утилиты из этого стороннего пакета можно с полным основанием назвать незаменимыми в ежедневной работе DBA

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

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

    На данный момент Maatkit состоит из 34 утилит, бесплатно распространяемых по лицензии GPL. Главным разработчиком пакета является Барон Шварц (Baron Schwartz), работающий в компании Percona. С лета 2011 года компания Percona, помимо Maatkit, также поддерживает на его базе и специализированный набор Percona Toolkit, который расширен и полностью оптимизирован именно для работы с её одноименной СУБД Percona.

    Косвенным показателем популярности Maatkit является статистика, равная 60 000 скачиваний на конец 2010 года (только со страницы Google Сode, не считая официальной страницы проекта), а также использование этого сервисного пакета при администрировании MySQL на постоянной основе во множестве мировых компаний, например, таких как Facebook и Google.

    С недавних пор, некоторые утилиты из Maatkit поддерживают также работу и с СУБД PostgreSQL и memcached.

    Барон Шварц — лидер проекта Maatkit, активный разработчик MySQL и PostgreSQL, автор известной книги
    “High Performance MySQL” от O’Reilly, работает в компании Percona (популярный форк-проект СУБД MySQL)

    Итак, вот оглавление подробного рассказа о Maatkit — известном сервисном скрипт-пакете для MySQL:

    Первую часть этой статьи — читайте вот тут.

    MySQL: особенности и сферы применения

    Что такое MySQL

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

    MySQL поддерживает SQL (структурированный язык запросов) и может применяться в качестве SQL-сервера. Это означает, что общаться с сервером можно на языке SQL: клиент посылает серверу запрос, тот его обрабатывает и отдает клиенту только те данные, которые были получены в результате этого запроса. Тем самым клиенту не требуется выкачивать данные и производить вычисления, как, например, в Microsoft Access.

    Кроме того, MySQL — это ПО с открытым кодом, т.е. его можно свободно изучать и изменять. Пакет распространяется на условиях GPL (General Public License), его можно бесплатно загрузить из Интернета (http://www.mysql.com) для некоммерческого применения.

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

    По большому счету, отсутствие некоторых функций, которые были принесены в жертву быстродействию и надежности, не создает больших хлопот пользователям (хотя иногда некий дискомфорт и имеет место). Для работы с полноценной корпоративной базой данных MySQL недотягивает, но с повседневными задачами MySQL справляется довольно хорошо.

    Недостатки

    Вот краткий перечень основных функций, которых не хватает в MySQL.

    Транзакции — позволяют объединить несколько SQL-запросов в одну единицу работы и в случае сбоя любого из запросов, входящего в эту единицу, выполнить откат, чтобы вернуть данные в исходное состояние. Поясним на примере.

    Необходимо снять деньги с одного счета и положить на другой. Для этого нужно выполнить два SQL-запроса: первый — снять деньги с одного счета, второй — зачислить их на другой счет. Если не применять транзакции, то в случае сбоя при выполнении второго запроса деньги будут сняты со счета, но не будут зачислены на другой счет. Применение транзакций позволяет сделать откат, как если бы деньги вообще не снимались со счета.

    Заметим, что при помощи команды LOCK TABLES в MySQL можно эмулировать транзакцию. Эта команда блокирует таблицу на время выполнения запросов, и тем самым обеспечивается целостность данных, но откат все равно нельзя сделать.

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

    Хранимые процедуры — это несколько SQL-команд, которые хранятся в базе данных под неким именем и в совокупности выполняют некую функцию. При помощи хранимых процедур можно расширить синтаксис SQL так, что он будет похож на обычный язык программирования (например, Oracle PL/SQL). В нашем примере с переводом денег два SQL-запроса можно было бы сохранить под одним именем, а потом вызвать эту процедуру, передав ей в качестве параметров два номера счета и сумму денег. Тогда оба запроса выполнялись бы в одной транзакции.

    Вложенные запросы — позволяют подставлять значения в условия отбора динамически, по результатам выполнения другого запроса. По мнению автора, если без всего вышеперечисленного еще можно как-то обойтись, то отсутствие вложенных запросов иногда очень портит жизнь. Например, чтобы узнать, какой автомобиль перевез грузов больше, чем в среднем по автопарку, нужно сделать такой SQL-запрос:

    Для этого среднее значение в поле massa нужно вычислить:

    Если поддерживаются вложенные запросы, то эти два запроса можно вложить друг в друга:

    Но в случае с MySQL среднее значение приходится находить отдельно и подставлять в другой запрос непосредственно в CGI-сценарии, что, несомненно, сказывается на производительности.

    Инструкция UNION — попросту говоря, она объединяет вывод нескольких запросов в один, с возможностью исключить дубликаты строк.

    Каскадное обновление данных — позволяет удалять и обновлять связанные данные. Например, при удалении из базы данных записи о клиенте из связанных таблиц автоматически удаляются все записи о заказах этого клиента.

    Преимущества

    А теперь перечислим преимущества MySQL.

    Быстродействие. Благодаря внутреннему механизму многопоточности быстродействие MySQL весьма высоко.

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

    Лицензия. Раньше лицензирование MySQL было немного запутанным; сейчас эта программа для некоммерческих целей распространяется бесплатно.


    Открытость кода. Благодаря этому вы сможете сами добавлять в пакет нужные функции, расширяя его функциональность так, как вам требуется. Кстати, за отдельную плату для вас это могут сделать и сами авторы MySQL. Чтобы заказать расширение MySQL у создателей пакета, просто зайдите на сайт http://www.mysql.com и заполните соответствующую форму.

    Надежность. Создатели MySQL потрудились на славу: насколько мне известно, этот пакет довольно стабилен и его трудно вывести из строя. Я не отслеживаю специально сводки результатов хакерских атак на MySQL, но мне ни разу не попадалось на глаза (в отличие от тех же Web-серверов) сообщение о том, что MySQL был поврежден в результате чьего-то злого умысла.

    Ресурсы. Это может зависеть от разных факторов, но в любом случае суперкомпьютер вам не потребуется.

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

    Переносимость. В настоящее время существуют версии программы для большинства распространенных компьютерных платформ. Это говорит о том, что вам не навязывают определенную операционную систему. Вы сами можете выбрать, с чем работать, например с Linux или Windows, но даже в случае замены ОС вы не потеряете свои данные и вам даже не понадобятся дополнительные инструменты для их переноса.

    Не знаю, к недостаткам или преимуществам отнести тот факт, что у MySQL нет графического интерфейса пользователя (GUI). Мне, например, удобнее написать SQL-запрос вручную (кстати, результаты его выполнения можно перенаправить в файл), чем пользоваться мастером запросов, как в Microsoft SQL Server.

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

    • Winmysqladmin — входит в Windows-дистрибутив MySQL, имеет стандартный графический интерфейс и позволяет администрировать MySQL;
    • MySqlManager — входит в Windows-дистрибутив MySQL, несет в себе клиентские функции (но ничего серьезного с ее помощью автору сделать так и не удалось);
    • MySQL Administrator for Windows — более «продвинутая» утилита сторонних разработчиков. Позволяет зарегистрировать и подключаться одновременно к нескольким MySQL-серверам, создавать, удалять и изменять структуру баз данных и таблиц, создавать в таблицах ключи, писать SQL-запросы и сохранять их в файле:
    • XMySQL — клиент MySQL для X Window-подобных систем. Предоставляет полный доступ к таблицам, допускает групповые вставки и удаления, имеет конструктор запросов и функции администрирования пакета. Программу можно найти по адресу http://web.wt.net/

    Более полный список всевозможных утилит для MySQL (а он очень велик) есть по адресу http://www.mysql.com/downloads/. Там вы найдете массу интересных и полезных вещей: экспорт данных из MySQL в Microsoft Access и обратно, драйверы ODBC и т.д.

    Несмотря на отсутствие графического интерфейса, в пакет MySQL входят довольно мощные средства администрирования с интерфейсом командной строки. Ниже приведен их список с краткими описаниями утилит.

    • MySQLAdmin — главный инструмент администрирования MySQL. С его помощью вы можете создавать, уничтожать, изменять базы данных и полностью контролировать свой сервер.
    • MySQLDump — утилита резервирования данных.
    • MySQLAccess — позволяет изменять таблицы прав доступа и выводить их содержание в удобном для чтения виде.
    • MySQLBug — в случае ошибки в MySQL эта утилита создает для разработчиков программы отчет об ошибках, отсылая его также в почтовый список рассылки MySQL, чтобы специалисты могли помочь решить вашу проблему.
    • MySQLImport — импортирует данные из файла с разделителями в базу данных.
    • MySQLShow — показывает структуру баз данных и таблиц, из которых они состоят.

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

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

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

    Во-вторых, функцию можно использовать как составляющую предложения WHERE — в данном случае она заменит собой константу в момент выполнения запроса. Поясню на примере: необходимо найти события, которые произошли более суток назад.

    Здесь функция Unix_TIMESTAMP() вычисляет текущее время, от которого мы отнимаем одни сутки.

    Применение

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

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

    Возможность работы нескольких пользователей. Это очевидное требование следует дополнить тем, что интенсивность использования базы данных в данном случае будет значительно выше, чем на Web-сервере. В самом деле, для сайта 20 посетителей одновременно считается большим успехом, а в случае корпоративной базы таким показателем может похвастаться даже небольшая фирма. Особое внимание надо обратить на то обстоятельство, что корпоративная база данных использует более сложные пользовательские интерфейсы, чем странички на сайте; иными словами, более интенсивно посылает запросы на сервер. В техническом плане это означает, что нужна блокировка на уровне изменяемой записи. Здесь MySQL показывает себя не лучшим образом: блокировка в нем осуществляется на уровне таблиц. Это означает, в частности, что если кто-то вводит заказ, то всем запросам (анализирующим статистику, выбирающим записи для отчета и т.п.) придется ждать, пока ввод заказа закончится. В случае корпоративной базы данных это сводит на нет даже такое преимущество MySQL, как быстродействие.

    Контроль целостности данных на уровне SQL-сервера. Корпоративная база данных отличается сложной схемой данных, и поддерживать целостность данных средствами клиентской программы очень трудно: одна реляция может соединять пять-семь таблиц, а число таблиц может достигать 30—40. И в этом случае существенной становится отсутствующая у MySQL возможность каскадного обновления и удаления записей в связанных таблицах.

    Кроме того, мы уже упоминали, что корпоративная база данных использует более сложный интерфейс, а это обстоятельство порождает еще два требования: поддержку всех стандартных инструкций SQL (и полезных расширений), а также использование сохраненных процедур (stored procedure) и триггеров. Увы, и здесь MySQL нас не радует.

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

    Другие статьи из раздела

    • Программная платформа IBM для повышения эффективности бизнеса
    • ИБП для защиты серверов
    • Интегрированное решение для защиты центров обработки данных
    • На пути к построению единой платформы защиты данных
    • Виртуализация без ограничений

    Поместить в блог

    Комментарии к статье

    Рекламные ссылки

    Chloride
    Демонстрация Chloride Trinergy
    Впервые в России компания Chloride Rus провела демонстрацию системы бесперебойного электропитания Chloride Trinergy®, а также ИБП Chloride 80-NET™, NXC и NX для своих партнеров и заказчиков.

    NEC Нева Коммуникационные Системы
    Завершена реорганизация двух дочерних предприятий NEC Corporation в России
    С 1 декабря 2010 года Генеральным директором ЗАО «NEC Нева Коммуникационные Системы» назначен Раймонд Армес, занимавший ранее пост Президента Shyam …

    компания «Гротек»
    С 17 по 19 ноября 2010 в Москве, в КВЦ «Сокольники», состоялась VII Международная выставка InfoSecurity Russia. StorageExpo. Documation’2010.
    Новейшие решения защиты информации, хранения данных и документооборота и защиты персональных данных представили 104 организации. 4 019 руководителей …

    МФУ Panasonic DP-MB545RU с возможностью печати в формате А3
    Хотите повысить эффективность работы в офисе? Вам поможет новое МФУ #Panasonic DP-MB545RU. Устройство осуществляет

    Adaptec by PMC
    RAID-контроллеры Adaptec Series 5Z с безбатарейной защитой кэша
    Опытные сетевые администраторы знают, что задействование в работе кэш-памяти RAID-контроллера дает серьезные преимущества в производительности …

    Chloride
    Трехфазный ИБП Chloride от 200 до 1200 кВт: Trinergy
    Trinergy — новое решение на рынке ИБП, впервые с динамическим режимом работы, масштабируемостью до 9.6 МВт и КПД до 99%. Уникальное сочетание …

    Администрирование MySQL

      Гавриил Татев 2 лет назад Просмотров:

    1 Глава 13 Администрирование MySQL В предыдущих главах вы научились устанавливать MySQL в системах Linux и Windows, создавать реляционные базы данных и, используя язык SQL, выполнять операции добавления, изменения, удаления и извлечения данных из этих баз. В этой и нескольких последующих главах вы научитесь выполнять различные административные операции, которые позволят получать информацию о состоянии сервера и список пользователей, которым разрешен доступ к серверу MySQL, а также настроить репликацию баз данных и подготовиться к возможным аварийным ситуациям. Эта глава знакомит с администрированием MySQL и описывает, как изменять стандартные настройки MySQL, устанавливать системные переменные и выполнять протоколирование работы сервера. В главе 14 объясняется, как обеспечить безопасность баз данных, а в главе 15 описано, как оптимизировать производительность сервера. Глава 16 посвящена вопросам резервного копирования и восстановления баз данных, а также настройке репликации. Таким образом, эта глава является отправной точкой для знакомства с основными административными функциями. В этой главе рассмотрены перечисленные ниже вопросы. Использование утилиты mysqladmin для проверки системных настроек и выполнения операций, связанных с работой сервера. Применение операторов SHOW VARIABLES, SELECT и SHOW STATUS для получения значений системных переменных, а также использование параметров запуска сервера, файлов опций и оператора SET для установки системных переменных. Ведение журналов ошибок, запросов и обновлений.

    2 540 Глава 13 Выполнение административных функций После инсталляции MySQL может потребоваться просмотреть информацию о сервере, такую, например, как номер версии или данные о состоянии сервера. Возможно также, что вам понадобится выполнить административные операции вроде останова сервера или очистки кэша хоста. Для выполнения этих функций в MySQL предусмотрена утилита mysqladmin, которая предоставляет административный интерфейс к серверу MySQL. С использованием этого средства можно выполнять разнообразные административные операции, такие как получение информации о конфигурации сервера MySQL, установка паролей, запуск сервера, создание и удаление баз данных и перезагрузка таблицы привилегий. Утилита mysqladmin, как и mysql, вызывается из командной строки. При запуске утилиты mysqladmin ей можно указать несколько необязательных программных опций и одну или более команд, как показано в следующем синтаксисе этой утилиты: mysqladmin [ [ . ]] [ ] [< [ ]>. ] Опции определяют параметры подключения к серверу MySQL и различные режимы работы утилиты mysqladmin. Например, с помощью программных опций можно указать учетную запись пользователя MySQL, пароль для этой учетной записи и номер порта, используемый для подключения к серверу. Большинство программных опций можно определять двумя способами. Например, опция —force может быть также указана как -f. В табл дается описание большинства программных опций утилиты mysqladmin с указанием, где это допустимо, как длинной, так и короткой формы опции. (Если представлены обе формы опции, они отделены друг от друга вертикальной чертой ( ).) Обратите внимание, что списки опций утилиты mysqladmin для различных версий MySQL могут отличаться между собой, поэтому за текущим описанием опций, а также информацией о новых опциях утилиты mysqladmin, следует обращаться к документации по последней версии MySQL. (Дополнительную информацию об указании программных опций можно найти в главе 3.) Таблица Программные опции утилиты mysqladmin Синтаксис опции —character-set-dir= —compress -C —connect_timeout= —count= -c Описание Указывает каталог, где хранятся наборы символов. Использовать сжатие данных, пересылаемых между клиентом и сервером. Обе стороны, как сервер, так и клиент, должны обеспечивать сжатие. Указывает число секунд ожидания подключения к серверу. Сколько раз будет выполнена команда, указанная при вызове mysqladmin с опцией —sleep.

    3 Администрирование MySQL 541 Окончание табл Синтаксис опции —force -f —help -? —host= -h —password[= ] -p[ ] —port= -P —protocol= —silent -s —sleep= -i —user= -u —version -V —wait[= ] -w[ ] Описание Заставляет выполнить команду drop без запроса на подтверждение. Также заставляет mysqladmin продолжить выполнение команд, указанных при вызове утилиты, даже при возникновении ошибки в одной из них. (Обычно mysqladmin завершает свою работу, если одна из указанных команд приводит к ошибке.) Показать информацию об опциях утилиты mysqladmin. Указывает имя хоста, на котором запущен сервер MySQL. Указывает пароль, используемый при подключении к серверу MySQL. При использовании краткой формы -p пароль должен следовать непосредственно за опцией (между именем опции и значением пароля не должно быть пробела). При использовании обеих форм опций, если пароль не указан, он запрашивается у пользователя. Указывает номер порта, используемый при подключении к серверу MySQL. Указывает протокол, который надлежит использовать при подключении к серверу MySQL. При невозможности подключиться к серверу завершить работу без вывода какого-либо сообщения. Указывает, что заданная в mysqladmin команда (вместе со всеми своими опциями) должна выполняться многократно. Заданное количество секунд задает интервал задержки между повторными выполнениями. Опцию sleep можно использовать в сочетании с опцией —count. Указывает имя пользователя, применяемое при подключении к серверу MySQL. Показать номер версии и другую информацию об утилите mysqladmin, а также информацию о сервере MySQL. Повторять попытки подключения к серверу MySQL, если соединение с сервером не удалось установить. Необязательный параметр задает количество попыток. Если количество попыток не указано, подразумевается 1. При использовании краткой формы w между именем опции и ее значением не должно быть пробела.

    4 542 Глава 13 При вызове утилиты mysqladmin кроме опций программы необходимо указать одну или несколько команд. Команды определяют действия, которые должна выполнить утилита при своем вызове. Например, можно проверить, запущен ли сервер MySQL, или перечитать таблицы привилегий. В некоторых случаях вместе с командой нужно задавать командную опцию. Случаи, когда требуется указание опции, обычно очевидны. Например, mysqladmin можно применять для создания базы данных. Для этого, очевидно, необходимо указать имя новой базы данных. Это имя задается опцией команды. В табл перечислены команды, которые можно использовать в утилите mysqladmin. Команды утилиты mysqladmin, как и ее опции, могут изменяться от версии к версии, поэтому за текущим описанием команд, а также информацией о новых командах утилиты mysqladmin, следует обращаться к документации по последней версии MySQL. Таблица Команды утилиты mysqladmin Синтаксис команды create drop extended-status flush-hosts flush-logs flush-privileges flush-status flush-tables flush-threads kill [ . ] password ping processlist Описание Создать новую базу данных с указанным именем. Удалить базу данных с указанным именем. Показать имена и значения серверных переменных состояния. Очистить кэш хоста. Закрыть, а затем повторно открыть файлы журналов. Для некоторых типов журналов MySQL создает новый файл. Перечитать таблицы привилегий. Эта команда эквивалентна команде reload. Очистить переменные состояния и обнулить некоторые счетчики. Закрыть все открытые таблицы. Очистить кэш потоков. Завершить указанные потоки. Каждый поток связан с одним из соединений, поэтому завершение потока приводит к разрыву соответствующего ему соединения. Просмотреть список активных потоков можно с помощью команды processlist. Установить новый пароль для текущего пользователя, вызвавшего утилиту mysqladmin. Если этот пользователь уже имеет пароль, то новый пароль вступит в действие после выполнения этой команды. Это означает, что при вызове mysqladmin в опции —password необходимо указывать старый пароль. Проверить, работает ли сервер MySQL. Показать список активных потоков сервера MySQL. Каждому потоку назначается идентификатор (ID), который можно использовать в команде kill для завершения этого потока.

    5 Администрирование MySQL 543 Окончание табл Синтаксис команды reload refresh shutdown slave-start status slave-stop variables version Описание Перечитать таблицы привилегий. Эта команда эквивалентна команде flush-privileges. Сбросить на диск все таблицы, закрыть и открыть заново все файлы журналов, и перечитать таблицы привилегий. Завершить работу сервера MySQL. Запустить процесс репликации на подчиненном сервере. Показать отчет о текущем состоянии сервера MySQL. Остановить процесс репликации на подчиненном сервере. Показать имена и значения переменных сервера. Показать информацию о версии сервера MySQL. Теперь, после того, как вы познакомились с опциями и командами утилиты mysqladmin, рассмотрим несколько примеров, демонстрирующих различные задачи, которые можно выполнять с помощью этой утилиты. В первом примере показано, как с помощью опции —help получить список всех опций и команд, которые можно использовать в утилите mysqladmin: mysqladmin —help Как видите, необходимо лишь указать имя утилиты mysqladmin и опцию -help. Даже если для подключения к серверу MySQL требуются имя пользователя и пароль, здесь их указывать необязательно, поскольку цель опции -help состоит в том, чтобы помочь найти всю информацию, необходимую при использовании этой утилиты для выполнения других операций. После выполнения этой команды вы получите информацию вроде следующей: mysqladmin.exe Ver 8.41 Distrib , for Win32 on ia32 Copyright (C) MySQL AB This software comes with ABSOLUTELY NO WARRANTY. This is free software, and you are welcome to modify and redistribute it under the GPL license Administration program for the mysqld daemon. Usage: C:\Program Files\MySQL\MySQL Server 5.0\bin\mysqladmin.exe [OPTIONS] command command. -c, —count=# Number of iterations to make. This works with -i (—sleep) only. -#, —debug[=name] Output debug log. Often this is ‘d:t:o,filename’. -f, —force Don’t ask for confirmation on drop database; with multiple commands, continue even if an error occurs. -C, —compress Use compression in server/client protocol. —character-sets-dir=name Directory where character sets are. —default-character-set=name Set the default character set. -?, —help Display this help and exit. -h, —host=name Connect to host. -p, —password[=name] Приведенные здесь результаты представляют только часть всей информации, которая будет выведена при указании опции -help. Как видите, здесь перечислены все

    6 544 Глава 13 опции программы вместе с кратким описанием их назначения. Опция -help также выводит и описывает все допустимые команды утилиты mysqladmin. В следующем примере показано совместное использование опций программы и команды: mysqladmin -u root -p version Сейчас в команду mysqladmin включена опция u вместе со следующим за ней именем пользователя, которым является root. Затем идет опция -p. Опция p отличается от других опций программы, которые требуют указания значения, тем, что она позволяет указать это значение отдельно от самой команды mysqladmin. При указании p без пароля выдается подсказка на ввод пароля. Во время ввода пароля каждый введенный символ отображается в командной строке в виде звездочки. Чтобы сохранить пароль в секрете, MySQL рекомендует задавать его именно таким способом. Кроме этих двух опций программы в упомянутый выше пример включена также команда version. Как видно из результата выполнения этого примера, показанного ниже, команда version выводит информацию о версии сервера MySQL: mysqladmin.exe Ver 8.41 Distrib , for Win32 on ia32 Copyright (C) MySQL AB This software comes with ABSOLUTELY NO WARRANTY. This is free software, and you are welcome to modify and redistribute it under the GPL license Server version community-nt Protocol version 10 Connection localhost via TCP/IP TCP port 3306 Uptime: 2 hours 15 min 1 sec Threads: 1 Questions: 24 Slow queries: 0 Opens: 26 Flush tables: 1 Open tables: 0 Queries per second avg: Как видите, кроме информации о версии сервера результаты включают в себя данные о версии протокола, соединении, номер порта, используемого для подключения к серверу, а также время безотказной работы сервера MySQL. Кроме того, команда version возвращает также информацию о состоянии сервера, описание которой приведено в табл Таблица Переменные состояния сервера MySQL Переменная состояния Threads Questions Slow queries Opens Flush tables Open tables Queries per second avg Описание Количество открытых в текущий момент времени соединений. Количество запросов, посланных серверу с момента его запуска. Количество запросов, выполнение которых заняло времени больше, чем указано в системной переменной long_query_time. Количество таблиц, открытых с момента запуска сервера. Количество команд flush, refresh и reload, выполненных с момента запуска сервера. Количество таблиц, открытых в текущий момент времени. Это таблицы, к которым осуществляется доступ в настоящее время. Среднее количество запросов в секунду.

    7 Администрирование MySQL 545 Как было упомянуто ранее в этой главе, для указания большинства программных опций можно использовать длинную и краткую формы записи. В предыдущем примере для каждой опции применялась краткая форма. Того же результата можно достигнуть, используя длинную форму, как показано в следующем примере: mysqladmin —user=root —password version Как видите, в этой команде используется —user=root вместо -u root и -password вместо -p. Кроме выполнения информационных команд, утилита mysqladmin может запускать команды, которые выполняют определенные действия. Так, следующий пример содержит команду reload: mysqladmin -u root -p reload Команда reload перечитывает таблицы привилегий, в результате чего все внесенные в эти таблицы изменения немедленно вступают в силу. Таблицы привилегий определяют, кто имеет доступ к серверу MySQL и каков тип этого доступа. (За более подробной информацией, касающейся таблиц привилегий и обеспечения безопасности MySQL, обращайтесь в главу 14.) При запуске утилиты mysqladmin ей можно передать несколько команд. Например, следующая команда перечитывает таблицы привилегий и выводит информацию о версии mysqladmin: mysqladmin -u root -p reload version По этой команде MySQL перечитывает таблицы привилегий и возвращает ту же информацию, которую вы видели в предыдущем примере, когда была указана одна только команда version. Теперь, после того как вы познакомились с примерами использования утилиты mysqladmin для выполнения административных функций, можно приступить к самостоятельной работе с этим средством. В следующем упражнении вы опробуете утилиту mysqladmin, просмотрев текущее состояние сервера MySQL и список потоков сервера. Потом с помощью этой утилиты вы сначала создадите базу данных, а затем удалите ее из системы. Практическое занятие Использование mysqladmin для администрирования MySQL Следующие шаги описывают применение утилиты mysqladmin для решения некоторых административных функций. 1. Первая команда возвращает информацию о текущем состоянии сервера MySQL. Введите следующую команду в ответ на приглашение операционной системы: mysqladmin -u root -p status После появления подсказки введите пароль и нажмите клавишу . Вы должны получить отчет о текущем состоянии сервера MySQL вроде следующего: Uptime: 8859 Threads: 1 Questions: 25 Slow queries: 0 Opens: 26 Flush tables: 1 Open tables: 0 Queries per second avg: 0.003

    8 546 Глава Следующая команда возвращает информацию о состоянии и список потоков. Введите следующую команду в ответ на приглашение операционной системы: mysqladmin -u root -p status processlist После появления подсказки введите пароль и нажмите клавишу . Вы должны получить отчет о текущем состоянии сервера MySQL, за которым следует список активных потоков сервера, что-то вроде следующего: Uptime: 8870 Threads: 1 Questions: 26 Slow queries: 0 Opens: 26 Flush tables: 1 Open tables: 0 Queries per second avg: Id User Host db Command Time State Info root localhost:2695 Query 0 show processlist Следующая команда аналогична предыдущей за исключением того, что аргументы status и processlist указаны в обратном порядке. Введите следующую команду в ответ на приглашение операционной системы: mysqladmin -u root -p processlist status После подсказки наберите пароль и нажмите клавишу . Вы должны получить список активных потоков сервера, за которым следует отчет о текущем состоянии: Id User Host db Command Time State Info root localhost:2698 Query 0 show processlist Uptime: 8880 Threads: 1 Questions: 29 Slow queries: 0 Opens: 26 Flush tables: 1 Open tables: 0 Queries per second avg: Следующая команда создает базу данных с именем db1. Введите следующую команду в ответ на приглашение операционной системы: mysqladmin -u root -p create db1 После появления подсказки введите пароль и нажмите клавишу . Вы должны вернуться обратно в командную строку операционной системы. 5. Чтобы убедиться в том, что база данных создана, откройте утилиту mysql. Для этого введите следующую команду в ответ на приглашение операционной системы: mysql Запустится утилита mysql. 6. Затем просмотрите список существующих в системе баз данных. Введите следующую команду в ответ на приглашение утилиты mysql: SHOW DATABASES; Полученный список должен содержать, по крайней мере, три базы данных, как показано в следующем результирующем наборе:

    9 Администрирование MySQL Database db1 mysql test rows in set (0.00 sec) 7. Теперь закройте утилиту mysql, выполнив следующую команду: exit Вы должны вернуться в командную строку операционной системы. 8. Последняя команда этого упражнения удаляет базу данных db1 из системы. Введите следующую команду в ответ на приглашение операционной системы: mysqladmin -u root -p -f drop db1 После появления подсказки введите пароль и нажмите клавишу . Вы должны получить сообщение о том, что база данных db1 удалена. Описание полученных результатов В этом упражнении вы создали ряд команд для выполнения различных административных функций. Эти команды основаны на утилите mysqladmin. Первая выполненная административная функция состояла в том, чтобы с помощью следующей команды получить данные о текущем состоянии сервера MySQL: mysqladmin -u root -p status Эта команда содержит несколько опций. Первая опция (-u) указывает на то, что для подключения к серверу MySQL должна использоваться учетная запись пользователя root. Вторая опция (-p) указывает на необходимость использования пароля. При таком задании опции p, без указания самого пароля, после запуска этой команды появится подсказка на ввод пароля. Следует отметить, что вы можете использовать —user=root вместо u root и -password вместо -p. Третьей опцией, включенной в предыдущий пример, является команда status. Эта команда выводит данные о текущем состоянии сервера MySQL. Данные включают в себя информацию о времени непрерывной работы, активных потоках, количестве обработанных запросов и другую информацию о состоянии сервера. Выводимая по этой команде информация в основном подобна той, которую возвращает команда version. Главное отличие между ними состоит в том, что команда version показывает время непрерывной работы сервера (uptime) в часах, минутах и секундах, а команда status в секундах. Следующая созданная вами команда mysqladmin аналогична предыдущей, за исключением того, что в нее добавлен еще параметр processlist, как показано ниже: mysqladmin -u root -p status processlist Параметр processlist выводит список активных потоков сервера. Поскольку эта команда содержит параметры status и processlist, в ее результатах присутствует информация, возвращаемая обоими этими параметрами, в том порядке, в котором эти параметры указаны в команде. Если эти параметры поменять местами, как показано в следующей команде, то и результаты будут представлены в обратном порядке: mysqladmin -u root -p processlist status

    10 548 Глава 13 Теперь вывод команды будет содержать сначала список потоков, а затем информацию о состоянии. Следующая созданная вами команда добавляет в систему новую базу данных по имени db1: mysqladmin -u root -p create db1 Эта команда содержит параметр create, за которым следует имя новой базы данных (db1). После выполнения этой команды вы с помощью утилиты mysql просмотрели список существующих баз данных, убедившись в том, что база db1 действительно была добавлена. Затем вы вышли из утилиты mysql и с помощью следующей команды удалили эту базу данных: mysqladmin -u root -p -f drop db1 Эта команда содержит параметр drop и имя базы данных. В результате выполнения этой команды база данных db1 удаляется из системы. Обратите внимание, что эта команда также содержит опцию -f. Указание этой опции, которую еще можно задать в виде -force, приводит к тому, что утилита mysqladmin выполнит команду drop без запроса на подтверждение удаления. В результате база данных db1 будет удалена из системы сразу же по выполнении этой команды, причем система не запросит подтверждение удаления базы данных. Управление системными переменными При запуске MySQL считывает стандартные и пользовательские настройки, которые определяют работу сервера. Эти настройки в значительной степени определяют окружение сервера MySQL и способ подключения пользователей к базе данных. Настройки сохраняются в системных переменных и содержат такие детали работы сервера, как время ожидания подключения, местоположение корневого каталога базы данных, включен ли режим протоколирования работы сервера, максимально возможное количество соединений, размеры кэшей и многие другие параметры. Для всех системных переменных установлены значения по умолчанию. Вместо значений по умолчанию можно задавать другие значения, указав их в командной строке при запуске сервера или в файлах опций. Значения многих переменных можно изменять во время работы сервера с помощью оператора SET. (Более подробно об этих трех способах задания системных переменных вы узнаете позднее в этой главе.) Системные переменные MySQL могут быть двух видов глобальные переменные и переменные сеанса. Глобальные переменные влияют на работу всего сервера. Переменные сеанса оказывают воздействие на работу конкретных пользовательских соединений. При запуске сервер инициализирует глобальные системные переменные значениями по умолчанию либо значениями, указанными в командной строке. После установки соединения MySQL инициализирует набор переменных сеанса для этого соединения. Для большинства переменных сеанса имеются соответствующие глобальные переменные. В качестве начальных значений этих переменных сеанса берутся значения соответствующих глобальных переменных, которые они имели на момент установки соединения. Например, если на момент установки соединения глобальная переменная wait_timeout имела значение 600, то значение переменной сеанса wait_timeout для этого соединения тоже будет равно 600. (Переменная wait_timeout указывает количество секунд ожидания активности в соединении, прежде чем закрыть это соеди-

    11 Администрирование MySQL 549 нение.) Для некоторых переменных сеанса не предусмотрено соответствующей глобальной переменной. В этом случае этим переменным MySQL присваивает значение по умолчанию. Не все системные переменные одинаковы с точки зрения выполняемых ими функций или возможности их изменения. В MySQL предусмотрены следующие три типа системных переменных. Серверные системные переменные. Набор системных переменных, которые определяют работу самого сервера MySQL и способы взаимодействия клиентов с сервером. По сути, к серверным системным переменным относятся все системные переменные, которые не используются явно для возврата данных о состоянии сервера. Динамические системные переменные. Подмножество множества серверных системных переменных, значения которых можно изменять в процессе работы сервера. Серверные переменные состояния. Набор системных переменных, основное назначение которых состоит в предоставлении информации о текущем состоянии сервера MySQL. Все переменные состояния являются глобальными переменными. Просмотр этих трех типов системных переменных в MySQL производится по-разному. В следующем разделе вы научитесь просматривать значения переменных каждого типа. Извлечение значений системных переменных Способ, который используется для просмотра значений системных переменных, зависит от их типа. Для просмотра серверных системных переменных используется оператор SHOW VARIABLES. Для просмотра динамических системных переменных служит оператор SELECT. И, наконец, для просмотра серверных переменных состояния применяется оператор SHOW STATUS. В MySQL имеются сотни системных переменных, описание которых заняло бы намного больше места, чем позволяют размеры этой книги. Поэтому если вам нужна информация о какой-либо конкретной системной переменной или необходимо получить список всех поддерживаемых переменных, необходимо использовать один из трех операторов, описываемых в следующих разделах, или обратиться к документации, поставляемой вместе с сервером MySQL. Использование оператора SHOW VARIABLES для извлечения значений серверных системных переменных Оператор SHOW VARIABLES внутри утилиты mysql позволяет просмотреть большинство серверных системных переменных, а также их текущие значения. (Этот оператор не отображает некоторые из динамических системных переменных. Для просмотра значений этих переменных следует применять оператор SELECT, который описывается далее в этой главе.) С помощью оператора SHOW VARIABLES можно просматривать глобальные переменные или переменные сеанса, а также уточнять запрос, добавляя в него конструкцию LIKE, как показано в следующем описании синтаксиса этого оператора: SHOW [GLOBAL SESSION] VARIABLES [LIKE ‘ ‘]

    12 550 Глава 13 Как видите, единственной обязательной частью этого оператора являются ключевые слова SHOW VARIABLES. Кроме них можно также задавать одно из ключевых слов GLOBAL или SESSION. Если указать ключевое слово GLOBAL, MySQL выведет глобальные системные переменные. Если указать SESSION, MySQL отобразит системные переменные сеанса. Если же не указывать ни одну из этих альтернатив, то при выводе будут показаны переменные сеанса, если они существуют, и глобальные переменные в противном случае. Синтаксис оператора SHOW VARIABLES содержит также необязательную конструкцию LIKE. Конструкция LIKE позволяет вывести информацию о конкретной системной переменной или показать системные переменные, имена которых удовлетворяют заданному шаблону. Позже в этом разделе будет показан пример использования конструкции LIKE, но сначала мы рассмотрим простой пример использования оператора SHOW VARIABLES. Следующий оператор возвращает все глобальные переменные и их значения: SHOW GLOBAL VARIABLES; Как видите, этот оператор содержит обязательные ключевые слова SHOW VARIABLES и необязательное ключевое слово GLOBAL. После выполнения этого оператора вы должны получить примерно следующие результаты: Variable_name Value back_log 50 basedir C:\Program Files\MySQL\MySQL Server 5.0\ binlog_cache_size bulk_insert_buffer_size character_set_client latin1 character_set_connection latin1 character_set_database latin1 character_set_results latin1 character_set_server latin1 character_set_system utf8 Приведенные здесь результаты содержат неполный список всех серверных системных переменных. Обычно этот оператор возвращает примерно 180 системных переменных. Просмотреть системные переменные сеанса можно с помощью следующего оператора: SHOW SESSION VARIABLES; Результаты, возвращаемые эти оператором, обычно напоминают результаты, которые возвращает оператор с ключевым словом GLOBAL. В большинстве случаев бывает достаточно показать только часть списка, возвращаемого этими операторами. Этой цели служит конструкция LIKE. LIKE позволяет указать значение, которое сравнивается с именами переменных. Например, предположим, что нужно просмотреть все переменные, связанные с запросами к базе данных. Для этого достаточно включить в оператор конструкцию LIKE, содержащую строку запрос, как показано в следующем операторе: SHOW VARIABLES LIKE ‘%запрос%’;

    13 Администрирование MySQL 551 Как видите, в LIKE указана строка, окруженная шаблонным символом %. Вследствие этого имя переменной может начинаться или заканчиваться любыми символами, но должно содержать строку запрос. После выполнения этого оператора вы должны получить примерно такие результаты: Variable_name Value ft_query_expansion_limit 20 have_query_cache YES long_query_time 10 query_alloc_block_size 8192 query_cache_limit query_cache_min_res_unit 4096 query_cache_size 0 query_cache_type ON query_cache_wlock_invalidate OFF query_prealloc_size rows in set (0.00 sec) Эта таблица содержит только те переменные, в имени которых присутствует строка запрос. Информацию о назначении каждой переменной можно найти в документации, поставляемой с сервером MySQL. Теперь посмотрим, как с помощью оператора SELECT можно получить значения динамических системных переменных. Использование оператора SELECT для извлечения значений динамических системных переменных Как и все системные переменные, динамические переменные подразделяются на глобальные и специфичные для конкретного сеанса. Многие динамические переменные действуют как глобально, так и на уровне сеанса, в то время как другие являются либо глобальными, либо переменными сеанса, но не теми и другими одновременно. Например, переменная autocommit (которая задает режим автоматического завершения транзакций) является переменной сеанса, а переменная binlog_cache_size (которая указывает размер кэша для бинарного журнала) является глобальной и не имеет отношения к отдельному сеансу. В то же время переменная wait_timeout является допустимой как на глобальном уровне, так и на уровне сеанса, причем значения для каждой из них могут отличаться между собой. Текущее значение динамической системной переменной, независимо от того используется она глобально или в рамках сеанса, можно узнать с помощью оператора SELECT. Для просмотра значения конкретной переменной этот метод является более простым, чем использование оператора SHOW VARIABLES. Получить же значения динамических переменных сеанса, не отображаемых командой SHOW VARIABLES, можно только с помощью этого метода. Ниже приведен синтаксис оператора SELECT для получения значения динамической переменной: SELECT [<, Как видите, необходимо указать ключевое слово SELECT, удвоенный и имя переменной. Чтобы получить значение глобальной переменной, имя этой пере-

    14 552 Глава 13 менной потребуется предварить ключевым словом global со следующей за ним точкой, как показано в следующем примере: SELECT Этот оператор SELECT извлекает значение глобальной переменной max_binlog_ size, которая определяет максимальный размер файла бинарного журнала, выраженный в байтах. После выполнения этого оператора вы должны получить примерно следующие результаты: row in set (0.00 sec) Поскольку эта переменная принадлежит к числу системных переменных, возвращаемых оператором SHOW VARIABLES, те же самые результаты можно получить и с применением этого оператора, как показано в следующем примере: SHOW GLOBAL VARIABLES LIKE ‘max_binlog_size’; Как видите, конструкция LIKE содержит конкретное значение без символов шаблона. Результаты выполнения этого оператора имеют примерно следующий вид: Variable_name Value max_binlog_size row in set (0.00 sec) Несмотря на то что результаты представлены в иной форме, нежели при использовании оператора SELECT, по сути, они содержат ту же самую информацию. Запомните, однако, что этот метод работает только для тех системных переменных, которые возвращает оператор SHOW VARAIBLES. Чтобы получить значение переменной сеанса, а не глобальной переменной, необходимо просто опустить ключевое слово global и точку, как показано в следующем примере: SELECT В этом примере оператор SELECT извлекает значение переменной сеанса tx_isolation, которая определяет уровень изоляции транзакций текущего соединения: REPEATABLE-READ row in set (0.01 sec) Уровень изоляции транзакций в данном случае равен REPEATABLE READ. (За более подробной информацией об уровнях изоляции транзакций обращайтесь в главу 12.)

    15 Администрирование MySQL 553 Как следует из описания синтаксиса оператора SELECT, в этом операторе можно указывать несколько динамических системных переменных. Например, следующий оператор SELECT возвращает уровень изоляции для текущего сеанса, а также максимально допустимое значение размера файла бинарного журнала: SELECT Как видно из результатов выполнения этого оператора, приведенных ниже, на экран будут выведены значения обеих переменных: REPEATABLE-READ row in set (0.00 sec) Операторы SELECT и SHOW VARIABLES представляют собой удобное средство для просмотра системных переменных; однако ни один из них не позволяет показать значения серверных переменных состояния. Для этой цели предназначен оператор SHOW STATUS. Использование оператора SHOW STATUS для извлечения значений серверных переменных состояния Большинство серверных переменных состояния представляют собой счетчики, значение которых устанавливается равным нулю при запуске сервера MySQL. Начиная с этого момента, они подсчитывают количество возникновений конкретного события. Например, переменная состояния Connections содержит общее количество соединений с момента запуска сервера, а в переменной Bytes_sent хранится суммарное количество байтов, переданных всем клиентам. Кроме переменных состояния, которые подсчитывают, сколько раз произошло то или иное событие, существуют также переменные состояния, которые предоставляют информацию другого рода, такую как количество памяти, доступной для кэша запросов, или количество открытых таблиц. Для просмотра текущих значений переменных состояния служит оператор SHOW STATUS, синтаксис которого имеет следующий вид: SHOW STATUS [LIKE ‘ ‘] Как показывает синтаксис, вы должны указать ключевые слова SHOW STATUS. Кроме них вы можете включить конструкцию LIKE. LIKE работает точно так же, как и аналогичная конструкция оператора SHOW VARIABLES, как вы увидите позднее в этом разделе. Возвращаясь к синтаксису, можно обнаружить, что стандартный оператор SHOW STATUS очень прост, как показывает следующий пример: SHOW STATUS; Этот оператор возвращает все переменные состояния и их текущие значения. Следующий результирующий набор представляет собой лишь часть всего вывода оператора SHOW STATUS:

    16 554 Глава Variable_name Value Aborted_clients 0 Aborted_connects 0 Binlog_cache_disk_use 0 Binlog_cache_use 0 Bytes_received 993 Bytes_sent 879 Com_admin_commands 0 Com_alter_db 0 Com_alter_table 0 Com_analyze 0 Com_backup_table 0 Com_begin 0 Com_change_db 0 Com_change_master 0 Com_check 0 Com_checksum 0 Com_commit 0 Com_create_db 0 Com_create_function 0 Com_create_index 0 Com_create_table 4 Com_dealloc_sql 0 Всего в MySQL насчитывается более 150 переменных состояния. По этой причине конструкция LIKE является удобным средством для сокращения количества строк, выводимых этим оператором. Например, следующий оператор SHOW STATUS выводит на экран все переменные состояния, в имени которых содержится строка select: SHOW STATUS LIKE ‘%select%’; После выполнения этого оператора вы должны получить примерно следующие результаты: Variable_name Value Com_insert_select 0 Com_replace_select 0 Com_select 44 Select_full_join 0 Select_full_range_join 0 Select_range 0 Select_range_check 0 Select_scan rows in set (0.00 sec) Как видите, этот оператор возвращает только те переменные состояния, которые в своем имени содержат строку select. Сейчас, после того, как вы получили представление о различных операторах SQL, используемых для просмотра системных переменных и их значений, можно приступить к практическому применению этих операторов. В следующем упражнении вы с

    17 Администрирование MySQL 555 помощью операторов SHOW VARIABLES, SELECT и SHOW STATUS попробуете получить значения заданных системных переменных. Практическое занятие Просмотр системных настроек В приведенных ниже шагах описано использование различных операторов SQL для просмотра значений системных переменных. 1. Откройте утилиту mysql. 2. Создайте оператор SHOW VARIABLES, который возвращает глобальные переменные, в имени которых присутствует строка log. Выполните следующий SQLоператор из командной строки mysql: SHOW GLOBAL VARIABLES LIKE ‘%log%’; Вы должны получить примерно такие результаты: Variable_name Value back_log 50 binlog_cache_size expire_logs_days 0 innodb_locks_unsafe_for_binlog OFF innodb_flush_log_at_trx_commit 1 innodb_log_arch_dir innodb_log_archive OFF innodb_log_buffer_size innodb_log_file_size innodb_log_files_in_group 2 innodb_log_group_home_dir.\ innodb_mirrored_log_groups 1 log ON log_bin ON log_error.\ws01.err log_slave_updates OFF log_slow_queries OFF log_update OFF log_warnings 1 max_binlog_cache_size max_binlog_size max_relay_log_size 0 relay_log_purge ON sync_binlog rows in set (0.00 sec) 3. Создайте оператор SELECT, который возвращает значение глобальной системной переменной max_connections. Переменная max_connections задает максимально возможное количество одновременно подключенных клиентов. Выполните следующий SQL-оператор из командной строки mysql: SELECT Вы должны получить примерно следующие результаты:

    18 556 Глава row in set (0.00 sec) 4. Создайте оператор SHOW STATUS, возвращающий переменные состояния, в имени которых присутствует строка thread. Выполните следующий SQL-оператор из командной строки mysql: SHOW STATUS LIKE ‘%thread%’; Вы должны получить приблизительно такие результаты: Variable_name Value Delayed_insert_threads 0 Slow_launch_threads 0 Threads_cached 0 Threads_connected 1 Threads_created 1 Threads_running rows in set (0.00 sec) Описание полученных результатов Первым созданным вами в этом упражнении SQL-оператором был SHOW VARIABLES: SHOW GLOBAL VARIABLES LIKE ‘%log%’; Этот оператор содержит обязательные ключевые слова SHOW VARIABLES вместе с опцией GLOBAL. Вследствие этого он возвращает только глобальные переменные и их значения. Кроме того, в этом операторе используется конструкция LIKE для указания того, что возвращаемые переменные должны содержать в своем имени строку log. (Шаблонные символы % указывают на то, что этой строке может предшествовать или следовать за ней любое количество символов, включая ноль.) Очередным созданным в этом упражнении SQL-оператором был показанный ниже SELECT: SELECT Этот оператор SELECT извлекает значение переменной max_connections. Поскольку имя переменной указано с префиксом global, этот оператор ссылается на глобальную переменную, а не на переменную сеанса. Чтобы просмотреть значение переменной сеанса, префикс global необходимо опустить. Далее следовал такой SQL-оператор SHOW STATUS: SHOW STATUS LIKE ‘%thread%’; Кроме указания обязательных ключевых слов SHOW STATUS в этот оператор включена конструкция LIKE, которая ограничивает набор возвращаемых переменных состояния только теми переменными, в имени которых содержится строка thread.

    19 Конфигурирование сервера Администрирование MySQL 557 В главе 3 вы научились указывать параметры при запуске программ, входящих в состав MySQL, включая и сам сервер MySQL. Из всех рассмотренных методов двумя наиболее распространенными являются определение параметров в командной строке и в файле опций. Большинство параметров, указываемых в командной строке или файле опций, являются системными переменными, влияющими на работу сервера MySQL. При функционирующем сервере можно изменять настройки динамических системных переменных с помощью оператора SET. В этом разделе дается обзор методов задания параметров во время запуска сервера, после чего рассматривается использование оператора SET для установки системных переменных в процессе работы сервера. В этом разделе вопросы задания параметров в командной строке или в файле опций затронуты лишь мельком. Каждая из этих тем подробно рассматривалась в главе 3. Эта информация включена сюда только для того, чтобы дать связанный обзор настройки системных переменных. Задание системных настроек в командной строке Как говорилось в главе 3, при запуске сервера MySQL ему можно передать параметры. Если параметр требует указания значения, то перед параметром ставится двойной дефис (—), а после него знак равенства и присваиваемое значение. Например, в следующей команде значение присваивается системной переменной query_cache_limit: mysqld —query_cache_limit= Переменная query_cache_limit ограничивает размер (в байтах) кэшируемого результирующего набора. Результаты, превышающие значение этой переменной, не кэшируются. Значение переменной query_cache_limit, заданное в командной строке, перекрывает значение этой переменной по умолчанию, равное байт. Вы можете также задать несколько параметров в командной строке, как показано в следующем примере: mysqld —query_cache_limit= wait_timeout=600 В этом примере при запуске сервера максимальный размер кэшируемого результата запроса устанавливается равным байт, а время ожидания соединения 600 секундам. Несмотря на возможность указания значений этим и другим переменным в командной строке, все же предпочтительным способом определения начальных значений является использование файла опций. Задание системных настроек в файле опций Преимущество использования файла опций по сравнению с применением параметров командной строки заключается в том, что в файле опций значения переменным задаются только один раз. Параметры же, передаваемые в командной строке, необходимо указывать каждый раз при запуске сервера. Задание параметров в командной строке оправдывает себя только в том случае, если нужно запустить сервер с этими параметрами только один раз. Во всех остальных случаях лучше иметь дело с файлом опций.

    20 558 Глава 13 При определении значений системных переменных в файле опций их необходимо поместить в раздел [mysqld] этого файла. Например, в следующих строках устанавливаются значения для двух системных переменных: [mysqld] query_cache_limit= wait_timeout=600 При определении системных переменных в файле опций перед именем переменной не нужно ставить два знака дефиса, как это делается при указании переменных в командной строке. Однако знак равенства между именем переменной и соответствующим ей значением является необходимым. При использовании файла опций для определения настроек сервера в системе Windows необходимо помнить о том, где служба MySQL ищет файл опций. По умолчанию эта служба ищет настройки сервера в файле my.ini в каталоге C:\Program Files\MySQL\MySQL Server . Клиентские утилиты MySQL ищут свои настройки в файле my.ini каталога C:\WINDOWS. Один из вариантов объединения этих файлов состоит в следующем: нужно удалить текущую службу MySQL, а затем создать ее заново так, чтобы в качестве файла конфигурации она использовала тот же файл, что и клиентские утилиты. В результате вам понадобиться сопровождать только один файл опций. (Этот прием описан в упражнении, приведенном в конце этой главы.) В противном случае придется поддерживать два файла опций. Задание системных настроек во время выполнения Иногда возникает необходимость изменить настройки системных переменных во время работы сервера то ли на глобальном уровне, то ли на уровне сеанса. Если сделать изменения на глобальном уровне, то внесенные изменения окажут влияние на всех клиентов. Однако они повлияют только на новые соединения и не затронут соответствующих переменных в текущих соединениях. Если же изменения сделать на уровне сеанса, то они окажут влияние только на соединение, в котором эти изменения были произведены. Другие соединения не будут затронуты. Установить значение для динамической системной переменной в процессе работы сервера можно с помощью оператора SET, синтаксис которого имеет следующий вид: SET [GLOBAL SESSION] Этот оператор состоит из ключевого слова SET и настройки переменной, включающей в себя имя переменной, за которой следуют знак равенства и новое значение. Если задать ключевое слово GLOBAL, то MySQL присвоит новое значение указанной глобальной переменной. Если же вместо него указать SESSION или вообще ничего не указывать, то новое значение присвоится соответствующей переменной сеанса. Полный список динамических системных переменных, а также описание того, действуют они на глобальном уровне, на уровне сеанса или же и там и там, приведены в документации по MySQL. Например, установить переменной query_cache_limit значение так, чтобы оно действовало глобально, можно с помощью следующего оператора SET: SET GLOBAL QUERY_CACHE_LIMIT= ;

    21 Администрирование MySQL 559 Как видите, этот оператор содержит ключевые слова SET GLOBAL, имя переменной, знак равенства и новое значение. После выполнения этого оператора новое значение будет действовать на глобальном уровне и затронет все соединения. В итоге теперь максимальный размер результата запроса, который может быть помещен в кэш, меньше значения по умолчанию. Чтобы установить значение переменной текущего сеанса, нужно либо указать ключевое слово SESSION, либо вообще ничего не указывать, как показано в следующем примере: SET WAIT_TIMEOUT=600; Этот оператор устанавливает для переменной wait_timeout значение 600 секунд, которое намного меньше его умалчиваемого значения, равного секундам. Теперь, после того как вы получили представление о том, как использовать оператор SET для установки значений динамических системных переменных, можно попробовать применить его на практике. В следующем упражнении оператор SET используется для изменения значения системной переменной foreign_key_checks. Эта переменная определяет, нужно ли при изменении данных выполнять проверку ограничений внешних ключей для таблиц InnoDB. Если значение этой переменной равно 1, проверка выполняется. Если оно равно 0, то нет. По умолчанию эта переменная равна 1. Практическое занятие Изменение системных настроек в процессе работы 1. Откройте утилиту mysql. 2. Сначала с помощью оператора SELECT просмотрите текущее значение системной переменной foreign_key_checks. Введите следующий SQL-оператор в командной строке утилиты mysql: SELECT Вы должны получить примерно такой результат: row in set (0.00 sec) 3. Чтобы отключить проверку внешнего ключа, установите значение переменной foreign_key_checks в 0. Введите следующий SQL-оператор в командной строке утилиты mysql: SET FOREIGN_KEY_CHECKS=0; Вы должны получить сообщение об успешном выполнении этого оператора. 4. Снова воспользуйтесь оператором SELECT для просмотра текущего значения переменной foreign_key_checks. Введите тот же самый SQL-оператор, который вы вводили на шаге 2. Вы должны получить примерно следующие результаты:

    22 560 Глава row in set (0.00 sec) 5. Завершите текущий сеанс MySQL, закрыв утилиту mysql, а затем начните новый сеанс, перезапустив утилиту. 6. Наконец, проверьте текущее значение foreign_key_checks в последний раз. Введите следующий SQL-оператор в командной строке утилиты mysql: SELECT Вы должны получить примерно такой результат: row in set (0.00 sec) Описание полученных результатов В нескольких местах этого упражнения для проверки текущего значения системной переменной foreign_key_checks применялся следующий оператор SELECT: SELECT С помощью аналогичной команды можно получить значение любой динамической системной переменной. Как видно из примера, эта команда состоит из ключевого слова SELECT, за которым следует имя переменной. Имени переменной должен предшествовать удвоенный Поскольку имя переменной указано без префикса global, будет возвращено значение переменной текущего сеанса. Когда вы просматривали переменную foreign_key_checks в первый раз, ее значение было равно 1. Затем с помощью оператора SET вы изменили ее значение на 0: SET FOREIGN_KEY_CHECKS=0; После этого вы опять проверили значение foreign_key_checks и убедились, что теперь оно равно 0. Затем вы завершили текущий сеанс и сразу же открыли новый. При просмотре переменной foreign_key_checks в этот раз оказалось, что теперь ее значение равно 1. Задавая значение для переменной foreign_key_checks, вы не включили ключевое слово GLOBAL, поэтому была изменена переменная текущего сеанса. В результате после завершения сеанса это изменение исчезло и, когда стартовал новый сеанс, для переменной foreign_key_checks было использовано глобальное значение. Управление файлами журналов При установке MySQL, независимо от того, в какой из систем Linux или Windows она производится, автоматически настраивается ведение журнальных файлов ошибок. Кроме этого при установке системы можно указать другие типы регистрации событий, такие как регистрация запросов и бинарная регистрация. Этот раздел по-

  • Илон Маск рекомендует:  Что такое код domxml_xmltree
Понравилась статья? Поделиться с друзьями:
Кодинг, CSS и SQL