355 500 произведений, 25 200 авторов.

Электронная библиотека книг » Нейл Мэтью » Основы программирования в Linux » Текст книги (страница 29)
Основы программирования в Linux
  • Текст добавлен: 21 сентября 2016, 17:59

Текст книги "Основы программирования в Linux"


Автор книги: Нейл Мэтью


Соавторы: Ричард Стоунс
сообщить о нарушении

Текущая страница: 29 (всего у книги 67 страниц)

Устранение неисправностей после установки

Если при использовании mysql нет подключения к базе данных, проверьте с помощью системной команды ps, запущен ли серверный процесс. Если его нет в списке, попробуйте запустить mysql_safed -log. В этом случае в регистрационный каталог MySQL должен быть записан файл с дополнительной информацией. Можно конечно попытаться явно запустить процесс mysqld; используйте команду mysqld –verbose –help для получения полного списка опций командной строки.

Вполне возможно, что сервер функционирует, но просто отвергает ваше подключение. Если так, далее следует проверить наличие базы данных, особенно базы данных стандартных прав доступа MySQL (default permissions database). В дистрибутивах Red Hat она обычно по умолчанию располагается в /var/lib/mysqlis, другие дистрибутивы используют разные каталоги. Проверьте сценарий запуска MySQL (например, в файле /etc/init.d) и конфигурационный файл /etc/my.cnf. В противном случае запустите программу явно с помощью команды mysqld –verbose –help и найдите переменную datadir. После того как вы определили каталог базы данных, проверьте, содержит ли он хотя бы базу данных стандартных прав доступа (с именем mysql) и что именно ее, заданную в файле my.cnf, использует процесс-демон сервера.

Если вы все еще не подключились, воспользуйтесь редактором сервисов (service editor) для остановки сервера, убедитесь в том, что не выполняется ни один процесс mysqld, и затем перезапустите его снова и попробуйте подключиться. Если вы все– таки никуда не попали, можно полностью деинсталлировать MySQL и установить ее с нуля еще раз. Для выяснения некоторых известных только посвященным возможностей очень полезной может оказаться документация MySQL на Web-сайте (более свежая, чем интерактивное руководство на локальной машине, кроме того, в ней есть редактируемые пользователями подсказки, и предложения, и форум).

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

Группа программ-утилит, включенных в дистрибутив MySQL, облегчает процесс администрирования базы данных. Самая популярная из них – программа mysqladmin. В следующем разделе мы опишем эту и другие утилиты.

Команды

Все команды MySQL, за исключением mysqlshow, принимают как минимум три стандартных параметра, описанных в табл. 8.1.

Таблица 8.1


-u username По умолчанию утилиты mysql будут пытаться использовать то же username MySQL, что и текущее имя пользователя Linux. Применяйте параметр -u для задания другого имени пользователя
[password] Если параметр задан, а пароль пропущен, он запрашивается. Если параметра -p нет в командной строке, команды MySQL полагают, что пароль не нужен
-h host Применяется для подключения к серверу на другой машине (для локальных серверов всегда можно опускать)

Примечание

И снова не советуем вам помещать пароль в командную строку, поскольку его можно увидеть с помощью команды ps.

myisamchk

Утилита myisamchk разработана для проверки и корректировки любых таблиц данных, применяющих стандартный табличный формат MYISAM, исходно поддерживаемый СУРБД MySQL. Обычно утилиту myisamchk следует запускать от имени пользователя mysql, созданного во время установки, из каталога, в котором размещаются таблицы. Для проверки базы данных выполните команду su mysql, измените название каталога в соответствии с именем базы данных и запустите утилиту myisamchk с одной или несколькими опциями, предложенными в табл. 8.2. Например,

myisamchk -e -r *.MYI

Самые популярные опции команды приведены в табл. 8.2.

Таблица 8.2


Ищет ошибки в таблицах
-e Выполняет расширенную проверку
-r Исправляет найденные ошибки

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

mysql

Это основное и очень мощное средство командной строки СУРБД MySQL. С его помощью тем или иным способом можно выполнить любую административную или пользовательскую задачу. Запустить монитор mysql можно из командной строки; добавив заключительный дополнительный параметр, имя базы данных, вы сможете в мониторе обойтись без команды use <база_данных>. Далее приведен пример запуска монитора от имени пользователя rick, запроса пароля (обратите внимание на пробел после -p) и применения базы данных foo по умолчанию.

