Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Администрирование MySQL.doc
Скачиваний:
2
Добавлен:
18.04.2019
Размер:
1.3 Mб
Скачать

Нужны ли пользователю административные привилегии

Администратор может предоставить владельцу базы данных возможность управления доступом, предоставив ему все привилегии базы данных и определив опцию WITH GRANT OPTION. Например, чтобы разрешить пользователюalicia подключаться с любого компьютера домена bigcorp.com и предоставить ему административные привилегии для работы со всеми таблицами базы данных sales, необходимо использовать оператор grant следующего вида:

GRANT ALL ON sales.* TO alicia@%.big-corp.com IDENTIFIED BY "applejuice"

WITH GRANT OPTION

Фактически, предложение with grant OPTION позволяет администратору делегировать права разрешения доступа другому пользователю. Однако следует проявлять осторожность, поскольку два пользователя с привилегиями grantмогут предоставлять другим пользователям свои права. Если предоставить одному пользователю только привилегиюSELECT, а второму, помимо select, привилегию GRANT, второй пользователь легко может сделать первого "более сильным".

Отмена привилегий и удаление пользователей

Для отмены привилегий пользователя применяется оператор revoke. Его синтаксис очень похож на синтаксис оператора GRANT с той лишь разницей, что предложение ТО заменено на предложение FROM, а предложенияIDENTIFIED BY и WITH GRANT OPTION отсутствуют вовсе:

REVOKE privileges (columns) ON what FROM user

Часть user этого оператора должна соответствовать части user исходного оператора GRANT для пользователя, привилегии которого отменяются. Частьprivileges необязательно должна соответствовать ранее определенным привилегиям. Пользуясь оператором revoke, можно отменить только некоторые из привилегий, предоставленные оператором GRANT.

Оператор revoke применяется для отмены привилегий, но не для удаления пользователей. В таблице user все равно остается запись для пользователя, даже если все привилегии для него сняты. Это означает, что пользователь все еще имеет возможность подключаться к серверу. Для полного удаления пользователя необходимо явным образом удалить его запись из таблицы user. Для этих целей применяется оператор DELETE:

% mysql -u root mysql

mysql> DELETE FROM user WHERE User = "user_name" and Host = "host_name";

mysql> FLUSH PRIVILEGES;

Оператор delete удаляет запись пользователя, а оператор FLUSH указывает серверу перезагрузить таблицы разрешений. (Таблицы перезагружаются автоматически при использовании операторов GRANT и revoke. Однако этого не происходит при непосредственном изменении таблиц разрешений.) Из описанной в следующем разделе ситуации вы узнаете, почему иногда лучше отказаться от удаления записей таблицы user.

Головоломка с привилегиями

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

GRANT ALL ON samp_db.* TO fred@%snake.net IDENTIFIED BY "cocoa"

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

Такая ситуация возникает, если в таблице разрешений содержатся записи, по умолчанию инсталлированные сценарием инициализации mysql_install_db. Причина ее возникновения в том, что при попытке подключения пользователя fred к серверу большим приоритетом перед записью этого пользователя обладает одна из записей анонимного пользователя. Согласно этой записи, для подключения пароль не нужен, однако пользователь fredпытается его ввести. Важно заметить, что для устранения этой проблемы достаточно удалить запись анонимного пользователя из таблицы user. Оператор revoke для этих целей не подходит, поскольку он отменяет только привилегии. Удаление записи выполняется с помощью следующих команд:

% mysql -u root mysql

mysql> DELETE FROM user where User="";

mysql> FLUSH PRIVILEGES;

Сразу после удаления пользователь fred сможет успешно подключиться с локального компьютера.

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

Проверка и восстановление таблиц

Повреждения в таблицах MyISAM происходят вследствие событий, которые невозможно избежать. Различные аппаратные сбои могут оказать самое непредсказуемое влияние на базу данных. Например, если жесткий диск выйдет из строя, данные окажутся полностью потерянными. Неожиданное выключение системы из-за сбоя питания может привести к тому, что изменения в таблицу будут внесены не полностью. Даже если уничтожить серверный процесс по команде kill, у него не будет возможности корректно завершить свою работу.

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

Существуют два способа проверки и восстановления таблиц. Первый — с помощью специальных инструкций, второй — с помощью утилиты myisamchk. Соответствующие инструкции называются CHECK TABLE, REPAIR TABLE иOPTIMIZE TABLE. Они достаточно удобны, поскольку выполняются в рамках серверного процесса. В этом смысле они ничем не отличаются, к примеру, от инструкции SELECT. Утилитаmyisamchk обладает рядом дополнительных возможностей, которые в ряде ситуаций оказываются весьма удобными.

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

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

Возможно, имеет смысл изменить сценарий safe_mysql таким образом, чтобы при запуске сервера выполнялись инструкции проверки таблиц. Файл, содержащий такие инструкции, задается с помощью опции --init-file. Если повреждения произошли из-за того, что сервер внезапно прекратил работу, они будут немедленно исправлены.

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

Таблицы снабжены флагом, указывающим, изменилось ли содержимое таблицы с момента последней проверки. Инструкция CHECK TABLE пропустит неизмененные таблицы при наличии ключевого слова CHANGED. В утилитеmyisamchk соответствующий режим включается с помощью опции --check-only-changed. Особым образом помечаются также неправильно закрытые таблицы. Чтобы проверить только их, укажите флаг FAST (инструкцияCHECK TABLE) или опцию --fast (утилита myisamchk).

По умолчанию утилита myisamchk ищет повреждения только в индексных файлах. В инструкции CHECK TABLE этот режим включается с помощью флага QUICK. Сама инструкция CHECK TABLE по умолчанию проверяет не только индексы, но и неправильные ссылки на удаленные записи. В утилите myisamchk этот режим включается с помощью опции --medium-check. Расширенный режим проверки задается флагом EXTENDED и опцией --extended-check. В этом случае будут проверяться все индексируемые значения.

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

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

