Большой архив статей, книг, документации по программированию, вебдизайну, компьютерной графике, сетям, операционным системам и многому другому
 
<Добавить в Избранное>    <Сделать стартовой>    <Реклама на сайте>    <Контакты>
  Главная Документация Программы Обои   Экспорт RSS E-Books
 
 

   Базы данных -> MySQL -> MySQL — “зеленым” админам


MySQL — “зеленым” админам

Данная статья не является полным руководством по администрированию MySQL-сервера, здесь скорее представлены первичные, самые необходимые данные для новичков. А посему рассматриваться будет сервер для ОС Windows, хотя большинство команд справедливы и для *nix-систем. В работе используется в основном консоль, т.к. команды, вводимые в консоли, можно легко перенести, допустим, в web-интерфейс (например, в PHP для этого существуют специальные функции).

Для чего нужна база данных? Реляционные базы данных представляют собой не что иное, как просто несколько таблиц с записями. СУБД предназначены для управления этими таблицами, т.е. создания новых таблиц, удаления ненужных, вставки в таблицы новых записей, изменения записей и, конечно же, обработки запросов, а также некоторых иных, менее часто используемых функций. Собственно, ведь и базы данных необходимы для того, чтобы оперативно выдавать информацию, причем в определенном порядке. СУБД существует великое множество (хотя бы всем известная Microsoft Access). Но на принципах работы мы останавливаться не будем. Пожалуй, наиболее распространенной СУБД в Интернете является MySQL, которая из-за своей быстроты и удобства в использовании получила широкое распространение. Да, и большое значение имеет то, что она совершенно бесплатная, т.е. распространяется по GNU GPL (в общем это значит, что вы можете скачать исходные коды и откомпилировать их у себя или вообще сделать СУБД "под себя", если, конечно, являетесь достаточно грамотным программистом. Правда, если это так, данная статья не для вас:-)).

Итак, в теперешней "лабораторной работе" понадобится: компьютер, собственно сам сервер СУБД MySQL, ярлык консоли под рукой (собственно, он всегда должен быть под рукой: хоть удобство работы под cmd и значительно уступает работе в консольке в Linux, но очень много вещей можно сделать из консоли быстрее, чем лезть через 3-5 менюшек за нужной опцией). Много вещей будет делаться именно через консоль. Конечно, существует множество "юзеро-ориентированных" программ, предназначенных для управления сервером, но рассматривать какую-либо одну не имеет смысла. Если вы будете знать основные команды, использовать MySQL в web-приложениях станет не просто легко, а очень просто! Установка MySQL. Устанавливать и использовать мы будем MySQL-сервер 3.23.38. Зачем вообще нужен SQL? На первый взгляд, для создания более-менее приличного сайта не требуется особых наворотов (каковыми некоторые считают PHP и SQL), но даже просто лог счетчика после пары-другой тысяч "оборотов" вам смотреть интересно не будет. Ежели в лог счетчика писать только время-дату, IP и имя компьютера посетителя, то лог в несколько тысяч строчек не только вытягивать каждый раз с сервера надоест, но и оперативно посмотреть, кто был, допустим, в ночь с четверга на пятницу на вашем, безусловно, замечательном сайте, будет очень трудно. А форум писать только, допустим, на PHP не просто довольно сложно, но и "неприятно".

Итак, инсталляция. Как таковая инсталляция не требует особо больших танцев с бубном. Жмем энное количество раз на кнопочку Next — и наслаждаемся. Пару слов о том, как хранятся данные в MySQL. По умолчанию каждая база данных хранится в отдельной папочке, название которой совпадает с названием этой базы данных, которые, в свою очередь, хранятся (опять же, по умолчанию) в папке DATA директории, в которой установлен сервер. Изменить дефолтовое местоположение данных можно следующим образом. Например, вы хотите создать базу данных, которая будет храниться, скажем, в E:/data/database_name, где database_name — имя базы данных. Тогда вы создаете файл database_name.sym в директории DATA и записываете в него всего одну строчку, которая содержит путь к местоположению вашей базы данных: "E:/data/database_name", и сохраняете. Если заглянуть в папки, в которых хранятся данные, то вы увидите там 3 файла. Данные хранятся в "оптимизированном" виде, т.е. не в виде простого текста — так просто их просмотреть не удастся. Итак, три файла: с расширениями .frm — в нем хранится информация о таблицах, содержащихся в БД, .myd — собственно данные и .myi — индексные данные. Теперь займемся безопасностью. Данные о пользователях MySQL хранит в специальной базе данных, которая называется mysql (оригинально, ничего не скажешь:-)). В ней 5 таблиц, в которых хранятся логины и пароли в зашифрованном виде, а также атрибуты доступа к таблице. Эти таблицы называются:


