Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

00-tech-book

.pdf
Скачиваний:
42
Добавлен:
10.02.2016
Размер:
7.86 Mб
Скачать

mysql> SOURCE /root/sourcefile.sql;

Query OK, 1 row affected, 1 warning (0.00 sec)

Query OK, 1 row affected, 1 warning (0.00 sec)

Query OK, 1 row affected, 1 warning (0.00 sec)

Мы добавили три записи в таблицу, теперь давайте посмотрим что получилось. Выборку из базы данных можно сделать командой SELECT <что нам нужно> FROM <название таблицы>. Мы сделаем выборку всего что есть в таблице.

То, что нужно! Мы создали поле id и поставили на него AUTO_INCREMENT, то есть при вводе каждой новой записи значение id будет увеличиваться на единицу.

Сделаем запрос с условием. Нам нужно узнать кто сейчас работает. Условие можно задать командой WHERE.

Сегодня наш коллега Сергей вернулся из отпуска, нужно это отобразить в БД.

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

Модуль 11. MySQL.

 

131

 

 

 

 

 

mysql> UPDATE users SET status='work' WHERE surname='Malevin';

Query OK, 1 row affected (0.00 sec)

Rows matched: 1 Changed: 1 Warnings: 0

Все получилось. Теперь удалим запись из таблицы. К примеру Федор Карпин больше не работает в нашей компании.

mysql> DELETE from users WHERE surname='Karpin';

Query OK, 1 row affected (0.00 sec)

Вернем пока что Федора на место, все таки 3 – хорошее число и посчитаем количество записей в нашей таблице, это бывает необходимым.

Пользователи и привилегии

Теперь про пользователей и права. До этого момента мы работали из под root.

Создадим обычного пользователя (admin) и дадим ему некоторые права на базу company и все таблицы в ней (company.*).

 

132

 

Модуль 11. MySQL.

 

 

 

 

mysql> GRANT SELECT, INSERT, DELETE, UPDATE ON company.* TO

'admin'@'localhost' IDENTIFIED BY 'secret';

Query OK, 0 rows affected (0.00 sec)

Теперь можно заходить из под него и работать с базой.

# mysql -u admin -p

mysql> SHOW GRANTS FOR 'admin'@'localhost';

Убрать права можно с помощью команды REVOKE. Убираем возможность удалять записи.

mysql> REVOKE DELETE ON company.* FROM 'admin'@'localhost'; Query OK, 0 rows affected (0.00 sec)

Замечу, даже если отобрать все права у пользователя он все равно будет в MySQL. Полностью удалить пользователя из базы можно так.

# mysql -p

mysql> DELETE FROM mysql.user WHERE USER=’admin@localhost’; Query OK, 0 rows affected (0.00 sec)

Саммари по командам и принципу работы

Наша база данных расположена в /var/lib/mysql/<название БД>

# ls -lh /var/lib/mysql/company/ total 40K

-rw-rw---- 1 mysql mysql 65 Feb 21 12:05 db.opt -rw-rw---- 1 mysql mysql 8.6K Feb 21 19:26 users.frm

-rw-rw---- 1 mysql mysql 168 Feb 21 20:40 users.MYD -rw-rw---- 1 mysql mysql 2.0K Feb 21 20:40 users.MYI

Файлы в бинарном формате и нечего с ними напрямую делать не нужно.

Модуль 11. MySQL.

 

133

 

 

 

Как работать с БД

Создаем базу данных с помощью CREATE DATABASE

Делаем её текущей с помощью USE

Создаем в ней таблицу с помощью CREATE TABLE

Заполняем данными с помощью INSERT INTO

Работаем с БД

Запросы

SELECT – делаем выборку

INSERT – заносим данные

UPDATE – модифицируем данные

DELETE – удаляем

GRANT – даем привилегии пользователю

REVOKE – убираем привилегии у пользователя

DROP – удаляет базу или таблицу (DROP DATABASE <название базы> или DROP TABLE <название таблицы>)

Команды в мониторе MySQL

HELP – хорошая справка по MySQL

STATUS – текущий статус MySQL