mysql>CHECK TABLE courses;

+--------------+-------+-----------+---------------------------------------------+

| Table | Op | Msg_type | Msg_text |

+--------------+-------+-----------+---------------------------------------------+

| courses | check | error | Size of indexfile is: 1924 Should be: 2048 |

| test.courses | check | error | corrupt |

+--------------+-------+-----------+---------------------------------------------+

2 rows in set (0.00 sec)

mysql>REPAIR TABLE courses;

+--------------+--------+-----------+----------+

| Table | Op | Msg_type | Msg_text |

+--------------+--------+-----------+----------+

| test.courses | repair | status | ok |

+--------------+--------+-----------+----------+

1 row in set (0.08 sec)

Листинг 4.1. (htmltxt)

Таблицы можно проверять, когда сервер запущен. Программа MySQL не будет пытаться их восстановить. Но если обнаруживается поврежденная таблица, программа запрещает потокам обращаться к ней до тех пор, пока таблица не будет восстановлена. Для восстановления требуется получить монопольный доступ к таблице. В этой ситуации служебными инструкциями пользоваться удобнее, чем утилитой myisamchk, так как MySQL сможет заблокировать другие потоки на время восстановления таблицы. Утилита myisamchk может работать таким образом, только если операционная система поддерживает блокировку файлов. В Linux соответствующих функций нет, поэтому перед восстановлением таблиц нужно останавливать сервер.

Инструкция REPAIR TABLE устраняет повреждения в таблице. То же самое делает утилита myisamchk, при наличии опции --recover. Программа MySQL поддерживает три типа процедур восстановления: быструю, обычную и безопасную. В первом случае устраняются лишь проблемы с индексами. Во втором случае исправляется также большинство ошибок в табличном файле. В безопасном режиме таблица проверяется строка за строкой, а индексный файл создается заново. Это наиболее длительная процедура.

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

Таблицы с записями переменной длины неизбежно оказываются фрагментированными. Это происходит, когда обновляемая запись не помещается в отведенном для нее пространстве. В результате снижается производительность операций выборки, поскольку программа вынуждена искать запись в двух и более точках файла. Инструкция OPTIMIZE TABLE удаляет из таблицы пустые участки и осуществляет пересортировку записей. Аналогичные действия выполняет утилита myisamchk при наличии опции --analyze. Инструкция OPTIMIZE TABLEтакже сортирует индексы (соответствующая опция утилиты myisamchk называется --sort-index).

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

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

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

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

Помните общие правила обращения с резервными копиями. Если они хранятся в той же файловой системе, что и сама база данных, то данные не защищены от сбоев файловой системы. Отсюда правило: копии должны находиться на отдельном носителе. Храните их на перезаписываемом компакт-диске, магнитной ленте или другом жестком диске. Резервные копии могут храниться дома у начальника или администратора компании. Их можно также пересылать по сети в другую систему. С помощью Internet это делать не сложно.

В процессе планирования необходимо предусмотреть тестирование копий и проверку возможности их восстановления на практике. Не ждите, пока случится катастрофа и вам придется учиться восстанавливать архивы. Создайте тестовую среду и потренируйтесь на ней. Можно попробовать восстановить архив во временную пустую базу данных или же воспользоваться более сложной методикой — например, запустить еще один сервер MySQL на другом порту либо на другом компьютере.

В MySQL существуют три основных способа архивирования данных. Первый — это копирование табличных файлов, второй — создание SQL-образов таблиц, третий — создание форматированных текстовых файлов. Первый способ является самым экономным и быстродействующим. Но для таблиц тех типов, которые поддерживают транзакции, последние два способа являются более гибкими. Например, все таблицы InnoDB хранятся в группе больших файлов, поэтому архивы нельзя будет сгруппировать по базам данных или таблицам.

Какой бы метод ни был выбран, не забудьте защитить таблицы от изменений на время резервного копирования. Если копируются табличные файлы, следует остановить сервер. В остальных случаях достаточно поставить блокировки чтения с помощью инструкции LOCK TABLES и выполнить инструкцию FLUSH TABLES. Последняя необходима для того, чтобы все изменения индексов были записаны в таблицы. Наличие блокировок чтения позволит другим потокам параллельно обращаться к таблицам с запросами на выборку.

Инструкции BACKUP TABLE и RESTORE TABLE копируют табличные файлы в указанный каталог. Естественно, серверный процесс должен иметь право записи в этот каталог. Программа MySQL копирует туда файлы с расширениями .frm и .MUD. Индексный файл (.MYI) можно воссоздать на основании первых двух, что позволит сэкономить место в архиве. В листинге 4.2 показан пример архивирования таблицы.

mysql>BACKUP TABLE dictionary TO '/tm/backup';

+-----------------+--------+-----------+------------------------+

| Table | Op | Msg_type | Msg_text |

+-----------------+--------+-----------+------------------------+

| test.dictionary | backup | status | ok |

+-----------------+--------+-----------+------------------------+

1 rows in set (0.27 sec)

Листинг 4.2. (htmltxt)

Функции копирования файлов предоставляются операционной системой, поэтому данный способ создания резервных копий является самым быстрым. Таблица dictionary, скопированная в листинге 4.2, содержит более 100000 записей, а файл данных занимает почти 3 Мбайт. Как видите, процедура архивирования такой таблицы заняла менее секунды.

Инструкция BACKUP TABLE самостоятельно заботится о блокировании таблиц и очистке табличных буферов. Это означает, что, в отличие от других методов резервного копирования, дополнительные инструкции не нужны.