+-----------------+
| Tables_in_mysql |
+-----------------+
| columns_priv    |
| db              |
| host            |
| tables_priv     |
| user            |
+-----------------+

В таблицах columns_priv, tables_priv хранятся привилегии пользователей для доступа, соответственно, к колонкам и таблицам, в db — привилегии для доступа к базам данных, в host — информация о компьютерах, с которых подключаются юзвери к MySQL, и, наконец, в таблице user хранится информация о пользователях.
Более подробные сведения можно получить из мануала, который есть в установочном пакете (после установки он находится в mysql/Docs). Это почти "двухметровый" документ, в котором написано практически все, что нужно знать на первых порах, и не только на первых:-). Нас интересует, каким образом сменить юзверя с логином root (те, кто знаком с *nux, знают, что это такое, а для остальных поясняю: суперпользователь с неограниченными правами), а также сделать юзверя, из-под имени которого мы будем работать с сервером. В идеале такой пользователь должен быть только один. Остальные пользователи должны быть с ограниченными правами (главный принцип администрирования — что не разрешено, то запрещено). Дело в том, что по умолчанию суперпользователь не имеет пароля!! И если вы, например, занесете в свою базу данных какие-то сверхсекретные сведения, посмотреть, удалить, изменить их сможет каждый:-). Итак, сервер мы установили, начинаем администрирование. Находим директорию, в которую мы установили наш сервер (по умолчанию это C:\mysql). Находим директорию C:\mysql\bin и видим множество "экзешников". Для начала нам потребуется mysql.exe. Запускаем. Да, опции запуска из консоли можно посмотреть, написав что-то вроде

C:\mysql\bin\mysql.exe -h

после чего будет выведена справка. Но пока они нам не понадобятся. Все sql-команды вводятся в командной строке и должны завершаться ";" или "\g". Для того, чтобы использовать базу данных, необходимо сначала ее выбрать. Для этого существует команда USE. Нам необходима БД "mysql":

mysql> use mysql;

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

mysql> show databases;

Просмотр имеющихся таблиц так же прост, как и просмотр имеющихся БД:

mysql> show tables from databaseNAME;

где databaseName — имя базы данных. Посмотрим, кто у нас числится в юзверях нашего сервера. Пишем

mysql> select user,host,password from user;

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


+---------------+-----------------+------------------+
| user          | host            | password         |
+---------------+-----------------+------------------+
| root          | localhost       |                  |
|               | %               |                  |
|               | localhost       |                  |
| root          | %               |                  |
| mentalzavr    | localhost       |5075638d2dafd717  |
+---------------+-----------------+------------------+

Команда SELECT — она из самых частоиспользуемых команд. С ее помощью мы можем показать, какие данные нас интересуют, и попросить вывести ее на экран. Синтаксис ее таков:

SELECT интересующие_столбцы_в_таблице FROM название_таблицы <параметры>;

Вместо "интересующие_столбцы_в_таблице" можно поставить "*", тогда нам будут выданы значения всех колонок, которые присутствуют в таблице. Чаще всего вместо "<параметры>" пишут еще одно ключевое слово — WHERE. Синтаксис таков:

WHERE название_колонки_таблицы='значение'

Так, теперь пишем:

mysql>UPDA-TE user SET Password=PASSWORD ('NEWpasword') WHERE user='root';