SHOW DATABASES; - вывести весь список БД

SHOW TABLES; - вывести список всех таблиц в базе (перед этим делаем базу активной с помощью USE)

SHOW PROSESSLIST; - текущие процессы в базе

Условие WHERE поможет, когда нужно работать с записями попадающими под конкретное условие

Конфигурационный файл my.cnf

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

 

134

 

Модуль 11. MySQL.

 

 

 

 

возникает две ситуации. Малые/средние нагрузки когда вы обслуживаете MySQL. При таком раскладе приходится делать несложные запросы, резервное копирование баз, подключение веб-проектов использующих БД. Настройки не сильно влияют на производительность. И вторая ситуация

– большие базы данных и большие нагрузки, скорее всего в этом случае в

компании будут специалисты по БД.

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

# find / -name my*.cnf

/usr/share/doc/mysql-server-5.0.45/my-huge.cnf

/usr/share/doc/mysql-server-5.0.45/my-large.cnf

/usr/share/doc/mysql-server-5.0.45/my-small.cnf

/usr/share/doc/mysql-server-5.0.45/my-innodb-heavy-4G.cnf

/usr/share/doc/mysql-server-5.0.45/my-medium.cnf

/usr/share/mysql/my-huge.cnf

/usr/share/mysql/my-large.cnf

/usr/share/mysql/my-small.cnf

/usr/share/mysql/my-innodb-heavy-4G.cnf

/usr/share/mysql/my-medium.cnf

/etc/my.cnf

Рабочий файл конфигурации MySQL – это /etc/my.cnf, все остальные это шаблоны которые можно использовать вместо my.cnf

Пожалуй самое главное что стоит сделать – это отключить возможность подключения к БД по сети. Для этого нужно добавить строку skip-networking в /etc/my.cnf

Если захочется сделать кодировку в базе cp1251 то в my.cf в секцию [mysqld] добавляем такое:

[mysqld]

default-character-set=cp1251

init-connect='SET NAMES cp1251'

Модуль 11. MySQL.

 

135

 

 

 

Забытый пароль администратора

Чтобы сбросить пароль администратора выключаем MySQL-сервер и перезапускаем его с опцией --skip-grant-tables

#service mysqld stop

#mysqld_safe --skip-grant-tables &

#mysql

mysql>UPDATE mysql.user SET Password=PASSWORD('newpwd') WHERE user='root';

mysql>FLUSH PRIVILEGES;

# service mysqld restart

Вместо newpwd укажите желаемый пароль.

Резервное копирование

Резервное копирование можно делать с помощью mysqldump. Скопируем нашу базу company в файл company.sql

# mysqldump --opt -p company > company.sql

--opt – Тоже самое, что и перечисление --add-drop-table --add-locks –create- options --disable-keys --extended-insert --lock-tables --quick –set-charset. Рекомендуется использовать.

-p – запрашивает строку пароля для пользователя root, можно указать другого пользователя ключом -u

company – название нашей базы в MySQL

> company.sql – куда записать дамп базы, мы это сделали в company.sql, принято дампам MySQL давать имена с расширением sql

Комментарий: вообще в последних версиях mysqldump опции –add-drop-* добавлять необходимости нет, это происходит автоматически.

 

136

 

Модуль 11. MySQL.

 

 

 

 

Удалим нашу базу, создадим пустую и попробуем восстановить из резервной копии.

Удаляем базу

mysql> DROP DATABASE company;

Query OK, 1 row affected (0.06 sec)

Создаем её заново

mysql> CREATE DATABASE company;

Query OK, 1 row affected (0.00 sec)

Закачиваем

#mysql -p company < company.sql

#mysql -p

mysql>USE company;

Все как мы хотели.

Проверка целостности таблиц с помощью myisamchk

Иногда база отказывается грузится указывая на ошибки в таблице. Самое время запустить myisamchk. Программа предназначена для профилактики таблиципослеаварийноговосстановления.Вкачествеаргумента,программе нужно передать MyISAM-таблицу (*.MYI) которую мы хотим проверить.

Модуль 11. MySQL.

 

137

 

 

 

