RussianLDP Рейтинг@Mail.ru
WebMoney: 
WMZ Z294115950220 
WMR R409981405661 
WME E134003968233 
YandexMoney: 
41001198119846 
E-gold:
5128052

4 Введение в администрирование

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

4.1 Резервирование баз данных

Поскольку таблицы MySQL сохранены как файлы, просто делайте копию. Чтобы получать непротиворечивую копию, скомандуйте LOCK TABLES на релевантных таблицах и дополните это командой FLUSH TABLES для них, дабы все данные были гарантированно сброшены на диск. Подробности по этим командам есть в разделах "9.7.2 Синтаксис LOCK TABLES/UNLOCK TABLES" и "4.8 Синтаксис FLUSH". Вам нужна только блокировка записи. Это позволяет другим потокам продолжать делать запросы к таблицам в то время, как Вы делаете копию файлов в каталоге баз данных. Команда FLUSH TABLE необходима, чтобы гарантировать, что все активные индексные страницы записаны на диск прежде, чем Вы запускаете процесс копирования.

Если Вы хотите делать копию уровня SQL из таблицы, Вы можете использовать SELECT INTO OUTFILE или BACKUP TABLE. Подробности в разделах "8.1 Синтаксис SELECT " и "4.2 Синтаксис BACKUP TABLE".

Другой способ поддержать базу данных состоит в том, чтобы использовать программу mysqldump или скрипт mysqlhotcopy. Подробности в разделах "12.5 mysqldump, Дамп структур таблиц и данных" и "12.6 mysqlhotcopy, Копирование баз данных и таблиц MySQL".

  1. Для полного резервирования баз данных надо скомандовать:
    shell> mysqldump --tab=/path/to/some/dir --opt --full
    
    или
    shell> mysqlhotcopy database /path/to/some/dir
    
    Вы можете также просто копировать все файлы таблицы (*.frm, *.MYD и *.MYI), пока сервер что-нибудь не модифицирует. Скрипт mysqlhotcopy использует этот метод.
  2. Если mysqld запущен, остановите его, а затем запустите с опцией --log-update[=file_name]. Подробнее об этой опции можно узнать в разделе "4.9.3 Файл регистрации модификаций". Файлы протоколов предоставляют Вам информацию относительно того, что изменилось со времени последнего вызова mysqldump.

Если Вы должны восстановить что-либо, попробуйте восстанавливать Ваши таблицы, используя REPAIR TABLE или myisamchk -r. Это эффективно в 99.9% случаев. Если myisamchk ничего хорошего не сделал, попробуйте следующую процедуру (это будет работать только, если Вы запустили MySQL с опцией --log-update):

  1. Восстановите оригинальную копию mysqldump.
  2. Выполните следующую команду, чтобы заново выполнить модификации в двоичном файле регистрации:
    shell> mysqlbinlog hostname-bin.[0-9]* | mysql
    
    Если Вы используете файл регистрации модификации, Вы можете использовать:
    shell> ls -1 -t -r hostname.[0-9]* | xargs cat | mysql
    

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

Вы можете также делать выборочные копии: SELECT * INTO OUTFILE file_name FROM tbl_name и восстанавливать их: LOAD DATA INFILE file_name REPLACE .... Чтобы избежать двойных записей, Вам нужен PRIMARY KEY или UNIQUE в таблице. Ключевое слово REPLACE заменяет старые записи на новые, когда новая запись дублирует старую запись на уникальном значении ключа.

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

Если Вы используете файловую систему Veritas, Вы можете делать следующее:

  1. Выполните в клиенте (perl?) FLUSH TABLES WITH READ LOCK
  2. Выполните в другом клиенте или в копии оболочки команду mount vxfs snapshot.
  3. Выполните в первом клиенте UNLOCK TABLES
  4. Копируйте файлы из snapshot
  5. Размонтируйте snapshot

4.2 Синтаксис BACKUP TABLE

BACKUP TABLE tbl_name[,tbl_name...] TO '/path/to/backup/directory'

Эта команда делает копию всех файлов таблицы в резервный каталог, что является минимумом, необходимым, чтобы восстановить ее. Сейчас это работает только для таблиц MyISAM. Для них копируются файлы .frm (определение) и .MYD (данные). Индексный файл может быть восстановлен из этих двух.

Перед использованием этой команды, пожалуйста, ознакомьтесь с разделом "4.1 Резервирование баз данных".

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

Команда возвращает таблицу со следующими столбцами:

СтолбецЗначение
TableИмя таблицы
OpОбязательно ``backup''
Msg_typeОдно из status, error, info или warning.
Msg_textСобственно сообщение.

Обратите внимание, что команда BACKUP TABLE доступна только в MySQL версии 3.23.25 и старше.

4.3 Синтаксис RESTORE TABLE

RESTORE TABLE tbl_name[,tbl_name...] FROM '/path/to/backup/directory'

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

Команда возвращает таблицу со следующими столбцами:

СтолбецЗначение
TableИмя таблицы
OpОбязательно ``restore''
Msg_typeОдно из status, error, info или warning.
Msg_textСобственно сообщение.

4.4 Синтаксис CHECK TABLE

CHECK TABLE tbl_name[,tbl_name...] [option [option...]]
option = QUICK | FAST | MEDIUM | EXTENDED | CHANGED

CHECK TABLE работает только с таблицами типа MyISAM. На них данная команда эквивалентна myisamchk -m table_name.

Если Вы не определяете опций, используется MEDIUM.

Данная команда проверяет таблицу на ошибки. Для таблиц типа MyISAM модифицируется статистика ключа. Команда возвращает таблицу со следующими столбцами:

СтолбецЗначение
TableИмя таблицы.
OpОбязательно ``check''.
Msg_typeОдно из status, error, info или warning.
Msg_textСобственно сообщение.

Обратите внимание, что Вы можете получать много строк информации для каждой проверенной таблицы. Последняя строка будет иметь тип Msg_type status и значение OK, если все хорошо. Если ответов OK или Not checked нет, Вы должны выполнить ремонт таблицы. Сообщение Not checked говорит о том, что для данной таблицы TYPE сообщил MySQL, что там не было никакой потребности проверять таблицу.

Различные типы проверки:

ТипЗначение
QUICKНе просматривать строки, чтобы проверить неправильные связи.
FASTПроверить только те таблицы, которые не были закрыты правильно.
CHANGEDПроверить только те таблицы, которые не были закрыты правильно, и те, которые изменились со времен последней проверки.
MEDIUMСканировать строки для проверки правильности удаленных связей. Это также вычисляет контрольную сумму ключа для строк и проверяет ее правильность.
EXTENDEDВыполнить полную проверку всех ключей для всех строк в таблице. Это гарантирует, что таблица на 100% непротиворечива, но требует много времени!

Для динамических таблиц MyISAM запущенная проверка будет всегда использовать опцию MEDIUM. Для статических строк не выполняется просмотр строки для режимов QUICK и FAST, поскольку строки очень редко разрушаются.

Вы можете объединять параметры проверки:

CHECK TABLE test_table FAST QUICK;

Это предписывает провести быструю проверку на таблице, если она не была закрыта правильно.

