Материал: Письменные лекции по дисциплине «Базы данных»

Внимание! Если размещение файла нарушает Ваши авторские права, то обязательно сообщите нам

Лекция 6. Администрирование баз данных

Резервирование и восстановление вручную

Команды GRANT и REVOKE;

Утилита mysqldump;

Утилита mysqlhotcopy;

Утилита mysqlcheck.

6.1. Резервирование и восстановление вручную

Поскольку таблицы MySQL хранятся в виде файлов, то резервное копирование выполняется легко. Чтобы резервная копия была согласованной, нужно выполнить на выбранных таблицах LOCK TABLES, а

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

Синтаксис LOCK TABLES:

LOCK TABLES tbl_name {READ [LOCAL] | [LOW_PRIORITY] WRITE} [, tbl_name {READ [LOCAL] | [LOW_PRIORITY] WRITE} ...]

...

UNLOCK TABLES

Различие между READ LOCAL и READ состоит в том, что READ LOCAL

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

Можно использовать блокировки LOW_PRIORITY WRITE, позволяющие другим потокам получать блокировки READ в то время, как основной поток находится в состоянии ожидания блокировки WRITE.

Пример LOCK TABLES:

// Блокировка table1 на чтение и table2 на запись

LOCK TABLES table1 READ, table2 WRITE;

// Какие-либо действия

UNLOCK TABLES; // Разблокировка

Т. е. никакой другой поток управления не может обновить таблицу table1 с блокировкой READ или прочитать таблицу table2 с блокировкой WRITE.

Синтаксис FLUSH:

FLUSH flush_option [,flush_option] ...

Примеры FLUSH:

FLUSH TABLES — закрываются все открытые таблицы и принудительно закрываются все используемые таблицы. Также сбрасывается кэш запросов.

FLUSH [TABLE | TABLES] tbl_name [,tbl_name...]

производится сброс только указанных таблиц.

FLUSH TABLES WITH READ LOCK — блокировать все таблицы во всех базах данных блокировкой READ.

Рабочий пример:

mysql> LOCK TABLES trans READ, customer WRITE;

 

 

mysql>

SELECT

SUM(value)

FROM

trans

WHERE

customer_id=some_id;

 

 

 

 

mysql>

 

UPDATE

customer

 

SET

total_value=sum_from_previous_statement

 

 

 

WHERE customer_id=some_id; mysql> UNLOCK TABLES;

Без использования LOCK TABLES существует вероятность того, что какой-либо иной поток управления может вставить новую строку в таблицу trans между выполнением операций SELECT и UPDATE.

Если есть необходимость провести резервное копирование на уровне

SQL, то можно воспользоваться SELECT ... INTO OUTFILE или BACKUP TABLE:

Оператор SELECT может быть представлен в форме SELECT ...

INTO OUTFILE 'file_name'. Эта разновидность команды SELECT

осуществляет запись выбранных строк в файл, указанный в file_name. Данный файл создается на сервере и до этого не должен

существовать (таким образом, предотвращается разрушение таблиц и файлов). Форма SELECT ... INTO OUTFILE главным образом предназначена для выполнения очень быстрого дампа таблицы на серверном компьютере.

BACKUP TABLE tbl_name[,tbl_name...] TO '/path/to/backup/directory' — копирует в каталог резервного

копирования тот минимум табличных файлов, который достаточен для восстановления таблицы, после сброса на диск всех изменений. Работает только для таблиц MyISAM. В процессе резервного копирования будет установлена блокировка чтения отдельно для каждой таблицы на время ее копирования. Если необходимо сделать резервное копирование в виде мгновенного образа нескольких таблиц, необходимо сначала запросить LOCK TABLES установки блокировки чтения для каждой таблицы в группе.

Восстановление:

LOAD DATA INFILE 'file_name.txt' [REPLACE | IGNORE] INTO TABLE table1 — читает строки из текстового файла file_name.txt и вставляет их в таблицу table1. Команда LOAD DATA INFILE

является дополнительной к SELECT ... INTO OUTFILE.

RESTORE TABLE tbl_name [,tbl_name...] FROM '/path/to/backup/directory' — восстанавливает таблицу(ы) из

резервной копии, созданной с помощью BACKUP TABLE. Существующие таблицы не перезаписываются: при попытке восстановления поверх существующей таблицы будет выдана

ошибка. Восстановление занимает больше времени, нежели BACKUP

— из-за необходимости повторного построения индекса. Чем больше в таблице будет ключей, тем больше времени заберет реконструкция. Эта команда, так же как и BACKUP TABLE, в настоящее время работает только для таблиц MyISAM.

6.2. Команды GRANT и REVOKE

GRANT priv_type [(column_list)] [, priv_type [(column_list)] ...]

ON {tbl_name | * | *.* | db_name.*}

TO user_name [IDENTIFIED BY [PASSWORD] 'password'] [, user_name [IDENTIFIED BY 'password'] ...]

[REQUIRE [{SSL| X509}]

[CIPHER cipher [AND]] [ISSUER issuer [AND]] [SUBJECT subject]]

[WITH [GRANT OPTION | MAX_QUERIES_PER_HOUR # | MAX_UPDATES_PER_HOUR # | MAX_CONNECTIONS_PER_HOUR #]]

REVOKE priv_type [(column_list)] [, priv_type [(column_list)] ...]

ON {tbl_name | * | *.* | db_name.*}

FROM user_name [, user_name ...]

GRANT включен в MySQL начиная с версии 3.22.11 и выше. В более ранних версиях MySQL оператор GRANT ничего не выполняет.

Команды GRANT и REVOKE позволяют системным администраторам создавать пользователей MySQL, а также предоставлять права пользователям или лишать их прав на четырех уровнях привилегий:

1. Глобальный уровень. Глобальные привилегии применяются ко всем базам данных на указанном сервере. Эти привилегии хранятся в таблице mysql.user.

2.Уровень базы данных. Привилегии базы данных применяются ко всем таблицам указанной базы данных. Эти привилегии хранятся в таблицах mysql.db и mysql.host.

3.Уровень таблицы. Привилегии таблицы применяются ко всем столбцам указанной таблицы. Эти привилегии хранятся в таблице

mysql.tables_priv.

4. Уровень столбца. Привилегии столбца применяются к отдельным столбцам указанной таблицы. Эти привилегии хранятся в таблице

mysql.columns_priv.

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

В таблице приведен список возможных значений параметра priv_type для операторов GRANT и REVOKE:

ALL

Задает все простые привилегии, кроме

 

WITH GRANT

[PRIVILEGES]

OPTION

 

 

ALTER

Разрешает использование ALTER TABLE

 

 

CREATE

Разрешает использование

 

CREATE TABLE

CREATE

Разрешает использование

TEMPORARY

CREATE TEMPORARY TABLE

 

TABLES

 

 

 

DELETE

Разрешает использование

 

DELETE

DROP

Разрешает использование

 

DROP TABLE

EXECUTE

Разрешает пользователю запускать хранимые

 

процедуры (для MySQL 5.0)

 

 

FILE

Разрешает использование

 

SELECT ... INTO OUTFILE

 

и LOAD DATA INFILE

INDEX

Разрешает использование

 

CREATE INDEX and DROP

 

INDEX