где NEWpassword — новый пароль для суперпользователя. К слову, таким образом можно изменить пароль для любого юзверя. Немного поясню, что значат эти команды. Функция PASSWORD('string') шифрует строку по определенному алгоритму, а команда UPDATE изменяет значение записи WHERE (где) в таблице user. К слову, все пароли в MySQL хранятся в зашифрованном виде.
Теперь нам нужно запретить суперпользователю подключаться с удаленных компьютеров. Для этого удаляем строчки со знаком "%". Пишем "DE-LETE FROM user WHERE Host='%';". Команда DELETE имеет похожий синтаксис с командой SELECT:

SELECT FROM название_таблицы WHERE название_колонки_таблицы='значение';

Я надеюсь, понятно, что команды необходимо набирать без кавычек. Да, последней командой мы также удалили и "пустого" юзверя. Теперь у нас только два пользователя с неограниченными правами: root и mentalzavr, пароль которого, к слову, вы должны были задать при первой загрузке WinMySQLAdmin (теперь он должен висеть в трее этаким светофором, зеленый свет на котором означает нормальную работу сервера, желтый — переходное состояние, а красный — останов сервера). Для того, чтобы наши изменения вступили в силу, необходимо либо перезапустить сервер, либо дать команду "FLUSH PRIVILEGES;". Дело в том, что большинство серверов самого различного назначения читают свой конфиг, где хранится большинство их настроек, только один раз при загрузке. Так и сервер MySQL читает базу данных с параметрами доступа к базам данных при загрузке либо принудительно после специальной команды. Перезапустить сервер можно из панели управления, если вы работаете в Windows NT-серии, к которой относятся Windows XP, 2000 и собственно сама NT:-), либо из той же самой пресловутой командной строки. Сначала посмотрим, как называется наша служба. Для этого воспользуемся так называемой расширенной консолью WMIC (WMI Command-line). Если вы до этого ею не пользовались, система вам ее установит (XP). Это очень мощный инструмент. Но не тема данной статьи:-). Итак, пишем

wmic:root\cli>service list

Видим название службы "MySql". Выходим из WMIC:

wmic:root\cli> exit

Теперь останавливаем службу

C:\>net stop mysql

и стартуем снова:

c:\>net stop mysql

Вы спрашиваете, зачем я все это рассказываю? Одна из причин — таким же образом можно останавливать и запускать любые другие службы. А вторая... Ну, представьте, что у вас стоит сервер MySQL где-нибудь в локальной сети, а ваш компьютер находится в другом здании, и вам необходимо срочно переконфигурировать его. Бежать к серверу и вживую его настраивать? Ну, вы как хотите, а мне лично лень. Коннектимся к серверу и удаленно админим:-). Кстати, программка mysql.exe, которой мы пользовались для подключения к серверу (а именно это мы и делали), может работать и с удаленным сервером. Это легко увидеть, запустив mysql.exe следующим образом:

c:\>mysql -h IP_adresss

где вместо "IP_address" — либо имя компьютера, к которому мы подключаемся, либо его IP-адрес:-). Ну вот, сервер мы перезапустили (или просто написали "FLUSH PRIVILEGES;"). Теперь, ежели все правильно, вы не сможете подключиться к своему серверу, просто запустив mysql.exe. Необходимо ввести пароль. Делается это таким образом:

c:\>mysql -u root -p

Вас попросят ввести пароль на root, которые мы с вами задавали выше. Если все нормально, появится приглашение "mysql>", как и ранее. Теперь попробуем создать еще юзверей. Делается это так. Создадим троих юзверей с разными правами:

mysql> GRANT ALL PRIVILEGES ON *.* TO ferst@localhost IDENTIFIED BY 'some_pass' WITH GRANT OPTION;
mysql> GRANT ALL PRIVILEGES ON *.* TO ferst@"%" IDENTIFIED BY 'some_pass' WITH GRANT OPTION;
mysql> GRANT RELOAD,PROCESS ON *.* TO admin@localhost;
mysql> GRANT USAGE ON *.* TO doom@localhost;