ОБРАТИТЕ ВНИМАНИЕ: в ряде случаев CHECK TABLE изменяет таблицу! Это случается, если таблица отмечена как 'corrupted' (повреждена) или 'not closed properly' (не закрыта правильно), но команда CHECK TABLE не нашла проблем в таблице. В этой ситуации CHECK TABLE отметит таблицу как ok.

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

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

FAST и CHANGED обычно предназначены, чтобы использоваться из скрипта (например, из cron), если Вы хотите проверять таблицу время от времени. В большинстве случаев FAST имеет приоритет перед CHANGED.

EXTENDED должен использоваться после того, как Вы выполнили нормальную проверку, но все еще получаете странные ошибки из таблицы, когда MySQL пробует модифицировать строку или найти строку по ключу (это ОЧЕНЬ маловероятно, если нормальная проверка прошла спокойно!).

Некоторые вещи, сообщаемые проверкой таблиц, не могут быть исправлены в автоматическом режиме:

  • Найденная строка, где столбец auto_increment имеет значение 0 . Это означает, что Вы имеете в таблице строку, где столбец индекса auto_increment содержит значение 0. Можно создать такую конструкцию командой UPDATE. Это не ошибка само по себе, но может вызывать проблему, если Вы сбрасываете таблицу в дамп, а потом восстановите ее оттуда или скомандуете ALTER TABLE на таблице. В этом случае столбец auto_increment изменит значение, согласно правилам auto_increment, что может вызвать проблемы подобно ошибке дублирования ключа. Избавиться от предупреждения можно, только выполнив инструкцию UPDATE, чтобы установить столбец к некоторому другому значению (не 0).

4.5 Синтаксис REPAIR TABLE

REPAIR TABLE tbl_name[,tbl_name...] [QUICK] [EXTENDED]

REPAIR TABLE тоже работает только на таблицах типа MyISAM и аналогичен вызову myisamchk -r table_name.

Обычно Вам никогда не придется выполнять эту команду, но в случае ошибок Вы, очень вероятно, вернете все Ваши данные из таблицы MyISAM с помощью команды REPAIR TABLE. Если Ваши таблицы разрушаются, Вы должны попробовать нахйти причину этого! Подробности по этому вопросу есть в разделе "11.4.1 Что делать, если MySQL рухнул".

REPAIR TABLE восстанавливает разрушенную таблицу. Команда возвращает таблицу со следующими столбцами:

СтолбецЗначение
TableИмя таблицы
OpОбязательно ``repair''
Msg_typeОдно из status, error, info или warning.
Msg_textСобственно сообщение.

Обратите внимание, что Вы можете получать много строк информации для каждой восстановленной таблицы. Последняя будет иметь тип Msg_type status и значение OK, если все в порядке. Если значение OK так и не появилось, Вы должны попробовать восстанавливать таблицу с помощью myisamchk -o, поскольку REPAIR TABLE еще не выполняет все параметры myisamchk. В ближайшем будущем планируется сделать ее более гибкой.

Если задан QUICK, MySQL пробует делать REPAIR только для индексного дерева.

Если Вы используете EXTENDED, MySQL создаст индекс по строкам вместо того, чтобы создать индекс одновременно с сортировкой: это может быть лучше, чем сортировка по ключам фиксированной длины, если Вы имеете длинные ключи типа char(), которые сжимаются очень хорошо.

4.6 Синтаксис OPTIMIZE TABLE

OPTIMIZE TABLE tbl_name[,tbl_name]...

OPTIMIZE TABLE должен использоваться, если Вы удалили большую часть таблицы, или если Вы сделали много изменений для таблицы со строками переменных длин (таблицы, которые имеют VARCHAR, BLOB или TEXT). Удаленные записи поддерживаются в связанном списке, и при последующем использовании операций INSERT повторно применяются старые позиции записей. Вы можете использовать OPTIMIZE TABLE, чтобы освободить неиспользуемое место и дефрагментировать файл данных.

Сейчас OPTIMIZE TABLE применим только к таблицам типов MyISAM и BDB. Для таблиц типа BDB OPTIMIZE TABLE в настоящее время отображается на вызов ANALYZE TABLE. Подробности об этом вызове в разделе "4.7 Синтаксис ANALYZE TABLE ".

Вы можете оптимизировать и другие типы таблиц запуском mysqld с опциями --skip-new или --safe-mode, но в этом случае OPTIMIZE TABLE превратится в вызов ALTER TABLE.

OPTIMIZE TABLE работает следующим образом:

  • Если таблица имеет удаленные или порванные строки, ремонтирует таблицу.
  • Если индексные страницы не отсортированы, сортирует их.
  • Если статистика не современна (и ремонт не может быть выполнен с сортировкой индекса), модифицирует ее.

OPTIMIZE TABLE для таблиц типа MyISAM эквивалентен вызову myisamchk --quick --check-changed-tables --sort-index --analyze.

Обратите внимание, что таблица будет блокирована в течение всего времени работы команды OPTIMIZE TABLE!

4.7 Синтаксис ANALYZE TABLE

ANALYZE TABLE tbl_name[,tbl_name...]

Анализирует и сохраняет распределение ключей для таблицы. Во время процесса анализа таблица будет блокирована с доступом только на чтение. Это работает на таблицах типов MyISAM и BDB.

Это эквивалентно вызову myisamchk -a.

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

Команда возвращает таблицу со следующими столбцами:

СтолбецЗначение
TableИмя таблицы
OpОбязательно ``analyze''
Msg_typeОдно из status, error, info или warning.
Msg_textСобственно сообщение.

Вы можете проверять сохраненное распределение ключей командой SHOW INDEX. Подробности в разделе "4.10.1 Получение информации о базах данных, таблицах, столбцах и индексах".

Если таблица не изменилась после последней команды ANALYZE TABLE, она не будет проанализирована снова.

4.8 Синтаксис FLUSH

FLUSH flush_option [,flush_option]

Вы должны использовать команду FLUSH, если Вы хотите очищать внутренние кэши MySQL. Для выполнения FLUSH Вы должны иметь право RELOAD.

flush_option может быть любой из следующего списка:

HOSTSОсвобождает ведущие таблицы кэша. Вы должны это сделать, если некоторые из Ваших хостов изменяют IP, или если Вы получили сообщение об ошибке "Host ... is blocked". Когда в строке для данного компьютера происходит больше, чем max_connect_errors ошибок за время связи с сервером, MySQL приходит к выводу, что что-то пошло неправильно, и блокирует компьютер. Подробности в разделе "11.2.4 Ошибка Host '...' is blocked. Вы можете запустить mysqld с опцией -O max_connection_errors=999999999, чтобы избежать этого сообщения об ошибке.
LOGSЗакрывает и вновь открывает все журналы. Если Вы определили журнал модификаций или двоичный журнал без расширения, номер расширения журнала будет увеличен на один относительно предыдущего файла. Если Вы использовали расширение в имени файла, MySQL закроет и вновь откроет журнал модификаций. Это эквивалентно посылке на сервер mysqld сигнала SIGHUP.
PRIVILEGESПерезагружает привилегии из таблиц в базе данных mysql.
TABLESЗакрывает все открытые таблицы.
[TABLE|TABLES] table_name [,table_name...] Применяет предыдущую команду только к заданным таблицам.
TABLES WITH READ LOCKЗакрывает все открытые таблицы и блокирует все таблицы для всех баз данных с доступом только на чтение, пока не будет выполнена команда UNLOCK TABLES. Это очень удобный способ получить резервную копию, если Вы имеете файловую систему, подобную Veritas.
STATUSСбрасывает большинство переменных состояния к нулю. Используется при отладке запроса.