$ mysql -u rick -р foo

Для постраничного просмотра других опций командной строки монитора mysql примените команду mysql –help | less.

Если вы запускаете СУРБД MySQL без указания базы данных, для выбора одной из баз данных можно использовать опцию use <база_данных>, приведенную в списке команд в табл. 8.3.

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

$ mysql -u rick –password=secretpassword foo < sqlcommands.sql

После считывания и выполнения ваших команд mysql выведет на экран строку приглашения.

Во время подключения программы-клиента mysql к серверу в дополнение к стандартному набору команд SQL92 поддерживается ряд специфических команд, перечисленных в табл. 8.3.

Таблица 8.3


help или ?h или ?Отображает список команд
edit е Редактирует команду. Применяемый редактор задается переменной окружения $EDITOR
exit или quit q Завершает программу-клиент MySQL
go g Выполняет команду
source <имя_файла> . Выполняет команды SQL из заданного файла
status s Отображает информацию о состоянии сервера
system <команда> ! Выполняет системную команду
tee <имя_файла> T Добавляет в конец заданного файла копию всего вывода
use <база_данных> u Использует заданную базу данных

Очень важная команда в этом наборе – use. Сервер mysqld предназначен для поддержки множества различных баз данных, обслуживаемых и управляемых одним серверным процессом. Во многих других серверах баз данных, таких как Oracle и Sybase, применяется термин «схема», а в СУРБД MySQL чаще используется термин «база данных». (В обозревателе запросов (Query Browser) MySQL, к примеру, применяется термин «схема».) Каждая база данных (в терминологии MySQL) представляет собой в основном независимый набор таблиц. Это позволяет настраивать разные базы данных для различных целей и назначать разных пользователей различным базам данных, используя для эффективного управления ими один и тот же сервер баз данных. С помощью команды use можно при наличии соответствующих прав переключаться между различными базами данных.

Особая база данных mysql, создаваемая автоматически при каждой установке СУРБД MySQL, применяется как основное хранилище сведений о пользователях и правах доступа.

Примечание

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

mysqladmin

Эта утилита – основное средство быстрого администрирования базы данных MySQL. В дополнение к обычным параметрам она поддерживает основные команды, перечисленные в табл. 8.4.

Таблица 8.4


create <база_данных> Создает новую базу данных
drop <база_данных> Удаляет базу данных
password <новый_пароль> Изменяет пароль (как вы уже видели)
ping Проверяет, работает ли сервер
reload Повторно загружает таблицы полномочий, управляющие правами доступа
status Предоставляет сведения о состоянии сервера
shutdown Выключает сервер
variables Отображает переменные, управляющие работой MySQL, и их текущие значения
version Выводит номер версии сервера и время его работы

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

mysqlbug

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

mysqldump

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

Таблица 8.5


–add-drop-table Вставляет в файл вывода операторы SQL для удаления любых таблиц перед командой их создания
-e Применяет расширенный синтаксис вставки. Это нестандартный язык SQL, но если вы получаете дамп больших объемов информации, это поможет гораздо быстрее повторно загрузить дамп вашей базы в СУРБД MySQL
-t Получает дамп только данных из таблиц, а не информации, необходимой для создания таблиц
-d Получает дамп только структуры таблиц, а не реальных данных

По умолчанию mysqldump посылает эти данные в стандартный вывод, поэтому вам потребуется перенаправление их в файл.

Эта утилита очень удобна для перемещения данных или быстрого создания резервных копий, и благодаря клиент-серверной реализации MySQL ее даже можно использовать для выполнения сложного удаленного резервного копирования с помощью клиента mysqldump, установленного на другой машине. Далее для примера приведена команда подключения пользователя rick и получения дампа базы данных myplaydb:

$ mysqldump -u rick -p myplaydb > myplaydb.dump

Результирующий файл, у которого в нашей системе только одна таблица в базе данных, выглядит следующим образом:

– MySQL dump 10.11

– Host: localhost Database: myplaydb

– –

– Server version 5.0.37

/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;

/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;

/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */;

/*!40101 SET NAMES utf8 */;

/*!40103 SET @OLD_TIME_ZONE=@@TIME_ZONE */;

/*!40103 SET TIME_ZONE='+00:00' */;

/*!40014 SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0 */;

/*!40014 SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0*/;