Инструкция RESTORE TABLE копирует архивные файлы в каталог базы данных и перестраивает индексы. Таблица не должна существовать на момент восстановления. В случае необходимости можно удалить ее с помощью инструкции DROP TABLE или же вручную удалить табличные файлы.

В листинге 4.3 показаны результаты восстановления таблицы dictionary, резервная копия которой была создана в листинге 4.2. Обратите внимание на то, что процесс восстановления длился гораздо дольше, чем архивирование. Причина в том, что на перестройку индексов уходит много времени.

mysql> RESTORE TABLE dictionary FROM '/tmp/backup';

+-----------------+---------+-----------+--------------------------+

| Table | Op | Msg_type | Msg_text |

+-----------------+---------+-----------+--------------------------+

| test.dictionary | restore | status | ok |

+-----------------+---------+-----------+--------------------------+

1 rows in set (1 min 22.24 sec)

Листинг 4.3. (htmltxt)

Если резервные копии создаются вручную, то в архив можно также включить индексный файл. В этом случае в процессе восстановления таблицы индексный файл будет просто скопирован в каталог базы данных. Тем не менее его всегда можно воссоздать с помощью инструкции REPAIR TABLE. Предположим, таблица dictionary была полностью утеряна. Процесс ее восстановления начнем с копирования frm-файла обратно в каталог базы данных. Создать пустые файлы данных и индексов можно с помощью инструкции TRUNCATE TABLE. Затем необходимо скопировать старый файл данных поверх нового. После этого вводится инструкция REPAIR TABLE. В листинге 4.4показано, как программа MySQL обнаруживает расхождение в количестве записей и перестраивает индексы.

mysql> REPAIR TABLE dictionary;

+-----------------+---------+-----------+-----------------------------------------+

| Table | Op | Msg_type | Msg_text |

+-----------------+---------+-----------+-----------------------------------------+

| state | repair | warning | number of rows changed from 0 to 104237 |

| test.state | repair | status | ok |

+-----------------+---------+-----------+-----------------------------------------+

2 rows in set (1 min 25.12 sec)

Листинг 4.4. (htmltxt)

Для безопасного создания резервных копий лучше пользоваться специальной программой, чем делать все вручную. С этой целью в дистрибутив MySQL входит Perl-сценарий mysqlhotcopy. В листинге 4.5 показано, как с его помощью создаются копии таблиц привилегий. Команда ls позволяет убедиться, что все файлы, в том числе индексные, на месте.

# mysqlhotcopy mysql /trap/hc

Locked 6 tables in 0 seconds.

Flushed tables(mysql.columns_priv, mysql.db, mysql.func, mysql.host,

mysql.tables_priv, mysql.user) in 0 seconds.

Copying 18 files…

Copying indices for 0 files…

Unlocked tables.

Mysqlhotcopy copied 6 tables |(18 files) in 1 second (1 seconds overall).

# ls /tmp/hc/mysql

columns_priv.MYD db.MYD func.MYD host.MYD tables_priv.MYD user.MYD

columns_priv.MYI db.MYI func.MYI host.MYI tables_priv.MYI user.MYI

columns_priv.frm db.frm func.frm host.frm tables_priv.frm user.frm

Листинг 4.5. (htmltxt)

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

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

Для создания sql-образа таблицы предназначена утилита mysqldump. Она записывает текст инструкций в поток stdout, поэтому нужно перенаправить результаты ее работы в файл. В листинге 4.6 показан созданный этой утилитой образ таблицы db из базы данных mysql. Утилита была запущена с опцией --opt которая включает режим оптимальных установок.

# MySQL dump

#

# Host: localhost Database: mysql

#

# Server version 4.12.25-log

#

# Table structure for table 'db'

#

DROP TABLE IF EXISTS db;

CREATE TABLE db (

Host char(60) binary NOT NULL default '',

Db char(64) binary NOT NULL default '',

User char(16) binary NOT NULL default '',

Select_priv enum('N', 'Y') NOT NULL default 'N',

Insert_priv enum('N', 'Y') NOT NULL default 'N',

Update_priv enum('N', 'Y') NOT NULL default 'N',

Delete_priv enum('N', 'Y') NOT NULL default 'N',

Create_priv enum('N', 'Y') NOT NULL default 'N',

Drop_priv enum('N', 'Y') NOT NULL default 'N',

Grant_priv enum('N', 'Y') NOT NULL default 'N',

References_priv enum('N', 'Y') NOT NULL default 'N',

Index_priv enum('N', 'Y') NOT NULL default 'N',

Alter_priv enum('N', 'Y') NOT NULL default 'N',

PRIMARY KEY (Host, Db, User),

KEY User (User)

)TYPE=MyISAM COMMENT = 'Database privileges';

tt

# Dumping data for table 'db'

#

LOCK TABLES db WRITE;

INSERT INTO db VALUES

('%', 'test', '', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'N', 'Y', 'Y', 'Y'),

('%', 'test\\_%', '', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'N', 'Y', 'Y', 'Y'),

('Localhost', 'freetime', 'httpd', 'Y', 'Y', 'Y', 'Y', 'N', 'N', 'N', 'N', 'N', 'N');

UNLOCK TABLES;

Листинг 4.6. (htmltxt)

He забудьте заблокировать все таблицы для чтения, прежде чем запускать утилиту mysqldump. В противном случае целостность результатов не гарантируется. Предположим, имеется приложение, которое хранит информацию о клиентах и их электронных адресах. Создание учетной записи нового клиента включает добавление записи в таблицу client и последующую вставку одной или нескольких записей в таблицу email_address. Если параллельно с этим создавать резервную копию базы данных, то может оказаться, что в промежутке между созданием образов таблиц client и email_address приложение попытается обновить обе эти таблицы. Доступ к первой таблице будет запрещен, а ко второй — нет. В результате в архиве появятся адреса, не соответствующие ни одной записи таблицы клиентов.