Вы можете также обращаться к каждой из команд, показанных выше с помощью утилиты mysqladmin, используя команды flush-hosts, flush-logs, reload или flush-tables.

4.9 Синтаксис KILL

KILL thread_id

Каждое подключение к mysqld выполняется в отдельном процессе. Вы можете видеть запущенные процессы командой SHOW PROCESSLIST и уничтожать процесс командой KILL thread_id.

Если Вы имеете привилегию process, Вы можете видеть и уничтожать все процессы. Иначе Вы можете видеть и уничтожать только Ваши собственные процессы.

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

При вызове KILL для процесса устанавливается флаг kill flag.

В большинстве случаев может требоваться некоторое время для того, чтобы процесс уничтожился, поскольку флаг kill flag может быть проверен только в специфических интервалах:

  • В циклах SELECT, ORDER BY и GROUP BY флажок будет проверен после чтения блока строк. Если он установлен, инструкция будет прервана.
  • При выполнении ALTER TABLE флаг будет проверен прежде, чем каждый блок строк считается из первоначальной таблицы. Если он установлен, команда будет прервана, а временная таблица удалена.
  • При выполнении UPDATE TABLE и DELETE TABLE, флажок будет проверен после каждого чтения блока и после каждого обновления или удаления строки. Если он установлен, инструкция будет прервана. Обратите внимание, что, если Вы не используете транзакции, сделанные в таблице изменения не будут отменены!
  • GET_LOCK() прервется с NULL.
  • Все процессы INSERT DELAYED быстренько сбросят на диск все строки, которые у них лежат в памяти и завершатся.
  • Если поток находится в драйвере блокировки таблицы (состояние: Locked), блокировка таблицы будет быстро прервана.
  • Если поток ждет свободное дисковое пространство в вызове write, запись немедленно прерывается с сообщением об ошибке переполнения диска.

4.10 Синтаксис SHOW

   SHOW DATABASES [LIKE wild]
   SHOW [OPEN] TABLES [FROM db_name] [LIKE wild]
   SHOW [FULL] COLUMNS FROM tbl_name [FROM db_name] [LIKE wild]
   SHOW INDEX FROM tbl_name [FROM db_name]
   SHOW TABLE STATUS [FROM db_name] [LIKE wild]
   SHOW STATUS [LIKE wild]
   SHOW VARIABLES [LIKE wild]
   SHOW LOGS
   SHOW [FULL] PROCESSLIST
   SHOW GRANTS FOR user
   SHOW CREATE TABLE table_name
   SHOW MASTER STATUS
   SHOW MASTER LOGS
   SHOW SLAVE STATUS

SHOW обеспечивает информацию относительно баз данных, таблиц, столбцов или информацию состояния сервера. Если используется часть LIKE wild, строка wild может быть строкой, которая использует групповые символы SQL % и _.

4.10.1 Получение информации о базе данных, таблицах, столбцах и индексах

Вы можете использовать db_name.tbl_name как вариант для tbl_name FROM db_name. Эти две инструкции эквивалентны:

mysql> SHOW INDEX FROM mytable FROM mydb;
mysql> SHOW INDEX FROM mydb.mytable;

SHOW DATABASES вносит в список базы данных на сервере MySQL. Вы можете также получать этот список, используя команду mysqlshow.

SHOW TABLES вносит в список таблицы в заданной базе данных. Вы можете также получать этот список, используя команду mysqlshow db_name.

ОБРАТИТЕ ВНИМАНИЕ: Если пользователь не имеет привилегий для таблицы, соответствующая таблица не будет обнаруживаться в выводе SHOW TABLES или mysqlshow db_name.

SHOW OPEN TABLES вносит в список таблицы, которые являются в настоящее время открытыми в кэше таблиц. Поле Comment сообщает сколько раз таблица кэшируется (cached) и используется (in_use).

SHOW COLUMNS вносит в список столбцы в данной таблице. Если Вы определяете опцию FULL, Вы также получите привилегии, которые Вы имеете для каждого столбца. Если типы столбцов отличны от ожидаемых, они будут основаны на инструкции CREATE TABLE, заметьте, что MySQL иногда сам изменяет типы столбца. Подробности в разделе "7.3.1 Тихие изменения спецификации столбца".

Инструкция DESCRIBE обеспечивает информацию, подобную SHOW COLUMNS. Подробности в разделе "9.1.2 Синтаксис DESCRIBE (получение информации о столбцах)".

SHOW FIELDS является синонимом для SHOW COLUMNS, а SHOW KEYS синонимом для SHOW INDEX. Вы можете также вносить в список столбцы таблицы или индексы с помощью команд mysqlshow db_name tbl_name или mysqlshow -k db_name tbl_name.

SHOW INDEX возвращает индексную информацию в формате, который очень походит на вызов SQLStatistics в ODBC. Следующие столбцы всегда будут возвращены:

