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 !
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 , она не будет проанализирована снова.
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 .
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 , запись немедленно прерывается с сообщением об
ошибке переполнения диска.
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 `%' и `_'.
Вы можете использовать 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_unique | 0, если индекс не может содержать
дубликаты. |
Key_name | Имя индекса. |
Seq_in_index | Номер последовательности столбца в
индексе, начиная с 1 (не с 0!). |
Column_name | Имя столбца. |
Collation | Как столбец сортируется в индексе. В
MySQL это может иметь варианты `A' (по возрастанию) или
NULL (не сортируемый). |
Cardinality | Число уникальных значений в индексе.
Это модифицируется запуском isamchk -a . |
Sub_part | Число индексированных символов, если
столбец только частично индексирован. NULL если весь ключ
индексирован в полном объеме. |
Comment | Различные замечания. Пока это сообщает,
является ли индекс полнотекстовым (FULLTEXT) или нет. |
Обратите внимание, что, поскольку Cardinality будет
рассчитано, основываясь на статистике, сохраненной как целые числа, оно не
обязательно точно для маленьких таблиц.
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 сообщат свободное пространство в ней через
поле комментария таблицы.
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 .
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
Настройка параметров сервера".
SHOW LOGS показывает Вам информацию относительно состояния
существующих журналов. В настоящее время этот вызов отображает только
информацию относительно журналов Berkeley DB.
File показывает полный путь к журналу.
Type показывает тип журнала (BDB для журналов
типа Berkeley DB).
Status показывает состояние журнала (FREE если
файл может быть удален, или IN USE если файл необходим
подсистеме транзакций).
SHOW PROCESSLIST показывает Вам, которые процессы работают.
Вы можете также получать эту информацию, используя команду mysqladmin
processlist . Если Вы имеете привилегию process, Вы
можете видеть все процессы. Иначе Вы можете видеть только Ваши собственные
процессы. Если Вы не используете опцию FULL , то только первые
100 символов каждого запроса будут показаны. Подробности в разделе
"4.5.4 Синтаксис KILL ".
Эта команда очень полезна, если Вы получаете сообщения об ошибках 'too
many connections' и хотите выяснить, что происходит. MySQL резервирует одно
подключение дополнительно для пользователя с привилегией
Process_priv , чтобы гарантировать, что Вы всегда способны ко
входу в систему и ее проверке (эта ситуация не дает такую же привилегию всем
Вашим пользователям).
SHOW GRANTS FOR user вносит в список команды, который должны
быть выданы, чтобы дублировать права пользователя. Например:
mysql> SHOW GRANTS FOR root@localhost;
+---------------------------------------------------------------------+
| Grants for root@localhost |
+---------------------------------------------------------------------+
| GRANT ALL PRIVILEGES ON *.* TO 'root'@'localhost' WITH GRANT OPTION |
+---------------------------------------------------------------------+
Показывает инструкцию 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 ".
Вся клиентура 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 ...
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 , и проблема вернется. Так что зарезервируйте
правильную версию стартового скрипта и восстановите ее после апгрейда.
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
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 .
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 | Опция активизирована и пригодна для использования. |
NO | MySQL не компилируется с поддержкой для этой опции. |
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.3 | N | Y |
HP-UX 11.0 | N | Y |
Linux-Alpha | N | Y |
Linux-Intel | Y | Y |
Linux-Ia64 | N | Y |
Solaris-Intel | N | Y |
Solaris-Sparc | Y | Y |
SCO OSR5 | Y | Y |
Unix Ware | Y | Y |
Windows NT | Y | Y |
|
|