RussianLDP Рейтинг@Mail.ru
WebMoney: 
WMZ Z294115950220 
WMR R409981405661 
WME E134003968233 
Visa 
4274 3200 2453 6495 

4.5 Обзор языка администрирования

4.5.1 Синтаксис 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.5.2 Синтаксис 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.5.2 Синтаксис 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.5.5.1 Получение информации о базах данных, таблицах, столбцах и индексах ".

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

4.5.3 Синтаксис FLUSH

FLUSH flush_option [,flush_option]

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

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

HOSTSОсвобождает ведущие таблицы кэша. Вы должны это сделать, если некоторые из Ваших хостов изменяют IP, или если Вы получили сообщение об ошибке "Host ... is blocked". Когда в строке для данного компьютера происходит больше, чем max_connect_errors ошибок за время связи с сервером, MySQL приходит к выводу, что что-то пошло неправильно, и блокирует компьютер. Подробности в разделе "8.2.4 Ошибка Host '...' is blocked. Вы можете запустить mysqld с опцией -O max_connection_errors=999999999, чтобы избежать этого сообщения об ошибке.
LOGSЗакрывает и вновь открывает все журналы. Если Вы определили журнал модификаций или двоичный журнал без расширения, номер расширения журнала будет увеличен на один относительно предыдущего файла. Если Вы использовали расширение в имени файла, MySQL закроет и вновь откроет журнал модификаций. Подробности в разделе "4.9.3 Файл регистрации модификаций". Это эквивалентно посылке на сервер 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.5.4 Синтаксис 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.5.5 Синтаксис 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.5.5.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 вносит в список таблицы, которые являются в настоящее время открытыми в кэше таблиц. Подробнее см. раздел "5.4.6 Как MySQL открывает и закрывает таблицы". Поле Comment сообщает сколько раз таблица кэшируется (cached) и используется (in_use).

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

Инструкция DESCRIBE обеспечивает информацию, подобную SHOW COLUMNS.

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.5.5.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Тип таблицы. Подробности в разделе "7 Типы таблиц MySQL".
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.5.5.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Число подключений, прерванных потому, что клиент не закрыл подключение правильно. Подробности в разделе "8.2.9 Ошибки связи/прерванные соединения".
Aborted_connectsЧисло попыток соединиться с сервером MySQL, которые потерпели неудачу. Подробности в разделе "8.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. Подробности в разделе "4.9.5 Медленный файл регистрации".
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.5.5.4 Синтаксис SHOW VARIABLES

SHOW VARIABLES [LIKE wild]

SHOW VARIABLES показывает значения некоторых переменных системы MySQL. Вы можете также получить эту информацию, используя команду mysqladmin variables. Если значения по умолчанию неподходящие, Вы можете устанавливать большинство этих переменных, используя параметры командной строки mysqld. Подробности в разделе " 4.1.1 Параметры командной строки mysqld".

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

+-------------------------+---------------------------+
| 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.2.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 для двоичного файла регистрации в течение транзакции. Если Вы часто используете большие, многооператорные транзакции, Вы можете увеличить это, чтобы получить большую эффективность.
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.5.5 Синтаксис SHOW".