СтолбецНазначение
TableИмя таблицы.
Non_unique0, если индекс не может содержать дубликаты.
Key_nameИмя индекса.
Seq_in_indexНомер последовательности столбца в индексе, начиная с 1 (не с 0!).
Column_nameИмя столбца.
CollationКак столбец сортируется в индексе. В MySQL это может иметь варианты `A' (по возрастанию) или NULL (не сортируемый).
CardinalityЧисло уникальных значений в индексе. Это модифицируется запуском isamchk -a.
Sub_partЧисло индексированных символов, если столбец только частично индексирован. NULL если весь ключ индексирован в полном объеме.
CommentРазличные замечания. Пока это сообщает, является ли индекс полнотекстовым (FULLTEXT) или нет.

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

4.10.2 Синтаксис SHOW TABLE STATUS

SHOW TABLE STATUS [FROM db_name] [LIKE wild]

SHOW TABLE STATUS (новинка в Version 3.23) работает подобно SHOW STATUS, но обеспечивает много информации относительно каждой таблицы. Вы можете также получать этот список, используя команду mysqlshow --status db_name. Следующие столбцы возвращены:

СтолбецЗачем он нужен
NameИмя таблицы.
TypeТип таблицы.
Row_formatФормат хранения строки (фиксированный, динамический или сжатый).
RowsЧисло строк.
Avg_row_lengthСредняя длина строки.
Data_lengthДлина файла данных.
Max_data_lengthМаксимальная длина файла данных.
Index_lengthДлина индексного файла.
Data_freeЧисло распределенных, но не используемых байт.
Auto_incrementСледующее значение auto_increment.
Create_timeКогда таблица была создана.
Update_timeКогда файл данных был в последний раз модифицирован.
Check_timeКогда таблица была в последний раз проверена на ошибки.
Create_optionsДополнительные параметры, используемые с CREATE TABLE.
CommentКомментарий, используемый при создании таблицы (или информация о том, почему MySQL не может обращаться к информации по данной таблицы).

Таблицы InnoDB сообщат свободное пространство в ней через поле комментария таблицы.

4.10.3 Синтаксис SHOW STATUS

SHOW STATUS обеспечивает информацию состояния сервера (подобно mysqladmin extended-status). Вывод походит на показанное ниже, хотя формат и числа будут другими:

+--------------------------+------------+
| Variable_name            | Value      |
+--------------------------+------------+
| Aborted_clients          | 0          |
| Aborted_connects         | 0          |
| Bytes_received           | 155372598  |
| Bytes_sent               | 1176560426 |
| Connections              | 30023      |
| Created_tmp_disk_tables  | 0          |
| Created_tmp_tables       | 8340       |
| Created_tmp_files        | 60         |
| Delayed_insert_threads   | 0          |
| Delayed_writes           | 0          |
| Delayed_errors           | 0          |
| Flush_commands           | 1          |
| Handler_delete           | 462604     |
| Handler_read_first       | 105881     |
| Handler_read_key         | 27820558   |
| Handler_read_next        | 390681754  |
| Handler_read_prev        | 6022500    |
| Handler_read_rnd         | 30546748   |
| Handler_read_rnd_next    | 246216530  |
| Handler_update           | 16945404   |
| Handler_write            | 60356676   |
| Key_blocks_used          | 14955      |
| Key_read_requests        | 96854827   |
| Key_reads                | 162040     |
| Key_write_requests       | 7589728    |
| Key_writes               | 3813196    |
| Max_used_connections     | 0          |
| Not_flushed_key_blocks   | 0          |
| Not_flushed_delayed_rows | 0          |
| Open_tables              | 1          |
| Open_files               | 2          |
| Open_streams             | 0          |
| Opened_tables            | 44600      |
| Questions                | 2026873    |
| Select_full_join         | 0          |
| Select_full_range_join   | 0          |
| Select_range             | 99646      |
| Select_range_check       | 0          |
| Select_scan              | 30802      |
| Slave_running            | OFF        |
| Slave_open_temp_tables   | 0          |
| Slow_launch_threads      | 0          |
| Slow_queries             | 0          |
| Sort_merge_passes        | 30         |
| Sort_range               | 500        |
| Sort_rows                | 30296250   |
| Sort_scan                | 4650       |
| Table_locks_immediate    | 1920382    |
| Table_locks_waited       | 0          |
| Threads_cached           | 0          |
| Threads_created          | 30022      |
| Threads_connected        | 1          |
| Threads_running          | 1          |
| Uptime                   | 80380      |
+--------------------------+------------+

Переменные состояния, перечисленные выше, имеют следующие значения:

ПеременнаяЗначение
Aborted_clientsЧисло подключений, прерванных потому, что клиент не закрыл подключение правильно. Подробности в разделе "11.2.9 Ошибки связи/прерванные соединения".
Aborted_connectsЧисло попыток соединиться с сервером MySQL, которые потерпели неудачу. Подробности в разделе "11.2.9 Ошибки связи/прерванные соединения".
Bytes_receivedЧисло байт, полученных с клиентов.
Bytes_sentЧисло байт, посланных клиентам.
ConnectionsЧисло попыток подключения к серверу MySQL.
Created_tmp_disk_tablesЧисло неявных временных таблиц на диске, созданных при выполнении инструкций.
Created_tmp_tablesЧисло неявных временных таблиц в памяти, созданных при выполнении инструкций.
Created_tmp_filesСколько временных файлов создал mysqld.
Delayed_insert_threadsЧисло отсроченных потоков драйвера вставки в использовании.
Delayed_writesЧисло строк, записанных со INSERT DELAYED.
Delayed_errorsЧисло строк, записанных со INSERT DELAYED, для которых произошла ошибка (вероятно, двойной ключ (duplicate key) был использован).
Flush_commandsЧисло выполненных команд FLUSH.
Handler_deleteСколько раз строка была удалена из таблицы.
Handler_read_firstСколько раз первая запись читалась из индекса. Если это значение высоко, предполагается, что сервер делал много полных просмотров индекса, например, SELECT col1 FROM foo, считая, что col1 индексирован.
Handler_read_keyЧисло запросов на чтение строки, основанных на ключе. Если это значение высоко, это значит, что Ваши запросы и таблицы были правильно индексированы.
Handler_read_nextЧисло запросов на чтение следующей строки в порядке ключа. Это значение будет увеличено, если Вы запрашиваете индексный столбец с ограничением диапазона. Это также будет увеличено, если Вы делаете индексный просмотр.
Handler_read_rndЧисло запросов на чтение строк, основанных на фиксированной позиции. Это значение будет высоким, если Вы делаете много запросов, которые требуют сортировки результата.
Handler_read_rnd_nextЧисло запросов на чтение следующей строки в файле данных. Это значение будет высоким, если Вы делаете много просмотров таблицы. Вообще это предполагает, что Ваши таблицы не были правильно индексированы, или что Ваши запросы не используют индексы.
Handler_updateЧисло запросов на модификацию строк в таблице.
Handler_writeЧисло запросов на вставку строки в таблицу.
Key_blocks_usedЧисло используемых блоков в кэше ключа.
Key_read_requestsЧисло запросов на чтение блока ключа из кэша.
Key_readsЧисло физических чтений блока ключа с диска, а не из кэша.
Key_write_requestsЧисло запросов на запись блока ключа в кэш.
Key_writesЧисло физических записей блока ключа на диск, а не в кэш.
Max_used_connectionsМаксимальное число подключений в использовании одновременно.
Not_flushed_key_blocksЧисло блоков ключей в кэше ключа, которые изменились, но не сброшены на диск.
Not_flushed_delayed_rowsЧисло строк, ждущих записи в очередях запросов INSERT DELAY.
Open_tablesЧисло таблиц, которые являются открытыми.
Open_filesЧисло файлов, которые являются открытыми.
Open_streamsЧисло потоков, которые являются открытыми (используемыми, главным образом, для протоколирования).
Opened_tablesЧисло таблиц, которые были открыты.
Select_full_joinЧисло объединений без ключей (должно быть 0).
Select_full_range_joinЧисло объединений, где использовали поиск диапазона по таблице ссылок.
Select_rangeЧисло объединений, где использовали диапазоны в первой таблице. Это обычно не критическое, даже если это большое.
Select_scanЧисло объединений, где просмотрели первую таблицу.
Select_range_checkЧисло объединений без ключей, где проверяем использование ключа после каждой строки (должно быть 0).
QuestionsЧисло запросов, посланных серверу.
Slave_open_temp_tablesЧисло временных таблиц, в настоящее время открытых подчиненным процессом.
Slow_launch_threadsЧисло потоков, которым понадобилось для установления соединения больше, чем slow_launch_time.
Slow_queriesЧисло запросов, которые заняли больше, чем long_query_time.
Sort_merge_passesЧисло объединений, потребовавших сортировки. Если это значение большое, Вы должны рассмотреть увеличение sort_buffer.
Sort_rangeЧисло сортировок с диапазонами.
Sort_rowsЧисло сортируемых строк.
Sort_scanЧисло сортировок выполненных, просматривая таблицу.
Table_locks_immediateСколько раз блокировка таблицы применялась сразу. Доступно после версии 3.23.33.
Table_locks_waitedСколько раз блокировка таблицы не могла быть применена сразу и пришлось ждать. Если это значение высоко, и Вы имеете проблемы с эффективностью, Вы должны сначала оптимизировать Ваши запросы, а затем или разделить таблицу, или использовать репликацию. Доступно после 3.23.33.
Threads_cachedЧисло потоков в кэше.
Threads_connectedСколько в настоящее время открыто подключений.
Threads_createdЧисло потоков созданных, чтобы обработать подключения.
Threads_runningЧисло потоков, которые сейчас не бездействуют.
UptimeСколько секунд сервер уже работает.

Некоторые комментарии относительно вышеупомянутого:

  • Если Opened_tables велико, то переменная table_cache, вероятно, слишком маленькая.
  • Если key_reads велико, то переменная key_cache, вероятно, слишком маленькая. Коэффицент кэширования может быть вычислен по формуле: key_reads/key_read_requests.
  • Если Handler_read_rnd велико, то Вы, вероятно, имеете много запросов, которые требуют, чтобы MySQL просматривал целые таблицы, или Вы имеете объединения, которые не используют ключи правильно.
  • Если Threads_created велико, то следует увеличить переменную thread_cache_size.

4.10.4 Синтаксис SHOW VARIABLES

SHOW VARIABLES [LIKE wild]

SHOW VARIABLES показывает значения некоторых переменных системы MySQL. Вы можете также получить эту информацию, используя команду mysqladmin variables.

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

+-------------------------+---------------------------+
| Variable_name           | Value                     |
+-------------------------+---------------------------+
| ansi_mode               | OFF                       |
| back_log                | 50                        |
| basedir                 | /my/monty/                |
| bdb_cache_size          | 16777216                  |
| bdb_log_buffer_size     | 32768                     |
| bdb_home                | /my/monty/data/           |
| bdb_max_lock            | 10000                     |
| bdb_logdir              |                           |
| bdb_shared_data         | OFF                       |
| bdb_tmpdir              | /tmp/                     |
| binlog_cache_size       | 32768                     |
| concurrent_insert       | ON                        |
| connect_timeout         | 5                         |
| datadir                 | /my/monty/data/           |
| delay_key_write         | ON                        |
| delayed_insert_limit    | 100                       |
| delayed_insert_timeout  | 300                       |
| delayed_queue_size      | 1000                      |
| flush                   | OFF                       |
| flush_time              | 0                         |
| have_bdb                | YES                       |
| have_innodb             | YES                       |
| have_raid               | YES                       |
| have_ssl                | NO                        |
| init_file               |                           |
| interactive_timeout     | 28800                     |
| join_buffer_size        | 131072                    |
| key_buffer_size         | 16776192                  |
| language                | /my/monty/share/english/  |
| large_files_support     | ON                        |
| log                     | OFF                       |
| log_update              | OFF                       |
| log_bin                 | OFF                       |
| log_slave_updates       | OFF                       |
| long_query_time         | 10                        |
| low_priority_updates    | OFF                       |
| lower_case_table_names  | 0                         |
| max_allowed_packet      | 1048576                   |
| max_binlog_cache_size   | 4294967295                |
| max_connections         | 100                       |
| max_connect_errors      | 10                        |
| max_delayed_threads     | 20                        |
| max_heap_table_size     | 16777216                  |
| max_join_size           | 4294967295                |
| max_sort_length         | 1024                      |
| max_tmp_tables          | 32                        |
| max_write_lock_count    | 4294967295                |
| myisam_recover_options  | DEFAULT                   |
| myisam_sort_buffer_size | 8388608                   |
| net_buffer_length       | 16384                     |
| net_read_timeout        | 30                        |
| net_retry_count         | 10                        |
| net_write_timeout       | 60                        |
| open_files_limit        | 0                         |
| pid_file                | /my/monty/data/donna.pid  |
| port                    | 3306                      |
| protocol_version        | 10                        |
| record_buffer           | 131072                    |
| query_buffer_size       | 0                         |
| safe_show_database      | OFF                       |
| server_id               | 0                         |
| skip_locking            | ON                        |
| skip_networking         | OFF                       |
| skip_show_database      | OFF                       |
| slow_launch_time        | 2                         |
| socket                  | /tmp/mysql.sock           |
| sort_buffer             | 2097116                   |
| table_cache             | 64                        |
| table_type              | MYISAM                    |
| thread_cache_size       | 4                         |
| thread_stack            | 65536                     |
| tmp_table_size          | 1048576                   |
| tmpdir                  | /tmp/                     |
| version                 | 3.23.29a-gamma-debug      |
| wait_timeout            | 28800                     |
+-------------------------+---------------------------+

Каждая опция описана ниже. Значения для буферных размеров, длин и размеров стека даны в байтах. Вы можете определять значения с суффиксами `K' или `M', чтобы указать килобайты или мегабайты. Например, 16M указывает 16 мегабайтов. Регистр символов суффикса не имеет значения: 16M и 16m эквивалентны.

