В.В.Галактионов, Т.М.Голоскокова, Н.И.Громова, А.В.Гусев, В.В.Мицын, Ж.Ж.Мусульманбеков, И.К.Некрасова, В.Д.Позе, А.В.Сергеев, Е.А.Тихоненко
РУКОВОДСТВО ДЛЯ ПОЛЬЗОВАТЕЛЕЙ LINUX КЛАСТЕРА ЛИТ ОИЯИ
Дубна 2004
От редактора
1 Структура Linux кластера и базовое программное обеспечение
1.1 Интерактивный кластер
1.2 Вычислительные фермы
1.3 Серверы дискового пространства
1.4 Вспомогательные серверы
1.5 Базовое программное обеспечение

2 Начальные рекомендации пользователям
2.1 Как стать пользователем
2.2 Ваша "учетная запись" (account) и пароль
2.3 Безопасность
2.4 Пакетная обработка счетных задач
2.5 Дисковое пространство для пользователей
2.6 AFS и пользовательские файлы и каталоги
2.7 Электронная почта
2.8 Русификация

3 Файловая система AFS

4 Рекомендации для пользователей параллельного вычислительного кластера
4.1 Использование команды qsub
4.2 Описание параметров
4.3 Контроль над исполнением задачи
4.4 Результаты выполнения задачи в пакетной обработке

5 Перечень и краткое описание основных команд при работе в операционной системе Linux
5.1 Простейшие действия
5.2 Стандартные команды. Информация по системе команд
5.3 Работа с сетью
5.4 Некоторые команды администрирования
5.5 Контроль процессов
5.6 Встроенные в Linux программные утилиты и языки

6 Midnight Commander

7 Рекомендуемые редакторы
7.1 Текстовый редактор pico
7.2 Краткое описание редактора vi/vim

8 Некоторые средства разработки программ
8.1 Текущие версии компиляторов C и g77
8.2 Редактор связей ld
8.3 Команды ar, ranlib, nm, ldd, strings
8.4 Утилита gprof
8.5 Отладчики GDB, DDD

9 Графические пакеты на Linux кластере
9.1 ImageMagick. Просмотр и обработка изображений
9.2 Chimera
9.3 Системы визуализации массивов числовой информации (научных данных)
Grace
IRIS Explorer
OpenDX (Data Explorer)

10 СУБД MySQL
10.1 Регистрация пользователей и создание базы данных
10.2 Соединение с сервером MySQL
10.3 Примеры работы с MySQL
10.4 Основные команды
10.5 Подключение к базе данных MySQL с использованием PHP

11 Изменения в работе с PHP-программами

12 Сведения об информационном сервере linux4u

13 Литература о Linux на русском языке

14 Сравнительное сопоставление прикладных пакетов в Windows и Linux

файлы для печати:
(.doc) (.zip))

November 17, 20:43:50

 

chapter_10

10 СУБД MySQL

- это система управления реляционными базами данных (БД), для работы с ними используется SQL (Structured Query Language) - наиболее распространенный стандартный язык, используемый для доступа к базам данных. В реляционной БД данные хранятся в отдельных таблицах, которые связываются между собой при помощи отношений. Благодаря этому обеспечивается возможность объединять при выполнении запроса данные из нескольких таблиц. Для каждого пользователя создается своя база данных, в которой можно, имея соответствующие права доступа:

  • Создавать таблицы
  • Добавлять информацию в таблицы
  • Модифицировать или удалять информацию
  • Получать необходимые данные
MySQL основана на технологии клиент-сервер. Для операций с данными используется программа mysql, которая является клиентом сервера. Можно также использовать любой SQL-клиент, который для пользователя наиболее привычен и удобен. Пользователь может создавать таблицы и заполнять их данными в ACCESS, а потом экспортировать таблицы в собственную БД - только нужно установить 32-битный ODBC драйвер для MySQL. Есть также простые в использовании программные расширения HTML, которые поддерживают доступ к серверам баз данных MySQL.


10.1 Регистрация пользователей и создание базы данных

Для регистрации пользователей и создания базы данных следует направить официальное письмо на имя зам. директора ЛИТ Коренькова В.В. с просьбой о создании базы данных на MySQL для такого-то пользователя (фамилия, имя, отчество) с его координатами (телефоны, место работы), указать желаемое имя пользователя MySQL - user и название базы данных - dbname. После получения разрешения на создание БД, администратор сообщает все параметры соединения.


10.2 Соединение с сервером MySQL

При подключении к серверу с помощью mysql обычно нужно ввести имя пользователя MySQL (user) и, в большинстве случаев, пароль. Если сервер запущен не на том компьютере, с которого пользователь вошел в систему, необходимо также указать имя хоста (hostname). Можно также сразу указать базу данных (dbname), с которой хотите работать. Получив соответствующие параметры, подсоединиться к серверу можно следующим образом:

> mysql -h hostname -u user -p dbname


mysql выведет на экран запрос:

Enter password: * * * * * * * *


Вводится пароль. Если не задан пароль или имя пользователя, mysql пробует зайти в систему на сервере базы данных с использованием логина на Linux кластере и НУЛЕВОГО (ПУСТОГО) пароля. Это не пройдет, если mysql_логин отличается от логина на Linux кластере, или если пользователь имеет mysql_пароль.
Несколько примеров запросов пользователя pupil при работе с базой данных test при учете, что имя сервера БД - lxdbs

> mysql -h lxdbs -u pupil -p
Enter password:


На экране должна появиться следующая информация и приглашение mysql:

Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 2920 to server version: 3.23.55-Max-log
Type 'help;' or '\h' for help. Type '\c' to clear the buffer.
mysql>

Программа mysql готова к вводу команд. Когда выдана команда, mysql посылает ее серверу для выполнения и отображает результаты, затем печатает подсказку mysql>, чтобы указать, что готова для приема другой команды. Для отмены исполнения набираемой команды используется сочетание \c.
После установки соединения можно в любой момент отключиться от сервера командой QUIT:

mysql> QUIT
Bye

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

mysql>USE dbname

В данном примере:

mysql> use test
Database changed
mysql>

Команда USE dbname сообщает, чтобы MySQL использовал базу данных dbname как заданную по умолчанию для последующих запросов. База данных остается текущей до конца сеанса, или пока не будет выдана другая инструкция USE.
Имена баз данных и таблиц чувствительны к регистру, а для ввода ключевых слов можно использовать любой регистр символов. По умолчанию поиск в MySQL также нечувствителен к регистру.
Команда обычно состоит из SQL-выражения, за которым следует точка с запятой.
mysql отображает вывод запроса как таблицу (строки и столбцы). Первая строка содержит метки для столбцов, следующие строки задают результаты запроса.

11.3 Примеры работы с MySQL

mysql можно использовать как простой калькулятор:

mysql> SELECT COS(PI()/3), (5+2)*3;


+---------------+------------+
| COS(PI()/3)   | (5+2)*3    |
+---------------+------------+
| 0.500000      |      21    |
+---------------+------------+


Посмотреть названия таблиц в текущей БД, на которые пользователь имеет привилегии, можно так:

mysql> show tables;


А структуру таблицы:

mysql>DESCRIBE tablename;


Команда может быть короткой, с одной строкой инструкции, например:

mysql> SELECT USER(), now();

+-----------------------+---------------------+
| USER()                | now()               |
+-----------------------+---------------------+
| pupil@lxpub01.jinr.ru | 2004-04-22 16:36:55 |
+-----------------------+---------------------+


Но mysql позволяет вводить и длинные запросы в виде нескольких коротких строк; конец запроса - точка с запятой. Некоторые данные намного более читаемы, когда отображаются вертикально. Вывод запроса (строки) вертикально можно получить, заканчивая команду сочетанием \G.

mysql> select * from SOTRUDNIKI
-> where IMYA like 'Sid%' \G;
 
      *************** 1. row *************** 
                  FAMILIA: Sidorov
                     IMYA: Sidor
                ROZHDENIE: 1960-03-03
         MESTO_ROZHDENIYA: Tula


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