Кстати, если вы дадите команду "mysql> status", сервер вам выдаст некоторое количество полезной информации. Итак, мы создали трех юзверей. Первый — ferst — получает все права и может подключаться к серверу как с локального компьютера, так и удаленно, пароль для доступа ему назначен sam_pass. Второй юзверь — admin — получает права на reload и refresh, но может подключаться только с локального компьютера (что означает значок "%"), пароль на вход не назначен. Третий юзверь с именем doom может подключаться с локального компьютера, и он создан, так сказать, "бесправным", т.е. все глобальные привилегии ему не даны. То же самое можно было бы сделать по-другому. Например, вот так:

mysql> INSERT INTO user VALUES ('localhost','ferst',PASSWORD('some_pass'),
'Y','Y','Y','Y','Y','Y','Y', 'Y','Y','Y','Y','Y','Y','Y');
mysql> INSERT INTO user VALUES('%','ferst',PASSWORD('some_pass'),
'Y','Y','Y','Y','Y','Y','Y', 'Y','Y','Y','Y','Y','Y','Y');
mysql> INSERT INTO user SET Host='localhost',User='admin',Reload_priv='Y', Process_priv= 'Y';
mysql> INSERT INTO user(Host, User,Password) VALUES('localhost','doom','');
mysql> FLUSH PRIVILEGES;

Наверное, необходимо пояснить, что это значит. Команда INSERT вставляет строчку в таблицу, название которой следует после слова INTO, в скобках даны названия столбцов, имеющихся в этих таблицах. После VALUES следуют значения, которые заносятся в соответствующие колонки. Значения необходимо заключать в кавычки. Последняя команда обновляет права доступа. Буква 'Y' означает включение соответствующей привилегии, 'N' — соответственно выключение. Таблица user имеет следующие столбцы (даны в том же порядке, что и в реальности):

| Host | User | Password | Select_priv | Insert_priv | Update_priv | Delete_priv |
 Create_priv | Drop_priv | Reload_priv | Shutdown_priv | Process_priv | File_priv |
 Grant_priv | References_priv | Index_priv | Alter_priv |

Я думаю, что в пояснениях данная таблица не нуждается. Названия колонок говорят сами за себя (если вы, конечно, знаете английский, как я — на уровне 5-го класса хотя бы:-)). Естественно, что, ежели в предыдущих командах буквы 'Y' заменить на 'N', соответствующий пользователь соответствующего права и не получит:-). Теперь разберемся, каким образом можно изменять права юзверей при подключении к базе данных. Для этого существует команда GRANT.

mysql> GRANT SELECT,INSERT,UPDATE, DELETE,CREATE,DROP
    ON bankaccount.*
    TO custom@localhost
    IDENTIFIED BY 'stupid';
mysql> GRANT SELECT,INSERT,UPDATE, DELETE,CREATE,DROP
    ON expenses.*
    TO custom@whitehouse.gov
    IDENTIFIED BY 'stupid';
mysql> GRANT SELECT,INSERT,UPDATE, DELETE,CREATE,DROP
    ON customer.*
    TO custom@'%'
    IDENTIFIED BY 'stupid';

Поясню, что делают эти команды. После команды GRANT следует список привилегий, которые необходимо предоставить юзверю custom. После слова ON идет название базы данных, после точки можно указать конкретную таблицу в этой базе данных, а звездочка означает "любая". А после слова TO идет имя_юзверя@имя_ компьютера, с которого этот юзверь сможет подключаться. Знак процентов означает "любой_компьютер". После слов IDENTIFIED BY следует указать в кавычках пароль, который будет требоваться у юзверя при входе. В данном случае это 'stupid'. Конечно, подобного результата можно добиться и непосредственной модификацией таблицы user. Например, вот так:

mysql> INSERT INTO user (Host,User, Password) VALUES('localhost','custom',PASSWORD('stupid'));