ansi_mode.
ON, если mysqld запущен с опцией --ansi. Подробности в разделе "1.4.3 Запуск MySQL в режиме ANSI".
back_log
Сколько ожидающих обработки подключений может иметь MySQL. Это важно, когда главный процесс MySQL получает ОЧЕНЬ много запросов подключения за очень короткое время. Затем требуется некоторое время (хотя очень немного) для основного процесса, чтобы проверить подключение и запустить новый поток. Значение back_log указывает, сколько запросов могут быть сложены в стек в течение этого короткого времени прежде, чем MySQL на мгновение остановит ответы на новые запросы. Вы должны увеличить это только, если Вы ожидаете большое количество подключений за короткий периоде времени (сервер работает интенсивно).

Другими словами, это значение задает размер слушающей очереди для входящих подключений TCP/IP. Ваша операционная система имеет собственное ограничение размера этой очереди. В Unix man-страница listen(2) должна иметь большее количество деталей. Проверьте документацию на Вашу ОС для выяснения максимального значения для этой переменной. Попытка устанавливать back_log выше, чем это ограничение операционной системы, будет неэффективна, хотя и безопасна.

basedir
Значение опции --basedir.
bdb_cache_size
Буфер, который распределен, чтобы кэшировать индекс и строки для BDB-таблиц. Если Вы не используете таблицы BDB, Вы должны запустить mysqld с опцией --skip-bdb, чтобы не тратить впустую память для этого кэша.
bdb_log_buffer_size
Буфер, который распределен, чтобы кэшировать протоколы для BDB-таблиц. Если Вы не используете таблицы BDB, Вы должны запустить mysqld с опцией --skip-bdb, чтобы не тратить впустую память для этого кэша.
bdb_home
Значение опции --bdb-home.
bdb_max_lock
Максимальное число блокировок (по умолчанию 1000), которые Вы можете иметь активным на BDB-таблице. Вы должны увеличить это значение, если Вы получаете ошибки типа bdb: Lock table is out of available locks или Got error 12 from ..., когда Вы делаете длинные транзакции, или когда mysqld должен исследовать много строк, чтобы вычислить и обработать запрос.
bdb_logdir
Значение опции --bdb-logdir.
bdb_shared_data
ON, если Вы используете --bdb-shared-data.
bdb_tmpdir
Значение опции --bdb-tmpdir.
binlog_cache_size.
Размер кэша, чтобы хранить инструкции SQL для двоичного файла регистрации в течение транзакции. Если Вы часто используете большие, многооператорные транзакции, Вы можете увеличить это значение, чтобы получить большую эффективность. Подробности в разделе "9.2.1 Синтаксис BEGIN/COMMIT/ROLLBACK".
character_set
Набор символов по умолчанию.
character_sets
Поддерживаемые наборы символов.
concurrent_inserts
Если ON (значение по умолчанию), MySQL позволит Вам использовать INSERT на таблицах системы MyISAM в то же самое время, когда Вы выполняете на них запросы SELECT. Вы можете выключить эту опцию запуском mysqld с параметрами --safe или --skip-new.
connect_timeout
Число секунд, которое сервер mysqld ждет подключения перед ответом Bad handshake.
datadir
Значение опции --datadir.
delay_key_write
Если включено (по умолчанию), MySQL учитывает опцию delay_key_write в CREATE TABLE. Это означает, что буфер ключей для таблиц с этой опцией не будет сбрасываться на каждой индексной модификации, а только когда таблица будет закрыта. Это ускорит работу по записи, но Вы должны добавить автоматическую проверку всех таблиц командой myisamchk --fast --force. Обратите внимание, что, если Вы запускаете mysqld с опцией --delay-key-write-for-all-tables, это означает, что все таблицы будут обрабатываться так, как будто они были созданы с опцией delay_key_write. Вы можете очищать этот флажок, запуская mysqld с параметрами --skip-new или --safe-mode.
delayed_insert_limit
После вставки delayed_insert_limit строк, драйвер INSERT DELAYED проверит, имеется ли любая задержка инструкций SELECT. Если так, это позволяет им выполниться перед продолжением работ с таблицей.
delayed_insert_timeout
Сколько времени поток INSERT DELAYED должен ждать инструкции INSERT перед своим завершением.
delayed_queue_size
Каких размеров (в строках) очередь должна быть распределена для обработки INSERT DELAYED. Если очередь заполняется, любой пользователь, который вызвал INSERT DELAYED, будет ждать до появления свободного места в очереди.
flush
ON, если MySQL был запущен с опцией --flush.
flush_time
Если это установлено в значение, отличное от нуля, то каждые flush_time секунд все таблицы будут закрыты (чтобы освободить ресурсы и сбросить данные на диск). Я рекомендую эту опцию только на Win95, Win98 или на системах, где Вы имеете очень небольшое количество ресурсов.
have_bdb
YES, если mysqld поддерживает таблицы Berkeley DB. DISABLED, если использован параметр --skip-bdb.
have_innodb
YES, если mysqld поддерживает таблицы InnoDB. DISABLED, если использован параметр --skip-innodb.
have_raid
YES, если mysqld поддерживает опцию RAID.
have_ssl
YES, если mysqld поддерживает SSL (шифрование) по протоколу клиент/сервер.
init_file
Имя файла, определенного в параметре --init-file при запуске сервера. Это файл инструкций SQL, которые Вы хотите всегда выполнять при каждом запуске сервера.
interactive_timeout
Число секунд, которое сервер ждет действий на активном подключении перед его закрытием. Интерактивный пользователь определен как пользователь, который применяет опцию CLIENT_INTERACTIVE для mysql_real_connect(). См. также wait_timeout.
join_buffer_size
Размер буфера, который используется для полных объединений (объединения, которые не используют индексы). Буфер будет распределен один раз для каждого полного объединения между двумя таблицами. Увеличьте это значение, чтобы ускорить полное объединение, если добавление индексов невозможно. Обычно самый лучший способ получать быстрые объединения состоит в том, чтобы добавить индексы таблицы.
key_buffer_size
Индексные блоки буферизированы и разделяются всеми потоками. key_buffer_size как раз и задает размер буфера, используемого для индексных блоков. Увеличьте это значение, чтобы улучшить индексную обработку. Но если Вы сделаете его слишком большим (больше, чем 50% общей памяти?), Ваша система может начать использовать своп и стать ДЕЙСТВИТЕЛЬНО медленной. Не забудьте, что поскольку MySQL не кэширует чтение данных, Вы должны оставить некоторый участок памяти для кэша файловой системы ОС.