Чтобы восстановить данные из такого архива, достаточно выполнить SQL-сценарий в интерпретаторе mysql. Можно просто перенаправить сценарий на вход этой утилиты или же воспользоваться ее командой source. Интерпретатор выполнит все инструкции сценария так, как если бы они были введены в командной строке.

Утилита mysqldump имеет режим создания текстового образа таблицы. В этом режиме для каждой архивируемой таблицы создаются два файла. Один из них имеет расширение .sql и содержит соответствующую инструкциюCREATE TABLE. Второй файл имеет расширение .txt и содержит записи таблицы, причем для разделения полей применяются символы табуляции. В листинге 4.7 показана команда, создающая текстовый образ таблицыdictionary в каталоге /tmp.

[/tmp]# mysqldump --verbose --tab=/tmp test dictionary

# Connecting to localhost...

# Retrieving table structure for table dictionary...

# Sending SELECT query...

# Disconnecting from localhost...

Листинг 4.7. (htmltxt)

Для восстановления данных из такого архива необходимо сначала создать таблицу, а затем выполнить инструкциюLOAD DATA INFILE, которая вставит записи в таблицу. Стандартный формат файла, создаваемого утилитойmysqldump, соответствует тому формату, который по умолчанию распознается инструкцией LOAD DATA INFILE. Влистинге 4.8 демонстрируется загрузка данных в таблицу dictionary в среде mysql.

mysql> source /tmp/dictionary.sql

Query OK, 0 rows affected (0.00 sec)

mysql> LOAD DATA INFILE '/tmp/dictionary.txt' INTO TABLE dictionary;

Query OK, 104237 rows affected (1 min 27.70 sec)

Records: 104237 Deleted: 0 Skipped: 0 Warnings: 0

Листинг 4.8. (htmltxt)

Создать файл, понимаемый инструкцией LOAD DATA INFILE, позволяет также инструкция SELECT с предложениемINTO (листинг 4.9). Схему таблицы необходимо получить другим путем, например с помощью инструкции SHOW CREATE TABLE.

mysql> SELECT * FROM dictionary INTO OUTFILE 'tmp/dictionary.txt';

Query OK, 104237 rows affected (6.42 sec)

Листинг 4.9. (htmltxt)

Один из способов восстановления таблиц заключается в использовании двоичного журнала. Достаточно преобразовать его содержимое в SQL-инструкции и выполнить их. Предварительно необходимо заблокировать все таблицы для записи или отключить всех клиентов от сервера. Преобразование двоичного журнала осуществляется с помощью утилиты mysqlbinlog (листинг 4.10). Результаты ее работы нужно направить в файл или интерпретаторуmysql. Обратите внимание: инструкция SET меняет метку текущего времени сеанса, чтобы дата создания таблицы осталась неизменной.

# mysqlbinlog --offset=1 --short-form red-bin.001

use freetime;

SET TIMESTAMP=991767105;

UPDATE session SET LastAction = now() WHERE ID='fNbbnOLBYYlqesqa';

use freetime;

SET TIMESTAMP=991767134;

UPDATE session SET LastAction = now() WHERE ID='fNbbnOLBYYlqesqa';

use freetime;

SET TIMESTAMP=991767134;

DELETE FROM project_view WHERE Project=2 AND User=2;

use freetime;

SET TIMESTAMP=991767135;

INSERT INTO project_view VALUES (2, 2, now());

Листинг 4.10. (htmltxt)

Обзор серверных сценариев и утилит

Все программы MySQL имеют множество различных опций. При этом каждая программа MySQL поддерживает опцию -help, которую можно использовать для получения полного описания различных опций программы. Например, попробуйте выполнитьmysql -help.

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

В следующем списке приводятся краткие описания серверных программ MySQL.

  • myisamchk

Утилита, применяемая для описания, проверки, оптимизации и восстановления таблиц MySQL. Поскольку утилита myisamchk имеет много функций, она описывается отдельно.

  • make_binary_distribution

Создает бинарную поставку откомпилированного кода MySQL. Эту версию при помощи FTP можно передать на сайт support.mysql.com в директорию /pub/mysql/Incoming, чтобы ею могли воспользоваться и другие пользователи MySQL.

  • mysqlbug

Сценарий, составляющий отчет о возникшей в MySQL неполадке. Этот сценарий должен всегда использоваться для составления отчета для почтового списка рассылки MySQL.

  • mysqld

Сам сервер MySQL, демон. Он должен работать постоянно.

  • mysql_install_db

Создает таблицы привилегий MySQL с заданными по умолчанию привилегиями. Это обычно делается только один раз, при первой инсталляции MySQL в системе.

safe_mysqld, оболочка mysqld

В MySQL 4.0 safe_mysqld был переименован в mysqld_safe.

safe_mysqld — это сценарий, с помощью которого рекомендуется запускать демон mysqld на Unix. safe_mysqldслужит для реализации неких дополнительных функций безопасности для mysqld, таких, как возможность перезапуска сервера при обнаружении ошибки и записи в журнал информации о процессе работы mysqld.

Если не указаны опции -mysqld=# или -mysqld-version=#, safe_mysqld будет использовать исполняемый файлmysqld-max, если последний существует. Если mysqld-max не существует, safe_mysqld запустит mysqld. Это позволяет легко выяснить, что даст использование mysqld-max вместо mysqld: просто скопируйте mysqld-maxповерх mysqld, и он будет работать.