Метка Значение
mysql> Ожидание новой команды
-> Ожидание следующей строки многострочной команды
'> (">) Введена строка, которая начинается с символа кавычки ' ( "), но нет второй кавычки, которая завершает эту строку.

Если по ошибке введена незавершенная строка, любые дальнейшие строки, которые будут вводиться, игнорируются mysql, включая строку QUIT!
При появлении подсказки '> ( ">), нужно ввести недостающую кавычку и отменить текущую команду '> '\c ( "> "\c). После подсказки mysql> можно продолжить работу.

Иногда многострочные инструкции происходят случайно, если не введена точка с запятой для завершения. В этом случае mysql ждет продолжение ввода:

mysql> SELECT *
-> from SOTRUDNIKI
->;

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


11.4 Основные команды

Основными командами языка SQL, используемыми для манипуляции с данными, являются SELECT, INSERT, UPDATE, DELETE.

  • SELECT используется, чтобы получить информацию из таблицы. Общая форма инструкции:

    SELECT what_to_select FROM table_name WHERE conditions_to_satisfy;

    what_to_select - указывает то, что Вы хотите увидеть. Это может быть список столбцов или *, чтобы указать все столбцы.
    table_name - указывает таблицу, из которой Вы хотите получить данные.
    Предложение WHERE представлено, если задаются условия (conditions_to_satisfy), которым должны удовлетворять искомые строки.

    Самая простая форма SELECT получает все из таблицы:

    mysql> SELECT * FROM table_name;

    При работе с оператором SELECT доступно много полезных функций. Например, следующие функции вычисляют:


    COUNT - количество элементов;
    SUM - сумму элементов;
    MAX и MIN - максимальное и минимальное значение;
    AVG - среднее значение.


  • INSERT вставляет новые строки в существующую таблицу table_name
    Общая форма инструкции:


    INSERT INTO table_name (col1,col2,...) VALUES(value1,value2,...);

    valueN - значение, которое будет присвоено соответствующему столбцу colN.


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


  • UPDATE модифицирует столбцы в существующих строках таблиц с новыми значениями:


    UPDATE table_name SET col1=expr1 [,col2=expr2, ...] [WHERE where_definition];


    Предложение SET указывает, какие столбцы изменять, и значения, которые им должны быть заданы.
    Предложение WHERE, если задано, определяет, какие строки должны модифицироваться. Иначе модифицируются все строки.


  • DELETE удаляет строки из таблицы.


    DELETE FROM table_name [WHERE where_definition];


    DELETE удаляет строки, которые удовлетворяют условию, заданному в where_definition, из таблицы table_name и возвращает число удаленных записей.
    Если команда DELETE выдается без предложения WHERE, все строки будут удалены.

    Полезная опция запуска для новичков: -U (--safe-updates или --i-am-a-dummy для пользователей, которые скомандовали DELETE FROM table_name, но забыли указать предложение WHERE). Эффект вышеупомянутой команды: инструкции UPDATE или DELETE, которые не имеют ограничения ключа в части WHERE, не будут выполняться. Разрешаются только UPDATE и DELETE, которые используют ключи. Если войти в MySQL с опциями:

    > mysql -U -u pupil -p


    и попытаться выполнить команду:


    mysql> delete from table_name;


    то будет получен такой ответ:


    ERROR 1175: You are using safe update mode and you tried to update a table without a WHERE that uses a KEY column


11.5 Подключение к базе данных MySQL с использованием PHP

К базе данных MySQL можно подключаться, используя PHP. Приведем PHP скрипт - очень простой пример создания в базе данных test таблицы testtab, наполнения ее данными и получения данных из нее. В угловых скобках (< >) - тэги языка HTML. После // идет комментарий.

      <?php
          $dbname = "test";          //  Имя базы данных 
          $user = "pupil";           //  Имя пользователя 
          $password = "-";           //  Пароль 
          $dbhost = "lxdbs";         //  Хост
      echo " Подключаемся к MySQL серверу<br>";  // контроль работы скрипта
      $link = mysql_connect($dbhost, $user, $password);
      echo " Выбираем нашу базу данных<br>";    // контроль работы скрипта
      mysql_select_db($dbname, $link);
      echo "Создаем таблицу testtab <br>";      // контроль работы скрипта
      $query = "CREATE TABLE testtab (num int(2), num_square int(10),a     
      varchar(20))";
      mysql_query($query, $link);
      echo " Добавляем 10 записей в нашу таблицу testtab<br>";  // контроль
 
      for($i=1; $i<11; $i++)
      { $ii=$i*$i;
      $a= $i;
      $query1 = "INSERT INTO testtab(num, num_square,a) 
      VALUES($i,$ii,'stroka$a')";
      echo "<br>$i, $ii, stroka$a";       // контроль работы скрипта
      mysql_query($query1, $link);
       } 
      echo "<br> Смотрим содержимое  нашей таблицы testtab<br>";
      // далее выводится на печать имя таблицы:
      echo("<center><h2>Таблица testtab </h2></center>"); 
      echo('<table align="center" border="1"><tr>'); // атрибуты таблицы

       // определяется  количество полей  таблицы: 
      $num_fields = mysql_num_fields(mysql_db_query($dbname,"select * from 
      testtab", $link)); 
      // заносятся названия полей таблицы  в  массив: 
      for ($i=0; $i < $num_fields; $i++) { 
      $result = mysql_db_query($dbname, "select * from testtab", $link); 
      $hash_field_names[i] = mysql_field_name($result, $i); 
      //выводятся на печать названия столбцов таблицы:
      echo("<th>"); 
      echo $hash_field_names[i]; 
      echo("</th>");  
      }     
      $result = mysql_db_query($dbname, "select * from testtab", $link); 
      echo("</tr><tr>"); 
      //определяется кол-во строк в таблице:
      $number_of_rows = @mysql_num_rows($result); 
      for ($ii = 0; $ii < $number_of_rows; $ii++) { 
      // выборка  очередной строки:
      $record = @mysql_fetch_row($result); 
      // выборка  i-го элемента строки:
      for ($i=0; $i < $num_fields; $i++) { 
      echo("<td>"); 
      // печать i-го элемента строки:
      echo $record[$i]; 
      echo("</td>"); 
                  } 
      echo("</tr>"); 
              } 
      echo("</table>"); 
      echo("<br> Закрываем соединение");
      mysql_close($link);
      ?>


Выполнить этот скрипт Вы сможете, если зададите свои параметры dbname, user, password, т.к. у пользователя pupil в настоящее время оставлена только привилегия select.

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

http://www.mysql.com/doc/ru/
http://www.botik.ru/~rldp/mysq l/mysqlcli/