Я думаю, понятно, что делает данная команда. Она вставляет в таблицу user запись со значениями в столбцах, которые записаны после слова VALUES. Соответствующей модификацией этой команды можно достичь тех же результатов, что и использованием команд, изложенных выше. И не забудьте после того, как внесете изменения, дать команду FLUSH PRIVILEGES;. Теперь, после того, как вы успешно создали юзеров, переходим к более интересной части — собственно созданию базы данных. Для создания базы данных необходимо из той же директории, что и программу mysql.exe, запустить программу mysqladmin.exe. Если вы запустите эту программу просто без опций, она выдаст вам список параметров запуска. Собственно, и все использование этой программы сводится к запуску ее с соответствующими опциями. Итак, нас прежде всего интересует создание и удаление баз данных, а также подключение через логин и пароль к удаленному серверу (лень — воистину двигатель прогресса!). Подключаемся к удаленному серверу hostname с использованием логина root пароля, который у нас после спросят.

C:\mysql\bin>mysqladmin -h hostname -u root -p OPTIONS
Вместо OPTIONS необходимо написать собственно то, что мы хотим сделать. Создание базы данных с именем database_name:
C:\mysql\bin>mysqladmin -h mentalzavr -u mentalzavr -p create database_name

Удаление базы данных database_name после подтверждения и ввода пароля:

C:\mysql\bin>mysqladmin -h mentalzavr -u mentalzavr -p drop database_name

Существуют также и другие параметры запуска, на которых мы особо останавливаться не будем, хотя они не менее важны. Сведения о них вы получите, как я вам уже сказал, запустив mysqladmin без опций. Итак, мы создали базу данных. Теперь необходимо создать таблицы, в которых, собственно, и будут храниться данные. Любая таблица должна относиться к какой-либо базе данных. Поэтому запускаем mysql.exe и выбираем только что созданную базу данных "mysql> use database_name" Для создания таблицы существует команда CREATE. Синтаксис таков:

mysql>create table table_name(name int(3),name char(15));

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

mysql>drop table table_name

Таблиц в базе данных может быть несколько. Теперь вкратце остановимся на типах данных в таблице. Их довольно много, и поэтому я думаю на первых порах (а данная статья предназначена для предоставления только НАЧАЛЬНЫХ сведений об администрировании СУБД MySQL, и ни в коем разе не является полным руководством) ограничиться нижеизложенным. Пожалуй, наиболее часто встречающимся полем в таблицах является порядковый номер. Это довольно удобно. Так, в MySQL существует возможность создать таблицу со столбцом, значение которого будет изменяться на единицу с каждой новой записью. Теперь о том, как это делается. Как обычно, пишете в консоли:

mysql>use test;
mysql> CREATE TABLE table_name (No-mer int auto_increment,text char (10),key (Nomer));

Данные команды выбирают в качестве текущей базу данных test и создают таблицу с именем table_name с двумя колонками. Первая колонка имеет атрибут Extra "auto_increment". Это значит, что при добавлении записи в эту таблицу значение (число) в этом столбце будет автоматически увеличиваться на единицу. Посмотреть свойства колонок таблицы можно следующим образом (дав соответствующую команду):

mysql> desc table_name;

Так, теперь коснемся остальных типов данных. Числовые. Их присутствует большое количество, основными являются (на мой взгляд) INT и FLOAT. Те, кто знаком хотя бы немного с языком программирования С++, поймут сразу же, что первый из них — это целочисленный тип данных. FLOAT — тип данных, используемый для хранения чисел с плавающей точкой. Типы данных даты и времени. К ним относятся DATA, TIME, YEAR, а также некоторые другие. Формат хранения данных в типе DATA — "YYYY-MM-DD", в типе TIME — "HH:MM:SS", в типе YEAR — "YYYY". И практически основным типом данных является CHAR. К текстовым типам также относятся TEXT (65535 символов максимально) и некоторые другие.