/*!40101 SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='NO_AUTO_VALUE_ON_ZERO'*/;

/*!40111 SET @OLD_SQL_NOTES=@@SQL_NOTES, SQL_NOTES=0 */;

– Table structure for table 'children'

DROP TABLE IF EXISTS 'children';

CREATE TABLE 'children' (

 'childno' int(11) NOT NULL auto_increment,

 'fname' varchar(30) default NULL,

 'age' int(11) default NULL,

 PRIMARY KEY ('childno')

) ENGINE=InnoDB DEFAULT CHARSET=latin1;

– Dumping data for table 'children'

LOCK TABLES 'children' WRITE;

/*!40000 ALTER TABLE 'children'DISABLE KEYS */;

INSERT INTO 'children' VALUES

(1,'Jenny',21),(2,'Andrew',17),(3,'Gavin',8), (4,'Duncan',6),(5,'Emma',4),

(6,'Alex',15),(7,'Adrian',9);

/*!40000 ALTER TABLE 'children'ENABLE KEYS */;

UNLOCK TABLES;

/*!40103 SET TIME_ZONE=@OLD_TIME_ZONE */;

/*!40101 SET SQL_MODE=@OLD_SQL_MODE */;

/*!40014 SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS */;

/*!40014 SET UNIQUE_CHECKS=@OLD_UNIQUE_CHECKS */;

/*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */;

/*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */;

/*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */;

/*!40111 SET SQL_NOTES=@OLD_SQL_NOTES */;

– Dump completed on 2007-0.6-22 20:11:48

mysqlimport

Команда mysqlimport применяется для загрузки в таблицу большого количества данных. С помощью mysqlimport вы можете считывать из файла ввода большие объемы текстовых данных. Этой команде требуются только имена файла и базы данных; mysqlimport загрузит данные в базу данных, в таблицу с тем же именем, что и имя файла (за исключением расширения файла). Вы должны убедиться в том, что в текстовом файле столько же столбцов данных, сколько их в таблице, заполняемой данными, и типы данных совместимы. По умолчанию данные следует разделять знаком табуляции.

Можно также выполнять команды SQL из текстового файла, просто запустив mysql с перенаправлением ввода из файла, как мы упоминали ранее.

mysqlshow

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

□ Без параметров она отображает все имеющиеся базы данных.

□ С базой данных в качестве параметра она выводит таблицы этой базы данных.

□ С именами базы данных и таблицы утилита отображает перечень столбцов заданной таблицы.

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

Создание пользователей и наделение их правами доступа

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

grant

Команда MySQL grant почти, хотя и не полностью, соответствует синтаксису стандарта SQL92. Далее приведен общий формат:

grant <привилегия> on <объект> to <пользователь> [identified by user-password] [with grant option];

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

Таблица 8.6


alter Изменять таблицы и индексы
create Создавать базы данных и таблицы
delete Удалять данные из базы данных.
drop Удалять базы данных и таблицы
index Управлять индексами
insert Вставлять данные в базу данных
lock tables Разрешает блокировать таблицы
select Извлекать данные
update Изменять данные
all Все вышеперечисленные

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

Объект, которому вы предоставляете данные права, обозначается как

databasename.tablename

и в лучших традициях Linux * – ссылка на любое имя, поэтому *.* означает все объекты в каждой базе данных, a foo.* – все таблицы в базе данных foo.

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

В синтаксисе языка SQL специальный символ % – символ подстановки, во многом сходный, с символом * в среде командной оболочки. Вы можете формировать отдельные команды для каждого требуемого набора прав доступа, но если, например, вы хотите предоставить доступ пользователю rick с любого компьютера в домене wiley.com, пользователя rick можно описать как

rick@'%.wiley.com'

Символ подстановки % всегда следует заключать в кавычки для того, чтобы отделить его от остальных текстовых данных.

Вы также можете применять нотацию IP/Netmask (N.N.N.N/M.M.M.M), задающую сетевой адрес для управления доступом.

Также, как раньше вы использовали описание rick@'192.163.0.0/255.255.255.0' для предоставления пользователю rick доступа с любого сетевого компьютера, можно задать rick@'192.168.0.1' для ограничения доступа пользователя rick единственной рабочей станцией или ввести rick@'192.0.0.0/255.0.0.0', расширив область действия прав до любой машины в сети 192 класса А.

В еще одном примере команда