Чтобы получить заметное ускорение при записи многих строк сразу, используйте LOCK 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, запрос будут регистрироваться в файле регистрации медленных запросов. Подробности в разделе "4.9.5 Медленный файл регистрации".
lower_case_table_names
Если установлено в 1, имена таблиц будут сохранены на диске в нижнем регистре, и они не будут чувствительны к регистру.
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. Подробности в разделе "8.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. Подробности в разделе "8.4.4 Где MySQL хранит временные файлы ".
table_cache
Число открытых таблиц для всех потоков. Увеличение этого значения увеличивает число описателей файла, которых требует mysqld. MySQL нуждается в двух описателях файла для каждой уникальной открытой таблицы. Вы можете проверять, должны ли Вы увеличить кэш таблицы, анализируя переменную Opened_tables. Подробности в разделе "4.5.5 Синтаксис SHOW". Удостоверьтесь, что Ваша операционная система может обрабатывать число описателей файла, подразумеваемых установкой table_cache. Если table_cache слишком велико, MySQL может исчерпать описатели файла и начать сбоить. За информацией относительно того, как работает кэш таблицы, отсылаю Вас к разделу "5.4.6 Как MySQL открывает и закрывает таблицы".
table_type
Тип таблицы по умолчанию.
thread_cache_size
Сколько потоков мы должны хранить в кэше для повторного использования. Когда пользователь отсоединяется, потоки пользователя будут помещены в кэш, если нет больше, чем thread_cache_size потоков. Все новые потоки сначала принимаются из кэша и только, когда кэш пуст, создаются новые. Эта переменная может увеличиваться, чтобы улучшить эффективность, если Вы имеете много новых подключений.
thread_concurrency
На Solaris mysqld вызовет thr_setconcurrency() с этим значением. thr_setconcurrency() разрешает прикладной программе давать системе управления данные относительно желательного числа потоков, которые должны быть выполнены в одно и то же время.
thread_stack
Размер стека для каждого потока. Многие из ограничений, обнаруженных тестом crash-me, зависят от этого значения. Значение по умолчанию достаточно большое для нормальной работы. Подробности в разделе "5.1.4 Пакет тестов MySQL Benchmark Suite".
timezone
Таймзона (часовой пояс) для сервера.
tmp_table_size
Если временная таблица в памяти превышает этот размер, MySQL автоматически преобразует ее в таблицу MyISAM на диске. Увеличьте значение tmp_table_size, если Вы делаете много продвинутых запросов GROUP BY, и Вы имеете много памяти.
tmpdir
Каталог, используемый для временных файлов и таблиц.
version
Код версии сервера.
wait_timeout
Число секунд, которое сервер ждет действий на подключении перед его закрытием. См. также interactive_timeout.

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

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

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

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

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

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

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

4.5.5.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.5.5.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

SHOW CREATE TABLE цитирует таблицу и имена столбцов согласно опции SQL_QUOTE_SHOW_CREATE. Подробности в разделе "5.5.6 Синтаксис SET".

4.7 Серверные скрипты и утилиты MySQL

4.7.1 Обзор серверных скриптов и утилит

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

ИмяОписание
MYSQL_UNIX_PORTСокет по умолчанию. Используется для связи с localhost
MYSQL_TCP_PORTПорт TCP/IP по умолчанию
MYSQL_PWDПароль по умолчанию
MYSQL_DEBUGОпции трассировки при отладке
TMPDIRКаталог для хранения временных таблиц и файлов для свопа

Использование MYSQL_PWD может нарушить безопасность системы! Подробности в разделе "4.2.7 Связь с сервером MySQL".

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

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

Вы можете отменять заданные по умолчанию параметры для всех стандартных программ клиентов файлом опций. Подробности в разделе "4.1.2 Файл опций my.cnf".

Список ниже кратко описывает программы MySQL:

myisamchk
Нужна, чтобы описывать, проверять, оптимизировать и ремонтировать таблицы MySQL. Поскольку myisamchk имеет много функций, он описан в собственном разделе.
make_binary_distribution
Создает двоичный дистрибутив из компилируемого MySQL. Это может быть передано по FTP в каталог `/pub/mysql/Incoming' на сервере support.mysql.com для удобства других пользователей MySQL.
msql2mysql
Скрипт, который преобразует программы mSQL в программы для MySQL. Это не обрабатывает все случаи, но дает хорошее начало при преобразовании.
mysqlaccess
Скрипт, который проверяет привилегии доступа для компьютера, пользователя и комбинации баз данных.
mysqladmin
Утилита для выполнения административных операций, типа создания или удаления баз данных, перезагрузки таблиц привилегий, сброса таблиц на диск и работы с журналами. mysqladmin может также использоваться, чтобы получить данные о версии, процессах и статусе сервера. Подробности в разделе "4.8.3 mysqladmin, Администрирование сервера MySQL".
mysqlbug
Скрипт для построения сообщений об ошибках MySQL. Если Вы отсылаете сообщение об ошибке авторам MySQL, пользуйтесь им: он обеспечивает единый формат всех сообщений.
mysqld
Демон SQL. Он всегда должен быть запущен: это собственно и есть сервер.
mysqldump
Сбрасывает дамп базы данных MySQL в файл как инструкций SQL или как текстового файла с разделением табуляциями. Первоначально его написал для свободного распространения Igor Romanenko. Подробности в разделе "4.8.5 mysqldump, Сброс в дамп структур и данных".
mysqlimport
Импортирует текстовые файлы в соответствующие таблицы, используя LOAD DATA INFILE. Подробности в разделе "4.8.7 mysqlimport, Импорт данных из текстовых файлов".
mysqlshow
Отображает информацию относительно баз данных, таблиц, столбцов и всех их индексов.
mysql_install_db
Создает таблицы предоставления доступа MySQL с заданными по умолчанию привилегиями. Это обычно выполняется только однажды, при установке MySQL.
replace
Утилита, которая используется msql2mysql, но она имеет более общее назначение. replace заменяет строки в файлах или на стандартном вводе. Может использоваться, чтобы переставлять строки местами. Например, эта команда меняет в заданных файлах a и b:
shell> replace a b b a -- file1 file2 ...

4.7.2 safe_mysqld, обертка вокруг mysqld

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

Если Вы не используете параметры --mysqld=# или --mysqld-version=#, safe_mysqld использует программу с именем mysqld-max, если она существует. В противном случае safe_mysqld запустит mysqld.

Обычно никогда нельзя редактировать скрипт safe_mysqld, вместо этого надо помещать параметры в раздел [safe_mysqld] в файле my.cnf. Скрипт safe_mysqld будет читать все параметры из секций [mysqld], [server] и [safe_mysqld]. Подробности в разделе "4.1.2 Файл опций my.cnf".

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

Большинство параметров safe_mysqld также представляют собой и параметры для mysqld. Подробности в разделе "4.1.1 Параметры командной строки mysqld".

safe_mysqld поддерживает следующие параметры:

--basedir=path
Относительно этого каталога создаются все подкаталоги.
--core-file-size=#
Размер файла, который mysqld должен быть способен создать. Используйте ulimit -c.
--datadir=path, --defaults-extra-file=path, --defaults-file=path, --err-log=path, --ledir=path, --log=path, --pid-file=path
Служебные пути для mysqld.
--mysqld=mysqld-version
Имя версии mysqld в каталоге ledir.
--mysqld-version=version
Подобно --mysqld=, но здесь Вы даете только суффикс для mysqld. Например, если Вы используете --mysqld-version=max, safe_mysqld запустит версию ledir/mysqld-max. Если параметр --mysqld-version пустой, будет использоваться ledir/mysqld.
--no-defaults
--open-files-limit=#
Число файлов, которые mysqld должен быть способен открыть. Используйте ulimit -n. Обратите внимание, что Вы должны запустить safe_mysqld как root, чтобы это работало правильно!
--port=#
Номер порта для сетевой связи.
--socket=path
Сокет для связи.
--timezone=#
Часовой пояс (из переменной TZ).
--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 из соответствующего ему каталога:

shell> cd mysql_installation_directory
shell> bin/safe_mysqld &

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

4.7.3 mysqld_multi, программа для управления несколькими серверами MySQL

mysqld_multi предполагается для управления несколькими серверами mysqld на разных сокетах UNIX и портах TCP/IP.

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

Usage: mysqld_multi [OPTIONS] {start|stop|report} [GNR,GNR,GNR...]
or     mysqld_multi [OPTIONS] {start|stop|report} [GNR-GNR,GNR,GNR-GNR,...]

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

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

--config-file=...
Альтернативный файл конфигурации. ОБРАТИТЕ ВНИМАНИЕ: Это не будет воздействовать на собственные параметры этой программы (группа [mysqld_multi]), а только на группы [mysqld#]. Без этой опции все будет взято из обычного файла my.cnf.
--example
Вывести пример файла настроек.
--help
Распечатать справку и завершиться.
--log=...
Журнал. Полный путь и имя файла для журнала. ОБРАТИТЕ ВНИМАНИЕ: Если файл существует, все будет конкатенировано к нему.
--mysqladmin=...
mysqladmin (используется для закрытия системы).
--mysqld=...
Где искать mysqld. Обратите внимание, что Вы можете указать здесь и safe_mysqld. Параметры будут переданы mysqld. Только удостоверьтесь, что Вы имеете mysqld в Вашей системной переменной PATH или поправили safe_mysqld.
--no-log
Выводить данные на stdout вместо файла протокола. По умолчанию используется файл протокола.
--password=...
Пароль пользователя для mysqladmin.
--tcp-ip
Соединиться с сервером MySQL через порт TCP/IP вместо сокета UNIX. Это воздействует на остановку и сообщение. Если файл сокета отсутствует, сервер может работать, но можно обращаться только через TCP/IP порт. По умолчанию соединение будет выполнено через сокет UNIX.
--user=...
Пользователь MySQL для mysqladmin.
--version
Вывести номер версии и завершиться.

Некоторые замечания относительно mysqld_multi:

  • Удостоверьтесь, что пользователь MySQL, который останавливает сервер mysqld (то есть, пользуется mysqladmin) имеет тот же самый пароль и логин для всех каталогов данных, к которым обращается. Также надо проверить, что пользователь имеет привилегию Shutdown_priv! Если Вы имеете много данных и много различных баз данных mysql с различными паролями для MySQL-пользователя root, Вы можете создать общего пользователя multi_admin:
    shell> mysql -u root -S /tmp/mysql.sock -proot_password -e
                     "GRANT SHUTDOWN ON *.* TO multi_admin@localhost
                     IDENTIFIED BY 'multipass'"
    
  • pid-file очень важен, если Вы используете safe_mysqld, чтобы запустить mysqld (например, --mysqld=safe_mysqld). Каждый mysqld должен иметь собственный pid-file. Перимущество применения здесь safe_mysqld вместо mysqld в том, что safe_mysqld присматривает за процессом mysqld и перезапустит его в случае падения. Пожалуйста, обратите внимание, что скрипт safe_mysqld может требовать, чтобы Вы запустили его из определенного каталога. Это означает, что Вам, вероятно, придется перейти в заданный каталог прежде, чем Вы запустите оттуда программу mysqld_multi. Если Вы имеете проблемы при старте, смотрите скрипт safe_mysqld. Проверьте строки:
    --------------------------------------------------------------------------
    MY_PWD=`pwd` Check if we are starting this relative (for the binary
    release) if test -d /data/mysql -a -f ./share/mysql/english/errmsg.sys
    -a -x ./bin/mysqld
    --------------------------------------------------------------------------
    
  • Запускайте каждый сервер в своем каталоге данных. Не надо запускать несколько mysqld из одного каталога, они передерутся!
  • Файл сокета и TCP/IP порт должны быть различыми для каждого mysqld.
  • В файле настроек не требуется перечислять все группы последовательно. Там допустимы даже промежутки. Зато mysqld будут обрабатываться в порядке их обнаружения в файле настройки.
  • Когда Вы хотите обратиться к некоторой группе, используя GNR с этой программой, используйте только номер в конце имени группы ([mysqld# <==).
  • Вы можете хотеть использовать опцию --user для mysqld, но чтобы делать это, Вы должны быть root, когда запускаете скрипт mysqld_multi. Наличие опции в файле конфигурации не имеет значение. Вы только получите предупреждение, если Вы не суперпользователь, и mysqld стартует под ВАШИМ логином в UNIX. ВАЖНО: Удостоверьтесь, что каталог данных и pid-файл читаются и пишутся для ЭТОГО пользователя UNIX!
  • ОЧЕНЬ ВАЖНО: Удостоверьтесь, что Вы точно понимаете значения параметров, которые переданы mysqlds, и почему Вы хотите использовать отдельные процессы mysqld. Запуск нескольких серверов в одном каталоге баз данных выигрыша в скорости НЕ ДАСТ НИКОГДА!

Подробности в разделе "4.1.4 Запуск нескольких серверов MySQL на одной системе".

Пример файла конфигурации mysqld_multi.

# This file should probably be in your home dir (~/.my.cnf) or /etc/my.cnf
# Version 2.1 by Jani Tolonen

[mysqld_multi]
mysqld     = /usr/local/bin/safe_mysqld
mysqladmin = /usr/local/bin/mysqladmin
user       = multi_admin
password   = multipass

[mysqld2]
socket     = /tmp/mysql.sock2
port       = 3307
pid-file   = /usr/local/mysql/var2/hostname.pid2
datadir    = /usr/local/mysql/var2
language   = /usr/local/share/mysql/english
user       = john

[mysqld3]
socket     = /tmp/mysql.sock3
port       = 3308
pid-file   = /usr/local/mysql/var3/hostname.pid3
datadir    = /usr/local/mysql/var3
language   = /usr/local/share/mysql/swedish
user       = monty

[mysqld4]
socket     = /tmp/mysql.sock4
port       = 3309
pid-file   = /usr/local/mysql/var4/hostname.pid4
datadir    = /usr/local/mysql/var4
language   = /usr/local/share/mysql/estonia
user       = tonu

[mysqld6]
socket   = /tmp/mysql.sock6
port     = 3311
pid-file = /usr/local/mysql/var6/hostname.pid6
datadir  = /usr/local/mysql/var6
language = /usr/local/share/mysql/japanese
user     = jani

4.7.4 Генератор сжатых таблиц MySQL только для чтения

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

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

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

В настоящее время имеются два ограничения для myisampack:

  • После упаковки таблица доступна только для чтения.
  • myisampack может также упаковывать столбцы BLOB или TEXT. Старая программа pack_isam делать этого, увы, не умеет.

Снятие этих ограничений находится в списке TODO, но с низким приоритетом.

myisampack вызывается примерно так:

shell> myisampack [options] 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, файл `.TMD' не может быть удален. Обычно myisampack завершается с ошибкой, если находит, что файл `tbl_name.TMD' существует. С опцией --force myisampack упаковывает таблицу всегда.
-?, --help
Вывести сообщение справки и завершить работу.
-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
Временная таблица создается в указанном каталоге.
-v, --verbose
Подробный режим. Выдавать всю информацию относительно прогресса и результата упаковки таблицы.
-V, --version
Отобразить версию и завершиться.
-w, --wait
Ждать и повторять, если таблица находится в использовании. Если сервер mysqld вызывался с опцией --skip-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
3     6     4
4     10    1
5     11    20
6     31    1
7     32    30
8     62    35
9     97    35
10    132   35
11    167   4
12    171   16
13    187   35
14    222   4
15    226   16
16    242   20
17    262   20
18    282   20
19    302   30
20    332   4
21    336   4
22    340   1
23    341   8
24    349   8
25    357   8
26    365   2
27    367   2
28    369   4
29    373   4
30    377   1
31    378   2
32    380   8
33    388   4
34    392   4
35    396   4
36    400   4
37    404   1
38    405   4
39    409   4
40    413   4
41    417   4
42    421   4
43    425   4
44    429   20
45    449   30
46    479   1
47    480   1
48    481   79
49    560   79
50    639   79
51    718   79
52    797   8
53    805   1
54    806   1
55    807   20
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
8     62    35     no endspace, not_always, no empty    6     9
9     97    35     no empty                             7     9
10    132   35     no endspace, not_always, no empty    6     9
11    167   4      zerofill(1)                          2     9
12    171   16     no endspace, not_always, no empty    5     9
13    187   35     no endspace, not_always, no empty    6     9
14    222   4      zerofill(1)                          2     9
15    226   16     no endspace, not_always, no empty    5     9
16    242   20     no endspace, not_always              8     9
17    262   20     no endspace, no empty                8     9
18    282   20     no endspace, no empty                5     9
19    302   30     no endspace, no empty                6     9
20    332   4      always zero                          2     9
21    336   4      always zero                          2     9
22    340   1                                           3     9
23    341   8      table-lookup                         9     0
24    349   8      table-lookup                        10     0
25    357   8      always zero                          2     9
26    365   2                                           2     9
27    367   2      no zeros, zerofill(1)                2     9
28    369   4      no zeros, zerofill(1)                2     9
29    373   4      table-lookup                        11     0
30    377   1                                           3     9
31    378   2      no zeros, zerofill(1)                2     9
32    380   8      no zeros                             2     9
33    388   4      always zero                          2     9
34    392   4      table-lookup                        12     0
35    396   4      no zeros, zerofill(1)               13     9
36    400   4      no zeros, zerofill(1)                2     9
37    404   1                                           2     9
38    405   4      no zeros                             2     9
39    409   4      always zero                          2     9
40    413   4      no zeros                             2     9
41    417   4      always zero                          2     9
42    421   4      no zeros                             2     9
43    425   4      always zero                          2     9
44    429   20     no empty                             3     9
45    449   30     no empty                             3     9
46    479   1                                          14     4
47    480   1                                          14     4
48    481   79     no endspace, no empty               15     9
49    560   79     no empty                             2     9
50    639   79     no empty                             2     9
51    718   79     no endspace                         16     9
52    797   8      no empty                             2     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