Как правило, редактировать сценарий safe_mysqld не следует, однако можно указать опции для safe_mysqld, поместив их в раздел [safe_mysqld] файла my.cnf. safe_mysqld будет считывать все опции из разделов файлов опций [mysqld], [server] и [safe_mysqld].

Обратите внимание: все опции, которые вводятся в командной строке для safe_mysqld, передаются mysqld. Если требуется применить в safe_mysqld какие-либо опции, которые mysqld не поддерживает, эти опции нужно определить в файле опций.

Большинство опций safe_mysqld - те же, что и у mysqld.

Safe_mysqld поддерживает следующие опции:

-ledir=path

Путь к mysqld

-log-error=path

Записывать журнал ошибок в указанный файл

-datadir=path,

-defaults-extra-file=path,

-defaults-file=path,

-log=path,

-pid-file=path

Служебные пути для mysqld

-no-defaults

 

-open-files-limit=#

Максимальное количество файлов, которые могут быть открыты mysqld. Значение передается ulimit -n. Обратите внимание: чтобы эта опция работала корректно, необходимо запустить safe_mysqld от пользователя root!

-port=#

Номер порта для сетевой связи

-socket=path

Сокет для связи

-timezone=#

Устанавливает переменную часового пояса (TZ) в значение, передаваемое в этом параметре

-core-file-size=#

Размер файла, который mysqld должен быть способен создать. Используйтеulimit -c

-mysqld=mysqld-version

Имя версии mysqld в каталоге ledir

-user=#

Имя пользователя

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

  • Сервер и базы данных можно обнаружить относительно каталога, в котором вызывается safe_mysqld.safe_mysqld ищет в своей рабочей директории bin и data (для бинарных дистрибутивов) или libexec и var(для дистрибутивов с исходным кодом). Это условие должно выполняться, если safe_mysqld запускается из директории, в которую инсталлирован MySQL (например /usr/local/mysql для бинарного дистрибутива).

  • Если сервер и базы данных не могут быть найдены относительно рабочей директории, safe_mysqld пытается найти их по абсолютным путям. Типичные местоположения — /usr/local/libexec и /usr/local/var. Действительные местоположения определяются при создании дистрибутива, из которого запускаетсяsafe_mysqld. Они должны быть корректными, если MySQL был инсталлирован в стандартное местоположение.

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

shell> cd mysql_installation_directory

shell> bin/safe_mysqld

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

Mysqld_multi, программа для управления множеством серверов MySQL

Программа mysqld_multi предназначена для управления несколькими процессами mysqld, работающих на различных сокетах Unix и портах TCP/IP.