И в заключение я хотел бы дать несколько полезных команд, которые помогут вам использовать консоль более эффективно. Все советы действительны для cmd.exe — командного процессора Windows. Для начала вам необходимо включить использование мыши в консоли. Для этого щелкните правой кнопкой мыши на заголовке открытого окна консоли и выберите Свойства. И на первой закладке поставьте галочки напротив пунктов Выделение мышью и Быстрая вставка, а также напротив Отбрасывать повторения. Теперь вы можете в консоли использовать все прелести работы с буфером обмена. Выделение мышью происходит как обычно, копирование в буфер обмена — при нажатии на правую кнопку. Вставка производится в место нахождения курсора также правой кнопкой. Пара слов об автоматизации процесса первичного занесения данных в таблицы. Если вы создаете базу данных с нуля, то никаких проблем практически не возникает (ну, если не считать большого количества организационной работы и непосредственно кодинга, в процесс которого входит создание хотя бы web-интерфейса:-). Конечно, пару-другую строчек можно занести и в консоли. Ну, а ежели у вас имеется какой-то текстовый файл с записями, данные из которых нужно перевести в БД MySQL? Тут воевать только буфером обмена с бесконечным повторением действий "копирование-вставка" может только ну очень большой… трудоголик. Ну, а мы как умные люди можем поступить проще (правда, все в этом мире относительно). Дело в том, что можно в качестве аргумента в команде

mysql> \. File_name

передать имя файла "File_name", и этот файл будет выполнен. Что он собой представляет? Это просто последовательный список SQL-команд. Теперь нам остается только сгенерировать такой файл, что в каждом отдельно взятом случае делается по-разному — тут нужно смотреть по обстановке. Конечно, можно пойти еще дальше и написать программу для автоматического занесения данных в БД. Но для простых задач можно просто даже текстовый файл с написанными в нем командами скопировать в буфер и вставить в приглашение MySQL. "Вводы" будут восприниматься как знак завершения команды. Только не забывайте ставить в конце каждой строчки ";", ведь в mysql.exe команды можно вводить и в многострочном режиме, поэтому могут случаться накладки. Правда, есть и альтернативный способ. Если у вас есть текстовый файл с записями в виде таблицы, и они в нем разделены при помощи запятых и знаков окончания строки либо каких-то иных символов (тогда следует внести изменения в параметры следующей команды, заменив запятую и "\n" на соответствующие знаки), можно использовать команду

mysql> LOAD DATA INFILE "data.txt" INTO TABLE my_table FIELDS TERMINATED BY ',' LINES TERMINATED BY '\n';

Результатом данной команды должна явиться таблица. В файле поля должны быть разделены запятыми, а каждая запись — начинаться с новой строки. Следует помнить еще и о такой вещи, как кодировка. Если все данные вносить через консоль, то они будут храниться в DOS-кодировке, и при выводе таких данных — например, если в html-странице используют PHP — вы увидите "абракадабру". Чтобы этого не происходило, заносите данные только в одной кодировке или перекодируйте их с помощью специальных функций (для PHP это функция $text_after=convert_cyr_string ($text,"w","d"), где два последних параметра указывают соответственно на то, что исходная кодировка — Windows, а конечная после перекодировки — DOS). И напоследок. Гораздо приятней работать с консолью, так всеми нелюбимой, ежели сделать что-то вроде этого:

C:\>title LINUX
На несведущих людей действует довольно своеобразно:-).

Автор: Спичеков Александр
Источник: www.dweb.ru

 

 
Интересное в сети
 
10 новых программ
CodeLobster PHP Edition 3.7.2
WinToFlash 0.7.0008
Free Video to Flash Converter 4.7.24
Total Commander v7.55
aTunes 2.0.1
Process Explorer v12.04
Backup42 v3.0
Predator 2.0.1
FastStone Image Viewer 4.1
Process Lasso 3.70.4
FastStone Image Viewer 4.0
Xion Audio Player 1.0.125
Notepad GNU v.2.2.8.7.7
K-Lite Codec Pack 5.3.0 Full


Наши сервисы
Рассылка новостей. Подпишитесь на рассылку сейчас и вы всегда будете в курсе последних событий в мире информационных технологий.
Новостные информеры. Поставьте наши информеры к себе и у вас на сайте появится дополнительный постоянно обновляемый раздел.
Добавление статей. Если вы являетесь автором статьи или обзора на тему ИТ присылайте материал нам, мы с удовольствием опубликуем его у себя на сайте.
Реклама на сайте. Размещая рекламу у нас, вы получите новых посетителей, которые могут стать вашими клиентами.
 
Это интересно
 

Copyright © CompDoc.Ru
При цитировании и перепечатке ссылка на www.compdoc.ru обязательна. Карта сайта.