Информация, напечатанная myisampack, описана ниже:

normal
Число столбцов, для которых дополнительная упаковка не используется.
empty-space
Число столбцов, содержащих значения, которые являются только пробелами, они займут 1 бит.
empty-zero
Число столбцов, содержащих значения, которые являются только двоичными 0, они займут 1 бит.
empty-fill
Число целочисленных столбцов, которые не занимают полный диапазон байта их типа, они изменены на меньший тип (например, столбец INTEGER может быть изменен на MEDIUMINT).
pre-space
Число десятичных столбцов, которые сохранены с ведущими пробелами. В этом случае каждое значение будет содержать счетчик числа ведущих пробелов.
end-space
Число столбцов, которые имеют много конечных пробелов. В этом случае каждое значение будет содержать счетчик числа конечных пробелов.
table-lookup
Столбец имел маленькое число различных значений, которые были преобразованы в ENUM перед сжатием Huffman.
zero
Число столбцов, для которых все значения являются нулевыми.
Original trees
Начальное число деревьев Huffman.
After join
Число отличных деревьев Huffman слева после объединения деревьев, чтобы сохранить некоторое свободное место заголовка.

После того, как таблица была сжата, 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
Huffman-дерево, связанное с полем.
Bits
Число битов, используемых в Huffman-дереве.