Программа будет искать группу(группы) [mysqld#] в my.cnf (или заданных при помощи -config-file=... файлах), где # — любое положительное число, начиная с 1. Мы говорим про этот номер далее как про номер группы опций, или GNR. Номера групп различают группы опций одну от другой и используются как аргумент при запускеmysqld_multi чтобы указать, какие серверы вы хотите запустить, остановить или получить статус. Эти группы должны быть такими же, как и обычная группа [mysqld], но с такими портом, сокетом и т.д., которые требуются для каждого отдельного процесса mysqld.

mysqld_multi запускается в таком синтаксисе:

Использование: mysqld_multi [OPTIONS] {start|stop|report} [GNR,GNR,GNR...]

или mysqld_multi [OPTIONS] {start|stop|report} [GNR-GNR,GNR,GNR-GNR,...]

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

shell> mysqld_multi -example

В качестве разделителей в списке GNR применяются запятые, комбинации создаются при помощи тире. Последнее означает, что будут задействованы все номера GNR из диапазона GNR1-GNR2. Если не задан аргумент GNR, то все группы будут либо запущены, либо остановлены, либо будет выведен отчет об этих группах. Обратите внимание, что в списке GNR не должно быть никаких пропусков (пробелов, символов табуляции или пустых строк). Любые данные после пропуска будут игнорироваться.

mysqld_multi поддерживает следующие опции:

-config-file=...

Альтернативный файл конфигурации (config file). Примечание: данный файл не влияет на собственные опции этой программы (группа [mysqld_multi]), а только на группы [mysqld#]. Без этой опции поиск всех данных будет осуществляться только в обычном файле my.cnf

-example

Представляет пример файла конфигурации

-log=...

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

-mysqladmin=...

Исполняемый файл mysqladmin, используемый для завершения работы сервера

-mysqld=...

Исполняемый файл mysqld, который будет использоваться. Обратите внимание: в этой опции можно также указывать safe_mysqld. Опции передаются mysqld. Необходимо только удостовериться, что в переменной окружения PATH имеется mysqld или что установленsafe_mysqld

-no-log

Вывод в stdout вместо журнала. По умолчанию журналы включены

-password=...

Пароль пользователя для доступа к mysqladmin

-tcp-ip

Подсоединение к серверу(ам) MySQL по TCP/IP вместо Unix-сокетов. Данная опция влияет на завершение работы сервера и создание отчетов. Если файл сокета отсутствует, сервер будет работать, но к нему можно будет обращаться только через порт TCP/IP. По умолчанию соединение осуществляется через сокет Unix

-user=...

Имя пользователя MySQL для mysqladmin

-version

Вывод номера версии и завершение работы

myisampack, MySQL-генератор сжатых таблиц (только для чтения)

Утилита myisampack используется для сжатия таблиц MyISAM, а утилитаpack_isam — для сжатия таблиц ISAM. Поскольку таблицы ISAM являются устаревшими, здесь будет рассматриваться только myisampack.

myisampack сжимает каждый столбец в таблице по отдельности. Информация, необходимая для декомпрессии столбцов, считывается в память при открытии таблицы. В результате обеспечивается более высокая производительность при доступе к отдельным записям, поскольку нужно распаковывать только одну запись, а не значительно больший по размеру дисковый блок, как при использовании программы Stacker в MS DOS. В среднем myisampack сжимает файл данных на 40%-70%.

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

Обратите внимание на следующее:

  • После сжатия таблица доступна в режиме только для чтения. Это удобно, скажем, для записи на CD.

  • myisampack может также сжимать столбцы c типами BLOB или TEXT.

Утилиту myisampack можно запустить следующим образом:

shell> myisampack [options] filename ...

Каждое имя файла (filename) должно быть именем индексного файла (.MYI). Если вы не находитесь в директории базы данных, необходимо указать полный путь к файлу. Допускается опускать расширение .MYI.

myisampack поддерживает следующие опции:

-b,

-backup

Создает резервную копию таблицы, присваивая ей имя tbl_name.OLD

-#,

-debug=debug_options

Выводить журнал отладки. Строка debug_options часто принимает значениеd:t:o,filename

-f,

-force

Сжатие таблицы происходит, даже если она увеличивается или если существует временный файл. Во время сжатия таблицы myisampack создает временный файлtbl_name.TMD. Если вы вручную прекратите выполнение myisampack, может оказаться, что файл tbl_name.TMD не будет удален. Обычно если myisampack обнаруживает существующий tbl_name.TMD, она прекращает работу и выдает ошибку. При указании опции -force myisampack сжимает таблицу в любом случае

-j big_tbl_name,

-join=big_tbl_name

Соединяет все таблицы, указанные в командной строке, в одну таблицу big_tbl_name. Все таблицы, подлежащие объединению, должны быть идентичными (одинаковые имена и типы столбцов, одинаковые индексы и т.д.)

-p #,

-packlength=#

Определяет разрядность поля, хранящего длину строки, в байтах. Может принимать значения 1, 2 или 3. (myisampack хранит все строки с указателями длины размером в 1, 2, или 3 байта. В большинстве случаев myisampack способна определить правильное значение длины перед началом сжатия файла, но во время сжатия она может обнаружить, что может быть использована более короткая длина. В этом случае myisampack выведет сообщение о том, что в следующий раз при сжатии данного файла можно использовать более короткую длину записи.)

-s,

-silent

Молчаливый режим. Сообщения выводятся только при возникновении ошибок

-t,

-test

Сжатие таблицы не выполняется, происходит только проверка процедуры сжатия

-T dir_name,

-tmp_dir=dir_name

Указанная директория используется как местоположение для создания временной таблицы

-w,

-wait

Если таблица уже используется, подождать повторить попытку. Если сервер mysqld был вызван с опцией -skip-external-locking, то не самая лучшая идея — вызыватьmyisampack, если таблица может модифицироваться во время процесса сжатия

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

shell> ls -l station.*

-rw-rw-r-- 1 monty my 994128 Apr 17 19:00 station.MYD

-rw-rw-r-- 1 monty my 53248 Apr 17 19:00 station.MYI

-rw-rw-r-- 1 monty my 5767 Apr 17 19:00 station.frm

shell> myisamchk -dvv station

MyISAM file: station

Isam-version: 2

Creation time: 1996-03-13 10:08:58

Recover time: 1997-02-02 3:06:43

Data records: 1192 Deleted blocks: 0

Datafile: Parts: 1192 Deleted data: 0

Datafile pointer (bytes): 2 Keyfile pointer (bytes): 2

Max datafile length: 54657023 Max keyfile length: 33554431

Recordlength: 834

Record format: Fixed length

table description:

Key Start Len Index Type Root Blocksize Rec/key

1 2 4 unique unsigned long 1024 1024 1

2 32 30 multip. text 10240 1024 1

Field Start Length Type

1 1 1

2 2 4

... ... ... ...

... ... ... ...

56 827 4

57 831 4

shell> myisampack station.MYI

Compressing station.MYI: (1192 records)

- Calculating statistics

normal: 20 empty-space: 16 empty-zero: 12 empty-fill: 11

pre-space: 0 end-space: 12 table-lookups: 5 zero: 7

Original trees: 57 After join: 17

- Compressing file

87.14%

shell> ls -l station.*

-rw-rw-r-- 1 monty my 127874 Apr 17 19:00 station.MYD

-rw-rw-r-- 1 monty my 55296 Apr 17 19:04 station.MYI

-rw-rw-r-- 1 monty my 5767 Apr 17 19:00 station.frm

shell> myisamchk -dvv station

MyISAM file: station

Isam-version: 2

Creation time: 1996-03-13 10:08:58

Recover time: 1997-04-17 19:04:26

Data records: 1192 Deleted blocks: 0

Datafile: Parts: 1192 Deleted data: 0

Datafilepointer (bytes): 3 Keyfile pointer (bytes): 1

Max datafile length: 16777215 Max keyfile length: 131071

Recordlength: 834

Record format: Compressed

table description:

Key Start Len Index Type Root Blocksize Rec/key

1 2 4 unique unsigned long 10240 1024 1

2 32 30 multip. text 54272 1024 1

Field Start Length Type Huff tree Bits

1 1 1 constant 1 0

2 2 4 zerofill(1) 2 9

3 6 4 no zeros, zerofill(1) 2 9

4 10 1 3 9

5 11 20 table-lookup 4 0

6 31 1 3 9

7 32 30 no endspace, not_always 5 9

... ... ... ...

... ... ... ...

53 805 1 17 1

54 806 1 3 9

55 807 20 no empty 3 9

56 827 4 no zeros, zerofill(2) 2 9

57 831 4 no zeros, zerofill(1) 2 9

Листинг 5.1. (htmltxt)

Ниже приведено описание вывода myisampack:

normal

Количество столбцов, для которых не используется никакого дополнительного сжатия

empty-space

Количество столбцов, содержащих пустые значения; они занимают по 1 биту

empty-zero

Количество целочисленных столбцов, в которых содержатся только двоичные нули (ascii 0); каждый из них будет занимать 1 бит

empty-fill

Количество целочисленных столбцов, значения которых не полностью занимают отведенную для них разрядность в байтах; тип этих столбцов изменяется на тип с меньшей разрядностью (например, столбец INTEGERможет быть изменен на MEDIUMINT)

pre-space

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

end-space

Количество столбцов, имеющих много оконечных пробелов. В этом случае каждое значение будет содержать число таких пробелов

table-lookup

Столбец имеет только небольшое количество различающихся значений, которые перед сжатием Хаффмана (Huffman) конвертируются в ENUM

zero

Количество столбцов, все значения которых являются нулями

Original trees

Начальное количество деревьев Хаффмана

After join

Количество различных деревьев Хаффмана, оставленных после соединения деревьев для сохранения небольшого пространства в заголовках

После сжатия таблицы myisamchk -dvv выводит дополнительную информацию по каждому полю.

  • Type

Тип поля может содержать следующие дескрипторы:

constant

Все строки содержат одинаковое значение

no endspace

Не сохраняются замыкающие пробелы

no endspace,

not_always

Не сохраняются замыкающие пробелы и не производится сжатие за счет замыкающих пробелов для всех значений

no endspace,

no empty

Не сохраняются замыкающие пробелы. Не сохраняются пустые значения

table-lookup

Столбец был преобразован к ENUM

zerofill(n)

В значении n главных байтов всегда являются 0 и не сохранены.

no zeros

Не сохраняются нули.

always zero

Значения 0 хранятся в 1 бите.

  • Huff tree

Дерево Хаффмана, связанное с полем.

  • Bits

Количество битов, используемых в дереве Хаффмана.

После запуска pack_isam/myisampack нужно запустить isamchk/myisamchk для повторного создания индекса. В это время можно также отсортировать индексные блоки и создать статистику, необходимую для более эффективной работы оптимизатора MySQL:

myisamchk -rq -analyze -sort-index table_name.MYI

isamchk -rq -analyze -sort-index table_name.ISM

После установки сжатой таблицы в директорию базы данных MySQL нужно проделать операцию mysqladmin flush-tables, чтобы сервер mysqld начал использовать новую таблицу.

Для распаковки сжатой таблицы можно использовать опцию -unpack isamchk или myisamchk.

Обзор клиентских сценариев и утилит

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

Имя

Описание

MYSQL_UNIX_PORT

Сокет, используемый по умолчанию для локальных подсоединений

MYSQL_TCP_PORT

Устанавливаемый по умолчанию порт TCP/IP

MYSQL_PWD

Устанавливаемый по умолчанию пароль

MYSQL_DEBUG

Опции пошаговой отладки программ

TMPDIR

Каталог для создания временных таблиц/файлов

Клиент mysql использует файл, указанный в переменной окружения MYSQL_HISTFILE, для хранения истории командной строки. Значение по умолчанию для этого файла истории — $HOME/.mysql_history, где $HOME — значение переменной окружения HOME.

Все программы MySQL принимают множество различных опций.

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

В приведенном ниже списке дано краткое описание клиентских программ MySQL.

msql2mysql

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

mysqlaccess

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

mysqladmin

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

mysqldump

Выводит содержимое базы данных MySQL в виде файла с SQL-операторами или в виде текстовых файлов с символом табуляции в качестве разделителя

mysqlimport

Импортирует текстовые файлы в соответствующие таблицы, используя команду LOAD DATA INFILE

>mysqlshow

Отображает информацию о существующих базах данных, таблицах, полях и индексах

replace

Служебная программа, использующаяся в сценарии msql2mysql, но имеющая также более широкое применение. Утилита replace изменяет строки, находящиеся в файлах или в стандартных входных данных. Использует принцип конечного автомата, чтобы в первую очередь найти соответствие длинных строк. Может применяться для замены строк

Утилита командной строки mysql

Утилита командной строки mysql является простой SQL-оболочкой (с возможностями библиотеки readline проекта GNU). Она поддерживает интерактивный и неинтерактивный режимы. В интерактивном режиме результаты запроса представляются в ASCII-формате. При использовании в неинтерактивном режиме (например, в качестве фильтра) результат представляется в текстовом формате с символом табуляции в качестве разделителя (выходной формат можно изменить при помощи параметров командной строки). Сценарии можно запускать, как показано ниже:

shell> mysql database < script.sql > output.tab

Если возникают проблемы из-за недостатка памяти на данном клиенте, применяйте параметр -quick! Это заставит mysql использовать функцию mysql_use_result() вместо функции mysql_store_result() для получения результирующей выборки данных.

Использовать mysql очень легко. Запустите mysql database или mysql -user=user_name -password=your_password database. Наберите SQL-команду прямо в командной строке, завершив ее одним из символов: ';', '\g' или '\G', и нажмите клавишу "Ввод".

Утилита командной строки mysql поддерживает следующие параметры.

-?, -help

Вывод справочной информации об использовании программы и выход из нее

-A, -no-auto-rehash

Отключает автоматическое рехеширование. Rehash следует использовать для получения хеша таблиц и полей. Это обеспечивает более быстрый старт mysql

-prompt=...

Устанавливает приглашение на ввод команд в заданном формате

-b, -no-beep

Выключает звуковой сигнал об ошибке

-B, -batch

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

-character-sets-dir=...

Директория, где находятся наборы символов

-C, -compress

Использовать сжатие данных в протоколе сервер/клиент

-#, -debug[=...]

Журнал отладки. Значение по умолчанию —'d:t:o,/tmp/mysql.trace'

-D, -database=...

Имя используемой базы данных. Большей частью применяется в конфигурационном файле my.cnf

-default-character-set=...

Установить набор символов по умолчанию

-e, -execute=...

Выполнить команду и завершить программу (вывод результата как и для -batch)

-E, -vertical

Вывести результаты запроса (строки) по вертикали. Можно произвести вывод подобным образом и без данного параметра, завершая команды символами \G

-f, -force

Продолжать обработку даже при обнаружении ошибки SQL

-g, -no-named-commands

Выключает именованные команды. Следует использовать только команды вида \* либо применять именованные команды только в начале строки, заканчивающейся символом ';'

-i, -ignore-space

Игнорировать пробел после имен функций

-h, -host=...

Подсоединиться к базе данных на указанном хосте

-H, -html

Вывести выходные данные в виде HTML

-X, -xml

Вывести выходные данные в виде XML

-L, -skip-line-numbers

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

-no-pager

Блокирует пейджер (программа постраничного вывода) и выводит результат в стандартный выводstdout (в Unix)

-no-tee

Блокирует выходной файл. Смотрите также команду \h (интерактивная помощь)

-n, -unbuffered

Очищать буфер после каждого запроса

-N, -skip-column-names

Не указывать имена столбцов в результатах

-o, -one-database

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

-pager[=...]

Устанавливает тип данных вывода. По умолчанию это переменная окруженияPAGER. Ее возможные значения - less, more, cat [> имя файла], и т.д.

-p[password], -

password[=...]

Пароль, используемый при подсоединении к серверу баз данных. Если в командной строке пароль не указан, то он запрашивается у пользователя. При использовании краткой формы -p не оставляйте пробел между параметром и значением пароля

-P порт, -port=порт

Номер порта TCP/IP, используемый для подсоединения

-q, -quick

Не кэшировать результат. Выводить его строка за строкой так, как он приходит от сервера. Это может замедлить скорость работы сервера, если вывод результата будет приостановлен. Файл истории не используется

-s, -silent

Режим молчания. Выводить только сообщения об ошибках

-S -socket=...

Файл сокета, используемый для подсоединения

-t -table

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

-tee=...

Присоединить что-либо к выходному файлу. Смотрите также команду \h(интерактивная помощь). Этот параметр не работает в пакетном режиме

-u, -user=#

Имя пользователя MySQL, если этот пользователь не является активным в данное время

mysqladmin, администрирование MySQL-сервера.

Утилита для выполнения административных операций. Ее синтаксис:

shell> mysqladmin [ПАРАМЕТРЫ] command [command-option] command ...

Список опций, поддерживаемых вашей конкретной версией mysqladmin, можно получить, выполнив команду mysqladmin -help.

Текущая версия mysqladmin поддерживает следующие команды:

  • create databasename

Создать новую базу данных.

  • drop databasename

Удалить базу данных и все ее таблицы.

  • extended-status

Выдает расширенный отчет о состоянии сервера (более полный, чем при команде status ).

  • flush-hosts

Сбросить и перезагрузить хосты.

  • flush-logs

Сбросить на диск и переоткрыть все журналы.

  • flush-tables

Закрыть все открытые таблицы.

  • flush-privileges

Перечитать таблицы привилегий.

  • kill id,id,...

Завершить потоки mysql с указанными thread-id.

  • password

Установить новый пароль для сервера баз данных. Изменить старый пароль на новый.

  • ping

Проверить, работает ли сервер mysqld.

  • processlist

Показать список активных потоков на сервере.

  • reload

Перезагрузить таблицы привилегий.

  • refresh

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

  • shutdown

Завершить работу сервера баз данных.

  • slave-start

Запустить подчиненный дублирующий поток.

  • slave-stop

Остановить подчиненный дублирующий поток.

  • status

Выдает краткий отчет о состоянии сервера.

  • variables

Вывести доступные для использования переменные.

  • version

Вывести данные о версии сервера.

Все команды могут сокращаться до их уникальных префиксов. Например:

shell> mysqladmin proc stat

+----+-------+-----------+----+-------------+------+-------+------+

| Id | User | Host | db | Command | Time | State | Info |

+----+-------+-----------+----+-------------+------+-------+------+

| 6 | monty | localhost | | Processlist | 0 | | |

+----+-------+-----------+----+-------------+------+-------+------+

Uptime: 10077 Threads: 1 Questions: 9 Slow queries: 0

Opens: 6 Flush tables: 1 Open tables: 2

Memory in use: 1092K Max memory used: 1116K

Результат команды mysqladmin status выводится в виде следующих столбцов:

Столбец

Описание

Uptime

Количество секунд с момента запуска MySQL-сервера

Threads

Количество активных потоков (клиентов)

Questions

Количество вопросов от клиентов с момента запуска программы mysqld

Slow queries

Количество запросов, потребовавших большее количество секунд, чем установлено в конфигурации ключом long_query_time

Opens

Количество таблиц, открытых программой mysqld

Flush table

Количество выполненных команд flush ..., refresh, reload

Open tables

Количество таблиц, открытых в данное время

Memory in use

Память, используемая непосредственно программой mysqld (доступно только в случае компиляции MySQL с установленным значением -with-debug=full)

Max memory used

Максимальный объем памяти, использованный непосредственно программой mysqld (доступно только в случае компиляции MySQL с установленным значением -with-debug=full)

При выполнении mysqladmin shutdown через сокет (другими словами, через компьютер с запущенным mysqld) mysqladmin будет ожидать, пока на сервере MySQL не будет удален файл pid-file (в котором содержится идентификатор процесса pid запущенного сервера), чтобы убедиться, чтосервер остановлен должным образом.