mysql> GRANT ALL ON foo.* TO rick@'%' IDENTIFIED BY 'bar';

создает пользователя rick с полным набором прав доступа к базе данных foo для подключения с любой машины с начальным паролем bar.

Если базы данных foo до сих пор не существует, у пользователя rick теперь появится право создать ее с помощью команды SQL create database.

Ключевые слова IDENTIFIED BY – не обязательная часть команды, но убедиться в том, что у всех пользователей во время их создания появляются пароли, совсем неплохо.

Следует быть особенно внимательными, имея дело с именами пользователей, компьютеров или баз данных, содержащими знак подчеркивания, поскольку символ _ в языке SQL соответствует любому одиночному символу во многом так же, как знак % соответствует любой строке символов. Везде, где это возможно, старайтесь избегать использования символа подчеркивания в именах пользователей и баз данных.

Обычно ключевые слова with grant option применяются только для создания вспомогательного административного пользователя, но они также могут использоваться для разрешения вновь созданному пользователю получить права доступа, предоставляемые ему другими пользователями. Всегда применяйте ключевые слова with grant option обдуманно.

revoke

Естественно, администратор не может только предоставлять права, но также и лишает прав. Делается это с помощью команды revoke.

revoke <привилегия> on <объект> from <пользователь>

и с применением почти такого же формата, как в команде grant. Например:

mysql> REVOKE INSERT ON foo.* FROM rick@'%';

Но команда revoke не удаляет пользователей. Если вы хотите удалить пользователя окончательно, не просто измените его права доступа, а примените команду revoke для удаления его прав. Затем вы сможете полностью удалить его из таблицы пользователей user, переключившись на внутреннюю базу данных mysql и удалив соответствующие строки из таблицы user.

mysql> use mysql

mysql> DELETE FROM user WHERE user = «rick»

mysql> FLUSH PRIVILEGES;

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

Примечание

Имейте в виду, что команда delete не относится к группе команд grant и revoke. Синтаксис SQL делает ее применение необходимым из-за способа обработки прав доступа в MySQL. Вы напрямую обновляете таблицы прав доступа MySQL (поэтому первой применяется команда use mysql) для внесения нужных вам изменений эффективным способом.

После обновления таблиц, как показано в примерах, вы должны применить команду FLUSH PRIVILEGES, чтобы сообщить серверу MySQL о необходимости перезагрузки таблиц с правами доступа.

Пароли

Если вы хотите задать пароли для уже существующих пользователей, не имевших их до сих пор, или изменить собственный или чей-то пароль, следует подключиться к серверу MySQL как пользователь root и напрямую обновить данные пользователя. Например,

mysql> use mysql

mysql> SELECT host, user, password FROM user;

Вы должны получить перечень, похожий на следующий:

+–+–+–+

| host      | user | password         |

+–+–+–+

| localhost | root | 67457e226a1a15bd |

| localhost | foo  |                  |

+–+–+–+

2 rows in set (0.00 sec)

Если вы хотите присвоить пароль bar пользователю foo, можно сделать следующее:

mysql> UPDATE user SET password = password('bar') WHERE user = 'foo';

Для проверки выведите снова соответствующие столбцы таблицы пользователей user:

mysql> SELECT host, user, password FROM user;

+–+–+–+

| host      | user | password         |

+–+–+–+

| localhost | root | 65457e236glalwbq |

| localhost | foo  | 7c9e0a41222752fa |

+–+–+–+

2 rows in set (0.00 sec) mysql>

Теперь наверняка у пользователя foo есть пароль. Не забудьте вернуться в свою исходную базу данных.

Начиная с версии MySQL 4.1, схема формирования паролей обновлена по сравнению с более ранними версиями. Но для обратной совместимости вы все еще можете задавать пароль, применяя старый алгоритм с функцией OLD_PASSWORD('password to set'), если вам это нужно.

Создание базы данных

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

mysql> GRANT ALL ON *.* TO rick@localhost IDENTIFIED BY 'secretpassword';

Теперь протестируйте набор прав доступа, зарегистрировавшись как rick, и создайте базу данных:

$ mysql -u rick -р

Enter password:

...

mysql> CREATE DATABASE rick;

Query OK, 1 row affected (0.01 sec).

mysql>

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

mysql> use rick

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

$ mysql -u rick -p rick

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


    Ваша оценка произведения:

Популярные книги за неделю