После того, как Вы выполнили 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.

4.7.5 mysqld-max, расширенный сервер mysqld

mysqld-max представляет собой сервер MySQL (mysqld), собранный со следующими параметрами конфигурации:

ОпцияКомментарий
--with-server-suffix=-maxДобавлять суффикс к строке версии mysqld.
--with-bdbПоддерживать таблицы Berkeley DB (BDB)
--with-innodbПоддерживать таблицы InnoDB.
CFLAGS=-DUSE_SYMDIRПоддерживать ссылки для Windows.

Вы можете скачать бинарники MySQL-max с координат: http://www.mysql.com/downloads/mysql-max-3.23.html.

Двоичный дистрибутив (не исходники!) Windows MySQL 3.23 включает стандартный mysqld.exe и расширенный mysqld-max.exe. Скачать можно с координат: http://www.mysql.com/downloads/mysql-3.23.html. Подробности в разделе "2.1.2 Установка MySQL в Windows ".

Обратите внимание, что, так как Berkeley DB и InnoDB не доступны для всех платформ, некоторые из двоичных версий Max могут и не иметь поддержку их обоих. Вы можете проверять, какие типы таблицы поддержаны, делая следующий запрос:

mysql> show variables like "have_%";
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| have_bdb      | YES   |
| have_innodb   | NO    |
| have_isam     | YES   |
| have_raid     | NO    |
| have_ssl      | NO    |
+---------------+-------+