Вы можете проверять эффективность буфера ключей выполнением show status и изучением переменных Key_read_requests, Key_reads, Key_write_requests и Key_writes. Коэффициент Key_reads/Key_read_request обычно должен быть < 0.01. Key_write/Key_write_requests обычно близко к 1, если Вы используете обычное обновление/удаление, но может быть намного меньше, если Вы имеете тенденцию делать модификации, которые воздействуют на много данных сразу, или если Вы используете delay_key_write. Подробности в разделе "4.10 Синтаксис SHOW".

Чтобы получить заметное ускорение при записи многих строк сразу, используйте LOCK TABLES. Подробности в разделе "9.2.2 Синтаксис LOCK TABLES/UNLOCK TABLES".

language
Язык, используемый для сообщений об ошибках.
large_file_support
Если mysqld компилировался с параметрами для поддержки больших файлов.
locked_in_memory
Если mysqld был блокирован в памяти опцией --memlock
log
Если включено протоколирование всех запросов.
log_update
Регистрации всех запросов допускается.
log_bin
Файл регистрации модификации включен.
log_slave_updates
Модификации с подчиненного регистрируются.
long_query_time
Если запрос занимает больше, чем заданное здесь время (в секундах), счетчик Slow_queries будет увеличен. Если Вы используете --log-slow-queries, запрос будут регистрироваться в файле регистрации медленных запросов.
lower_case_table_names
Если установлено в 1, имена таблиц будут сохранены на диске в нижнем регистре, и они не будут чувствительны к регистру. Подробности в разделе "3.3 Чувствительность к регистру символов в именах".
max_allowed_packet
Максимальный размер одного пакета. Буфер сообщений инициализирован для размера в net_buffer_length байт, но может вырасти до max_allowed_packet байт, когда необходимо. Это значение по умолчанию маленькое, но позволяет захватывать большие (возможно, неправильные) пакеты. Вы должны увеличить это значение, если используете большие столбцы BLOB. Он должно быть столь же большим как самый крупный BLOB, который Вы хотите использовать. Текущий протокол ограничивает max_allowed_packet размером 16M.
max_binlog_cache_size
Если многооператорная транзакция требует больше, чем этот объем памяти, выйдет ошибочка "Multi-statement transaction required more than 'max_binlog_cache_size' bytes of storage".
max_binlog_size
Доступно после версии 3.23.33. Если запись в двоичный файл регистрации (для репликации) превышает данное значение, выполняется ротация файлов. Вы не можете устанавливать это значение меньше, чем в 1024 байта, или больше, чем 1 GB. Значение по умолчанию 1 GB.
max_connections
Число одновременно допущенных клиентов. Увеличение этого значения увеличивает число описателей файла, которых требует mysqld. Подробности в разделе "11.2.5 Ошибка Too many connections".
max_connect_errors
Если имеется больше, чем это число, прерванных подключений с хоста, хост будет блокирован, и никакие подключения с него станут невозможными вообще. Вы можете снова открыть хост командой FLUSH HOSTS.
max_delayed_threads
Не запускать больше, чем это число потоков, чтобы обработать инструкции INSERT DELAYED. Если Вы попробуете вставлять данные в новую таблицу после того, как все потоки INSERT DELAYED будут заняты, строка будет вставлена, как будто атрибут DELAYED не был определен вовсе, то есть немедленно.
max_heap_table_size
Не позволять создание heap-таблиц больше этого числа.
max_join_size
Объединения, которые, вероятно, собираются читать больше, чем сказано в max_join_size, возвращают ошибку. Установите это значение, если Ваши пользователи имеют тенденцию выполнять объединения, которые испытывают недостаток предложения WHERE, занимают много времени или возвращают миллионы строк.
max_sort_length
Число байтов, чтобы использовать при сортировке значений BLOB или TEXT (только первые max_sort_length байтов из каждого значения реально используются, остальное игнорируется вообще).
max_user_connections
Максимальное число активных подключений для одного пользователя (0 = нет никаких ограничений).
max_tmp_tables
Максимальное число временных таблиц, которые пользователь может хранить открытыми в один момент времени.
max_write_lock_count
После этого количества блоикоровок записи допускается выполнение между делом блокировок чтения.
myisam_recover_options
Значение параметра --myisam-recover.
myisam_sort_buffer_size
Буфер, который распределен для сортировки индекса при выполнении REPAIR или при создании индексов с помощью CREATE INDEX или ALTER TABLE.
myisam_max_extra_sort_file_size.
Если создание временного файла для быстрой генерации индекса много больше, чем использование кэша ключей. то предпочтительнее метод кэша. Это значение используется, главным образом, чтобы вынудить длинные символьные ключи в больших таблицах использовать более медленный метод создания индекса. ОБРАТИТЕ ВНИМАНИЕ, что этот параметр задан в мегабайтах!
myisam_max_sort_file_size
Максимальный размер временного файла, который MySQL позволяет использовать при освежении индекса (в течение REPAIR, ALTER TABLE или LOAD DATA INFILE. Если размер файла больше, чем это значение, индекс будет создан через кэш ключа, который является более медленным. ОБРАТИТЕ ВНИМАНИЕ, что этот параметр задан в мегабайтах!
net_buffer_length
Буфер связи будет приведен к этому размеру между запросами. Это обычно не должно изменяться, но если Вы имеете очень мало памяти, Вы можете устанавливать это значение в ожидаемый размер запроса. То есть в ожидаемую длину инструкций SQL, посланных клиентами. Если запрос превышает эту длину, буфер будет автоматически расширен до max_allowed_packet байт.
net_read_timeout
Сколько секунд ждать данные из подключения перед прерыванием чтения. Обратите внимание, что, когда мы не ожидаем данные из подключения, время ожидания определено через write_timeout. См. также slave_read_timeout.
net_retry_count
Если чтение на коммуникационном порте прервано, оно повторится несколько раз перед отменой попыток связи. Это значение должно быть очень велико на FreeBSD, поскольку там внутренние прерывания посланы всем серверным процессам чтения.
net_write_timeout
Число секунд ожидания блока, который будет записан в подключение.
open_files_limit
Если это не 0, mysqld использует это значение, чтобы резервировать описатели файла для применения с setrlimit(). Если это значение = 0, mysqld резервирует max_connections*5 или max_connections+table_cache*2 (используется большее из этих значений) число файлов. Вы должны попробовать увеличивать это значение, если mysqld выдает Вам ошибку 'Too many open files'.
pid_file
Значение параметра --pid-file.
port
Значение параметра --port.
protocol_version
Версия протокола, используемого сервером MySQL.
record_buffer
Каждый поток, который делает последовательный просмотр, распределяет буфер этого размера для каждой таблицы, которую просматривает. Если Вы делаете много последовательных просмотров, стоит увеличить это значение.
record_rnd_buffer
При чтении строк в сортируемом порядке после сортировки, строки читаются через этот буфер, чтобы избежать дисковых поисков. Если не задан, берется значение из переменной record_buffer.
query_buffer_size
Начальное распределение буфера запросов. Если большинство Ваших запросов имеет большую длину, Вы должны увеличить это!
safe_show_databases
Не показывать базы данных, для которых пользователь не имеет привилегий базы данных или таблицы. Это может улучшать защиту. См. также skip_show_databases.
server_id
Значение опции --server-id.
skip_locking
Если OFF, mysqld использует внешнюю блокировку.
skip_networking
Если ON, допустимы только локальные (сокетные) подключения.
skip_show_databases
Это предотвращает выполнение SHOW DATABASES, если пользователь не имеет привилегии PROCESS_PRIV. Это может улучшить защиту. См. также safe_show_databases.
slave_read_timeout
Число секунд, которое надлежит ждать данные из главного/подчиненного подключения перед прерыванием чтения.
slow_launch_time
Если создание потока занимает больше времени, чем это значение (в секундах), счетчик Slow_launch_threads будет увеличен.
socket
Unix-сокет, используемый сервером.
sort_buffer
Каждый поток, который должен делать сортировку, распределяет буфер этого размера. Увеличьте это значение для ускорения операций ORDER BY или GROUP BY. Подробности в разделе "11.4.4 Где MySQL хранит временные файлы".
table_cache
Число открытых таблиц для всех потоков. Увеличение этого значения увеличивает число описателей файла, которых требует mysqld. MySQL нуждается в двух описателях файла для каждой уникальной открытой таблицы. Вы можете проверять, должны ли Вы увеличить кэш таблицы, анализируя переменную Opened_tables. Подробности в разделе "4.10 Синтаксис SHOW". Удостоверьтесь, что Ваша операционная система может обрабатывать число описателей файла, подразумеваемых установкой table_cache. Если table_cache слишком велико, MySQL может исчерпать описатели файла и начать сбоить.
table_type
Тип таблицы по умолчанию.
thread_cache_size
Сколько потоков мы должны хранить в кэше для повторного использования. Когда пользователь отсоединяется, потоки пользователя будут помещены в кэш, если нет больше, чем thread_cache_size потоков. Все новые потоки сначала принимаются из кэша и только, когда кэш пуст, создаются новые. Эта переменная может увеличиваться, чтобы улучшить эффективность, если Вы имеете много новых подключений.
thread_concurrency
На Solaris mysqld вызовет thr_setconcurrency() с этим значением. thr_setconcurrency() разрешает прикладной программе давать системе управления данные относительно желательного числа потоков, которые должны быть выполнены в одно и то же время.
thread_stack
Размер стека для каждого потока. Многие из ограничений, обнаруженных тестом crash-me, зависят от этого значения. Значение по умолчанию достаточно большое для нормальной работы.
timezone
Таймзона (часовой пояс) для сервера.
tmp_table_size
Если временная таблица в памяти превышает этот размер, MySQL автоматически преобразует ее в таблицу MyISAM на диске. Увеличьте значение tmp_table_size, если Вы делаете много продвинутых запросов GROUP BY, и Вы имеете много памяти.
tmpdir
Каталог, используемый для временных файлов и таблиц.
version
Код версии сервера.
wait_timeout
Число секунд, которое сервер ждет действий на подключении перед его закрытием. См. также interactive_timeout.

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

4.10.5 Синтаксис SHOW LOGS

SHOW LOGS показывает Вам информацию относительно состояния существующих журналов. В настоящее время этот вызов отображает только информацию относительно журналов Berkeley DB.

  • File показывает полный путь к журналу.
  • Type показывает тип журнала (BDB для журналов типа Berkeley DB).
  • Status показывает состояние журнала (FREE если файл может быть удален, или IN USE если файл необходим подсистеме транзакций).

4.10.6 Синтаксис SHOW PROCESSLIST

SHOW PROCESSLIST показывает Вам, которые процессы работают. Вы можете также получать эту информацию, используя команду mysqladmin processlist. Если Вы имеете привилегию process, Вы можете видеть все процессы. Иначе Вы можете видеть только Ваши собственные процессы. Если Вы не используете опцию FULL, то только первые 100 символов каждого запроса будут показаны. Подробности в разделе "4.9 Синтаксис KILL".

Эта команда очень полезна, если Вы получаете сообщения об ошибках 'too many connections' и хотите выяснить, что происходит. MySQL резервирует одно подключение дополнительно для пользователя с привилегией Process_priv, чтобы гарантировать, что Вы всегда способны ко входу в систему и ее проверке (эта ситуация не дает такую же привилегию всем Вашим пользователям).

4.10.7 Синтаксис SHOW GRANTS

SHOW GRANTS FOR user вносит в список команды, который должны быть выданы, чтобы дублировать права пользователя. Например:

mysql> SHOW GRANTS FOR root@localhost;
+---------------------------------------------------------------------+
| Grants for root@localhost                                           |
+---------------------------------------------------------------------+
| GRANT ALL PRIVILEGES ON *.* TO 'root'@'localhost' WITH GRANT OPTION |
+---------------------------------------------------------------------+

4.10.8 Синтаксис SHOW CREATE TABLE

Показывает инструкцию CREATE TABLE, которая создаст данную таблицу. Например:

mysql> show create table t\G
*************************** 1. row ***************************
       Table: t
Create Table: CREATE TABLE t (
  id int(11) default NULL auto_increment,
  s char(60) default NULL,
  PRIMARY KEY (id)
) TYPE=MyISAM

4.11 Файл опций my.cnf

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

MySQL читает заданные по умолчанию параметры из следующих файлов (в Unix):

Имя файлаЗачем он нужен
/etc/my.cnfГлобальные опции для всех
DATADIR/my.cnfОпции для сервера
defaults-extra-fileФайл, определенный через --defaults-extra-file=#
~/.my.cnfСпецифические для пользователей опции

DATADIR представляет собой каталог данных MySQL (обычно /usr/local/mysql/data для бинарного дистрибутива или /usr/local/var для установки из исходников). Обратите внимание, что это тот каталог, который был определен в конфигурации, а не указан в опции --datadir при запуске mysqld! Параметр --datadir не имеет никакого эффекта в то время, когда сервер ищет файлы опций потому, что он их ищет прежде, чем обрабатывает любые параметры командной строки.

MySQL читает заданные по умолчанию параметры из следующих файлов (только в ОС Windows):

Имя файлаЗачем он нужен
windows-system-directory\my.iniГлобальные опции
C:\my.cnfГлобальные опции
C:\mysql\data\my.cnfОпции для сервера

Обратите внимание, что в Windows Вы должны определить все пути с / вместо \. Если Вы используете \, Вы должны определить это дважды, поскольку \ символ ESC в MySQL.

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

Следующие программы поддерживают файлы опций: mysql, mysqladmin, mysqld, mysqldump, mysqlimport, mysql.server, myisamchk и myisampack.

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

Файл опций может содержать строки следующих форм:

#comment
Строки комментария начинаются с `#' или с `;'. Пустые строки игнорируются.
[group]
group представляет собой имя программы или группы, для которой Вы хотите устанавливать параметры. После строки группы любая строка option или set-variable обращается к именованной группе, пока не будет достигнут конец файла опций или другая строка группы.
option
Эквивалентно --option в командной строке.
option=value
Эквивалентно --option=value в командной строке.
set-variable = variable=value
Эквивалентно --set-variable variable=value в командной строке. Этот синтаксис должен использоваться, чтобы установить переменную mysqld.

Группа client позволяет Вам определять параметры, которые обращаются ко всей клиентуре MySQL (но не к mysqld). Это самая подходящая группа, чтобы определить в ней пароль, который Вы используете, чтобы соединиться с сервером. Но удостоверьтесь, что файл опций читаем и перезаписываем только Вами.

Обратите внимание, что для параметров и значений все конечные и начальные пробелы автоматически удалены. Вы можете использовать управляющие последовательности \b, \t, \n, \r, \\ и \s в Вашей строке (\s==пробел).

Имеется типичный глобальный файл опций:

[client]
port=3306
socket=/tmp/mysql.sock

[mysqld]
port=3306
socket=/tmp/mysql.sock
set-variable = key_buffer_size=16M
set-variable = max_allowed_packet=1M

[mysqldump]
quick

Имеется типичный файл опций пользователя:

[client]
# The following password will be sent to all standard MySQL clients
password=my_password

[mysql]
no-auto-rehash
set-variable=connect_timeout=2

[mysqlhotcopy]
interactive-timeout

Если Вы имеете дистрибутив с исходниками, Вы найдете, что типовые файлы конфигурации называются my-xxxx.cnf в каталоге support-files. А вот в двоичном дистрибутиве смотрите в каталоге DIR/support-files, где DIR задает имя пути к каталогу установки MySQL (обычно /usr/local/mysql). В настоящее время имеются типовые файлы конфигурации для маленькой, средней, большой и очень большой системы. Вы можете копировать my-xxxx.cnf в Ваш основной каталог (переименуйте копию в .my.cnf), чтобы экспериментировать.

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

--no-defaultsНе читать любые файлы опций.
--print-defaultsПечатать имя программы и все параметры, которые ей передаются.
--defaults-file=full-path-to-default-fileИспользовать только данный файл конфигурации.
--defaults-extra-file=full-path-to-default-fileЧитать этот файл конфигурации после глобального файла опций, но перед чтением файла настроек пользователя.

Обратите внимание, что вышеупомянутые параметры должны быть первыми в командной строке, чтобы они работали! Однако, --print-defaults может использоваться непосредственно после команды --defaults-xxx-file.

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

shell> my_print_defaults client mysql
--port=3306
--socket=/tmp/mysql.sock
--no-auto-rehash

Вышеупомянутый вывод содержит все параметры для групп client и mysql.

Поиск

 

Найди своих коллег!