# myisamchk /var/lib/mysql/company/users.MYI

Checking MyISAM file: /var/lib/mysql/company/users.MYI

Data records: 3 Deleted blocks: 0

-check file-size

-check record delete-chain

-check key delete-chain

-check index reference

-check data record references index: 1

-check record links

Ключ -r или --recover может исправить практически все, кроме уникальных ключей, в которых есть повторения (ошибка, вероятность которой мизерна для таблиц ISAM/MyISAM).

Ключ -o или --safe-recover это старый метод восстановления (читаются подряд все строки и обновляются все деревья индексов на основе найденных строк) метод весьма медлителен, но справляется с несколькими редкими случаями, непосильными для

Саммари по myisamchk

Ключи -r или -o используются для восстановления таблиц. Рекомендуется использовать ключ -r и если он не помог, использовать -o, который на порядок медленнее работает.

Резюме

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

Домашнее задание

Пройтись по всем шагам описанным в данном модуле на практике и убедиться что есть понимание того, что вы делаете.

 

138

 

Модуль 11. MySQL.

 

 

 

 

Система мониторинга Nagios

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

Основные возможности Nagios:

мониторинг сетевых служб (HTTP/S, SMTP, POP3, IMAP, DNS, FTP, SNMP и т.д.);

мониторингсистемныхслужбипараметров(нагрузканаCPU,использование памяти, использование диска и т.д.);

возможность построения распределенной системы мониторинга;

легкость в построение своих плагинов;

гибкость конфигурирования;

удобный веб-интерфейс.

В Nagios есть два режима проверки хоста, активный и пассивный. Активный

– это когда сама система мониторинга посылает запросы к удаленному хосту и получает информацию. Пассивный – это когда специальная внешняя программа присылают всю необходимую информацию в Nagios. Пассивные проверки полезны в случае блокирования файрволом прямого доступа в нужную нам сеть. Внешние пользователи не могут попасть во внутреннею сетьавотизвнутреннийсетиобратитьсявовнешнеюможно.Unix-программа которая занимается обслуживанием пассивных проверок – NSCA. Принцип ее работы показан на рисунке ниже.

Со стороны сервера мониторинга запускается служба NSCA которая принимает все пассивные запросы со стороны клиентов и передает их в Nagios. NSCA можно скачать на www.nagios.org

В мониторинге сетевых служб используется обращение на определенный порт в зависимости от службы. Яркий пример такого же принципа работы это программа telnet. В случае проверки системных служб на хосте где работает Nagios все просто, информация сразу поступает в Nagios. В случае удаленных хостов на них нужно поставить специальный агент, который

Модуль 12. Система мониторинга Nagios.

 

139

 

 

 

соберет информацию о локальных службах и отправит ее в Nagios. Агент для linux называется NRPE, для Windows NSClient++

Как мы видим, Nagios способен без проблем обслуживать гетерогенные

сети.

Установка и настройка Nagios

Убедитесь что репозиторий EPEL подключен

# rpm -Uvh http://download.fedora.redhat.com/pub/epel/5/i386/epel-release-

5-3.noarch.rpm

далее набираем

# yum -y install nagios nagios-plugins-all

Добавляем сервисы Nagios и Apache в автозагрузку

#chkconfig nagios on

#chkconfig httpd on

Каталоги с ключевыми файлами Nagios:

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

/etc/nagios/

 

 

 

 

 

 

 

 

Конфигурационные файлы Nagios;

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

/usr/bin/nagiostats

 

 

Программа показывающая статистику работы Nagios;

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

/etc/init.d/nagios

 

 

 

 

 

Скрипт запуска/выключения сервиса;

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

/etc/httpd/conf.d/

 

 

Файл подключения к Apache;

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

nagios.conf

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

/usr/share/doc/

 

 

 

 

 

 

 

Документация;

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

/usr/lib/nagios/

 

 

 

 

 

 

 

 

Движок Nagios;

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

/usr/share/nagios/

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

/var/log/nagios/

 

 

 

 

 

 

 

Логи.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

140

 

Модуль 12. Система мониторинга Nagios.