Смысл значений:

ЗначениеСмысл.
YESОпция активизирована и пригодна для использования.
NOMySQL не компилируется с поддержкой для этой опции.
DISABLEDОпция xxxx заблокирована, потому что mysqld запущен с опцией --skip-xxxx, или, наоборот, mysqld не получил всех необходимых параметров, чтобы включить поддержку опции. В этом случае файл hostname.err должен содержать причину того, почему опция заблокирована.

ОБРАТИТЕ ВНИМАНИЕ: Чтобы создавать таблицы InnoDB, Вы ДОЛЖНЫ редактировать Ваши параметры запуска, чтобы включить по крайней мере опцию innodb_data_file_path. Подробности в разделе "7.6.2 Опции запуска InnoDB".

Чтобы получать лучшую эффективность для таблиц BDB, Вы также должны добавить некоторые параметры конфигурации для них. Подробности в разделе "7.5.3 Опции запуска BDB".

safe_mysqld автоматически пробует запускать любой двоичный исполняемый модуль mysqld с префиксом -max.

mysqld-max RPM использует вышеупомянутое свойство safe_mysqld. Он только устанавливает выполнимую программу mysqld-max, а safe_mysqld автоматически использует эту выполнимую программу, когда будет перезапущен.

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

СистемаBDB InnoDB
AIX 4.3NY
HP-UX 11.0NY
Linux-AlphaNY
Linux-IntelYY
Linux-Ia64NY
Solaris-IntelNY
Solaris-SparcYY
SCO OSR5YY
Unix WareYY
Windows NTYY

Поиск

 

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