Глава 6. Администрирование сервера MySQL

MySQL Server (mysqld ) является основной программой, которая делает большую часть работы в MySQL. Эта глава обеспечивает краткий обзор сервера MySQL и касается общего администрирования сервера:

Для дополнительной информации об административных темах см. также:

6.1. MySQL Server

mysqld это сервер MySQL. Следующее обсуждение затрагивает эти темы конфигурации сервера MySQL:

Для списков переменных сервера MySQL и опций, которые были добавлены, устарели или удалены в MySQL 8.0 см. раздел 1.5.

Не все механизмы хранения поддержаны всеми сборками сервера MySQL и конфигурациями. Чтобы узнать, как определить, которые механизмы хранения Ваш сервер MySQL поддерживает, см. раздел 14.7.5.16.

6.1.1. Конфигурирование сервера

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

shell> mysqld --verbose --help

Команда производит список всех опций и конфигурируемых системных переменных mysqld . Его вывод включает значения опций и переменных по умолчанию и выглядит примерно так:

abort-slave-event-count 0
allow-suspicious-udfs FALSE
archive   ON
auto-increment-increment1
auto-increment-offset 1
autocommitTRUE
automatic-sp-privileges TRUE
avoid-temporal-upgradeFALSE
back-log  80
basedir   /home/jon/bin/mysql-8.0/
...
tmpdir/tmp
transaction-alloc-block-size8192
transaction-isolation REPEATABLE-READ
transaction-prealloc-size 4096
transaction-read-only FALSE
transaction-write-set-extraction  OFF
updatable-views-with-limitYES
validate-user-plugins TRUE
verbose   TRUE
wait-timeout28800

Чтобы видеть значения переменной существующей системы, используемые сервером при работе, соединитесь с ним и выполните этот запрос:

mysql> SHOW VARIABLES;

Чтобы видеть некоторую статистистику и индикаторы состояния для рабочего сервера, выполните этот запрос:

mysql> SHOW STATUS;

Система переменная и информация о статусе также является доступной через mysqladmin :

shell> mysqladmin variables
shell> mysqladmin extended-status

Для полного описания всех опций, команд, системных переменных и переменных состояния см. эти разделы:

Более подробная информация о контроле доступна из Performance Schema, см. главу 23.

Если Вы определяете опцию в командной строке для mysqld или mysqld_safe , это остается в силе только для этого вызова сервера. Чтобы использовать опцию каждый раз выполнения сервера, поместите ее в файл опции. См. раздел 5.2.6.

6.1.2. Значения по умолчанию конфигурации сервера

Сервер MySQL имеет много операционных параметров, которые Вы можете изменить при запуске сервера, используя параметры командной строки или конфигурационные файлы (файлы опции). Также возможно изменить много параметров во время выполнения. Для общих инструкций по устаноке параметров при запуске или во время выполнения см. разделы 6.1.4 и 6.1.5.

В Windows MySQL Installer взаимодействует с пользователем и создает файл my.ini в основном каталоге установки как файл опции по умолчанию. Если Вы устанавливаете в Windows из архива Zip, Вы можете скопировать файл шаблона my-default.ini в основном каталоге установки в my.ini и использовать его в качестве файла опций по умолчанию.

В Windows расширение файла опции .ini или .cnf может не отображаться.

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

Для дополнительной информации о формате файла опции и синтаксисе см. раздел 5.2.6.

6.1.3. Параметры и переменные сервера

Следующая таблица обеспечивает список всех параметров командной строки сервера и переменных состояния, применимых в пределах mysqld.

Таблица приводит параметры командной строки (Cmd-line), опции, допустимые в конфигурационных файлах (файл опций), системные переменные сервера и переменные состояния в одном объединенном списке с уведомлением о том, где каждая опция/переменная допустима. Если набор параметра сервера на командной строке или в файле опции отличается от названия соответствующей системы сервера или переменной состояния, имя переменной отмечено немедленно ниже соответствующей опции. Для переменных состояния показывают контекст (область действия) переменной. Пожалуйста, изучите соответствующие разделы для деталей об установке и использовании опций и переменных. Где надо, есть прямая ссылка к дополнительной информации об элементе.

Таблица 6.1. Опции и переменные

Имя Командная строкаФайл опций Системная?Статусная (состояния)? Область действияДинамическая?
abort-slave-event-countДаДа
Aborted_clients Да ГлобальнаяНет
Aborted_connects Да ГлобальнаяНет
Acl_cache_items_count Да ГлобальнаяНет
allow-suspicious-udfsДаДа
ansi ДаДа
auto_generate_certsДаДаДа ГлобальнаяНет
auto_increment_increment Да ОбеДа
auto_increment_offset Да ОбеДа
autocommit ДаДаДа ОбеДа
automatic_sp_privileges Да ГлобальнаяДа
avoid_temporal_upgradeДаДаДа ГлобальнаяДа
back_log Да ГлобальнаяНет
basedir ДаДаДа ГлобальнаяНет
big-tables ДаДа Обе Да
- Переменные: big_tables Да ОбеДа
bind-addressДаДа ГлобальнаяНет
- Переменные: bind_address Да ГлобальнаяНет
Binlog_cache_disk_use Да ГлобальнаяНет
binlog_cache_sizeДаДаДа ГлобальнаяДа
Binlog_cache_use Да ГлобальнаяНет
binlog-checksumДаДа
binlog_checksum Да ГлобальнаяДа
binlog_direct_non_transactional_updatesДаДа Да ОбеДа
binlog-do-dbДаДа
binlog_error_actionДаДаДа ОбеДа
binlog-formatДаДа Обе Да
- Переменная: binlog_format Да ОбеДа
binlog_group_commit_sync_delayДаДа Да ГлобальнаяДа
binlog_group_commit_sync_no_delay_countДаДа Да ГлобальнаяДа
binlog_gtid_simple_recoveryДаДаДа ГлобальнаяНет
binlog-ignore-dbДаДа
binlog_max_flush_queue_time Да ГлобальнаяДа
binlog_order_commits Да ГлобальнаяДа
binlog-row-event-max-sizeДаДа
binlog_row_imageДаДаДа ОбеДа
binlog-rows-query-log-eventsДаДа
- Переменная: binlog_rows_query_log_events
binlog_rows_query_log_events Да ОбеДа
Binlog_stmt_cache_disk_use Да ГлобальнаяНет
binlog_stmt_cache_sizeДаДаДа ГлобальнаяДа
Binlog_stmt_cache_use Да ГлобальнаяНет
binlogging_impossible_modeДаДаДа ОбеДа
block_encryption_modeДаДаДа ОбеДа
bulk_insert_buffer_sizeДаДаДа ОбеДа
Bytes_received ДаОбе Нет
Bytes_sent ДаОбе Нет
character_set_client Да ОбеДа
character-set-client-handshakeДаДа
character_set_connection Да ОбеДа
character_set_database [a] Да ОбеДа
character-set-filesystemДаДа ОбеДа
- Переменная: character_set_filesystem Да ОбеДа
character_set_results Да ОбеДа
character-set-server ДаДа Обе Да
- Переменная: character_set_server Да ОбеДа
character_set_system Да Глобальная Нет
character-sets-dir ДаДа Глобальная Нет
- Переменная: character_sets_dir Да ГлобальнаяНет
check_proxy_users ДаДаДа ГлобальнаяДа
chrootДа Да
collation_connection Да ОбеДа
collation_database [b] Да ОбеДа
collation-server ДаДа ОбеДа
- Переменная: collation_server Да ОбеДа
Com_admin_commands ДаОбеНет
Com_alter_db Да Обе Нет
Com_alter_event Да Обе Нет
Com_alter_function Да Обе Нет
Com_alter_procedure Да Обе Нет
Com_alter_server Да Обе Нет
Com_alter_table Да Обе Нет
Com_alter_tablespace Да Обе Нет
Com_alter_user Да Обе Нет
Com_alter_user_default_role Да Глобальная Нет
Com_analyze Да Обе Нет
Com_assign_to_keycache Да Обе Нет
Com_begin Да Обе Нет
Com_binlog Да Обе Нет
Com_call_procedure Да Обе Нет
Com_change_db Да Обе Нет
Com_change_master Да Обе Нет
Com_change_repl_filter Да Обе Нет
Com_check Да Обе Нет
Com_checksum Да Обе Нет
Com_commit Да Обе Нет
Com_create_db Да Обе Нет
Com_create_event Да Обе Нет
Com_create_function Да Обе Нет
Com_create_index Да Обе Нет
Com_create_procedure Да Обе Нет
Com_create_role Да Глобальная Нет
Com_create_server Да Обе Нет
Com_create_table Да Обе Нет
Com_create_trigger Да Обе Нет
Com_create_udf Да Обе Нет
Com_create_user Да Обе Нет
Com_create_view Да Обе Нет
Com_dealloc_sql Да Обе Нет
Com_delete Да Обе Нет
Com_delete_multi Да Обе Нет
Com_do Да Обе Нет
Com_drop_db Да Обе Нет
Com_drop_event Да Обе Нет
Com_drop_function Да Обе Нет
Com_drop_index Да Обе Нет
Com_drop_procedure Да Обе Нет
Com_drop_role Да Глобальная Нет
Com_drop_server Да Обе Нет
Com_drop_table Да Обе Нет
Com_drop_trigger Да Обе Нет
Com_drop_user Да Обе Нет
Com_drop_view Да Обе Нет
Com_empty_query Да Обе Нет
Com_execute_sql Да Обе Нет
Com_explain_other Да Обе Нет
Com_flush Да Обе Нет
Com_get_diagnostics Да Обе Нет
Com_grant Да Обе Нет
Com_grant_roles Да Глобальная Нет
Com_ha_close Да Обе Нет
Com_ha_open Да Обе Нет
Com_ha_read Да Обе Нет
Com_help Да Обе Нет
Com_insert Да Обе Нет
Com_insert_select Да Обе Нет
Com_install_component Да Глобальная Нет
Com_install_plugin Да Обе Нет
Com_kill Да Обе Нет
Com_load Да Обе Нет
Com_lock_tables Да Обе Нет
Com_optimize Да Обе Нет
Com_preload_keys Да Обе Нет
Com_prepare_sql Да Обе Нет
Com_purge Да Обе Нет
Com_purge_before_date Да Обе Нет
Com_release_savepoint Да Обе Нет
Com_rename_table Да Обе Нет
Com_rename_user Да Обе Нет
Com_repair Да Обе Нет
Com_replace Да Обе Нет
Com_replace_select Да Обе Нет
Com_reset Да Обе Нет
Com_resignal Да Обе Нет
Com_revoke Да Обе Нет
Com_revoke_all Да Обе Нет
Com_revoke_roles Да Глобальная Нет
Com_rollback Да Обе Нет
Com_rollback_to_savepoint Да Обе Нет
Com_savepoint Да Обе Нет
Com_select Да Обе Нет
Com_set_option Да Обе Нет
Com_set_role Да Глобальная Нет
Com_show_authors Да Обе Нет
Com_show_binlog_events Да Обе Нет
Com_show_binlogs Да Обе Нет
Com_show_charsets Да Обе Нет
Com_show_collations Да Обе Нет
Com_show_contributors Да Обе Нет
Com_show_create_db Да Обе Нет
Com_show_create_event Да Обе Нет
Com_show_create_func Да Обе Нет
Com_show_create_proc Да Обе Нет
Com_show_create_table Да Обе Нет
Com_show_create_trigger Да Обе Нет
Com_show_create_user Да Обе Нет
Com_show_databases Да Обе Нет
Com_show_engine_logs Да Обе Нет
Com_show_engine_mutex Да Обе Нет
Com_show_engine_status Да Обе Нет
Com_show_errors Да Обе Нет
Com_show_events Да Обе Нет
Com_show_fields Да Обе Нет
Com_show_function_code Да Обе Нет
Com_show_function_status Да Обе Нет
Com_show_grants Да Обе Нет
Com_show_keys Да Обе Нет
Com_show_master_status Да Обе Нет
Com_show_ndb_status Да Обе Нет
Com_show_new_master Да Обе Нет
Com_show_open_tables Да Обе Нет
Com_show_plugins Да Обе Нет
Com_show_privileges Да Обе Нет
Com_show_procedure_code Да Обе Нет
Com_show_procedure_status Да Обе Нет
Com_show_processlist Да Обе Нет
Com_show_profile Да Обе Нет
Com_show_profiles Да Обе Нет
Com_show_relaylog_events Да Обе Нет
Com_show_slave_hosts Да Обе Нет
Com_show_slave_status Да Обе Нет
Com_show_slave_status_nonblocking Да Обе Нет
Com_show_status Да Обе Нет
Com_show_storage_engines Да Обе Нет
Com_show_table_status Да Обе Нет
Com_show_tables Да Обе Нет
Com_show_triggers Да Обе Нет
Com_show_variables Да Обе Нет
Com_show_warnings Да Обе Нет
Com_shutdown Да Обе Нет
Com_signal Да Обе Нет
Com_slave_start Да Обе Нет
Com_slave_stop Да Обе Нет
Com_stmt_close Да Обе Нет
Com_stmt_execute Да Обе Нет
Com_stmt_fetch Да Обе Нет
Com_stmt_prepare Да Обе Нет
Com_stmt_reprepare Да Обе Нет
Com_stmt_reset Да Обе Нет
Com_stmt_send_long_data Да Обе Нет
Com_truncate Да Обе Нет
Com_uninstall_component Да Глобальная Нет
Com_uninstall_plugin Да Обе Нет
Com_unlock_tables Да Обе Нет
Com_update Да Обе Нет
Com_update_multi Да Обе Нет
Com_xa_commit Да Обе Нет
Com_xa_end Да Обе Нет
Com_xa_prepare Да Обе Нет
Com_xa_recover Да Обе Нет
Com_xa_rollback Да Обе Нет
Com_xa_start Да Обе Нет
completion_type Да Да Да Обе Да
Compression Да Сессия Нет
concurrent_insert Да Да Да Глобальная Да
connect_timeout Да Да Да Глобальная Да
Connection_errors_accept Да Глобальная Нет
Connection_errors_internal Да Глобальная Нет
Connection_errors_max_connections Да Глобальная Нет
Connection_errors_peer_addr Да Глобальная Нет
Connection_errors_select Да Глобальная Нет
Connection_errors_tcpwrap Да Глобальная Нет
Connections Да Глобальная Нет
console Да Да
core-file Да Да
core_file Да Глобальная Нет
Created_tmp_disk_tables Да Обе Нет
Created_tmp_files Да Глобальная Нет
Created_tmp_tables Да Обе Нет
daemon_memcached_enable_binlog Да Да Да Глобальная Нет
daemon_memcached_engine_lib_name Да Да Да Глобальная Нет
daemon_memcached_engine_lib_path Да Да Да Глобальная Нет
daemon_memcached_option Да Да Да Глобальная Нет
daemon_memcached_r_batch_size Да Да Да Глобальная Нет
daemon_memcached_w_batch_size Да Да Да Глобальная Нет
daemonize Да Да
datadir Да Да Да Глобальная Нет
date_format Да Глобальная Нет
datetime_format Да Глобальная Нет
debug Да Да Да Обе Да
debug_sync Да Сессия Да
debug-sync-timeout Да Да
default_authentication_plugin Да Да Да Глобальная Нет
default_password_lifetime Да Да Да Глобальная Да
default-storage-engine Да Да Обе Да
- Переменная: default_storage_engine Да Обе Да
default-time-zone Да Да
default_tmp_storage_engine Да Да Да Обе Да
default_week_format Да Да Да Обе Да
defaults-extra-file Да
defaults-file Да
defaults-group-suffix Да
delay-key-write Да Да Глобальная Да
- Переменная: delay_key_write Да Глобальная Да
Delayed_errors Да Глобальная Нет
delayed_insert_limit Да Да Да Глобальная Да
Delayed_insert_threads Да Глобальная Нет
delayed_insert_timeout Да Да Да Глобальная Да
delayed_queue_size Да Да Да Глобальная Да
Delayed_writes Да Глобальная Нет
des-key-file Да Да
disabled_storage_engines Да Да Да Глобальная Нет
disconnect_on_expired_password Да Да Да Сессия Нет
disconnect-slave-event-count Да Да
div_precision_increment Да Да Да Обе Да
early-plugin-load Да Да
enable-named-pipe Да Да
- Переменная: named_pipe
end_markers_in_json Да Обе Да
enforce-gtid-consistency Да Да Да Глобальная Да
enforce_gtid_consistency Да Да Да Глобальная Да
eq_range_index_dive_limit Да Обе Да
error_count Да Сессия Нет
event-scheduler Да Да Глобальная Да
- Переменная: event_scheduler Да Глобальная Да
executed-gtids-compression-period Да Да
- Переменная: executed_gtids_compression_period
executed_gtids_compression_period Да Глобальная Да
exit-info Да Да
expire_logs_days Да Да Да Глобальная Да
explicit_defaults_for_timestamp Да Да Да Обе Нет
external-locking Да Да
- Переменная: skip_external_locking
external_user Да Сессия Нет
federated Да Да
flush Да Да Да Глобальная Да
Flush_commands Да Глобальная Нет
flush_time Да Да Да Глобальная Да
foreign_key_checks Да Обе Да
ft_boolean_syntax Да Да Да Глобальная Да
ft_max_word_len Да Да Да Глобальная Нет
ft_min_word_len Да Да Да Глобальная Нет
ft_query_expansion_limit Да Да Да Глобальная Нет
ft_stopword_file Да Да Да Глобальная Нет
gdb Да Да
general-log Да Да Глобальная Да
- Переменная: general_log Да Глобальная Да
general_log_file Да Да Да Глобальная Да
group_concat_max_len Да Да Да Обе Да
gtid_executed Да Varies Нет
gtid-executed-compression-period Да Да
- Переменная: gtid_executed_compression_period
gtid_executed_compression_period Да Глобальная Да
gtid-mode Да Да Глобальная Да
- Переменная: gtid_mode Да Глобальная Да
gtid_mode Да Глобальная Да
gtid_next Да Сессия Да
gtid_owned Да Обе Нет
gtid_purged Да Глобальная Да
Handler_commit Да Обе Нет
Handler_delete Да Обе Нет
Handler_external_lock Да Обе Нет
Handler_mrr_init Да Обе Нет
Handler_prepare Да Обе Нет
Handler_read_first Да Обе Нет
Handler_read_key Да Обе Нет
Handler_read_last Да Обе Нет
Handler_read_next Да Обе Нет
Handler_read_prev Да Обе Нет
Handler_read_rnd Да Обе Нет
Handler_read_rnd_next Да Обе Нет
Handler_rollback Да Обе Нет
Handler_savepoint Да Обе Нет
Handler_savepoint_rollback Да Обе Нет
Handler_update Да Обе Нет
Handler_write Да Обе Нет
have_compress Да Глобальная Нет
have_crypt Да Глобальная Нет
have_dynamic_loading Да Глобальная Нет
have_geometry Да Глобальная Нет
have_openssl Да Глобальная Нет
have_profiling Да Глобальная Нет
have_query_cache Да Глобальная Нет
have_rtree_keys Да Глобальная Нет
have_ssl Да Глобальная Нет
have_statement_timeout Да Глобальная Нет
have_symlink Да Глобальная Нет
help Да Да
host_cache_size Да Глобальная Да
hostname Да Глобальная Нет
identity Да Сессия Да
ignore-builtin-innodb Да Да Глобальная Нет
- Переменная: ignore_builtin_innodb Да Глобальная Нет
information_schema_stats Да Да Да Обе Да
init_connect Да Да Да Глобальная Да
init-file Да Да Глобальная Нет
- Переменная: init_file Да Глобальная Нет
init_slave Да Да Да Глобальная Да
initialize Да Да
initialize-insecure Да Да
innodb Да Да
innodb_adaptive_flushing Да Да Да Глобальная Да
innodb_adaptive_flushing_lwm Да Да Да Глобальная Да
innodb_adaptive_hash_index Да Да Да Глобальная Да
innodb_adaptive_hash_index_parts Да Да Да Глобальная Нет
innodb_adaptive_max_sleep_delay Да Да Да Глобальная Да
innodb_api_bk_commit_interval Да Да Да Глобальная Да
innodb_api_disable_rowlock Да Да Да Глобальная Нет
innodb_api_enable_binlog Да Да Да Глобальная Нет
innodb_api_enable_mdl Да Да Да Глобальная Нет
innodb_api_trx_level Да Да Да Глобальная Да
innodb_autoextend_increment Да Да Да Глобальная Да
innodb_autoinc_lock_mode Да Да Да Глобальная Нет
Innodb_available_undo_logs Да Глобальная Нет
innodb_background_drop_list_empty Да Да Да Глобальная Да
Innodb_buffer_pool_bytes_data Да Глобальная Нет
Innodb_buffer_pool_bytes_dirty Да Глобальная Нет
innodb_buffer_pool_chunk_size Да Да Да Глобальная Нет
innodb_buffer_pool_debug Да Да Да Глобальная Нет
innodb_buffer_pool_dump_at_shutdown Да Да Да Глобальная Да
innodb_buffer_pool_dump_now Да Да Да Глобальная Да
innodb_buffer_pool_dump_pct Да Да Да Глобальная Да
Innodb_buffer_pool_dump_status Да Глобальная Нет
innodb_buffer_pool_filename Да Да Да Глобальная Да
innodb_buffer_pool_instances Да Да Да Глобальная Нет
innodb_buffer_pool_load_abort Да Да Да Глобальная Да
innodb_buffer_pool_load_at_startup Да Да Да Глобальная Нет
innodb_buffer_pool_load_now Да Да Да Глобальная Да
Innodb_buffer_pool_load_status Да Глобальная Нет
Innodb_buffer_pool_pages_data Да Глобальная Нет
Innodb_buffer_pool_pages_dirty Да Глобальная Нет
Innodb_buffer_pool_pages_flushed Да Глобальная Нет
Innodb_buffer_pool_pages_free Да Глобальная Нет
Innodb_buffer_pool_pages_latched Да Глобальная Нет
Innodb_buffer_pool_pages_misc Да Глобальная Нет
Innodb_buffer_pool_pages_total Да Глобальная Нет
Innodb_buffer_pool_read_ahead Да Глобальная Нет
Innodb_buffer_pool_read_ahead_evicted Да Глобальная Нет
Innodb_buffer_pool_read_ahead_rnd Да Глобальная Нет
Innodb_buffer_pool_read_requests Да Глобальная Нет
Innodb_buffer_pool_reads Да Глобальная Нет
Innodb_buffer_pool_resize_status Да Глобальная Нет
innodb_buffer_pool_size Да Да Да Глобальная Да
Innodb_buffer_pool_wait_free Да Глобальная Нет
Innodb_buffer_pool_write_requests Да Глобальная Нет
innodb_change_buffer_max_size Да Да Да Глобальная Да
innodb_change_buffering Да Да Да Глобальная Да
innodb_change_buffering_debug Да Да Да Глобальная Да
innodb_checksum_algorithm Да Да Да Глобальная Да
innodb_cmp_per_index_enabled Да Да Да Глобальная Да
innodb_commit_concurrency Да Да Да Глобальная Да
innodb_compress_debug Да Да Да Глобальная Да
innodb_compression_failure_threshold_pct Да Да Да Глобальная Да
innodb_compression_level Да Да Да Глобальная Да
innodb_compression_pad_pct_max Да Да Да Глобальная Да
innodb_concurrency_tickets Да Да Да Глобальная Да
innodb_data_file_path Да Да Да Глобальная Нет
Innodb_data_fsyncs Да Глобальная Нет
innodb_data_home_dir Да Да Да Глобальная Нет
Innodb_data_pending_fsyncs Да Глобальная Нет
Innodb_data_pending_reads Да Глобальная Нет
Innodb_data_pending_writes Да Глобальная Нет
Innodb_data_read Да Глобальная Нет
Innodb_data_reads Да Глобальная Нет
Innodb_data_writes Да Глобальная Нет
Innodb_data_written Да Глобальная Нет
Innodb_dblwr_pages_written Да Глобальная Нет
Innodb_dblwr_writes Да Глобальная Нет
innodb_deadlock_detect Да Да Да Глобальная Да
innodb_default_row_format Да Да Да Глобальная Да
innodb_disable_sort_file_cache Да Да Да Глобальная Да
innodb_doublewrite Да Да Да Глобальная Нет
innodb_fast_shutdown Да Да Да Глобальная Да
innodb_fil_make_page_dirty_debug Да Да Да Глобальная Да
innodb_file_per_table Да Да Да Глобальная Да
innodb_fill_factor Да Да Да Глобальная Да
innodb_flush_log_at_timeout Да Глобальная Да
innodb_flush_log_at_trx_commit Да Да Да Глобальная Да
innodb_flush_method Да Да Да Глобальная Нет
innodb_flush_neighbors Да Да Да Глобальная Да
innodb_flush_sync Да Да Да Глобальная Да
innodb_flushing_avg_loops Да Да Да Глобальная Да
innodb_force_load_corrupted Да Да Да Глобальная Нет
innodb_force_recovery Да Да Да Глобальная Нет
innodb_ft_aux_table Да Да Да Глобальная Да
innodb_ft_cache_size Да Да Да Глобальная Нет
innodb_ft_enable_diag_print Да Да Да Глобальная Да
innodb_ft_enable_stopword Да Да Да Глобальная Да
innodb_ft_max_token_size Да Да Да Глобальная Нет
innodb_ft_min_token_size Да Да Да Глобальная Нет
innodb_ft_num_word_optimize Да Да Да Глобальная Да
innodb_ft_result_cache_limit Да Да Да Глобальная Да
innodb_ft_server_stopword_table Да Да Да Глобальная Да
innodb_ft_sort_pll_degree Да Да Да Глобальная Нет
innodb_ft_total_cache_size Да Да Да Глобальная Нет
innodb_ft_user_stopword_table Да Да Да Обе Да
Innodb_have_atomic_builtins Да Глобальная Нет
innodb_io_capacity Да Да Да Глобальная Да
innodb_io_capacity_max Да Да Да Глобальная Да
innodb_limit_optimistic_insert_debug Да Да Да Глобальная Да
innodb_lock_wait_timeout Да Да Да Обе Да
innodb_log_buffer_size Да Да Да Глобальная Нет
innodb_log_checksums Да Да Да Глобальная Да
innodb_log_compressed_pages Да Да Да Глобальная Да
innodb_log_file_size Да Да Да Глобальная Нет
innodb_log_files_in_group Да Да Да Глобальная Нет
innodb_log_group_home_dir Да Да Да Глобальная Нет
Innodb_log_waits Да Глобальная Нет
innodb_log_write_ahead_size Да Да Да Глобальная Да
Innodb_log_write_requests Да Глобальная Нет
Innodb_log_writes Да Глобальная Нет
innodb_lru_scan_depth Да Да Да Глобальная Да
innodb_max_dirty_pages_pct Да Да Да Глобальная Да
innodb_max_dirty_pages_pct_lwm Да Да Да Глобальная Да
innodb_max_purge_lag Да Да Да Глобальная Да
innodb_max_purge_lag_delay Да Да Да Глобальная Да
innodb_max_undo_log_size Да Да Да Глобальная Да
innodb_merge_threshold_set_all_debug Да Да Да Глобальная Да
innodb_monitor_disable Да Да Да Глобальная Да
innodb_monitor_enable Да Да Да Глобальная Да
innodb_monitor_reset Да Да Да Глобальная Да
innodb_monitor_reset_all Да Да Да Глобальная Да
Innodb_num_open_files Да Глобальная Нет
innodb_numa_interleave Да Да Да Глобальная Нет
innodb_old_blocks_pct Да Да Да Глобальная Да
innodb_old_blocks_time Да Да Да Глобальная Да
innodb_online_alter_log_max_size Да Да Да Глобальная Да
innodb_open_files Да Да Да Глобальная Нет
innodb_optimize_fulltext_only Да Да Да Глобальная Да
Innodb_os_log_fsyncs Да Глобальная Нет
Innodb_os_log_pending_fsyncs Да Глобальная Нет
Innodb_os_log_pending_writes Да Глобальная Нет
Innodb_os_log_written Да Глобальная Нет
innodb_page_cleaners Да Да Да Глобальная Нет
Innodb_page_size Да Глобальная Нет
innodb_page_size Да Да Да Глобальная Нет
Innodb_pages_created Да Глобальная Нет
Innodb_pages_read Да Глобальная Нет
Innodb_pages_written Да Глобальная Нет
innodb_print_all_deadlocks Да Да Да Глобальная Да
innodb_purge_batch_size Да Да Да Глобальная Да
innodb_purge_rseg_truncate_frequency Да Да Да Глобальная Да
innodb_purge_threads Да Да Да Глобальная Нет
innodb_random_read_ahead Да Да Да Глобальная Да
innodb_read_ahead_threshold Да Да Да Глобальная Да
innodb_read_io_threads Да Да Да Глобальная Нет
innodb_read_only Да Да Да Глобальная Нет
innodb_replication_delay Да Да Да Глобальная Да
innodb_rollback_on_timeout Да Да Да Глобальная Нет
innodb_rollback_segments Да Да Да Глобальная Да
Innodb_row_lock_current_waits Да Глобальная Нет
Innodb_row_lock_time Да Глобальная Нет
Innodb_row_lock_time_avg Да Глобальная Нет
Innodb_row_lock_time_max Да Глобальная Нет
Innodb_row_lock_waits Да Глобальная Нет
Innodb_rows_deleted Да Глобальная Нет
Innodb_rows_inserted Да Глобальная Нет
Innodb_rows_read Да Глобальная Нет
Innodb_rows_updated Да Глобальная Нет
innodb_saved_page_number_debug Да Да Да Глобальная Да
innodb_sort_buffer_size Да Да Да Глобальная Нет
innodb_spin_wait_delay Да Да Да Глобальная Да
innodb_stats_auto_recalc Да Да Да Глобальная Да
innodb_stats_include_delete_marked Да Да Да Глобальная Да
innodb_stats_method Да Да Да Глобальная Да
innodb_stats_on_metadata Да Да Да Глобальная Да
innodb_stats_persistent Да Да Да Глобальная Да
innodb_stats_persistent_sample_pages Да Да Да Глобальная Да
innodb_stats_transient_sample_pages Да Да Да Глобальная Да
innodb-status-file Да Да
innodb_status_output Да Да Да Глобальная Да
innodb_status_output_locks Да Да Да Глобальная Да
innodb_strict_mode Да Да Да Обе Да
innodb_sync_array_size Да Да Да Глобальная Нет
innodb_sync_debug Да Да Да Глобальная Нет
innodb_sync_spin_loops Да Да Да Глобальная Да
innodb_table_locks Да Да Да Обе Да
innodb_temp_data_file_path Да Да Да Глобальная Нет
innodb_thread_concurrency Да Да Да Глобальная Да
innodb_thread_sleep_delay Да Да Да Глобальная Да
innodb_tmpdir Да Да Да Обе Да
Innodb_truncated_status_writes Да Глобальная Нет
innodb_trx_purge_view_update_only_debug Да Да Да Глобальная Да
innodb_trx_rseg_n_slots_debug Да Да Да Глобальная Да
innodb_undo_directory Да Да Да Глобальная Нет
innodb_undo_log_truncate Да Да Да Глобальная Да
innodb_undo_logs Да Да Да Глобальная Да
innodb_undo_tablespaces Да Да Да Глобальная Нет
innodb_use_native_aio Да Да Да Глобальная Нет
innodb_version Да Глобальная Нет
innodb_write_io_threads Да Да Да Глобальная Нет
insert_id Да Сессия Да
install Да
install-manual Да
interactive_timeout Да Да Да Обе Да
internal_tmp_disk_storage_engine Да Да Да Глобальная Да
join_buffer_size Да Да Да Обе Да
keep_files_on_create Да Да Да Обе Да
Key_blocks_not_flushed Да Глобальная Нет
Key_blocks_unused Да Глобальная Нет
Key_blocks_used Да Глобальная Нет
key_buffer_size Да Да Да Глобальная Да
key_cache_age_threshold Да Да Да Глобальная Да
key_cache_block_size Да Да Да Глобальная Да
key_cache_division_limit Да Да Да Глобальная Да
Key_read_requests Да Глобальная Нет
Key_reads Да Глобальная Нет
Key_write_requests Да Глобальная Нет
Key_writes Да Глобальная Нет
keyring_file_data Да Да Да Глобальная Да
language Да Да Да Глобальная Нет
large_files_support Да Глобальная Нет
large_page_size Да Глобальная Нет
large-pages Да Да Глобальная Нет
- Переменная: large_pages Да Глобальная Нет
last_insert_id Да Сессия Да
Last_query_cost Да Сессия Нет
Last_query_partial_plans Да Сессия Нет
lc-messages Да Да Обе Да
- Переменная: lc_messages Да Обе Да
lc-messages-dir Да Да Глобальная Нет
- Переменная: lc_messages_dir Да Глобальная Нет
lc_time_names Да Обе Да
license Да Глобальная Нет
local_infile Да Глобальная Да
local-service Да
lock_wait_timeout Да Да Да Обе Да
Locked_connects Да Глобальная Нет
locked_in_memory Да Глобальная Нет
log-bin Да Да Да Глобальная Нет
log_bin Да Глобальная Нет
log_bin_basename Да Глобальная Нет
log-bin-index Да Да
log_bin_index Да Глобальная Нет
log-bin-trust-function-creators Да Да Глобальная Да
- Переменная: log_bin_trust_function_creators Да Глобальная Да
log-bin-use-v1-row-events Да Да Глобальная Нет
- Переменная: log_bin_use_v1_row_events Да Глобальная Нет
log_bin_use_v1_row_events Да Да Да Глобальная Нет
log_builtin_as_identified_by_password Да Да Да Глобальная Да
log-error Да Да Глобальная Нет
- Переменная: log_error Да Глобальная Нет
log_error_verbosity Да Да Да Глобальная Да
log-isam Да Да
log-output Да Да Глобальная Да
- Переменная: log_output Да Глобальная Да
log-queries-not-using-indexes Да Да Глобальная Да
- Переменная: log_queries_not_using_indexes Да Глобальная Да
log-raw Да Да
log-short-format Да Да
log-slave-updates Да Да Глобальная Нет
- Переменная: log_slave_updates Да Глобальная Нет
log_slave_updates Да Да Да Глобальная Нет
log_slow_admin_statements Да Глобальная Да
log_slow_slave_statements Да Глобальная Да
log_statements_unsafe_for_binlog Да Глобальная Да
log_syslog Да Да Да Глобальная Да
log_syslog_facility Да Да Да Глобальная Да
log_syslog_include_pid Да Да Да Глобальная Да
log_syslog_tag Да Да Да Глобальная Да
log-tc Да Да
log-tc-size Да Да
log_throttle_queries_not_using_indexes Да Глобальная Да
log_timestamps Да Да Да Глобальная Да
log-warnings Да Да Глобальная Да
- Переменная: log_warnings Да Глобальная Да
long_query_time Да Да Да Обе Да
low-priority-updates Да Да Обе Да
- Переменная: low_priority_updates Да Обе Да
lower_case_file_system Да Глобальная Нет
lower_case_table_names Да Да Да Глобальная Нет
master-info-file Да Да
master-info-repository Да Да
- Переменная: master_info_repository
master_info_repository Да Да Да Глобальная Да
master-retry-count Да Да
master-verify-checksum Да Да
- Переменная: master_verify_checksum
master_verify_checksum Да Глобальная Да
max_allowed_packet Да Да Да Обе Да
max_binlog_cache_size Да Да Да Глобальная Да
max-binlog-dump-events Да Да
max_binlog_size Да Да Да Глобальная Да
max_binlog_stmt_cache_size Да Да Да Глобальная Да
max_connect_errors Да Да Да Глобальная Да
max_connections Да Да Да Глобальная Да
max_delayed_threads Да Да Да Обе Да
max_digest_length Да Да Да Глобальная Нет
max_error_count Да Да Да Обе Да
max_execution_time Да Да Да Обе Да
Max_execution_time_exceeded Да Обе Нет
Max_execution_time_set Да Обе Нет
Max_execution_time_set_failed Да Обе Нет
max_heap_table_size Да Да Да Обе Да
max_insert_delayed_threads Да Обе Да
max_join_size Да Да Да Обе Да
max_length_for_sort_data Да Да Да Обе Да
max_points_in_geometry Да Да Да Глобальная Да
max_prepared_stmt_count Да Да Да Глобальная Да
max_relay_log_size Да Да Да Глобальная Да
max_seeks_for_key Да Да Да Обе Да
max_sort_length Да Да Да Обе Да
max_sp_recursion_depth Да Да Да Обе Да
max_tmp_tables Да Обе Да
Max_used_connections Да Глобальная Нет
Max_used_connections_time Да Глобальная Нет
max_user_connections Да Да Да Обе Да
max_write_lock_count Да Да Да Глобальная Да
mecab_charset Да Глобальная Нет
mecab_rc_file Да Да Да Глобальная Нет
memlock Да Да
- Переменная: locked_in_memory
metadata_locks_cache_size Да Глобальная Нет
metadata_locks_hash_instances Да Глобальная Нет
min-examined-row-limit Да Да Да Обе Да
myisam-block-size Да Да
myisam_data_pointer_size Да Да Да Глобальная Да
myisam_max_sort_file_size Да Да Да Глобальная Да
myisam_mmap_size Да Да Да Глобальная Нет
myisam-recover-options Да Да
- Переменная: myisam_recover_options
myisam_recover_options Да Глобальная Нет
myisam_repair_threads Да Да Да Обе Да
myisam_sort_buffer_size Да Да Да Обе Да
myisam_stats_method Да Да Да Обе Да
myisam_use_mmap Да Да Да Глобальная Да
mysql_native_password_proxy_users Да Да Да Глобальная Да
Mysqlx_bytes_received Да Обе Нет
Mysqlx_bytes_sent Да Обе Нет
mysqlx_connect_timeout Да Да Да Глобальная Да
Mysqlx_connection_accept_errors Да Обе Нет
Mysqlx_connection_errors Да Обе Нет
Mysqlx_connections_accepted Да Глобальная Нет
Mysqlx_connections_closed Да Глобальная Нет
Mysqlx_connections_rejected Да Глобальная Нет
Mysqlx_crud_delete Да Обе Нет
Mysqlx_crud_find Да Обе Нет
Mysqlx_crud_insert Да Обе Нет
Mysqlx_crud_update Да Обе Нет
Mysqlx_errors_sent Да Обе Нет
Mysqlx_expect_close Да Обе Нет
Mysqlx_expect_open Да Обе Нет
mysqlx_idle_worker_thread_timeout Да Да
Mysqlx_init_error Да Обе Нет
mysqlx_max_allowed_packet Да Да
mysqlx_max_connections Да Да Да Глобальная Да
mysqlx_min_worker_threads Да Да
Mysqlx_notice_other_sent Да Обе Нет
Mysqlx_notice_warning_sent Да Обе Нет
mysqlx_port Да Да Да Глобальная Нет
Mysqlx_rows_sent Да Обе Нет
Mysqlx_sessions Да Глобальная Нет
Mysqlx_sessions_accepted Да Глобальная Нет
Mysqlx_sessions_closed Да Глобальная Нет
Mysqlx_sessions_fatal_error Да Глобальная Нет
Mysqlx_sessions_killed Да Глобальная Нет
Mysqlx_sessions_rejected Да Глобальная Нет
mysqlx_ssl Да Да Да Глобальная Нет
Mysqlx_ssl_accept_renegotiates Да Глобальная Нет
Mysqlx_ssl_accepts Да Глобальная Нет
Mysqlx_ssl_active Да Обе Нет
mysqlx_ssl_ca Да Да Да Глобальная Нет
mysqlx_ssl_capath Да Да Да Глобальная Нет
mysqlx_ssl_cert Да Да Да Глобальная Нет
Mysqlx_ssl_cipher Да Обе Нет
mysqlx_ssl_cipher Да Да
Mysqlx_ssl_cipher_list Да Обе Нет
mysqlx_ssl_crl Да Да Да Глобальная Нет
mysqlx_ssl_crlpath Да Да Да Глобальная Нет
Mysqlx_ssl_ctx_verify_depth Да Обе Нет
Mysqlx_ssl_ctx_verify_mode Да Обе Нет
Mysqlx_ssl_finished_accepts Да Глобальная Нет
mysqlx_ssl_key Да Да Да Глобальная Нет
Mysqlx_ssl_server_not_after Да Глобальная Нет
Mysqlx_ssl_server_not_before Да Глобальная Нет
Mysqlx_ssl_verify_depth Да Глобальная Нет
Mysqlx_ssl_verify_mode Да Глобальная Нет
Mysqlx_ssl_version Да Обе Нет
Mysqlx_stmt_create_collection Да Обе Нет
Mysqlx_stmt_create_collection_index Да Обе Нет
Mysqlx_stmt_disable_notices Да Обе Нет
Mysqlx_stmt_drop_collection Да Обе Нет
Mysqlx_stmt_drop_collection_index Да Обе Нет
Mysqlx_stmt_enable_notices Да Обе Нет
Mysqlx_stmt_execute_sql Да Обе Нет
Mysqlx_stmt_execute_xplugin Да Обе Нет
Mysqlx_stmt_kill_client Да Обе Нет
Mysqlx_stmt_list_clients Да Обе Нет
Mysqlx_stmt_list_notices Да Обе Нет
Mysqlx_stmt_list_objects Да Обе Нет
Mysqlx_stmt_ping Да Обе Нет
Mysqlx_worker_threads Да Глобальная Нет
Mysqlx_worker_threads_active Да Глобальная Нет
named_pipe Да Глобальная Нет
Ndb_api_bytes_received_count Да Глобальная Нет
Ndb_api_bytes_received_count_Сеансовая Да Сессия Нет
Ndb_api_bytes_received_count_slave Да Глобальная Нет
Ndb_api_bytes_sent_count Да Глобальная Нет
Ndb_api_bytes_sent_count_slave Да Глобальная Нет
Ndb_api_event_bytes_count_injector Да Глобальная Нет
Ndb_api_event_data_count_injector Да Глобальная Нет
Ndb_api_event_nondata_count_injector Да Глобальная Нет
Ndb_api_pk_op_count Да Глобальная Нет
Ndb_api_pk_op_count_Сеансовая Да Сессия Нет
Ndb_api_pk_op_count_slave Да Глобальная Нет
Ndb_api_pruned_scan_count Да Глобальная Нет
Ndb_api_pruned_scan_count_Сеансовая Да Сессия Нет
Ndb_api_range_scan_count_slave Да Глобальная Нет
Ndb_api_read_row_count Да Глобальная Нет
Ndb_api_read_row_count_Сеансовая Да Сессия Нет
Ndb_api_scan_batch_count_slave Да Глобальная Нет
Ndb_api_table_scan_count Да Глобальная Нет
Ndb_api_table_scan_count_Сеансовая Да Сессия Нет
Ndb_api_trans_abort_count Да Глобальная Нет
Ndb_api_trans_abort_count_Сеансовая Да Сессия Нет
Ndb_api_trans_abort_count_slave Да Глобальная Нет
Ndb_api_trans_close_count Да Глобальная Нет
Ndb_api_trans_close_count_Сеансовая Да Сессия Нет
Ndb_api_trans_close_count_slave Да Глобальная Нет
Ndb_api_trans_commit_count Да Глобальная Нет
Ndb_api_trans_commit_count_Сеансовая Да Сессия Нет
Ndb_api_trans_commit_count_slave Да Глобальная Нет
Ndb_api_trans_local_read_row_count_slave Да Глобальная Нет
Ndb_api_trans_start_count Да Глобальная Нет
Ndb_api_trans_start_count_Сеансовая Да Сессия Нет
Ndb_api_trans_start_count_slave Да Глобальная Нет
Ndb_api_uk_op_count Да Глобальная Нет
Ndb_api_uk_op_count_slave Да Глобальная Нет
Ndb_api_wait_exec_complete_count Да Глобальная Нет
Ndb_api_wait_exec_complete_count_Сеансовая Да Сессия Нет
Ndb_api_wait_exec_complete_count_slave Да Глобальная Нет
Ndb_api_wait_meta_request_count Да Глобальная Нет
Ndb_api_wait_meta_request_count_Сеансовая Да Сессия Нет
Ndb_api_wait_nanos_count Да Глобальная Нет
Ndb_api_wait_nanos_count_Сеансовая Да Сессия Нет
Ndb_api_wait_nanos_count_slave Да Глобальная Нет
Ndb_api_wait_scan_result_count Да Глобальная Нет
Ndb_api_wait_scan_result_count_Сеансовая Да Сессия Нет
Ndb_api_wait_scan_result_count_slave Да Глобальная Нет
ndb-batch-size Да Да Да Глобальная Нет
ndb-blob-write-batch-bytes Да Да Да Обе Да
ndb-cluster-connection-pool Да Да Да Глобальная Нет
ndb-cluster-connection-pool-nodeids Да Да Да Глобальная Нет
Ndb_cluster_node_id Да Обе Нет
Ndb_config_from_host Да Обе Нет
Ndb_config_from_port Да Обе Нет
Ndb_conflict_fn_epoch_trans Да Глобальная Нет
Ndb_conflict_fn_max Да Глобальная Нет
Ndb_conflict_fn_old Да Глобальная Нет
Ndb_conflict_trans_detect_iter_count Да Глобальная Нет
Ndb_conflict_trans_row_reject_count Да Глобальная Нет
ndb-connectstring Да Да
ndb-deferred-constraints Да Да Обе Да
- Переменная: ndb_deferred_constraints Да Обе Да
ndb_deferred_constraints Да Да Да Обе Да
ndb-distribution Да Да Глобальная Да
- Переменная: ndb_distribution Да Глобальная Да
ndb_distribution Да Да Да Глобальная Да
ndb_eventbuffer_free_percent Да Да Да Глобальная Да
ndb_eventbuffer_max_alloc Да Да Да Глобальная Да
ndb_force_send Да Да Да Обе Да
ndb_index_stat_enable Да Да Да Обе Да
ndb_index_stat_option Да Да Да Обе Да
ndb_join_pushdown Да Обе Да
Ndb_last_commit_epoch_server Да Глобальная Нет
Ndb_last_commit_epoch_Сеансовая Да Сессия Нет
ndb-log-apply-status Да Да Глобальная Нет
- Переменная: ndb_log_apply_status Да Глобальная Нет
ndb_log_apply_status Да Да Да Глобальная Нет
ndb_log_binlog_index Да Да Глобальная Да
ndb-log-empty-epochs Да Да Да Глобальная Да
ndb-log-empty-update Да Да Да Глобальная Да
ndb-log-transaction-id Да Да Глобальная Нет
- Переменная: ndb_log_transaction_id Да Глобальная Нет
ndb_log_updated_only Да Да Да Глобальная Да
ndb-mgmd-host Да Да
Ndb_number_of_data_nodes Да Глобальная Нет
ndb_optimization_delay Да Глобальная Да
ndb_optimized_node_selection Да Да Да Глобальная Нет
Ndb_pushed_queries_defined Да Глобальная Нет
Ndb_pushed_queries_executed Да Глобальная Нет
ndb_recv_thread_activation_threshold
ndb_recv_thread_cpu_mask Да Глобальная Да
ndb_report_thresh_binlog_epoch_slip Да Да Да Глобальная Да
ndb_report_thresh_binlog_mem_usage Да Да Да Глобальная Да
Ndb_scan_count Да Глобальная Нет
ndb_show_foreign_key_mock_tables Да Да Да Глобальная Да
Ndb_slave_max_replicated_epoch Да Глобальная Нет
ndb_table_no_logging Да Сессия Да
ndb-transid-mysql-connection-map Да
ndb_use_transactions Да Да Да Обе Да
ndb_version Да Глобальная Нет
ndb_version_string Да Глобальная Нет
ndb-wait-setup Да Да Да Глобальная Нет
ndbinfo_database Да Глобальная Нет
ndbinfo_max_rows Да Да Обе Да
ndbinfo_show_hidden Да Да Обе Да
ndbinfo_version Да Глобальная Нет
net_buffer_length Да Да Да Обе Да
net_read_timeout Да Да Да Обе Да
net_retry_count Да Да Да Обе Да
net_write_timeout Да Да Да Обе Да
new Да Да Да Обе Да
ngram_token_size Да Да Да Глобальная Нет
no-defaults Да
Not_flushed_delayed_rows Да Глобальная Нет
offline_mode Да Да Да Глобальная Да
old Да Да Да Глобальная Нет
old-alter-table Да Да Обе Да
- Переменная: old_alter_table Да Обе Да
old_passwords Да Обе Да
old-style-user-limits Да Да
Ongoing_anonymous_gtid_violating_transaction_count Да Глобальная Нет
Ongoing_anonymous_transaction_count Да Глобальная Нет
Ongoing_automatic_gtid_violating_transaction_count Да Глобальная Нет
Open_files Да Глобальная Нет
open-files-limit Да Да Глобальная Нет
- Переменная: open_files_limit Да Глобальная Нет
Open_streams Да Глобальная Нет
Open_table_definitions Да Глобальная Нет
Open_tables Да Обе Нет
Opened_files Да Глобальная Нет
Opened_table_definitions Да Обе Нет
Opened_tables Да Обе Нет
optimizer_prune_level Да Да Да Обе Да
optimizer_search_depth Да Да Да Обе Да
optimizer_switch Да Да Да Обе Да
optimizer_trace Да Обе Да
optimizer_trace_features Да Обе Да
optimizer_trace_limit Да Обе Да
optimizer_trace_max_mem_size Да Обе Да
optimizer_trace_offset Да Обе Да
parser_max_mem_size Да Да Да Обе Да
performance_schema Да Да Да Глобальная Нет
Performance_schema_accounts_lost Да Глобальная Нет
performance_schema_accounts_size Да Да Да Глобальная Нет
Performance_schema_cond_classes_lost Да Глобальная Нет
Performance_schema_cond_instances_lost Да Глобальная Нет
performance-schema-consumer-events-stages-current Да Да
performance-schema-consumer-events-stages-history Да Да
performance-schema-consumer-events-stages-history-long Да Да
performance-schema-consumer-events-statements-current Да Да
performance-schema-consumer-events-statements-history Да Да
performance-schema-consumer-events-statements-history-long Да Да
performance-schema-consumer-events-transactions-current Да Да
performance-schema-consumer-events-transactions-history Да Да
performance-schema-consumer-events-transactions-history-long Да Да
performance-schema-consumer-events-waits-current Да Да
performance-schema-consumer-events-waits-history Да Да
performance-schema-consumer-events-waits-history-long Да Да
performance-schema-consumer-global-instrumentation Да Да
performance-schema-consumer-statements-digest Да Да
performance-schema-consumer-thread-instrumentation Да Да
Performance_schema_digest_lost Да Глобальная Нет
performance_schema_digests_size Да Да Да Глобальная Нет
performance_schema_error_size Да Да Да Глобальная Нет
performance_schema_events_stages_history_long_size Да Да Да Глобальная Нет
performance_schema_events_stages_history_size Да Да Да Глобальная Нет
performance_schema_events_statements_history_long_size Да Да Да Глобальная Нет
performance_schema_events_statements_history_size Да Да Да Глобальная Нет
performance_schema_events_transactions_history_long_size Да Да Да Глобальная Нет
performance_schema_events_transactions_history_size Да Да Да Глобальная Нет
performance_schema_events_waits_history_long_size Да Да Да Глобальная Нет
performance_schema_events_waits_history_size Да Да Да Глобальная Нет
Performance_schema_file_classes_lost Да Глобальная Нет
Performance_schema_file_handles_lost Да Глобальная Нет
Performance_schema_file_instances_lost Да Глобальная Нет
Performance_schema_hosts_lost Да Глобальная Нет
performance_schema_hosts_size Да Да Да Глобальная Нет
Performance_schema_index_stat_lost Да Глобальная Нет
performance-schema-instrument Да Да
Performance_schema_locker_lost Да Глобальная Нет
performance_schema_max_cond_classes Да Да Да Глобальная Нет
performance_schema_max_cond_instances Да Да Да Глобальная Нет
performance_schema_max_digest_length Да Да Да Глобальная Нет
performance_schema_max_file_classes Да Да Да Глобальная Нет
performance_schema_max_file_handles Да Да Да Глобальная Нет
performance_schema_max_file_instances Да Да Да Глобальная Нет
performance_schema_max_index_stat Да Да Да Глобальная Нет
performance_schema_max_memory_classes Да Да Да Глобальная Нет
performance_schema_max_metadata_locks Да Да Да Глобальная Нет
performance_schema_max_mutex_classes Да Да Да Глобальная Нет
performance_schema_max_mutex_instances Да Да Да Глобальная Нет
performance_schema_max_prepared_statements_instances Да Да Да Глобальная Нет
performance_schema_max_program_instances Да Да Да Глобальная Нет
performance_schema_max_rwlock_classes Да Да Да Глобальная Нет
performance_schema_max_rwlock_instances Да Да Да Глобальная Нет
performance_schema_max_socket_classes Да Да Да Глобальная Нет
performance_schema_max_socket_instances Да Да Да Глобальная Нет
performance_schema_max_sql_text_length Да Да Да Глобальная Нет
performance_schema_max_stage_classes Да Да Да Глобальная Нет
performance_schema_max_statement_classes Да Да Да Глобальная Нет
performance_schema_max_statement_stack Да Да Да Глобальная Нет
performance_schema_max_table_handles Да Да Да Глобальная Нет
performance_schema_max_table_instances Да Да Да Глобальная Нет
performance_schema_max_table_lock_stat Да Да Да Глобальная Нет
performance_schema_max_thread_classes Да Да Да Глобальная Нет
performance_schema_max_thread_instances Да Да Да Глобальная Нет
Performance_schema_memory_classes_lost Да Глобальная Нет
Performance_schema_metadata_lock_lost Да Глобальная Нет
Performance_schema_mutex_classes_lost Да Глобальная Нет
Performance_schema_mutex_instances_lost Да Глобальная Нет
Performance_schema_nested_statement_lost Да Глобальная Нет
Performance_schema_prepared_statements_lost Да Глобальная Нет
Performance_schema_program_lost Да Глобальная Нет
Performance_schema_rwlock_classes_lost Да Глобальная Нет
Performance_schema_rwlock_instances_lost Да Глобальная Нет
Performance_schema_session_connect_attrs_longest_seen Да Глобальная Нет
Performance_schema_session_connect_attrs_lost Да Глобальная Нет
performance_schema_session_connect_attrs_size Да Да Да Глобальная Нет
performance_schema_setup_actors_size Да Да Да Глобальная Нет
performance_schema_setup_objects_size Да Да Да Глобальная Нет
Performance_schema_socket_classes_lost Да Глобальная Нет
Performance_schema_socket_instances_lost Да Глобальная Нет
Performance_schema_stage_classes_lost Да Глобальная Нет
Performance_schema_statement_classes_lost Да Глобальная Нет
Performance_schema_table_handles_lost Да Глобальная Нет
Performance_schema_table_instances_lost Да Глобальная Нет
Performance_schema_table_lock_stat_lost Да Глобальная Нет
Performance_schema_thread_classes_lost Да Глобальная Нет
Performance_schema_thread_instances_lost Да Глобальная Нет
Performance_schema_users_lost Да Глобальная Нет
performance_schema_users_size Да Да Да Глобальная Нет
persisted_globals_load Да Да Да Глобальная Нет
pid-file Да Да Глобальная Нет
- Переменная: pid_file Да Глобальная Нет
plugin Да Да
plugin_dir Да Да Да Глобальная Нет
plugin-load Да Да
plugin-load-add Да Да
port Да Да Да Глобальная Нет
port-open-timeout Да Да
preload_buffer_size Да Да Да Обе Да
Prepared_stmt_count Да Глобальная Нет
print-defaults Да
profiling Да Обе Да
profiling_history_size Да Да Да Обе Да
protocol_version Да Глобальная Нет
proxy_user Да Сессия Нет
pseudo_slave_mode Да Сессия Да
pseudo_thread_id Да Сессия Да
Qcache_free_blocks Да Глобальная Нет
Qcache_free_memory Да Глобальная Нет
Qcache_hits Да Глобальная Нет
Qcache_inserts Да Глобальная Нет
Qcache_lowmem_prunes Да Глобальная Нет
Qcache_not_cached Да Глобальная Нет
Qcache_queries_in_cache Да Глобальная Нет
Qcache_total_blocks Да Глобальная Нет
Queries Да Обе Нет
query_alloc_block_size Да Да Да Обе Да
query_cache_limit Да Да Да Глобальная Да
query_cache_min_res_unit Да Да Да Глобальная Да
query_cache_size Да Да Да Глобальная Да
query_cache_type Да Да Да Обе Да
query_cache_wlock_invalidate Да Да Да Обе Да
query_prealloc_size Да Да Да Обе Да
Questions Да Обе Нет
rand_seed1 Да Сессия Да
rand_seed2 Да Сессия Да
range_alloc_block_size Да Да Да Обе Да
range_optimizer_max_mem_size Да Да Да Обе Да
rbr_exec_mode Да Сессия Да
read_buffer_size Да Да Да Обе Да
read_only Да Да Да Глобальная Да
read_rnd_buffer_size Да Да Да Обе Да
relay-log Да Да Глобальная Нет
- Переменная: relay_log Да Глобальная Нет
relay_log_basename Да Глобальная Нет
relay-log-index Да Да Глобальная Нет
- Переменная: relay_log_index Да Глобальная Нет
relay_log_index Да Да Да Глобальная Нет
relay-log-info-file Да Да
- Переменная: relay_log_info_file
relay_log_info_file Да Да Да Глобальная Нет
relay-log-info-repository Да Да
- Переменная: relay_log_info_repository
relay_log_info_repository Да Глобальная Да
relay_log_purge Да Да Да Глобальная Да
relay-log-recovery Да Да
- Переменная: relay_log_recovery
relay_log_recovery Да Да Да Глобальная Нет
relay_log_space_limit Да Да Да Глобальная Нет
remove Да
replicate-do-db Да Да
replicate-do-table Да Да
replicate-ignore-db Да Да
replicate-ignore-table Да Да
replicate-rewrite-db Да Да
replicate-same-server-id Да Да
replicate-wild-do-table Да Да
replicate-wild-ignore-table Да Да
report-host Да Да Глобальная Нет
- Переменная: report_host Да Глобальная Нет
report-password Да Да Глобальная Нет
- Переменная: report_password Да Глобальная Нет
report-port Да Да Глобальная Нет
- Переменная: report_port Да Глобальная Нет
report-user Да Да Глобальная Нет
- Переменная: report_user Да Глобальная Нет
require_secure_transport Да Да Да Глобальная Да
rewriter_enabled Да Глобальная Да
Rewriter_number_loaded_rules Да Глобальная Нет
Rewriter_number_reloads Да Глобальная Нет
Rewriter_number_rewritten_queries Да Глобальная Нет
Rewriter_reload_error Да Глобальная Нет
rewriter_verbose Да Глобальная Да
Rpl_semi_sync_master_clients Да Глобальная Нет
rpl_semi_sync_master_enabled Да Глобальная Да
Rpl_semi_sync_master_net_avg_wait_time Да Глобальная Нет
Rpl_semi_sync_master_net_wait_time Да Глобальная Нет
Rpl_semi_sync_master_net_waits Да Глобальная Нет
Rpl_semi_sync_master_no_times Да Глобальная Нет
Rpl_semi_sync_master_no_tx Да Глобальная Нет
Rpl_semi_sync_master_status Да Глобальная Нет
Rpl_semi_sync_master_timefunc_failures Да Глобальная Нет
rpl_semi_sync_master_timeout Да Глобальная Да
rpl_semi_sync_master_trace_level Да Глобальная Да
Rpl_semi_sync_master_tx_avg_wait_time Да Глобальная Нет
Rpl_semi_sync_master_tx_wait_time Да Глобальная Нет
Rpl_semi_sync_master_tx_waits Да Глобальная Нет
rpl_semi_sync_master_wait_for_slave_count Да Глобальная Да
rpl_semi_sync_master_wait_no_slave Да Глобальная Да
rpl_semi_sync_master_wait_point Да Глобальная Да
Rpl_semi_sync_master_wait_pos_backtraverse Да Глобальная Нет
Rpl_semi_sync_master_wait_sessions Да Глобальная Нет
Rpl_semi_sync_master_yes_tx Да Глобальная Нет
rpl_semi_sync_slave_enabled Да Глобальная Да
Rpl_semi_sync_slave_status Да Глобальная Нет
rpl_semi_sync_slave_trace_level Да Глобальная Да
rpl_stop_slave_timeout Да Да Да Глобальная Да
Rsa_public_key Да Глобальная Нет
safe-user-create Да Да
schema_definition_cache Да Да Да Глобальная Да
secure-auth Да Да Глобальная Да
- Переменная: secure_auth Да Глобальная Да
secure-file-priv Да Да Глобальная Нет
- Переменная: secure_file_priv Да Глобальная Нет
Select_full_join Да Обе Нет
Select_full_range_join Да Обе Нет
Select_range Да Обе Нет
Select_range_check Да Обе Нет
Select_scan Да Обе Нет
server-id Да Да Глобальная Да
- Переменная: server_id Да Глобальная Да
server_uuid Да Глобальная Нет
session_track_gtids Да Да Да Обе Да
session_track_schema Да Да Да Обе Да
session_track_state_change Да Да Да Обе Да
session_track_system_variables Да Да Да Обе Да
sha256_password_auto_generate_rsa_keys Да Да Да Глобальная Нет
sha256_password_private_key_path Да Глобальная Нет
sha256_password_proxy_users Да Да Да Глобальная Да
sha256_password_public_key_path Да Глобальная Нет
shared_memory Да Да Да Глобальная Нет
shared_memory_base_name Да Да Да Глобальная Нет
show_compatibility_56 Да Да Да Глобальная Да
show_old_temporals Да Да Да Обе Да
show-slave-auth-info Да Да
simplified_binlog_gtid_recovery Да Да Да Глобальная Нет
skip-character-set-client-handshake Да Да
skip-concurrent-insert Да Да
- Переменная: concurrent_insert
skip-event-scheduler Да Да
skip_external_locking Да Да Да Глобальная Нет
skip-grant-tables Да Да
skip-host-cache Да Да
skip-name-resolve Да Да Глобальная Нет
- Переменная: skip_name_resolve Да Глобальная Нет
skip-ndbcluster Да Да
skip-networking Да Да Глобальная Нет
- Переменная: skip_networking Да Глобальная Нет
skip-new Да Да
skip-partition Да Да
skip-show-database Да Да Глобальная Нет
- Переменная: skip_show_database Да Глобальная Нет
skip-slave-start Да Да
skip-ssl Да Да
skip-stack-trace Да Да
skip-symbolic-links Да
slave_allow_batching Да Да Да Глобальная Да
slave-checkpoint-group Да Да
- Переменная: slave_checkpoint_group
slave_checkpoint_group Да Да Да Глобальная Да
slave-checkpoint-period Да Да
- Переменная: slave_checkpoint_period
slave_checkpoint_period Да Да Да Глобальная Да
slave_compressed_protocol Да Да Да Глобальная Да
slave_exec_mode Да Да Да Глобальная Да
Slave_heartbeat_period Да Глобальная Нет
Slave_last_heartbeat Да Глобальная Нет
slave-load-tmpdir Да Да Глобальная Нет
- Переменная: slave_load_tmpdir Да Глобальная Нет
slave-max-allowed-packet Да Да
- Переменная: slave_max_allowed_packet
slave_max_allowed_packet Да Глобальная Да
slave-net-timeout Да Да Глобальная Да
- Переменная: slave_net_timeout Да Глобальная Да
Slave_open_temp_tables Да Глобальная Нет
slave-parallel-type Да Да
- Переменная: slave_parallel_type
slave_parallel_type Да Глобальная Да
slave-parallel-workers Да Да
- Переменная: slave_parallel_workers
slave_parallel_workers Да Да Глобальная Да
slave-pending-jobs-size-max Да
- Переменная: slave_pending_jobs_size_max
slave_pending_jobs_size_max Да Глобальная Да
slave_preserve_commit_order Да Да Глобальная Да
Slave_received_heartbeats Да Глобальная Нет
Slave_retried_transactions Да Глобальная Нет
slave-rows-search-algorithms Да Да
- Переменная: slave_rows_search_algorithms
slave_rows_search_algorithms Да Глобальная Да
Slave_running Да Глобальная Нет
slave-skip-errors Да Да Глобальная Нет
- Переменная: slave_skip_errors Да Глобальная Нет
slave-sql-verify-checksum Да Да
slave_sql_verify_checksum Да Глобальная Да
slave_transaction_retries Да Да Да Глобальная Да
slave_type_conversions Да Да Да Глобальная Нет
Slow_launch_threads Да Обе Нет
slow_launch_time Да Да Да Глобальная Да
Slow_queries Да Обе Нет
slow-query-log Да Да Глобальная Да
- Переменная: slow_query_log Да Глобальная Да
slow_query_log_file Да Да Да Глобальная Да
slow-start-timeout Да Да
socket Да Да Да Глобальная Нет
sort_buffer_size Да Да Да Обе Да
Sort_merge_passes Да Обе Нет
Sort_range Да Обе Нет
Sort_rows Да Обе Нет
Sort_scan Да Обе Нет
sporadic-binlog-dump-fail Да Да
sql_auto_is_null Да Обе Да
sql_big_selects Да Обе Да
sql_buffer_result Да Обе Да
sql_log_bin Да Varies Да
sql_log_off Да Обе Да
sql-mode Да Да Обе Да
- Переменная: sql_mode Да Обе Да
sql_notes Да Обе Да
sql_quote_show_create Да Обе Да
sql_safe_updates Да Обе Да
sql_select_limit Да Обе Да
sql_slave_skip_counter Да Глобальная Да
sql_warnings Да Обе Да
ssl Да Да
Ssl_accept_renegotiates Да Глобальная Нет
Ssl_accepts Да Глобальная Нет
ssl-ca Да Да Глобальная Нет
- Переменная: ssl_ca Да Глобальная Нет
Ssl_callback_cache_hits Да Глобальная Нет
ssl-capath Да Да Глобальная Нет
- Переменная: ssl_capath Да Глобальная Нет
ssl-cert Да Да Глобальная Нет
- Переменная: ssl_cert Да Глобальная Нет
Ssl_cipher Да Обе Нет
ssl-cipher Да Да Глобальная Нет
- Переменная: ssl_cipher Да Глобальная Нет
Ssl_cipher_list Да Обе Нет
Ssl_client_connects Да Глобальная Нет
Ssl_connect_renegotiates Да Глобальная Нет
ssl-crl Да Да Глобальная Нет
- Переменная: ssl_crl Да Глобальная Нет
ssl-crlpath Да Да Глобальная Нет
- Переменная: ssl_crlpath Да Глобальная Нет
Ssl_ctx_verify_depth Да Глобальная Нет
Ssl_ctx_verify_mode Да Глобальная Нет
Ssl_default_timeout Да Обе Нет
Ssl_finished_accepts Да Глобальная Нет
Ssl_finished_connects Да Глобальная Нет
ssl-key Да Да Глобальная Нет
- Переменная: ssl_key Да Глобальная Нет
Ssl_server_not_after Да Обе Нет
Ssl_server_not_before Да Обе Нет
Ssl_session_cache_hits Да Глобальная Нет
Ssl_session_cache_misses Да Глобальная Нет
Ssl_session_cache_mode Да Глобальная Нет
Ssl_session_cache_overflows Да Глобальная Нет
Ssl_session_cache_size Да Глобальная Нет
Ssl_session_cache_timeouts Да Глобальная Нет
Ssl_sessions_reused Да Обе Нет
Ssl_used_session_cache_entries Да Глобальная Нет
Ssl_verify_depth Да Обе Нет
Ssl_verify_mode Да Обе Нет
Ssl_version Да Обе Нет
standalone Да Да
stored_program_cache Да Да Да Глобальная Да
stored_program_definition_cache Да Да Да Глобальная Да
super-large-pages Да Да
super_read_only Да Да Да Глобальная Да
symbolic-links Да Да
sync_binlog Да Да Да Глобальная Да
sync_master_info Да Да Да Глобальная Да
sync_relay_log Да Да Да Глобальная Да
sync_relay_log_info Да Да Да Глобальная Да
sysdate-is-now Да Да
system_time_zone Да Глобальная Нет
table_definition_cache Да Глобальная Да
Table_locks_immediate Да Глобальная Нет
Table_locks_waited Да Глобальная Нет
table_open_cache Да Глобальная Да
Table_open_cache_hits Да Обе Нет
table_open_cache_instances Да Глобальная Нет
Table_open_cache_misses Да Обе Нет
Table_open_cache_overflows Да Обе Нет
tablespace_definition_cache Да Да Да Глобальная Да
tc-heuristic-recover Да Да
Tc_log_max_pages_used Да Глобальная Нет
Tc_log_page_size Да Глобальная Нет
Tc_log_page_waits Да Глобальная Нет
temp-pool Да Да
thread_cache_size Да Да Да Глобальная Да
thread_handling Да Да Да Глобальная Нет
thread_stack Да Да Да Глобальная Нет
Threads_cached Да Глобальная Нет
Threads_connected Да Глобальная Нет
Threads_created Да Глобальная Нет
Threads_running Да Глобальная Нет
time_format Да Глобальная Нет
time_zone Да Обе Да
timestamp Да Сессия Да
tls_version Да Да Да Глобальная Нет
tmp_table_size Да Да Да Обе Да
tmpdir Да Да Да Глобальная Нет
transaction_alloc_block_size Да Да Да Обе Да
transaction_allow_batching Да Сессия Да
transaction-isolation Да Да
- Переменная: tx_isolation
transaction_prealloc_size Да Да Да Обе Да
transaction-read-only Да Да
- Переменная: tx_read_only
transaction_write_set_extraction Да Да Обе Да
tx_isolation Да Обе Да
tx_read_only Да Обе Да
unique_checks Да Обе Да
updatable_views_with_limit Да Да Да Обе Да
Uptime Да Глобальная Нет
Uptime_since_flush_status Да Глобальная Нет
user Да Да
validate-password Да Да
validate_password_check_user_name Да Да Да Глобальная Да
validate_password_dictionary_file Да Глобальная Да
validate_password_dictionary_file_last_parsed Да Глобальная Нет
validate_password_dictionary_file_words_count Да Глобальная Нет
validate_password_length Да Глобальная Да
validate_password_mixed_case_count Да Глобальная Да
validate_password_number_count Да Глобальная Да
validate_password_policy Да Глобальная Да
validate_password_special_char_count Да Глобальная Да
validate_user_plugins Да Глобальная Нет
verbose Да Да
version Да Глобальная Нет
version_comment Да Глобальная Нет
version_compile_machine Да Глобальная Нет
version_compile_os Да Глобальная Нет
version_tokens_session Да Да Да Обе Да
version_tokens_session_number Да Да Да Обе Нет
wait_timeout Да Да Да Обе Да
warning_count Да Сессия Нет

6.1.4. Опции команд сервера

Когда Вы запускаете mysqld , Вы можете определить опции программы, используя любой из методов, описанных в разделе 5.2.3 . Наиболее распространенные методы должны предоставить данные в файле опций или в командной строке. Однако, в большинстве случаев желательно удостовериться, что сервер использует те же самые опции каждый раз. Лучший способ гарантировать это состоит в том, чтобы перечислить их в файле опций. См. раздел 5.2.6. Этот раздел также описывает формат файла опций и синтаксис.

mysqld читает опции из групп [mysqld] и [server]. mysqld_safe читает опции из групп [mysqld], [server], [mysqld_safe] и [safe_mysqld]. mysql.server читает опции из групп [mysqld] и [mysql.server].

Встроенный сервер MySQL обычно читает опции из групп [server], [embedded] и [xxxxx_SERVER], где xxxxx название приложения, в которое встроен сервер.

mysqld принимает много опций. Для краткого резюме выполните эту команду:

mysqld --help

Чтобы видеть полный список, используйте эту команду:

mysqld --verbose --help

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

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

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

Некоторые опции берут значения имени файла. Если иначе не определено, местоположение файла по умолчанию каталог данных, если значение является относительным путем. Чтобы определить местоположение явно, используйте абсолютный путь. Предположите, что каталог данных /var/mysql/data. Если опция будет дана как относительный путь, то она будет расположена под /var/mysql/data. Если значение это абсолютный путь, его местоположение дано путем.

Вы можете также установить значения системных переменных сервера при запуске сервера при использовании имен переменной как опции. Чтобы назначить значение на системную переменную сервера, используйте опцию формы --var_name=value. Например, --sort_buffer_size=384M установит переменную sort_buffer_size к значению 384 МБ.

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

Чтобы ограничить максимальное значение, в которое системная переменная может быть установлена во время выполнения с SET, определите этот максимум при использовании опции формы --maximum-var_name=value при запуске сервера.

Вы можете изменить значения большинства системных переменных во время выполнения с SET, см. раздел 14.7.4.1.

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

6.1.5. Системные переменные сервера

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

Есть несколько способов видеть имена и значения системных переменных:

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

Таблица 6.2. Системные переменные

ИмяКомандная строка Файл опцийСистемная Область действия Динамическая
auto_generate_certsДаДаДаГлобальная Нет
auto_increment_increment ДаОбе Да
auto_increment_offset ДаОбе Да
autocommit ДаДаДаОбеДа
automatic_sp_privileges Да ГлобальнаяДа
avoid_temporal_upgrade Да Да Да Глобальная Да
back_log Да Глобальная Нет
basedir Да Да Да Глобальная Нет
big-tables Да Да Да
- Переменная: big_tables Да Обе Да
bind-address Да Да Нет
- Переменная: bind_address Да Глобальная Нет
binlog_cache_size Да Да Да Глобальная Да
binlog_checksum Да Глобальная Да
binlog_direct_non_transactional_updates Да Да Да Обе Да
binlog_error_action Да Да Да Обе Да
binlog-format Да Да Да
- Переменная: binlog_format Да Обе Да
binlog_group_commit_sync_delay Да Да Да Глобальная Да
binlog_group_commit_sync_no_delay_count Да Да Да Глобальная Да
binlog_gtid_simple_recovery Да Да Да Глобальная Нет
binlog_max_flush_queue_time Да Глобальная Да
binlog_order_commits Да Глобальная Да
binlog_row_image Да Да Да Обе Да
binlog_rows_query_log_events Да Обе Да
binlog_stmt_cache_size Да Да Да Глобальная Да
binlogging_impossible_mode Да Да Да Обе Да
block_encryption_mode Да Да Да Обе Да
bulk_insert_buffer_size Да Да Да Обе Да
character_set_client Да Обе Да
character_set_connection Да Обе Да
character_set_database[a] Да Обе Да
character-set-filesystem Да Да Да
- Переменная: character_set_filesystem Да Обе Да
character_set_results Да Обе Да
character-set-server Да Да Да
- Переменная: character_set_server Да Обе Да
character_set_system Да Глобальная Нет
character-sets-dir Да Да Нет
- Переменная: character_sets_dir Да Глобальная Нет
check_proxy_users Да Да Да Глобальная Да
collation_connection Да Обе Да
collation_database[b] Да Обе Да
collation-server Да Да Да
- Переменная: collation_server Да Обе Да
completion_type Да Да Да Обе Да
concurrent_insert Да Да Да Глобальная Да
connect_timeout Да Да Да Глобальная Да
core_file Да Глобальная Нет
daemon_memcached_enable_binlog Да Да Да Глобальная Нет
daemon_memcached_engine_lib_name Да Да Да Глобальная Нет
daemon_memcached_engine_lib_path Да Да Да Глобальная Нет
daemon_memcached_option Да Да Да Глобальная Нет
daemon_memcached_r_batch_size Да Да Да Глобальная Нет
daemon_memcached_w_batch_size Да Да Да Глобальная Нет
datadir Да Да Да Глобальная Нет
date_format Да Глобальная Нет
datetime_format Да Глобальная Нет
debug Да Да Да Обе Да
debug_sync Да Сессия Да
default_authentication_plugin Да Да Да Глобальная Нет
default_password_lifetime Да Да Да Глобальная Да
default-storage-engine Да Да Да
- Переменная: default_storage_engine Да Обе Да
default_tmp_storage_engine Да Да Да Обе Да
default_week_format Да Да Да Обе Да
delay-key-write Да Да Да
- Переменная: delay_key_write Да Глобальная Да
delayed_insert_limit Да Да Да Глобальная Да
delayed_insert_timeout Да Да Да Глобальная Да
delayed_queue_size Да Да Да Глобальная Да
disabled_storage_engines Да Да Да Глобальная Нет
disconnect_on_expired_password Да Да Да Сессия Нет
div_precision_increment Да Да Да Обе Да
end_markers_in_json Да Обе Да
enforce-gtid-consistency Да Да Да Глобальная Да
enforce_gtid_consistency Да Да Да Глобальная Да
eq_range_index_dive_limit Да Обе Да
error_count Да Сессия Нет
event-scheduler Да Да Да
- Переменная: event_scheduler Да Глобальная Да
executed_gtids_compression_period Да Глобальная Да
expire_logs_days Да Да Да Глобальная Да
explicit_defaults_for_timestamp Да Да Да Обе Нет
external_user Да Сессия Нет
flush Да Да Да Глобальная Да
flush_time Да Да Да Глобальная Да
foreign_key_checks Да Обе Да
ft_boolean_syntax Да Да Да Глобальная Да
ft_max_word_len Да Да Да Глобальная Нет
ft_min_word_len Да Да Да Глобальная Нет
ft_query_expansion_limit Да Да Да Глобальная Нет
ft_stopword_file Да Да Да Глобальная Нет
general-log Да Да Да
- Переменная: general_log Да Глобальная Да
general_log_file Да Да Да Глобальная Да
group_concat_max_len Да Да Да Обе Да
gtid_executed Да Varies Нет
gtid_executed_compression_period Да Глобальная Да
gtid-mode Да Да Да
- Переменная: gtid_mode Да Глобальная Да
gtid_mode Да Глобальная Да
gtid_next Да Сессия Да
gtid_owned Да Обе Нет
gtid_purged Да Глобальная Да
have_compress Да Глобальная Нет
have_crypt Да Глобальная Нет
have_dynamic_loading Да Глобальная Нет
have_geometry Да Глобальная Нет
have_openssl Да Глобальная Нет
have_profiling Да Глобальная Нет
have_query_cache Да Глобальная Нет
have_rtree_keys Да Глобальная Нет
have_ssl Да Глобальная Нет
have_statement_timeout Да Глобальная Нет
have_symlink Да Глобальная Нет
host_cache_size Да Глобальная Да
hostname Да Глобальная Нет
identity Да Сессия Да
ignore-builtin-innodb Да Да Нет
- Переменная: ignore_builtin_innodb Да Глобальная Нет
information_schema_stats Да Да Да Обе Да
init_connect Да Да Да Глобальная Да
init-file Да Да Нет
- Переменная: init_file Да Глобальная Нет
init_slave Да Да Да Глобальная Да
innodb_adaptive_flushing Да Да Да Глобальная Да
innodb_adaptive_flushing_lwm Да Да Да Глобальная Да
innodb_adaptive_hash_index Да Да Да Глобальная Да
innodb_adaptive_hash_index_parts Да Да Да Глобальная Нет
innodb_adaptive_max_sleep_delay Да Да Да Глобальная Да
innodb_api_bk_commit_interval Да Да Да Глобальная Да
innodb_api_disable_rowlock Да Да Да Глобальная Нет
innodb_api_enable_binlog Да Да Да Глобальная Нет
innodb_api_enable_mdl Да Да Да Глобальная Нет
innodb_api_trx_level Да Да Да Глобальная Да
innodb_autoextend_increment Да Да Да Глобальная Да
innodb_autoinc_lock_mode Да Да Да Глобальная Нет
innodb_background_drop_list_empty Да Да Да Глобальная Да
innodb_buffer_pool_chunk_size Да Да Да Глобальная Нет
innodb_buffer_pool_debug Да Да Да Глобальная Нет
innodb_buffer_pool_dump_at_shutdown Да Да Да Глобальная Да
innodb_buffer_pool_dump_now Да Да Да Глобальная Да
innodb_buffer_pool_dump_pct Да Да Да Глобальная Да
innodb_buffer_pool_filename Да Да Да Глобальная Да
innodb_buffer_pool_instances Да Да Да Глобальная Нет
innodb_buffer_pool_load_abort Да Да Да Глобальная Да
innodb_buffer_pool_load_at_startup Да Да Да Глобальная Нет
innodb_buffer_pool_load_now Да Да Да Глобальная Да
innodb_buffer_pool_size Да Да Да Глобальная Да
innodb_change_buffer_max_size Да Да Да Глобальная Да
innodb_change_buffering Да Да Да Глобальная Да
innodb_change_buffering_debug Да Да Да Глобальная Да
innodb_checksum_algorithm Да Да Да Глобальная Да
innodb_cmp_per_index_enabled Да Да Да Глобальная Да
innodb_commit_concurrency Да Да Да Глобальная Да
innodb_compress_debug Да Да Да Глобальная Да
innodb_compression_failure_threshold_pct Да Да Да Глобальная Да
innodb_compression_level Да Да Да Глобальная Да
innodb_compression_pad_pct_max Да Да Да Глобальная Да
innodb_concurrency_tickets Да Да Да Глобальная Да
innodb_data_file_path Да Да Да Глобальная Нет
innodb_data_home_dir Да Да Да Глобальная Нет
innodb_deadlock_detect Да Да Да Глобальная Да
innodb_default_row_format Да Да Да Глобальная Да
innodb_disable_sort_file_cache Да Да Да Глобальная Да
innodb_doublewrite Да Да Да Глобальная Нет
innodb_fast_shutdown Да Да Да Глобальная Да
innodb_fil_make_page_dirty_debug Да Да Да Глобальная Да
innodb_file_per_table Да Да Да Глобальная Да
innodb_fill_factor Да Да Да Глобальная Да
innodb_flush_log_at_timeout Да Глобальная Да
innodb_flush_log_at_trx_commit Да Да Да Глобальная Да
innodb_flush_method Да Да Да Глобальная Нет
innodb_flush_neighbors Да Да Да Глобальная Да
innodb_flush_sync Да Да Да Глобальная Да
innodb_flushing_avg_loops Да Да Да Глобальная Да
innodb_force_load_corrupted Да Да Да Глобальная Нет
innodb_force_recovery Да Да Да Глобальная Нет
innodb_ft_aux_table Да Да Да Глобальная Да
innodb_ft_cache_size Да Да Да Глобальная Нет
innodb_ft_enable_diag_print Да Да Да Глобальная Да
innodb_ft_enable_stopword Да Да Да Глобальная Да
innodb_ft_max_token_size Да Да Да Глобальная Нет
innodb_ft_min_token_size Да Да Да Глобальная Нет
innodb_ft_num_word_optimize Да Да Да Глобальная Да
innodb_ft_result_cache_limit Да Да Да Глобальная Да
innodb_ft_server_stopword_table Да Да Да Глобальная Да
innodb_ft_sort_pll_degree Да Да Да Глобальная Нет
innodb_ft_total_cache_size Да Да Да Глобальная Нет
innodb_ft_user_stopword_table Да Да Да Обе Да
innodb_io_capacity Да Да Да Глобальная Да
innodb_io_capacity_max Да Да Да Глобальная Да
innodb_limit_optimistic_insert_debug Да Да Да Глобальная Да
innodb_lock_wait_timeout Да Да Да Обе Да
innodb_log_buffer_size Да Да Да Глобальная Нет
innodb_log_checksums Да Да Да Глобальная Да
innodb_log_compressed_pages Да Да Да Глобальная Да
innodb_log_file_size Да Да Да Глобальная Нет
innodb_log_files_in_group Да Да Да Глобальная Нет
innodb_log_group_home_dir Да Да Да Глобальная Нет
innodb_log_write_ahead_size Да Да Да Глобальная Да
innodb_lru_scan_depth Да Да Да Глобальная Да
innodb_max_dirty_pages_pct Да Да Да Глобальная Да
innodb_max_dirty_pages_pct_lwm Да Да Да Глобальная Да
innodb_max_purge_lag Да Да Да Глобальная Да
innodb_max_purge_lag_delay Да Да Да Глобальная Да
innodb_max_undo_log_size Да Да Да Глобальная Да
innodb_merge_threshold_set_all_debug Да Да Да Глобальная Да
innodb_monitor_disable Да Да Да Глобальная Да
innodb_monitor_enable Да Да Да Глобальная Да
innodb_monitor_reset Да Да Да Глобальная Да
innodb_monitor_reset_all Да Да Да Глобальная Да
innodb_numa_interleave Да Да Да Глобальная Нет
innodb_old_blocks_pct Да Да Да Глобальная Да
innodb_old_blocks_time Да Да Да Глобальная Да
innodb_online_alter_log_max_size Да Да Да Глобальная Да
innodb_open_files Да Да Да Глобальная Нет
innodb_optimize_fulltext_only Да Да Да Глобальная Да
innodb_page_cleaners Да Да Да Глобальная Нет
innodb_page_size Да Да Да Глобальная Нет
innodb_print_all_deadlocks Да Да Да Глобальная Да
innodb_purge_batch_size Да Да Да Глобальная Да
innodb_purge_rseg_truncate_frequency Да Да Да Глобальная Да
innodb_purge_threads Да Да Да Глобальная Нет
innodb_random_read_ahead Да Да Да Глобальная Да
innodb_read_ahead_threshold Да Да Да Глобальная Да
innodb_read_io_threads Да Да Да Глобальная Нет
innodb_read_only Да Да Да Глобальная Нет
innodb_replication_delay Да Да Да Глобальная Да
innodb_rollback_on_timeout Да Да Да Глобальная Нет
innodb_rollback_segments Да Да Да Глобальная Да
innodb_saved_page_number_debug Да Да Да Глобальная Да
innodb_sort_buffer_size Да Да Да Глобальная Нет
innodb_spin_wait_delay Да Да Да Глобальная Да
innodb_stats_auto_recalc Да Да Да Глобальная Да
innodb_stats_include_delete_marked Да Да Да Глобальная Да
innodb_stats_method Да Да Да Глобальная Да
innodb_stats_on_metadata Да Да Да Глобальная Да
innodb_stats_persistent Да Да Да Глобальная Да
innodb_stats_persistent_sample_pages Да Да Да Глобальная Да
innodb_stats_transient_sample_pages Да Да Да Глобальная Да
innodb_status_output Да Да Да Глобальная Да
innodb_status_output_locks Да Да Да Глобальная Да
innodb_strict_mode Да Да Да Обе Да
innodb_sync_array_size Да Да Да Глобальная Нет
innodb_sync_debug Да Да Да Глобальная Нет
innodb_sync_spin_loops Да Да Да Глобальная Да
innodb_table_locks Да Да Да Обе Да
innodb_temp_data_file_path Да Да Да Глобальная Нет
innodb_thread_concurrency Да Да Да Глобальная Да
innodb_thread_sleep_delay Да Да Да Глобальная Да
innodb_tmpdir Да Да Да Обе Да
innodb_trx_purge_view_update_only_debug Да Да Да Глобальная Да
innodb_trx_rseg_n_slots_debug Да Да Да Глобальная Да
innodb_undo_directory Да Да Да Глобальная Нет
innodb_undo_log_truncate Да Да Да Глобальная Да
innodb_undo_logs Да Да Да Глобальная Да
innodb_undo_tablespaces Да Да Да Глобальная Нет
innodb_use_native_aio Да Да Да Глобальная Нет
innodb_version Да Глобальная Нет
innodb_write_io_threads Да Да Да Глобальная Нет
insert_id Да Сессия Да
interactive_timeout Да Да Да Обе Да
internal_tmp_disk_storage_engine Да Да Да Глобальная Да
join_buffer_size Да Да Да Обе Да
keep_files_on_create Да Да Да Обе Да
key_buffer_size Да Да Да Глобальная Да
key_cache_age_threshold Да Да Да Глобальная Да
key_cache_block_size Да Да Да Глобальная Да
key_cache_division_limit Да Да Да Глобальная Да
keyring_file_data Да Да Да Глобальная Да
language Да Да Да Глобальная Нет
large_files_support Да Глобальная Нет
large_page_size Да Глобальная Нет
large-pages Да Да Нет
- Переменная: large_pages Да Глобальная Нет
last_insert_id Да Сессия Да
lc-messages Да Да Да
- Переменная: lc_messages Да Обе Да
lc-messages-dir Да Да Нет
- Переменная: lc_messages_dir Да Глобальная Нет
lc_time_names Да Обе Да
license Да Глобальная Нет
local_infile Да Глобальная Да
lock_wait_timeout Да Да Да Обе Да
locked_in_memory Да Глобальная Нет
log-bin Да Да Да Глобальная Нет
log_bin Да Глобальная Нет
log_bin_basename Да Глобальная Нет
log_bin_index Да Глобальная Нет
log-bin-trust-function-creators Да Да Да
- Переменная: log_bin_trust_function_creators Да Глобальная Да
log-bin-use-v1-row-events Да Да Нет
- Переменная: log_bin_use_v1_row_events Да Глобальная Нет
log_bin_use_v1_row_events Да Да Да Глобальная Нет
log_builtin_as_identified_by_password Да Да Да Глобальная Да
log-error Да Да Нет
- Переменная: log_error Да Глобальная Нет
log_error_verbosity Да Да Да Глобальная Да
log-output Да Да Да
- Переменная: log_output Да Глобальная Да
log-queries-not-using-indexes Да Да Да
- Переменная: log_queries_not_using_indexes Да Глобальная Да
log-slave-updates Да Да Нет
- Переменная: log_slave_updates Да Глобальная Нет
log_slave_updates Да Да Да Глобальная Нет
log_slow_admin_statements Да Глобальная Да
log_slow_slave_statements Да Глобальная Да
log_statements_unsafe_for_binlog Да Глобальная Да
log_syslog Да Да Да Глобальная Да
log_syslog_facility Да Да Да Глобальная Да
log_syslog_include_pid Да Да Да Глобальная Да
log_syslog_tag Да Да Да Глобальная Да
log_throttle_queries_not_using_indexes Да Глобальная Да
log_timestamps Да Да Да Глобальная Да
log-warnings Да Да Да
- Переменная: log_warnings Да Глобальная Да
long_query_time Да Да Да Обе Да
low-priority-updates Да Да Да
- Переменная: low_priority_updates Да Обе Да
lower_case_file_system Да Глобальная Нет
lower_case_table_names Да Да Да Глобальная Нет
master_info_repository Да Да Да Глобальная Да
master_verify_checksum Да Глобальная Да
max_allowed_packet Да Да Да Обе Да
max_binlog_cache_size Да Да Да Глобальная Да
max_binlog_size Да Да Да Глобальная Да
max_binlog_stmt_cache_size Да Да Да Глобальная Да
max_connect_errors Да Да Да Глобальная Да
max_connections Да Да Да Глобальная Да
max_delayed_threads Да Да Да Обе Да
max_digest_length Да Да Да Глобальная Нет
max_error_count Да Да Да Обе Да
max_execution_time Да Да Да Обе Да
max_heap_table_size Да Да Да Обе Да
max_insert_delayed_threads Да Обе Да
max_join_size Да Да Да Обе Да
max_length_for_sort_data Да Да Да Обе Да
max_points_in_geometry Да Да Да Глобальная Да
max_prepared_stmt_count Да Да Да Глобальная Да
max_relay_log_size Да Да Да Глобальная Да
max_seeks_for_key Да Да Да Обе Да
max_sort_length Да Да Да Обе Да
max_sp_recursion_depth Да Да Да Обе Да
max_tmp_tables Да Обе Да
max_user_connections Да Да Да Обе Да
max_write_lock_count Да Да Да Глобальная Да
mecab_rc_file Да Да Да Глобальная Нет
metadata_locks_cache_size Да Глобальная Нет
metadata_locks_hash_instances Да Глобальная Нет
min-examined-row-limit Да Да Да Обе Да
myisam_data_pointer_size Да Да Да Глобальная Да
myisam_max_sort_file_size Да Да Да Глобальная Да
myisam_mmap_size Да Да Да Глобальная Нет
myisam_recover_options Да Глобальная Нет
myisam_repair_threads Да Да Да Обе Да
myisam_sort_buffer_size Да Да Да Обе Да
myisam_stats_method Да Да Да Обе Да
myisam_use_mmap Да Да Да Глобальная Да
mysql_native_password_proxy_users Да Да Да Глобальная Да
mysqlx_connect_timeout Да Да Да Глобальная Да
mysqlx_max_connections Да Да Да Глобальная Да
mysqlx_port Да Да Да Глобальная Нет
mysqlx_ssl Да Да Да Глобальная Нет
mysqlx_ssl_ca Да Да Да Глобальная Нет
mysqlx_ssl_capath Да Да Да Глобальная Нет
mysqlx_ssl_cert Да Да Да Глобальная Нет
mysqlx_ssl_crl Да Да Да Глобальная Нет
mysqlx_ssl_crlpath Да Да Да Глобальная Нет
mysqlx_ssl_key Да Да Да Глобальная Нет
named_pipe Да Глобальная Нет
ndb-batch-size Да Да Да Глобальная Нет
ndb-blob-write-batch-bytes Да Да Да Обе Да
ndb-cluster-connection-pool Да Да Да Глобальная Нет
ndb-cluster-connection-pool-nodeids Да Да Да Глобальная Нет
ndb-deferred-constraints Да Да Да
- Переменная: ndb_deferred_constraints Да Обе Да
ndb_deferred_constraints Да Да Да Обе Да
ndb-distribution Да Да Да
- Переменная: ndb_distribution Да Глобальная Да
ndb_distribution Да Да Да Глобальная Да
ndb_eventbuffer_free_percent Да Да Да Глобальная Да
ndb_eventbuffer_max_alloc Да Да Да Глобальная Да
ndb_force_send Да Да Да Обе Да
ndb_index_stat_enable Да Да Да Обе Да
ndb_index_stat_option Да Да Да Обе Да
ndb_join_pushdown Да Обе Да
ndb-log-apply-status Да Да Нет
- Переменная: ndb_log_apply_status Да Глобальная Нет
ndb_log_apply_status Да Да Да Глобальная Нет
ndb_log_binlog_index Да Да Глобальная Да
ndb-log-empty-epochs Да Да Да Глобальная Да
ndb-log-empty-update Да Да Да Глобальная Да
ndb-log-transaction-id Да Да Нет
- Переменная: ndb_log_transaction_id Да Глобальная Нет
ndb_log_updated_only Да Да Да Глобальная Да
ndb_optimization_delay Да Глобальная Да
ndb_optimized_node_selection Да Да Да Глобальная Нет
ndb_recv_thread_cpu_mask Да Глобальная Да
ndb_report_thresh_binlog_epoch_slip Да Да Да Глобальная Да
ndb_report_thresh_binlog_mem_usage Да Да Да Глобальная Да
ndb_show_foreign_key_mock_tables Да Да Да Глобальная Да
Ndb_slave_max_replicated_epoch Да Глобальная Нет
ndb_table_no_logging Да Сессия Да
ndb_use_transactions Да Да Да Обе Да
ndb_version Да Глобальная Нет
ndb_version_string Да Глобальная Нет
ndb-wait-setup Да Да Да Глобальная Нет
ndbinfo_database Да Глобальная Нет
ndbinfo_max_rows Да Да Обе Да
ndbinfo_show_hidden Да Да Обе Да
ndbinfo_version Да Глобальная Нет
net_buffer_length Да Да Да Обе Да
net_read_timeout Да Да Да Обе Да
net_retry_count Да Да Да Обе Да
net_write_timeout Да Да Да Обе Да
new Да Да Да Обе Да
ngram_token_size Да Да Да Глобальная Нет
offline_mode Да Да Да Глобальная Да
old Да Да Да Глобальная Нет
old-alter-table Да Да Да
- Переменная: old_alter_table Да Обе Да
old_passwords Да Обе Да
open-files-limit Да Да Нет
- Переменная: open_files_limit Да Глобальная Нет
optimizer_prune_level Да Да Да Обе Да
optimizer_search_depth Да Да Да Обе Да
optimizer_switch Да Да Да Обе Да
optimizer_trace Да Обе Да
optimizer_trace_features Да Обе Да
optimizer_trace_limit Да Обе Да
optimizer_trace_max_mem_size Да Обе Да
optimizer_trace_offset Да Обе Да
parser_max_mem_size Да Да Да Обе Да
performance_schema Да Да Да Глобальная Нет
performance_schema_accounts_size Да Да Да Глобальная Нет
performance_schema_digests_size Да Да Да Глобальная Нет
performance_schema_error_size Да Да Да Глобальная Нет
performance_schema_events_stages_history_long_size Да Да Да Глобальная Нет
performance_schema_events_stages_history_size Да Да Да Глобальная Нет
performance_schema_events_statements_history_long_size Да Да Да Глобальная Нет
performance_schema_events_statements_history_size Да Да Да Глобальная Нет
performance_schema_events_transactions_history_long_size Да Да Да Глобальная Нет
performance_schema_events_transactions_history_size Да Да Да Глобальная Нет
performance_schema_events_waits_history_long_size Да Да Да Глобальная Нет
performance_schema_events_waits_history_size Да Да Да Глобальная Нет
performance_schema_hosts_size Да Да Да Глобальная Нет
performance_schema_max_cond_classes Да Да Да Глобальная Нет
performance_schema_max_cond_instances Да Да Да Глобальная Нет
performance_schema_max_digest_length Да Да Да Глобальная Нет
performance_schema_max_file_classes Да Да Да Глобальная Нет
performance_schema_max_file_handles Да Да Да Глобальная Нет
performance_schema_max_file_instances Да Да Да Глобальная Нет
performance_schema_max_index_stat Да Да Да Глобальная Нет
performance_schema_max_memory_classes Да Да Да Глобальная Нет
performance_schema_max_metadata_locks Да Да Да Глобальная Нет
performance_schema_max_mutex_classes Да Да Да Глобальная Нет
performance_schema_max_mutex_instances Да Да Да Глобальная Нет
performance_schema_max_prepared_statements_instances Да Да Да Глобальная Нет
performance_schema_max_program_instances Да Да Да Глобальная Нет
performance_schema_max_rwlock_classes Да Да Да Глобальная Нет
performance_schema_max_rwlock_instances Да Да Да Глобальная Нет
performance_schema_max_socket_classes Да Да Да Глобальная Нет
performance_schema_max_socket_instances Да Да Да Глобальная Нет
performance_schema_max_sql_text_length Да Да Да Глобальная Нет
performance_schema_max_stage_classes Да Да Да Глобальная Нет
performance_schema_max_statement_classes Да Да Да Глобальная Нет
performance_schema_max_statement_stack Да Да Да Глобальная Нет
performance_schema_max_table_handles Да Да Да Глобальная Нет
performance_schema_max_table_instances Да Да Да Глобальная Нет
performance_schema_max_table_lock_stat Да Да Да Глобальная Нет
performance_schema_max_thread_classes Да Да Да Глобальная Нет
performance_schema_max_thread_instances Да Да Да Глобальная Нет
performance_schema_session_connect_attrs_size Да Да Да Глобальная Нет
performance_schema_setup_actors_size Да Да Да Глобальная Нет
performance_schema_setup_objects_size Да Да Да Глобальная Нет
performance_schema_users_size Да Да Да Глобальная Нет
persisted_globals_load Да Да Да Глобальная Нет
pid-file Да Да Нет
- Переменная: pid_file Да Глобальная Нет
plugin_dir Да Да Да Глобальная Нет
port Да Да Да Глобальная Нет
preload_buffer_size Да Да Да Обе Да
profiling Да Обе Да
profiling_history_size Да Да Да Обе Да
protocol_version Да Глобальная Нет
proxy_user Да Сессия Нет
pseudo_slave_mode Да Сессия Да
pseudo_thread_id Да Сессия Да
query_alloc_block_size Да Да Да Обе Да
query_cache_limit Да Да Да Глобальная Да
query_cache_min_res_unit Да Да Да Глобальная Да
query_cache_size Да Да Да Глобальная Да
query_cache_type Да Да Да Обе Да
query_cache_wlock_invalidate Да Да Да Обе Да
query_prealloc_size Да Да Да Обе Да
rand_seed1 Да Сессия Да
rand_seed2 Да Сессия Да
range_alloc_block_size Да Да Да Обе Да
range_optimizer_max_mem_size Да Да Да Обе Да
rbr_exec_mode Да Сессия Да
read_buffer_size Да Да Да Обе Да
read_only Да Да Да Глобальная Да
read_rnd_buffer_size Да Да Да Обе Да
relay-log Да Да Нет
- Переменная: relay_log Да Глобальная Нет
relay_log_basename Да Глобальная Нет
relay-log-index Да Да Нет
- Переменная: relay_log_index Да Глобальная Нет
relay_log_index Да Да Да Глобальная Нет
relay_log_info_file Да Да Да Глобальная Нет
relay_log_info_repository Да Глобальная Да
relay_log_purge Да Да Да Глобальная Да
relay_log_recovery Да Да Да Глобальная Нет
relay_log_space_limit Да Да Да Глобальная Нет
report-host Да Да Нет
- Переменная: report_host Да Глобальная Нет
report-password Да Да Нет
- Переменная: report_password Да Глобальная Нет
report-port Да Да Нет
- Переменная: report_port Да Глобальная Нет
report-user Да Да Нет
- Переменная: report_user Да Глобальная Нет
require_secure_transport Да Да Да Глобальная Да
rewriter_enabled Да Глобальная Да
rewriter_verbose Да Глобальная Да
rpl_semi_sync_master_enabled Да Глобальная Да
rpl_semi_sync_master_timeout Да Глобальная Да
rpl_semi_sync_master_trace_level Да Глобальная Да
rpl_semi_sync_master_wait_for_slave_count Да Глобальная Да
rpl_semi_sync_master_wait_no_slave Да Глобальная Да
rpl_semi_sync_master_wait_point Да Глобальная Да
rpl_semi_sync_slave_enabled Да Глобальная Да
rpl_semi_sync_slave_trace_level Да Глобальная Да
rpl_stop_slave_timeout Да Да Да Глобальная Да
schema_definition_cache Да Да Да Глобальная Да
secure-auth Да Да Да
- Переменная: secure_auth Да Глобальная Да
secure-file-priv Да Да Нет
- Переменная: secure_file_priv Да Глобальная Нет
server-id Да Да Да
- Переменная: server_id Да Глобальная Да
server_uuid Да Глобальная Нет
session_track_gtids Да Да Да Обе Да
session_track_schema Да Да Да Обе Да
session_track_state_change Да Да Да Обе Да
session_track_system_variables Да Да Да Обе Да
sha256_password_auto_generate_rsa_keys Да Да Да Глобальная Нет
sha256_password_private_key_path Да Глобальная Нет
sha256_password_proxy_users Да Да Да Глобальная Да
sha256_password_public_key_path Да Глобальная Нет
shared_memory Да Да Да Глобальная Нет
shared_memory_base_name Да Да Да Глобальная Нет
show_compatibility_56 Да Да Да Глобальная Да
show_old_temporals Да Да Да Обе Да
simplified_binlog_gtid_recovery Да Да Да Глобальная Нет
skip_external_locking Да Да Да Глобальная Нет
skip-name-resolve Да Да Нет
- Переменная: skip_name_resolve Да Глобальная Нет
skip-networking Да Да Нет
- Переменная: skip_networking Да Глобальная Нет
skip-show-database Да Да Нет
- Переменная: skip_show_database Да Глобальная Нет
slave_allow_batching Да Да Да Глобальная Да
slave_checkpoint_group Да Да Да Глобальная Да
slave_checkpoint_period Да Да Да Глобальная Да
slave_compressed_protocol Да Да Да Глобальная Да
slave_exec_mode Да Да Да Глобальная Да
slave-load-tmpdir Да Да Нет
- Переменная: slave_load_tmpdir Да Глобальная Нет
slave_max_allowed_packet Да Глобальная Да
slave-net-timeout Да Да Да
- Переменная: slave_net_timeout Да Глобальная Да
slave_parallel_type Да Глобальная Да
slave_parallel_workers Да Да Глобальная Да
slave_pending_jobs_size_max Да Глобальная Да
slave_preserve_commit_order Да Да Глобальная Да
slave_rows_search_algorithms Да Глобальная Да
slave-skip-errors Да Да Нет
- Переменная: slave_skip_errors Да Глобальная Нет
slave_sql_verify_checksum Да Глобальная Да
slave_transaction_retries Да Да Да Глобальная Да
slave_type_conversions Да Да Да Глобальная Нет
slow_launch_time Да Да Да Глобальная Да
slow-query-log Да Да Да
- Переменная: slow_query_log Да Глобальная Да
slow_query_log_file Да Да Да Глобальная Да
socket Да Да Да Глобальная Нет
sort_buffer_size Да Да Да Обе Да
sql_auto_is_null Да Обе Да
sql_big_selects Да Обе Да
sql_buffer_result Да Обе Да
sql_log_bin Да Varies Да
sql_log_off Да Обе Да
sql-mode Да Да Да
- Переменная: sql_mode Да Обе Да
sql_notes Да Обе Да
sql_quote_show_create Да Обе Да
sql_safe_updates Да Обе Да
sql_select_limit Да Обе Да
sql_slave_skip_counter Да Глобальная Да
sql_warnings Да Обе Да
ssl-ca Да Да Нет
- Переменная: ssl_ca Да Глобальная Нет
ssl-capath Да Да Нет
- Переменная: ssl_capath Да Глобальная Нет
ssl-cert Да Да Нет
- Переменная: ssl_cert Да Глобальная Нет
ssl-cipher Да Да Нет
- Переменная: ssl_cipher Да Глобальная Нет
ssl-crl Да Да Нет
- Переменная: ssl_crl Да Глобальная Нет
ssl-crlpath Да Да Нет
- Переменная: ssl_crlpath Да Глобальная Нет
ssl-key Да Да Нет
- Переменная: ssl_key Да Глобальная Нет
stored_program_cache Да Да Да Глобальная Да
stored_program_definition_cache Да Да Да Глобальная Да
super_read_only Да Да Да Глобальная Да
sync_binlog Да Да Да Глобальная Да
sync_master_info Да Да Да Глобальная Да
sync_relay_log Да Да Да Глобальная Да
sync_relay_log_info Да Да Да Глобальная Да
system_time_zone Да Глобальная Нет
table_definition_cache Да Глобальная Да
table_open_cache Да Глобальная Да
table_open_cache_instances Да Глобальная Нет
tablespace_definition_cache Да Да Да Глобальная Да
thread_cache_size Да Да Да Глобальная Да
thread_handling Да Да Да Глобальная Нет
thread_stack Да Да Да Глобальная Нет
time_format Да Глобальная Нет
time_zone Да Обе Да
timestamp Да Сессия Да
tls_version Да Да Да Глобальная Нет
tmp_table_size Да Да Да Обе Да
tmpdir Да Да Да Глобальная Нет
transaction_alloc_block_size Да Да Да Обе Да
transaction_allow_batching Да Сессия Да
transaction_prealloc_size Да Да Да Обе Да
transaction_write_set_extraction Да Да Обе Да
tx_isolation Да Обе Да
tx_read_only Да Обе Да
unique_checks Да Обе Да
updatable_views_with_limit Да Да Да Обе Да
validate_password_check_user_name Да Да Да Глобальная Да
validate_password_dictionary_file Да Глобальная Да
validate_password_length Да Глобальная Да
validate_password_mixed_case_count Да Глобальная Да
validate_password_number_count Да Глобальная Да
validate_password_policy Да Глобальная Да
validate_password_special_char_count Да Глобальная Да
validate_user_plugins Да Глобальная Нет
version Да Глобальная Нет
version_comment Да Глобальная Нет
version_compile_machine Да Глобальная Нет
version_compile_os Да Глобальная Нет
version_tokens_session Да Да Да Обе Да
version_tokens_session_number Да Да Да Обе Нет
wait_timeout Да Да Да Обе Да
warning_count Да Сессия Нет

[a] Эта опция является динамической, но только сервер должен установить эту информацию. Вы не должны установить значение этой переменной вручную.

[b] Эта опция является динамической, но только сервер должен установить эту информацию. Вы не должны установить значение этой переменной вручную.

Для дополнительной системной информации о переменной см. эти разделы:

Некоторые из следующих переменных описаний относятся к включению или выключению переменной. Эти переменные могут быть включены с SET, устанавливая их в ON или 1, или отключены, устанавливая их в OFF или 0. Логические переменные могут быть установлены при запуске в значения ON, TRUE, OFF и FALSE (не чувствительны к регистру), так же как 1 и 0. См. раздел 5.2.5.

Некоторые системные переменные управляют размером буферов или кэшей. Для данного буфера сервер, возможно, должен был бы выделить внутренние структуры данных. Эти структуры, как правило, выделяются от полной памяти, выделенной буферу, количество требуемого пространства может зависеть от платформы. Это означает, что, когда Вы назначаете значение системной переменной, которая управляет размером буфера, количество фактически доступного пространства может отличаться от назначенного значения. В некоторых случаях количество могло бы быть меньше, чем назначенное значение. Также возможно, что сервер скорректирует значение вверх. Например, если Вы назначите значение 0 переменной, для которой минимальное значение 1024, то сервер установит значение в 1024.

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

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

6.1.6. Использование системных переменных

MySQL поддерживает много системных переменных, которые указывают, как он сконфигурирован. Раздел 6.1.5 описывает значение этих переменных. У каждой системной переменной есть значение по умолчанию. Системные переменные могут быть установлены в опциях запуска сервера в командной строке или в файле опций. Большинство из них может быть изменено динамически в то время, как сервер работает, посредством SET, что позволяет Вам изменить работу сервера, не имея необходимости останавливать и перезапускать его. Вы можете также использовать системные значения переменной в выражениях.

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

Системные значения переменной могут быть установлены глобально при запуске сервера при использовании опций в командной строке или в файле опций. Когда Вы используете опцию запуска, чтобы установить переменную, которая берет числовое значение, то это значение может быть дано с суффиксом K, M или G (в любом регистре), чтобы указать на множитель 1024, 10242 или 10243, то есть, килобайт, мегабайт или гигабайт, соответственно. Таким образом, следующая команда запускает сервер с размером кэша запроса 16 мегабайт и максимальным пакетным размером в гигабайт:

mysqld --query_cache_size=16M --max_allowed_packet=1G

В пределах файла опций те переменные установлены так:

[mysqld]
query_cache_size=16M
max_allowed_packet=1G

Регистр букв суффикса не имеет значения: 16M и 16m эквивалентны

Чтобы ограничить максимальное значение, в которое системная переменная может быть установлена во время выполнения с помощью SET, определите этот максимум при использовании опции формы --maximum-var_name=value при запуске сервера. Например, чтобы предотвратить значение query_cache_size от увеличения больше, чем до 32 МБ во время выполнения, используйте опцию --maximum-query_cache_size=32M.

Много системных переменных являются динамическими и могут быть изменены во время выполнения при использовании SET. См. раздел 6.1.6.2. Чтобы изменить системную переменную с SET, обратитесь к ней по имени, произвольно предваренному модификатором:

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

SET может содержать многократные переменные назначения, отделенные запятыми. Это запрос назначает значения на определяемую пользователем переменную и системную переменную:

SET @x = 1, SESSION sql_mode = '';

Если Вы устанавливаете многократные системные переменные, новый модификатор GLOBAL или SESSION используется для следующих назначений, у которых нет никакого определенного модификатора.

Примеры многократного назначения переменных:

SET GLOBAL sort_buffer_size = 1000000, SESSION sort_buffer_size = 1000000;
SET @@global.sort_buffer_size = 1000000, @@local.sort_buffer_size = 1000000;
SET GLOBAL max_connections = 1000, sort_buffer_size = 1000000;

Если любое переменное назначение в SET терпит неудачу, весь запрос терпит неудачу, никакие переменные не изменены, файл mysqld-auto.cnf не изменен.

Если Вы заменяете системную переменную сеанса, значение остается в силе в пределах Вашего сеанса, пока Вы не меняете переменную к иному значению или сеанс не закончится. Изменение не имеет никакого эффекта на другие сеансы.

Если Вы меняете глобальную системную переменную, значение используется для новых сеансов, пока Вы не меняете переменную к иному значению или не завершите сервер. Изменение видимо любому клиенту, который получает доступ к глобальной переменной. Однако, изменение затрагивает соответствующую переменную сеанса только для клиентов, которые соединяются после изменения. Глобальное изменение не затрагивает переменную сеанса для любых текущих сеансов клиента (даже сеанс, в пределах которого выполнена команда SET GLOBAL).

Чтобы сделать глобальную системную переменную постоянной установкой, чтобы это применилось после перезапуска сервера, измените это с SET PERSIST, чтобы сделать запись этого в файл mysqld-auto.cnf. Также возможно использовать SET GLOBAL и вручную изменить my.cnf, но это более тяжело, и ошибка во вручную вводимой установке не могла бы быть обнаружена сразу. SET PERSIST более удобен и избегает возможности накосячить.

Чтобы установить значение GLOBAL к вкомпилированному в MySQL или SESSION к текущему значению соответствующей GLOBAL, установите переменную в DEFAULT. Например, следующие два запроса идентичны в установке значения сеансовой переменной max_join_size к текущему глобальному значению:

SET @@session.max_join_size=DEFAULT;
SET @@session.max_join_size=@@global.max_join_size;

Не все системные переменные могут быть установлены в DEFAULT. В таких случаях назначение DEFAULT приводит к ошибке.

С SET PERSIST (или @@persist.) эффект установки глобальной переменной к ее значению по умолчанию является определенным версией:

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

Чтобы обратиться к значению системной переменной в выражениях, используйте один из модификаторов @@. Например, Вы можете получить значения в SELECT:

SELECT @@global.sql_mode, @@session.sql_mode, @@sql_mode;

Для ссылки на системную переменную в выражении как @@var_name (вместо @@global. или @@session.), MySQL возвращает значение сеанса, если это существует и глобальное значение иначе. Это отличается от SET @@var_name = expr, который всегда обращается к значению сеанса.

@@persist. не разрешен в выражениях.

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

shell> mysql --max_allowed_packet=16M
shell> mysql --max_allowed_packet=16*1024*1024

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

mysql> SET GLOBAL max_allowed_packet=16M;
mysql> SET GLOBAL max_allowed_packet=16*1024*1024;

Некоторые системные переменные могут быть включены с SET, устанавливая их в ON или 1, или отключены, устанавливая их в OFF или 0. Однако, чтобы установить такую переменную в командной строке или в файле опций, Вы должны установить это в 1 или 0, ON или OFF не сработают. Например, в командной строке --delay_key_write=1 работает, но --delay_key_write=ON нет.

Чтобы вывести на экран системные имена переменной и значения, используйте SHOW VARIABLES:

mysql> SHOW VARIABLES;
+-----------------------------+-----------------------------------+
| Variable_name               | Value                             |
+-----------------------------+-----------------------------------+
| auto_increment_increment    | 1                                 |
| auto_increment_offset       | 1                                 |
| automatic_sp_privileges     | ON                                |
| back_log                    | 50                                |
| basedir                     | /home/mysql/                      |
| binlog_cache_size           | 32768                             |
| bulk_insert_buffer_size     | 8388608                           |
| character_set_client        | latin1                            |
| character_set_connection    | latin1                            |
| character_set_database      | latin1                            |
| character_set_results       | latin1                            |
| character_set_server        | latin1                            |
| character_set_system        | utf8                              |
| character_sets_dir          | /home/mysql/share/mysql/charsets/ |
| collation_connection        | latin1_swedish_ci                 |
| collation_database          | latin1_swedish_ci                 |
| collation_server            | latin1_swedish_ci                 |
...
| innodb_autoextend_increment | 8                                 |
| innodb_buffer_pool_size     | 8388608                           |
| innodb_commit_concurrency   | 0                                 |
| innodb_concurrency_tickets  | 500                               |
| innodb_data_file_path       | ibdata1:10M:autoextend            |
| innodb_data_home_dir        |                                   |
...
| version                     | 5.1.6-alpha-log                   |
| version_comment             | Source distribution               |
| version_compile_machine     | i686                              |
| version_compile_os          | suse-linux                        |
| wait_timeout                | 28800                             |
+-----------------------------+-----------------------------------+

С LIKE запрос выводит на экран только те переменные, которые соответствуют образцу. Чтобы получить определенное имя переменной, используйте LIKE:

SHOW VARIABLES LIKE 'max_join_size';
SHOW SESSION VARIABLES LIKE 'max_join_size';

Чтобы получить список переменных чье имя соответствует образцу, используйте символ % в LIKE:

SHOW VARIABLES LIKE '%size%';
SHOW GLOBAL VARIABLES LIKE '%size%';

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

Для SHOW VARIABLES, если Вы не определяете ни одного спецификатора GLOBAL или SESSION, MySQL вернет SESSION.

Причина требования ключевого слова GLOBAL, устанавливая только глобальные переменные: предотвратить проблемы в будущем. Если мы должны были удалить переменную SESSION, у которой есть то же самое имя как у GLOBAL, клиент с привилегией SUPER мог бы случайно изменить GLOBAL вместо SESSION. Если мы добавляем SESSION с тем же самым именем, как GLOBAL, клиент, который намеревается изменить GLOBAL, мог бы сменить только переменную SESSION.

6.1.6.1. Структурированные системные переменные

Структурированная переменная отличается от регулярной системной переменной в двух отношениях:

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

Этот раздел описывает синтаксис для того, чтобы обратиться к структурированным переменным. Ключевые переменные кэша используются для примеров синтаксиса, но определенные детали о том, как ключевые кэши работают, могут быть найдены в другом месте, в разделе 9.10.2.

Чтобы обратиться к компоненту структурированной переменной, Вы можете использовать составное имя в формате instance_name.component_name:

hot_cache.key_buffer_size
hot_cache.key_cache_block_size
cold_cache.key_cache_block_size

Для каждой структурированной системной переменной экземпляр с именем default всегда предопределяется. Если Вы обращаетесь к компоненту структурированной переменной без какого-либо имени экземпляра, используется default. То есть, default.key_buffer_size и key_buffer_size обращаются к той же самой системной переменной.

Структурированные переменные и компоненты следуют этим правилам обозначения:

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

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

shell> mysqld --hot_cache.key_buffer_size=64K

В файле опций используйте этот синтаксис:

[mysqld]
hot_cache.key_buffer_size=64K

Если Вы запускаете сервер с этой опцией, он создает ключевой кэш hot_cache размером в 64KB в дополнение к ключевому кэшу значения по умолчанию, у которого есть размер по умолчанию 8 МБ.

Предположите, что Вы запускаете сервер следующим образом:

shell> mysqld --key_buffer_size=256K \
                 --extra_cache.key_buffer_size=128K \
                 --extra_cache.key_cache_block_size=2048

В этом случае сервер устанавливает размер ключевого кэша по умолчанию в 256 КБ (Вы, возможно, также написали --default.key_buffer_size=256K). Кроме того, сервер создает второй ключевой кэш extra_cache, размером в 128 КБ с размером буферов блоков для того, чтобы кэшировать блоки табличного индекса, в 2048 байт.

Следующий пример запускает сервер с тремя различными ключевыми кэшами, имеющими размеры в соотношении 3:1:1:

shell> mysqld --key_buffer_size=6M \
                 --hot_cache.key_buffer_size=2M \
                 --cold_cache.key_buffer_size=2M

Структурированные переменные значения могут быть установлены и получены также во время выполнения. Например, чтобы установить ключевой кэш hot_cache к размеру 10 МБ, используйте любой из этих запросов:

mysql> SET GLOBAL hot_cache.key_buffer_size = 10*1024*1024;
mysql> SET @@global.hot_cache.key_buffer_size = 10*1024*1024;

Чтобы получить размер кэша, сделайте это:

mysql> SELECT @@global.hot_cache.key_buffer_size;

Однако, следующий запрос не работает. Переменная интерпретируется не как составное имя, а как простая строка для LIKE:

mysql> SHOW GLOBAL VARIABLES LIKE 'hot_cache.key_buffer_size';

Это исключение к возможности использовать структурированные имена переменной где угодно.

6.1.6.2. Динамические системные переменные

Много системных переменных сервера являются динамическими и могут быть установлены во время выполнения при использовании SET GLOBAL или SET SESSION. Вы можете также получить их значения с использование SELECT. См. раздел 6.1.6.

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

Переменные, у которых есть тип string, берут строковое значение. Переменные, у которых есть тип numeric, берут числовое значение. Переменные, у которых есть тип boolean, могут быть 0, 1, ON или OFF. Переменные, которые отмечены как enumeration, обычно должны устанавливаться в одно из доступных значений для переменной, но могут также быть установлены в число, которое соответствует желаемому значению перечисления. Для перечисленных системных переменных первое значение перечисления соответствует 0. Это отличается от столбцов ENUM, для которых первое значение перечисления соответствует 1.

Таблица 6.3. Динамические переменные

Имя Тип Область действия
auto_increment_incrementinteger GLOBAL | SESSION
auto_increment_offsetinteger GLOBAL | SESSION
autocommit boolean GLOBAL | SESSION
automatic_sp_privilegesboolean GLOBAL
avoid_temporal_upgrade booleanGLOBAL
big_tables boolean GLOBAL | SESSION
binlog_cache_size integerGLOBAL
binlog_checksum stringGLOBAL
binlog_direct_non_transactional_updates boolean GLOBAL | SESSION
binlog_error_action enumeration GLOBAL | SESSION
binlog_format enumeration GLOBAL | SESSION
binlog_group_commit_sync_delay integerGLOBAL
binlog_group_commit_sync_no_delay_count integerGLOBAL
binlog_max_flush_queue_time integerGLOBAL
binlog_order_commits booleanGLOBAL
binlog_row_image=image_type enumeration GLOBAL | SESSION
binlog_rows_query_log_events boolean GLOBAL | SESSION
binlog_stmt_cache_size integer GLOBAL
binlogging_impossible_mode enumeration GLOBAL | SESSION
block_encryption_mode string GLOBAL | SESSION
bulk_insert_buffer_size integer GLOBAL | SESSION
character_set_client string GLOBAL | SESSION
character_set_connection string GLOBAL | SESSION
character_set_database string GLOBAL | SESSION
character_set_filesystem string GLOBAL | SESSION
character_set_results string GLOBAL | SESSION
character_set_server string GLOBAL | SESSION
check_proxy_users boolean GLOBAL
collation_connection string GLOBAL | SESSION
collation_database string GLOBAL | SESSION
collation_server string GLOBAL | SESSION
completion_type enumeration GLOBAL | SESSION
concurrent_insert enumerationGLOBAL
connect_timeout integerGLOBAL
debug string GLOBAL | SESSION
debug_sync stringSESSION
default_password_lifetime integerGLOBAL
default_storage_engine enumeration GLOBAL | SESSION
default_tmp_storage_engine enumeration GLOBAL | SESSION
default_week_format integer GLOBAL | SESSION
delay_key_write enumerationGLOBAL
delayed_insert_limit integerGLOBAL
delayed_insert_timeout integerGLOBAL
delayed_queue_size integerGLOBAL
div_precision_increment integer GLOBAL | SESSION
end_markers_in_json boolean GLOBAL | SESSION
enforce_gtid_consistency enumerationGLOBAL
enforce_gtid_consistency enumerationGLOBAL
eq_range_index_dive_limit integer GLOBAL | SESSION
event_scheduler enumerationGLOBAL
executed_gtids_compression_period integerGLOBAL
expire_logs_days integerGLOBAL
flush booleanGLOBAL
flush_time integerGLOBAL
foreign_key_checks boolean GLOBAL | SESSION
ft_boolean_syntax stringGLOBAL
general_log booleanGLOBAL
general_log_file filenameGLOBAL
group_concat_max_len integer GLOBAL | SESSION
gtid_executed_compression_period integerGLOBAL
gtid_mode enumerationGLOBAL
gtid_mode enumerationGLOBAL
gtid_next enumerationSESSION
gtid_purged stringGLOBAL
host_cache_size integerGLOBAL
identity integerSESSION
information_schema_stats enumeration GLOBAL | SESSION
init_connect stringGLOBAL
init_slave stringGLOBAL
innodb_adaptive_flushing booleanGLOBAL
innodb_adaptive_flushing_lwm integerGLOBAL
innodb_adaptive_hash_index booleanGLOBAL
innodb_adaptive_max_sleep_delay integerGLOBAL
innodb_api_bk_commit_interval integerGLOBAL
innodb_api_trx_level integerGLOBAL
innodb_autoextend_increment integerGLOBAL
innodb_background_drop_list_empty booleanGLOBAL
innodb_buffer_pool_dump_at_shutdown booleanGLOBAL
innodb_buffer_pool_dump_now booleanGLOBAL
innodb_buffer_pool_dump_pct integerGLOBAL
innodb_buffer_pool_filename filenameGLOBAL
innodb_buffer_pool_load_abort booleanGLOBAL
innodb_buffer_pool_load_now booleanGLOBAL
innodb_buffer_pool_size integerGLOBAL
innodb_change_buffer_max_size integerGLOBAL
innodb_change_buffering enumerationGLOBAL
innodb_change_buffering_debug integerGLOBAL
innodb_checksum_algorithm enumerationGLOBAL
innodb_cmp_per_index_enabled booleanGLOBAL
innodb_commit_concurrency integerGLOBAL
innodb_compress_debug enumerationGLOBAL
innodb_compression_failure_threshold_pct integerGLOBAL
innodb_compression_level integerGLOBAL
innodb_compression_pad_pct_max integerGLOBAL
innodb_concurrency_tickets integerGLOBAL
innodb_deadlock_detect booleanGLOBAL
innodb_default_row_format enumerationGLOBAL
innodb_disable_sort_file_cache booleanGLOBAL
innodb_fast_shutdown integerGLOBAL
innodb_fil_make_page_dirty_debug integerGLOBAL
innodb_file_per_table booleanGLOBAL
innodb_fill_factor integerGLOBAL
innodb_flush_log_at_timeout integerGLOBAL
innodb_flush_log_at_trx_commit enumerationGLOBAL
innodb_flush_neighbors enumerationGLOBAL
innodb_flush_sync booleanGLOBAL
innodb_flushing_avg_loops integerGLOBAL
innodb_ft_aux_table stringGLOBAL
innodb_ft_enable_diag_print booleanGLOBAL
innodb_ft_enable_stopword booleanGLOBAL
innodb_ft_num_word_optimize integerGLOBAL
innodb_ft_result_cache_limit integerGLOBAL
innodb_ft_server_stopword_table stringGLOBAL
innodb_ft_user_stopword_table string GLOBAL | SESSION
innodb_io_capacity integerGLOBAL
innodb_io_capacity_max integerGLOBAL
innodb_limit_optimistic_insert_debug integerGLOBAL
innodb_lock_wait_timeout integer GLOBAL | SESSION
innodb_log_checksums booleanGLOBAL
innodb_log_compressed_pages booleanGLOBAL
innodb_log_write_ahead_size integerGLOBAL
innodb_lru_scan_depth integerGLOBAL
innodb_max_dirty_pages_pct numericGLOBAL
innodb_max_dirty_pages_pct_lwm numericGLOBAL
innodb_max_purge_lag integerGLOBAL
innodb_max_purge_lag_delay integerGLOBAL
innodb_max_undo_log_size integerGLOBAL
innodb_merge_threshold_set_all_debug integerGLOBAL
innodb_monitor_disable stringGLOBAL
innodb_monitor_enable stringGLOBAL
innodb_monitor_reset stringGLOBAL
innodb_monitor_reset_all stringGLOBAL
innodb_old_blocks_pct integerGLOBAL
innodb_old_blocks_time integerGLOBAL
innodb_online_alter_log_max_size integerGLOBAL
innodb_optimize_fulltext_only booleanGLOBAL
innodb_print_all_deadlocks booleanGLOBAL
innodb_purge_batch_size integerGLOBAL
innodb_purge_rseg_truncate_frequency integerGLOBAL
innodb_random_read_ahead booleanGLOBAL
innodb_read_ahead_threshold integerGLOBAL
innodb_replication_delay integerGLOBAL
innodb_rollback_segments integerGLOBAL
innodb_saved_page_number_debug integerGLOBAL
innodb_spin_wait_delay integerGLOBAL
innodb_stats_auto_recalc booleanGLOBAL
innodb_stats_include_delete_marked booleanGLOBAL
innodb_stats_method enumerationGLOBAL
innodb_stats_on_metadata booleanGLOBAL
innodb_stats_persistent booleanGLOBAL
innodb_stats_persistent_sample_pages integerGLOBAL
innodb_stats_transient_sample_pages integerGLOBAL
innodb_status_output booleanGLOBAL
innodb_status_output_locks booleanGLOBAL
innodb_strict_mode boolean GLOBAL | SESSION
innodb_sync_spin_loops integerGLOBAL
innodb_table_locks boolean GLOBAL | SESSION
innodb_thread_concurrency integerGLOBAL
innodb_thread_sleep_delay integerGLOBAL
innodb_tmpdir dirname GLOBAL | SESSION
innodb_trx_purge_view_update_only_debug booleanGLOBAL
innodb_trx_rseg_n_slots_debug integerGLOBAL
innodb_undo_log_truncate booleanGLOBAL
innodb_undo_logs integerGLOBAL
insert_id integerSESSION
interactive_timeout integer GLOBAL | SESSION
internal_tmp_disk_storage_engine enumerationGLOBAL
join_buffer_size integer GLOBAL | SESSION
keep_files_on_create boolean GLOBAL | SESSION
key_buffer_size integerGLOBAL
key_cache_age_threshold integerGLOBAL
key_cache_block_size integerGLOBAL
key_cache_division_limit integerGLOBAL
keyring_file_data filenameGLOBAL
last_insert_id integerSESSION
lc_messages string GLOBAL | SESSION
lc_time_names string GLOBAL | SESSION
local_infile booleanGLOBAL
lock_wait_timeout integer GLOBAL | SESSION
log_bin_trust_function_creators booleanGLOBAL
log_builtin_as_identified_by_password booleanGLOBAL
log_error_verbosity integerGLOBAL
log_output setGLOBAL
log_queries_not_using_indexes booleanGLOBAL
log_slow_admin_statements booleanGLOBAL
log_slow_slave_statements booleanGLOBAL
log_statements_unsafe_for_binlog booleanGLOBAL
log_syslog booleanGLOBAL
log_syslog_facility stringGLOBAL
log_syslog_include_pid booleanGLOBAL
log_syslog_tag stringGLOBAL
log_throttle_queries_not_using_indexes integerGLOBAL
log_timestamps enumerationGLOBAL
log_warnings integerGLOBAL
long_query_time numeric GLOBAL | SESSION
low_priority_updates boolean GLOBAL | SESSION
master_info_repository stringGLOBAL
master_verify_checksum booleanGLOBAL
max_allowed_packet integer GLOBAL | SESSION
max_binlog_cache_size integerGLOBAL
max_binlog_size integerGLOBAL
max_binlog_stmt_cache_size integerGLOBAL
max_connect_errors integerGLOBAL
max_connections integerGLOBAL
max_delayed_threads integer GLOBAL | SESSION
max_error_count integer GLOBAL | SESSION
max_execution_time integer GLOBAL | SESSION
max_heap_table_size integer GLOBAL | SESSION
max_insert_delayed_threads integer GLOBAL | SESSION
max_join_size integer GLOBAL | SESSION
max_length_for_sort_data integer GLOBAL | SESSION
max_points_in_geometry integerGLOBAL
max_prepared_stmt_count integerGLOBAL
max_relay_log_size integerGLOBAL
max_seeks_for_key integer GLOBAL | SESSION
max_sort_length integer GLOBAL | SESSION
max_sp_recursion_depth integer GLOBAL | SESSION
max_tmp_tables integer GLOBAL | SESSION
max_user_connections integer GLOBAL | SESSION
max_write_lock_count integerGLOBAL
min_examined_row_limit integer GLOBAL | SESSION
myisam_data_pointer_size integerGLOBAL
myisam_max_sort_file_size integerGLOBAL
myisam_repair_threads integer GLOBAL | SESSION
myisam_sort_buffer_size integer GLOBAL | SESSION
myisam_stats_method enumeration GLOBAL | SESSION
myisam_use_mmap booleanGLOBAL
mysql_native_password_proxy_users booleanGLOBAL
mysqlx_connect_timeout integerGLOBAL
mysqlx_max_connections integerGLOBAL
ndb_blob_write_batch_bytes integer GLOBAL | SESSION
ndb_deferred_constraints integer GLOBAL | SESSION
ndb_deferred_constraints integer GLOBAL | SESSION
ndb_distribution enumeration GLOBAL
ndb_distribution={KEYHASH|LINHASH} enumeration GLOBAL
ndb_eventbuffer_free_percent integer GLOBAL
ndb_eventbuffer_max_alloc integer GLOBAL
ndb_force_send boolean GLOBAL | SESSION
ndb_index_stat_enable boolean GLOBAL | SESSION
ndb_index_stat_option string GLOBAL | SESSION
ndb_join_pushdown boolean GLOBAL | SESSION
ndb_log_binlog_index boolean GLOBAL
ndb_log_empty_epochs boolean GLOBAL
ndb_log_empty_update boolean GLOBAL
ndb_log_updated_only boolean GLOBAL
ndb_optimization_delay integer GLOBAL
ndb_recv_thread_cpu_mask bitmap GLOBAL
ndb_report_thresh_binlog_epoch_slip integer GLOBAL
ndb_report_thresh_binlog_mem_usage integer GLOBAL
ndb_show_foreign_key_mock_tables boolean GLOBAL
ndb_table_no_logging boolean SESSION
ndb_use_transactions boolean GLOBAL | SESSION
ndbinfo_max_rows integer GLOBAL | SESSION
ndbinfo_show_hidden boolean GLOBAL | SESSION
net_buffer_length integer GLOBAL | SESSION
net_read_timeout integer GLOBAL | SESSION
net_retry_count integer GLOBAL | SESSION
net_write_timeout integer GLOBAL | SESSION
new boolean GLOBAL | SESSION
offline_mode boolean GLOBAL
old_alter_table boolean GLOBAL | SESSION
old_passwords enumeration GLOBAL | SESSION
optimizer_prune_level boolean GLOBAL | SESSION
optimizer_search_depth integer GLOBAL | SESSION
optimizer_switch set GLOBAL | SESSION
optimizer_trace string GLOBAL | SESSION
optimizer_trace_features string GLOBAL | SESSION
optimizer_trace_limit integer GLOBAL | SESSION
optimizer_trace_max_mem_size integer GLOBAL | SESSION
optimizer_trace_offset integer GLOBAL | SESSION
parser_max_mem_size integer GLOBAL | SESSION
preload_buffer_size integer GLOBAL | SESSION
profiling boolean GLOBAL | SESSION
profiling_history_size integer GLOBAL | SESSION
pseudo_slave_mode integer SESSION
pseudo_thread_id integer SESSION
query_alloc_block_size integer GLOBAL | SESSION
query_cache_limit integer GLOBAL
query_cache_min_res_unit integer GLOBAL
query_cache_size integer GLOBAL
query_cache_type enumeration GLOBAL | SESSION
query_cache_wlock_invalidate boolean GLOBAL | SESSION
query_prealloc_size integer GLOBAL | SESSION
rand_seed1 integer SESSION
rand_seed2 integer SESSION
range_alloc_block_size integer GLOBAL | SESSION
range_optimizer_max_mem_size integer GLOBAL | SESSION
rbr_exec_mode enumeration SESSION
read_buffer_size integer GLOBAL | SESSION
read_only boolean GLOBAL
read_rnd_buffer_size integer GLOBAL | SESSION
relay_log_info_repository string GLOBAL
relay_log_purge boolean GLOBAL
require_secure_transport boolean GLOBAL
rewriter_enabled boolean GLOBAL
rewriter_verbose integer GLOBAL
rpl_semi_sync_master_enabled boolean GLOBAL
rpl_semi_sync_master_timeout integer GLOBAL
rpl_semi_sync_master_trace_level integer GLOBAL
rpl_semi_sync_master_wait_for_slave_count integer GLOBAL
rpl_semi_sync_master_wait_no_slave boolean GLOBAL
rpl_semi_sync_master_wait_point enumeration GLOBAL
rpl_semi_sync_slave_enabled boolean GLOBAL
rpl_semi_sync_slave_trace_level integer GLOBAL
rpl_stop_slave_timeout integer GLOBAL
schema_definition_cache integer GLOBAL
secure_auth boolean GLOBAL
server_id integer GLOBAL
session_track_gtids enumeration GLOBAL | SESSION
session_track_schema boolean GLOBAL | SESSION
session_track_state_change boolean GLOBAL | SESSION
session_track_system_variables string GLOBAL | SESSION
sha256_password_proxy_users boolean GLOBAL
show_compatibility_56 boolean GLOBAL
show_old_temporals boolean GLOBAL | SESSION
slave_allow_batching boolean GLOBAL
slave_checkpoint_group=# integer GLOBAL
slave_checkpoint_period=# integer GLOBAL
slave_compressed_protocol boolean GLOBAL
slave_exec_mode enumeration GLOBAL
slave_max_allowed_packet integer GLOBAL
slave_net_timeout integer GLOBAL
slave_parallel_type enumeration GLOBAL
slave_parallel_workers integer GLOBAL
slave_pending_jobs_size_max integer GLOBAL
slave_preserve_commit_order boolean GLOBAL
slave_rows_search_algorithms=list set GLOBAL
slave_sql_verify_checksum boolean GLOBAL
slave_transaction_retries integer GLOBAL
slow_launch_time integer GLOBAL
slow_query_log boolean GLOBAL
slow_query_log_file filename GLOBAL
sort_buffer_size integer GLOBAL | SESSION
sql_auto_is_null boolean GLOBAL | SESSION
sql_big_selects boolean GLOBAL | SESSION
sql_buffer_result boolean GLOBAL | SESSION
sql_log_bin boolean GLOBAL | SESSION
sql_log_off boolean GLOBAL | SESSION
sql_mode set GLOBAL | SESSION
sql_notes boolean GLOBAL | SESSION
sql_quote_show_create boolean GLOBAL | SESSION
sql_safe_updates boolean GLOBAL | SESSION
sql_select_limit integer GLOBAL | SESSION
sql_slave_skip_counter integer GLOBAL
sql_warnings boolean GLOBAL | SESSION
stored_program_cache integer GLOBAL
stored_program_definition_cache integer GLOBAL
super_read_only boolean GLOBAL
sync_binlog integer GLOBAL
sync_master_info integer GLOBAL
sync_relay_log integer GLOBAL
sync_relay_log_info integer GLOBAL
table_definition_cache integer GLOBAL
table_open_cache integer GLOBAL
tablespace_definition_cache integer GLOBAL
thread_cache_size integer GLOBAL
time_zone string GLOBAL | SESSION
timestamp numeric SESSION
tmp_table_size integer GLOBAL | SESSION
transaction_alloc_block_size integer GLOBAL | SESSION
transaction_allow_batching boolean SESSION
transaction_prealloc_size integer GLOBAL | SESSION
transaction_write_set_extraction enumeration GLOBAL | SESSION
tx_isolation enumeration GLOBAL | SESSION
tx_read_only boolean GLOBAL | SESSION
unique_checks boolean GLOBAL | SESSION
updatable_views_with_limit boolean GLOBAL | SESSION
validate_password_check_user_name boolean GLOBAL
validate_password_dictionary_file filename GLOBAL
validate_password_length integer GLOBAL
validate_password_mixed_case_count integer GLOBAL
validate_password_number_count integer GLOBAL
validate_password_policy enumeration GLOBAL
validate_password_special_char_count integer GLOBAL
version_tokens_session string GLOBAL | SESSION
wait_timeout integer GLOBAL | SESSION

6.1.7. Переменные состояния сервера

Сервер MySQL поддерживает много переменных состояния, которые предоставляют информацию о его работе. Вы можете рассмотреть эти переменные и их значения при использовании SHOW [GLOBAL | SESSION] STATUS (см. раздел 14.7.5.35). Дополнительное ключевое слово GLOBAL соединяет значения по всем соединениям, а SESSION показывает значения для текущего соединения.

mysql> SHOW GLOBAL 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_files       | 3          |
| Created_tmp_tables      | 2          |
...
| Threads_created         | 217        |
| Threads_running         | 88         |
| Uptime                  | 1389872    |
+-------------------------+------------+

Несколько переменных состояния предоставляют количество запросов. Чтобы определить число выполненных запросов, используйте эти отношения:

  SUM(Com_xxx) + Qcache_hits
= Questions + запросы в пределах сохраненных подпрограмм
= Запросы

Много переменных состояния сброшены к 0 FLUSH STATUS.

Следующая таблица приводит все доступные переменные состояния сервера:

Таблица 6.4. Переменные статуса

ИмяТип Область действия
Aborted_clientsinteger GLOBAL
Aborted_connects integer GLOBAL
Acl_cache_items_count GLOBAL
Binlog_cache_disk_use integer GLOBAL
Binlog_cache_use integer GLOBAL
Binlog_stmt_cache_disk_use integer GLOBAL
Binlog_stmt_cache_use integer GLOBAL
Bytes_received integer GLOBAL | SESSION
Bytes_sent integer GLOBAL | SESSION
Com_admin_commands integer GLOBAL | SESSION
Com_alter_db integer GLOBAL | SESSION
Com_alter_event integer GLOBAL | SESSION
Com_alter_function integer GLOBAL | SESSION
Com_alter_procedure integer GLOBAL | SESSION
Com_alter_server integer GLOBAL | SESSION
Com_alter_table integer GLOBAL | SESSION
Com_alter_tablespace integer GLOBAL | SESSION
Com_alter_user integer GLOBAL | SESSION
Com_alter_user_default_role GLOBAL
Com_analyze integer GLOBAL | SESSION
Com_assign_to_keycache integer GLOBAL | SESSION
Com_begin integer GLOBAL | SESSION
Com_binlog integer GLOBAL | SESSION
Com_call_procedure integer GLOBAL | SESSION
Com_change_db integer GLOBAL | SESSION
Com_change_master integer GLOBAL | SESSION
Com_change_repl_filter integer GLOBAL | SESSION
Com_check integer GLOBAL | SESSION
Com_checksum integer GLOBAL | SESSION
Com_commit integer GLOBAL | SESSION
Com_create_db integer GLOBAL | SESSION
Com_create_event integer GLOBAL | SESSION
Com_create_function integer GLOBAL | SESSION
Com_create_index integer GLOBAL | SESSION
Com_create_procedure integer GLOBAL | SESSION
Com_create_role GLOBAL
Com_create_server integer GLOBAL | SESSION
Com_create_table integer GLOBAL | SESSION
Com_create_trigger integer GLOBAL | SESSION
Com_create_udf integer GLOBAL | SESSION
Com_create_user integer GLOBAL | SESSION
Com_create_view integer GLOBAL | SESSION
Com_dealloc_sql integer GLOBAL | SESSION
Com_delete integer GLOBAL | SESSION
Com_delete_multi integer GLOBAL | SESSION
Com_do integer GLOBAL | SESSION
Com_drop_db integer GLOBAL | SESSION
Com_drop_event integer GLOBAL | SESSION
Com_drop_function integer GLOBAL | SESSION
Com_drop_index integer GLOBAL | SESSION
Com_drop_procedure integer GLOBAL | SESSION
Com_drop_role GLOBAL
Com_drop_server integer GLOBAL | SESSION
Com_drop_table integer GLOBAL | SESSION
Com_drop_trigger integer GLOBAL | SESSION
Com_drop_user integer GLOBAL | SESSION
Com_drop_view integer GLOBAL | SESSION
Com_empty_query integer GLOBAL | SESSION
Com_execute_sql integer GLOBAL | SESSION
Com_explain_other integer GLOBAL | SESSION
Com_flush integer GLOBAL | SESSION
Com_get_diagnostics integer GLOBAL | SESSION
Com_grant integer GLOBAL | SESSION
Com_grant_roles GLOBAL
Com_ha_close integer GLOBAL | SESSION
Com_ha_open integer GLOBAL | SESSION
Com_ha_read integer GLOBAL | SESSION
Com_help integer GLOBAL | SESSION
Com_insert integer GLOBAL | SESSION
Com_insert_select integer GLOBAL | SESSION
Com_install_component GLOBAL
Com_install_plugin integer GLOBAL | SESSION
Com_kill integer GLOBAL | SESSION
Com_load integer GLOBAL | SESSION
Com_lock_tables integer GLOBAL | SESSION
Com_optimize integer GLOBAL | SESSION
Com_preload_keys integer GLOBAL | SESSION
Com_prepare_sql integer GLOBAL | SESSION
Com_purge integer GLOBAL | SESSION
Com_purge_before_date integer GLOBAL | SESSION
Com_release_savepoint integer GLOBAL | SESSION
Com_rename_table integer GLOBAL | SESSION
Com_rename_user integer GLOBAL | SESSION
Com_repair integer GLOBAL | SESSION
Com_replace integer GLOBAL | SESSION
Com_replace_select integer GLOBAL | SESSION
Com_reset integer GLOBAL | SESSION
Com_resignal integer GLOBAL | SESSION
Com_revoke integer GLOBAL | SESSION
Com_revoke_all integer GLOBAL | SESSION
Com_revoke_roles GLOBAL
Com_rollback integer GLOBAL | SESSION
Com_rollback_to_savepoint integer GLOBAL | SESSION
Com_savepoint integer GLOBAL | SESSION
Com_select integer GLOBAL | SESSION
Com_set_option integer GLOBAL | SESSION
Com_set_role GLOBAL
Com_show_authors integer GLOBAL | SESSION
Com_show_binlog_events integer GLOBAL | SESSION
Com_show_binlogs integer GLOBAL | SESSION
Com_show_charsets integer GLOBAL | SESSION
Com_show_collations integer GLOBAL | SESSION
Com_show_contributors integer GLOBAL | SESSION
Com_show_create_db integer GLOBAL | SESSION
Com_show_create_event integer GLOBAL | SESSION
Com_show_create_func integer GLOBAL | SESSION
Com_show_create_proc integer GLOBAL | SESSION
Com_show_create_table integer GLOBAL | SESSION
Com_show_create_trigger integer GLOBAL | SESSION
Com_show_create_user integer GLOBAL | SESSION
Com_show_databases integer GLOBAL | SESSION
Com_show_engine_logs integer GLOBAL | SESSION
Com_show_engine_mutex integer GLOBAL | SESSION
Com_show_engine_status integer GLOBAL | SESSION
Com_show_errors integer GLOBAL | SESSION
Com_show_events integer GLOBAL | SESSION
Com_show_fields integer GLOBAL | SESSION
Com_show_function_code integer GLOBAL | SESSION
Com_show_function_status integer GLOBAL | SESSION
Com_show_grants integer GLOBAL | SESSION
Com_show_keys integer GLOBAL | SESSION
Com_show_master_status integer GLOBAL | SESSION
Com_show_ndb_status integer GLOBAL | SESSION
Com_show_new_master integer GLOBAL | SESSION
Com_show_open_tables integer GLOBAL | SESSION
Com_show_plugins integer GLOBAL | SESSION
Com_show_privileges integer GLOBAL | SESSION
Com_show_procedure_code integer GLOBAL | SESSION
Com_show_procedure_status integer GLOBAL | SESSION
Com_show_processlist integer GLOBAL | SESSION
Com_show_profile integer GLOBAL | SESSION
Com_show_profiles integer GLOBAL | SESSION
Com_show_relaylog_events integer GLOBAL | SESSION
Com_show_slave_hosts integer GLOBAL | SESSION
Com_show_slave_status integer GLOBAL | SESSION
Com_show_slave_status_nonblocking integer GLOBAL | SESSION
Com_show_status integer GLOBAL | SESSION
Com_show_storage_engines integer GLOBAL | SESSION
Com_show_table_status integer GLOBAL | SESSION
Com_show_tables integer GLOBAL | SESSION
Com_show_triggers integer GLOBAL | SESSION
Com_show_variables integer GLOBAL | SESSION
Com_show_warnings integer GLOBAL | SESSION
Com_shutdown integer GLOBAL | SESSION
Com_signal integer GLOBAL | SESSION
Com_slave_start integer GLOBAL | SESSION
Com_slave_stop integer GLOBAL | SESSION
Com_stmt_close integer GLOBAL | SESSION
Com_stmt_execute integer GLOBAL | SESSION
Com_stmt_fetch integer GLOBAL | SESSION
Com_stmt_prepare integer GLOBAL | SESSION
Com_stmt_reprepare integer GLOBAL | SESSION
Com_stmt_reset integer GLOBAL | SESSION
Com_stmt_send_long_data integer GLOBAL | SESSION
Com_truncate integer GLOBAL | SESSION
Com_uninstall_component GLOBAL
Com_uninstall_plugin integer GLOBAL | SESSION
Com_unlock_tables integer GLOBAL | SESSION
Com_update integer GLOBAL | SESSION
Com_update_multi integer GLOBAL | SESSION
Com_xa_commit integer GLOBAL | SESSION
Com_xa_end integer GLOBAL | SESSION
Com_xa_prepare integer GLOBAL | SESSION
Com_xa_recover integer GLOBAL | SESSION
Com_xa_rollback integer GLOBAL | SESSION
Com_xa_start integer GLOBAL | SESSION
Compression integer SESSION
Connection_errors_accept integer GLOBAL
Connection_errors_internal integer GLOBAL
Connection_errors_max_connections integer GLOBAL
Connection_errors_peer_addr integer GLOBAL
Connection_errors_select integer GLOBAL
Connection_errors_tcpwrap integer GLOBAL
Connections integer GLOBAL
Created_tmp_disk_tables integer GLOBAL | SESSION
Created_tmp_files integer GLOBAL
Created_tmp_tables integer GLOBAL | SESSION
Delayed_errors integer GLOBAL
Delayed_insert_threads integer GLOBAL
Delayed_writes integer GLOBAL
Flush_commands integer GLOBAL
Handler_commit integer GLOBAL | SESSION
Handler_delete integer GLOBAL | SESSION
Handler_external_lock integer GLOBAL | SESSION
Handler_mrr_init integer GLOBAL | SESSION
Handler_prepare integer GLOBAL | SESSION
Handler_read_first integer GLOBAL | SESSION
Handler_read_key integer GLOBAL | SESSION
Handler_read_last integer GLOBAL | SESSION
Handler_read_next integer GLOBAL | SESSION
Handler_read_prev integer GLOBAL | SESSION
Handler_read_rnd integer GLOBAL | SESSION
Handler_read_rnd_next integer GLOBAL | SESSION
Handler_rollback integer GLOBAL | SESSION
Handler_savepoint integer GLOBAL | SESSION
Handler_savepoint_rollback integer GLOBAL | SESSION
Handler_update integer GLOBAL | SESSION
Handler_write integer GLOBAL | SESSION
Innodb_available_undo_logs integer GLOBAL
Innodb_buffer_pool_bytes_data integer GLOBAL
Innodb_buffer_pool_bytes_dirty integer GLOBAL
Innodb_buffer_pool_dump_status string GLOBAL
Innodb_buffer_pool_load_status string GLOBAL
Innodb_buffer_pool_pages_data integer GLOBAL
Innodb_buffer_pool_pages_dirty integer GLOBAL
Innodb_buffer_pool_pages_flushed integer GLOBAL
Innodb_buffer_pool_pages_free integer GLOBAL
Innodb_buffer_pool_pages_latched integer GLOBAL
Innodb_buffer_pool_pages_misc integer GLOBAL
Innodb_buffer_pool_pages_total integer GLOBAL
Innodb_buffer_pool_read_ahead integer GLOBAL
Innodb_buffer_pool_read_ahead_evicted integer GLOBAL
Innodb_buffer_pool_read_ahead_rnd integer GLOBAL
Innodb_buffer_pool_read_requests integer GLOBAL
Innodb_buffer_pool_reads integer GLOBAL
Innodb_buffer_pool_resize_status string GLOBAL
Innodb_buffer_pool_wait_free integer GLOBAL
Innodb_buffer_pool_write_requests integer GLOBAL
Innodb_data_fsyncs integer GLOBAL
Innodb_data_pending_fsyncs integer GLOBAL
Innodb_data_pending_reads integer GLOBAL
Innodb_data_pending_writes integer GLOBAL
Innodb_data_read integer GLOBAL
Innodb_data_reads integer GLOBAL
Innodb_data_writes integer GLOBAL
Innodb_data_written integer GLOBAL
Innodb_dblwr_pages_written integer GLOBAL
Innodb_dblwr_writes integer GLOBAL
Innodb_have_atomic_builtins integer GLOBAL
Innodb_log_waits integer GLOBAL
Innodb_log_write_requests integer GLOBAL
Innodb_log_writes integer GLOBAL
Innodb_num_open_files integer GLOBAL
Innodb_os_log_fsyncs integer GLOBAL
Innodb_os_log_pending_fsyncs integer GLOBAL
Innodb_os_log_pending_writes integer GLOBAL
Innodb_os_log_written integer GLOBAL
Innodb_page_size integer GLOBAL
Innodb_pages_created integer GLOBAL
Innodb_pages_read integer GLOBAL
Innodb_pages_written integer GLOBAL
Innodb_row_lock_current_waits integer GLOBAL
Innodb_row_lock_time integer GLOBAL
Innodb_row_lock_time_avg integer GLOBAL
Innodb_row_lock_time_max integer GLOBAL
Innodb_row_lock_waits integer GLOBAL
Innodb_rows_deleted integer GLOBAL
Innodb_rows_inserted integer GLOBAL
Innodb_rows_read integer GLOBAL
Innodb_rows_updated integer GLOBAL
Innodb_truncated_status_writes integer GLOBAL
Key_blocks_not_flushed integer GLOBAL
Key_blocks_unused integer GLOBAL
Key_blocks_used integer GLOBAL
Key_read_requests integer GLOBAL
Key_reads integer GLOBAL
Key_write_requests integer GLOBAL
Key_writes integer GLOBAL
Last_query_cost numeric SESSION
Last_query_partial_plans integer SESSION
Locked_connects integer GLOBAL
Max_execution_time_exceeded integer GLOBAL | SESSION
Max_execution_time_set integer GLOBAL | SESSION
Max_execution_time_set_failed integer GLOBAL | SESSION
Max_used_connections integer GLOBAL
Max_used_connections_time datetime GLOBAL
mecab_charset string GLOBAL
Mysqlx_bytes_received integer GLOBAL | SESSION
Mysqlx_bytes_sent integer GLOBAL | SESSION
Mysqlx_connection_accept_errors integer GLOBAL | SESSION
Mysqlx_connection_errors integer GLOBAL | SESSION
Mysqlx_connections_accepted integer GLOBAL
Mysqlx_connections_closed integer GLOBAL
Mysqlx_connections_rejected integer GLOBAL
Mysqlx_crud_delete integer GLOBAL | SESSION
Mysqlx_crud_find integer GLOBAL | SESSION
Mysqlx_crud_insert integer GLOBAL | SESSION
Mysqlx_crud_update integer GLOBAL | SESSION
Mysqlx_errors_sent integer GLOBAL | SESSION
Mysqlx_expect_close integer GLOBAL | SESSION
Mysqlx_expect_open integer GLOBAL | SESSION
Mysqlx_init_error integer GLOBAL | SESSION
Mysqlx_notice_other_sent integer GLOBAL | SESSION
Mysqlx_notice_warning_sent integer GLOBAL | SESSION
Mysqlx_rows_sent integer GLOBAL | SESSION
Mysqlx_sessions integer GLOBAL
Mysqlx_sessions_accepted integer GLOBAL
Mysqlx_sessions_closed integer GLOBAL
Mysqlx_sessions_fatal_error integer GLOBAL
Mysqlx_sessions_killed integer GLOBAL
Mysqlx_sessions_rejected integer GLOBAL
Mysqlx_ssl_accept_renegotiates integer GLOBAL
Mysqlx_ssl_accepts integer GLOBAL
Mysqlx_ssl_active integer GLOBAL | SESSION
Mysqlx_ssl_cipher integer GLOBAL | SESSION
Mysqlx_ssl_cipher_list integer GLOBAL | SESSION
Mysqlx_ssl_ctx_verify_depth integer GLOBAL | SESSION
Mysqlx_ssl_ctx_verify_mode integer GLOBAL | SESSION
Mysqlx_ssl_finished_accepts integer GLOBAL
Mysqlx_ssl_server_not_after integer GLOBAL
Mysqlx_ssl_server_not_before integer GLOBAL
Mysqlx_ssl_verify_depth integer GLOBAL
Mysqlx_ssl_verify_mode integer GLOBAL
Mysqlx_ssl_version integer GLOBAL | SESSION
Mysqlx_stmt_create_collection integer GLOBAL | SESSION
Mysqlx_stmt_create_collection_index integer GLOBAL | SESSION
Mysqlx_stmt_disable_notices integer GLOBAL | SESSION
Mysqlx_stmt_drop_collection integer GLOBAL | SESSION
Mysqlx_stmt_drop_collection_index integer GLOBAL | SESSION
Mysqlx_stmt_enable_notices integer GLOBAL | SESSION
Mysqlx_stmt_execute_sql integer GLOBAL | SESSION
Mysqlx_stmt_execute_xplugin integer GLOBAL | SESSION
Mysqlx_stmt_kill_client integer GLOBAL | SESSION
Mysqlx_stmt_list_clients integer GLOBAL | SESSION
Mysqlx_stmt_list_notices integer GLOBAL | SESSION
Mysqlx_stmt_list_objects integer GLOBAL | SESSION
Mysqlx_stmt_ping integer GLOBAL | SESSION
Mysqlx_worker_threads integer GLOBAL
Mysqlx_worker_threads_active integer GLOBAL
Ndb_api_bytes_received_count integer GLOBAL
Ndb_api_bytes_received_count_session integer SESSION
Ndb_api_bytes_received_count_slave integer GLOBAL
Ndb_api_bytes_sent_count integer GLOBAL
Ndb_api_bytes_sent_count_slave integer GLOBAL
Ndb_api_event_bytes_count_injector integer GLOBAL
Ndb_api_event_data_count_injector integer GLOBAL
Ndb_api_event_nondata_count_injector integer GLOBAL
Ndb_api_pk_op_count integer GLOBAL
Ndb_api_pk_op_count_session integer SESSION
Ndb_api_pk_op_count_slave integer GLOBAL
Ndb_api_pruned_scan_count integer GLOBAL
Ndb_api_pruned_scan_count_session integer SESSION
Ndb_api_range_scan_count_slave integer GLOBAL
Ndb_api_read_row_count integer GLOBAL
Ndb_api_read_row_count_session integer SESSION
Ndb_api_scan_batch_count_slave integer GLOBAL
Ndb_api_table_scan_count integer GLOBAL
Ndb_api_table_scan_count_session integer SESSION
Ndb_api_trans_abort_count integer GLOBAL
Ndb_api_trans_abort_count_session integer SESSION
Ndb_api_trans_abort_count_slave integer GLOBAL
Ndb_api_trans_close_count integer GLOBAL
Ndb_api_trans_close_count_session integer SESSION
Ndb_api_trans_close_count_slave integer GLOBAL
Ndb_api_trans_commit_count integer GLOBAL
Ndb_api_trans_commit_count_session integer SESSION
Ndb_api_trans_commit_count_slave integer GLOBAL
Ndb_api_trans_local_read_row_count_slave integer GLOBAL
Ndb_api_trans_start_count integer GLOBAL
Ndb_api_trans_start_count_session integer SESSION
Ndb_api_trans_start_count_slave integer GLOBAL
Ndb_api_uk_op_count integer GLOBAL
Ndb_api_uk_op_count_slave integer GLOBAL
Ndb_api_wait_exec_complete_count integer GLOBAL
Ndb_api_wait_exec_complete_count_session integer SESSION
Ndb_api_wait_exec_complete_count_slave integer GLOBAL
Ndb_api_wait_meta_request_count integer GLOBAL
Ndb_api_wait_meta_request_count_session integer SESSION
Ndb_api_wait_nanos_count integer GLOBAL
Ndb_api_wait_nanos_count_session integer SESSION
Ndb_api_wait_nanos_count_slave integer GLOBAL
Ndb_api_wait_scan_result_count integer GLOBAL
Ndb_api_wait_scan_result_count_session integer SESSION
Ndb_api_wait_scan_result_count_slave integer GLOBAL
Ndb_cluster_node_id integer GLOBAL | SESSION
Ndb_config_from_host integer GLOBAL | SESSION
Ndb_config_from_port integer GLOBAL | SESSION
Ndb_conflict_fn_epoch_trans integer GLOBAL
Ndb_conflict_fn_max integer GLOBAL
Ndb_conflict_fn_old integer GLOBAL
Ndb_conflict_trans_detect_iter_count integer GLOBAL
Ndb_conflict_trans_row_reject_count integer GLOBAL
Ndb_last_commit_epoch_server integer GLOBAL
Ndb_last_commit_epoch_session integer SESSION
Ndb_number_of_data_nodes integer GLOBAL
Ndb_pushed_queries_defined integer GLOBAL
Ndb_pushed_queries_executed integer GLOBAL
Ndb_scan_count integer GLOBAL
Not_flushed_delayed_rows integer GLOBAL
Ongoing_anonymous_gtid_violating_transaction_count integer GLOBAL
Ongoing_anonymous_transaction_count integer GLOBAL
Ongoing_automatic_gtid_violating_transaction_count integer GLOBAL
Open_files integer GLOBAL
Open_streams integer GLOBAL
Open_table_definitions integer GLOBAL
Open_tables integer GLOBAL | SESSION
Opened_files integer GLOBAL
Opened_table_definitions integer GLOBAL | SESSION
Opened_tables integer GLOBAL | SESSION
Performance_schema_accounts_lost integer GLOBAL
Performance_schema_cond_classes_lost integer GLOBAL
Performance_schema_cond_instances_lost integer GLOBAL
Performance_schema_digest_lost integer GLOBAL
Performance_schema_file_classes_lost integer GLOBAL
Performance_schema_file_handles_lost integer GLOBAL
Performance_schema_file_instances_lost integer GLOBAL
Performance_schema_hosts_lost integer GLOBAL
Performance_schema_index_stat_lost integer GLOBAL
Performance_schema_locker_lost integer GLOBAL
Performance_schema_memory_classes_lost integer GLOBAL
Performance_schema_metadata_lock_lost integer GLOBAL
Performance_schema_mutex_classes_lost integer GLOBAL
Performance_schema_mutex_instances_lost integer GLOBAL
Performance_schema_nested_statement_lost integer GLOBAL
Performance_schema_prepared_statements_lost integer GLOBAL
Performance_schema_program_lost integer GLOBAL
Performance_schema_rwlock_classes_lost integer GLOBAL
Performance_schema_rwlock_instances_lost integer GLOBAL
Performance_schema_session_connect_attrs_longest_seen GLOBAL
Performance_schema_session_connect_attrs_lost integer GLOBAL
Performance_schema_socket_classes_lost integer GLOBAL
Performance_schema_socket_instances_lost integer GLOBAL
Performance_schema_stage_classes_lost integer GLOBAL
Performance_schema_statement_classes_lost integer GLOBAL
Performance_schema_table_handles_lost integer GLOBAL
Performance_schema_table_instances_lost integer GLOBAL
Performance_schema_table_lock_stat_lost integer GLOBAL
Performance_schema_thread_classes_lost integer GLOBAL
Performance_schema_thread_instances_lost integer GLOBAL
Performance_schema_users_lost integer GLOBAL
Prepared_stmt_count integer GLOBAL
Qcache_free_blocks integer GLOBAL
Qcache_free_memory integer GLOBAL
Qcache_hits integer GLOBAL
Qcache_inserts integer GLOBAL
Qcache_lowmem_prunes integer GLOBAL
Qcache_not_cached integer GLOBAL
Qcache_queries_in_cache integer GLOBAL
Qcache_total_blocks integer GLOBAL
Queries integer GLOBAL | SESSION
Questions integer GLOBAL | SESSION
Rewriter_number_loaded_rules integer GLOBAL
Rewriter_number_reloads integer GLOBAL
Rewriter_number_rewritten_queries integer GLOBAL
Rewriter_reload_error boolean GLOBAL
Rpl_semi_sync_master_clients integer GLOBAL
Rpl_semi_sync_master_net_avg_wait_time integer GLOBAL
Rpl_semi_sync_master_net_wait_time integer GLOBAL
Rpl_semi_sync_master_net_waits integer GLOBAL
Rpl_semi_sync_master_no_times integer GLOBAL
Rpl_semi_sync_master_no_tx integer GLOBAL
Rpl_semi_sync_master_status boolean GLOBAL
Rpl_semi_sync_master_timefunc_failures integer GLOBAL
Rpl_semi_sync_master_tx_avg_wait_time integer GLOBAL
Rpl_semi_sync_master_tx_wait_time integer GLOBAL
Rpl_semi_sync_master_tx_waits integer GLOBAL
Rpl_semi_sync_master_wait_pos_backtraverse integer GLOBAL
Rpl_semi_sync_master_wait_sessions integer GLOBAL
Rpl_semi_sync_master_yes_tx integer GLOBAL
Rpl_semi_sync_slave_status boolean GLOBAL
Rsa_public_key string GLOBAL
Select_full_join integer GLOBAL | SESSION
Select_full_range_join integer GLOBAL | SESSION
Select_range integer GLOBAL | SESSION
Select_range_check integer GLOBAL | SESSION
Select_scan integer GLOBAL | SESSION
Slave_heartbeat_period numeric GLOBAL
Slave_last_heartbeat GLOBAL
Slave_open_temp_tables integer GLOBAL
Slave_received_heartbeats GLOBAL
Slave_retried_transactions integer GLOBAL
Slave_running string GLOBAL
Slow_launch_threads integer GLOBAL | SESSION
Slow_queries integer GLOBAL | SESSION
Sort_merge_passes integer GLOBAL | SESSION
Sort_range integer GLOBAL | SESSION
Sort_rows integer GLOBAL | SESSION
Sort_scan integer GLOBAL | SESSION
Ssl_accept_renegotiates integer GLOBAL
Ssl_accepts integer GLOBAL
Ssl_callback_cache_hits integer GLOBAL
Ssl_cipher string GLOBAL | SESSION
Ssl_cipher_list string GLOBAL | SESSION
Ssl_client_connects integer GLOBAL
Ssl_connect_renegotiates integer GLOBAL
Ssl_ctx_verify_depth integer GLOBAL
Ssl_ctx_verify_mode integer GLOBAL
Ssl_default_timeout integer GLOBAL | SESSION
Ssl_finished_accepts integer GLOBAL
Ssl_finished_connects integer GLOBAL
Ssl_server_not_after integer GLOBAL | SESSION
Ssl_server_not_before integer GLOBAL | SESSION
Ssl_session_cache_hits integer GLOBAL
Ssl_session_cache_misses integer GLOBAL
Ssl_session_cache_mode string GLOBAL
Ssl_session_cache_overflows integer GLOBAL
Ssl_session_cache_size integer GLOBAL
Ssl_session_cache_timeouts integer GLOBAL
Ssl_sessions_reused integer GLOBAL | SESSION
Ssl_used_session_cache_entries integer GLOBAL
Ssl_verify_depth integer GLOBAL | SESSION
Ssl_verify_mode integer GLOBAL | SESSION
Ssl_version string GLOBAL | SESSION
Table_locks_immediate integer GLOBAL
Table_locks_waited integer GLOBAL
Table_open_cache_hits integer GLOBAL | SESSION
Table_open_cache_misses integer GLOBAL | SESSION
Table_open_cache_overflows integer GLOBAL | SESSION
Tc_log_max_pages_used integer GLOBAL
Tc_log_page_size integer GLOBAL
Tc_log_page_waits integer GLOBAL
Threads_cached integer GLOBAL
Threads_connected integer GLOBAL
Threads_created integer GLOBAL
Threads_running integer GLOBAL
Uptime integer GLOBAL
Uptime_since_flush_status integer GLOBAL
validate_password_dictionary_file_last_parsed datetime GLOBAL
validate_password_dictionary_file_words_count integer GLOBAL

У переменных состояния есть следующие значения.

6.1.8. Режимы SQL сервера

Сервер MySQL может работать в различных режимах SQL и может применить эти режимы по-другому для различных клиентов, в зависимости от значения value of the sql_mode. DBA может установить глобальный режим SQL, чтобы соответствовать эксплуатационным требованиям сервера, каждое приложение может установить свой сеансовый режим SQL

Режимы затрагивают синтаксис SQL и подтверждение правильности данных. Это облегчает использовать MySQL в различной окружающей среде и использование MySQL вместе с другими серверами базы данных.

Для ответов на вопросы, которые часто спрашивают о режимах SQL в MySQL см. раздел A.3.

Работая с InnoDB, рассмотрите также переменную innodb_strict_mode . Это включает дополнительные проверки в InnoDB.

Установка режима SQL

Значение по умолчанию режима SQL в MySQL 8.0 включает эти режимы: ONLY_FULL_GROUP_BY , STRICT_TRANS_TABLES , NO_ZERO_IN_DATE, NO_ZERO_DATE, ERROR_FOR_DIVISION_BY_ZERO, NO_AUTO_CREATE_USER и NO_ENGINE_SUBSTITUTION.

ONLY_FULL_GROUP_BY и STRICT_TRANS_TABLES были добавлены в MySQL 5.7.5. NO_AUTO_CREATE_USER был добавлен в MySQL 5.7.7. ERROR_FOR_DIVISION_BY_ZERO, NO_ZERO_DATE и NO_ZERO_IN_DATE были добавлены в MySQL 5.7.8. Для дополнительного обсуждения относительно этих изменений значения по умолчанию режима SQL см. здесь.

Чтобы установить режим SQL при запуске сервера, используйте опцию командной строки --sql-mode="modes" или sql-mode="modes " в файле опций, например, в my.cnf (Unix) или my.ini (Windows). modes это список различных режимов, отделенных запятыми. Чтобы очистить режим SQL явно, установите это в пустую строку с помощью --sql-mode="" в командной строке или sql-mode="" в файле опций.

Программы установки MySQL могут сконфигурировать режим SQL во время процесса установки.

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

Чтобы изменить режим SQL во время выполнения, установите глобальное или сеансовое значение sql_mode через SET:

SET GLOBAL sql_mode = 'modes';
SET SESSION sql_mode = 'modes';

Установка GLOBAL требует привилегию SUPER и влияет на работу всех клиентов, которые соединяются с этого времени. Установка SESSION затрагивает только текущего клиента. Каждый клиент может изменить его сеансовое значение sql_mode в любое время.

Чтобы определить глобальное или сеансовое значение sql_mode, используйте следующие запросы:

SELECT @@GLOBAL.sql_mode;
SELECT @@SESSION.sql_mode;

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

При репликации разделенных таблиц разные режимы SQL на ведущем и ведомом устройствах могут также привести к проблемам. Для лучших результатов Вы должны всегда использовать тот же самый режим SQL на ведущем и ведомом серверах.

См. раздел 20.6.

Самые важные режимы SQL

Самые важные sql_mode :

Когда это руководство отсылает к строгому режиму , это означает режим с STRICT_TRANS_TABLES , STRICT_ALL_TABLES или обоими.

Полный список режимов SQL

Следующий список описывает все режимы SQL:

Комбинация режимов SQL

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

Строгий режим SQL

Строгий режим управляет, как MySQL обрабатывает недопустимые или недостающие значения в запросах изменения данных, например, в INSERT или UPDATE. Значение может быть недопустимым по нескольким причинам. Например, у этого мог бы быть неправильный тип данных для столбца, или это могло бы быть вне диапазона. Значение отсутствует, когда новая строка, которая будет вставлена, не содержит значение для столбца не-NULL, который не имеет явный параметр DEFAULT в его определении. Для столбца NULL если значение отсутствует, вставлено NULL. Строгий режим также затрагивает запросы DDL, например, CREATE TABLE.

Если строгий режим не включен, MySQL вставляет скорректированные значения для недопустимых или недостающих значений и производит предупреждения (см. раздел 14.7.5.40). В строгом режиме Вы можете произвести это поведение при использовании INSERT IGNORE или UPDATE IGNORE.

Для запросов SELECT которые не изменяют данные, недопустимые значения производят предупреждение в строгом режиме, а не ошибку.

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

Строгий режим не затрагивает, проверены ли ограничения внешнего ключа. foreign_key_checks может использоваться для этого. См. раздел 6.1.5.

Строгий режим SQL работает, если также STRICT_ALL_TABLES или STRICT_TRANS_TABLES включены, хотя эффекты этих режимов несколько отличаются:

Строгий режим влияет на обработку деления на ноль, на нулевые даты и ноли в датах следующим образом:

Строгий режим влияет на обработку деления на ноль, на нулевые даты и ноли в датах в соединении с режимами ERROR_FOR_DIVISION_BY_ZERO, NO_ZERO_DATE и NO_ZERO_IN_DATE .

Сравнение ключевого слова IGNORE и строгого режима SQL

Этот раздел сравнивает эффект на выполнение запроса ключевого слова IGNORE (которое понижает ошибки до предупреждений) и строгого режима SQL (который повышает предупреждения до ошибок). Это описывает, какие запросы они затрагивают, и к каким ошибкам относятся.

Следующая таблица представляет итоговое сравнение поведения запросов, когда значение по умолчанию должно произвести ошибку против предупреждения. Пример того, когда значение по умолчанию должно произвести ошибку: вставка NULL в столбец NOT NULL. Пример того, когда значение по умолчанию должно произвести предупреждение: вставка значения неправильного типа данных в столбец (например, вставка строки 'abc' в столбец целого числа).

Операционный режим Когда значение по умолчанию выдаст ошибку Когда значение по умолчанию выдаст предупреждение
Без IGNORE или строгий режим SQL ОшибкаПредупреждение
Без IGNOREПредупреждение Warning (как если без IGNORE или строгий режим SQL)
Со строгим режимом SQL Error (как если без IGNORE или строгий режим SQL) Ошибка
С IGNORE и строгий режим SQL ПредупреждениеПредупреждение

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

Действие IGNORE на выполнение запросов

Несколько запросов в MySQL поддерживают дополнительное ключевое слово IGNORE. Это ключевое слово заставляет сервер понижать определенные типы ошибок и производить предупреждения вместо них. Для запросов с многими строками IGNORE заставляет запрос переходить к следующей строке вместо прерывания.

Например, если таблица t имеет столбец первичного ключа i, попытка вставить то же самое значение i в много строк обычно производит ключевую ошибку:

mysql> INSERT INTO t (i) VALUES(1),(1);
ERROR 1062 (23000): Duplicate entry '1' for key 'PRIMARY'

С IGNORE строка, содержащая дубликат ключа, не вставлена, но предупреждение происходит вместо ошибки:

mysql> INSERT IGNORE INTO t (i) VALUES(1),(1);
Query OK, 1 row affected, 1 warning (0.01 sec)
Records: 2  Duplicates: 1  Warnings: 1

mysql> SHOW WARNINGS;
+---------+------+---------------------------------------+
| Level   | Code | Message                               |
+---------+------+---------------------------------------+
| Warning | 1062 | Duplicate entry '1' for key 'PRIMARY' |
+---------+------+---------------------------------------+
1 row in set (0.00 sec)

Эти запросы поддерживают ключевое слово IGNORE:

Ключевое слово IGNORE относится к следующим ошибкам:

ER_BAD_NULL_ERROR
ER_DUP_ENTRY
ER_DUP_ENTRY_WITH_KEY_NAME
ER_DUP_KEY
ER_NO_PARTITION_FOR_GIVEN_VALUE
ER_NO_PARTITION_FOR_GIVEN_VALUE_SILENT
ER_NO_REFERENCED_ROW_2
ER_ROW_DOES_NOT_MATCH_GIVEN_PARTITION_SET
ER_ROW_IS_REFERENCED_2
ER_SUBQUERY_NO_1_ROW
ER_VIEW_CHECK_FAILED
Действие строгого режима SQL на выполнение запросов

Сервер MySQL может работать в различных режимах SQL и применить эти режимы по-другому для различных клиентов, в зависимости от значения sql_mode. В строгом режиме SQL сервер повышает определенные предупреждения до ошибок.

Например, в нестрогом режиме SQL вставка строки 'abc' в столбец integer приводит к преобразованию значения к 0 и предупреждению:

mysql> SET sql_mode = '';
Query OK, 0 rows affected (0.00 sec)

mysql> INSERT INTO t (i) VALUES('abc');
Query OK, 1 row affected, 1 warning (0.01 sec)

mysql> SHOW WARNINGS;
+---------+------+--------------------------------------------------------+
| Level   | Code | Message                                                |
+---------+------+--------------------------------------------------------+
| Warning | 1366 | Incorrect integer value: 'abc' for column 'i' at row 1 |
+---------+------+--------------------------------------------------------+
1 row in set (0.00 sec)

В строгом режиме SQL недопустимое значение отклонено с ошибкой:

mysql> SET sql_mode = 'STRICT_ALL_TABLES';
Query OK, 0 rows affected (0.00 sec)

mysql> INSERT INTO t (i) VALUES('abc');
ERROR 1366 (HY000): Incorrect integer value: 'abc' for column 'i' at row 1

См. раздел 6.1.8.

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

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

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

ER_BAD_NULL_ERROR
ER_CUT_VALUE_GROUP_CONCAT
ER_DATA_TOO_LONG
ER_DATETIME_FUNCTION_OVERFLOW
ER_DIVISION_BY_ZERO
ER_INVALID_ARGUMENT_FOR_LOGARITHM
ER_NO_DEFAULT_FOR_FIELD
ER_NO_DEFAULT_FOR_VIEW_FIELD
ER_TOO_LONG_KEY
ER_TRUNCATED_WRONG_VALUE
ER_TRUNCATED_WRONG_VALUE_FOR_FIELD
ER_WARN_DATA_OUT_OF_RANGE
ER_WARN_NULL_TO_NOTNULL
ER_WARN_TOO_FEW_RECORDS
ER_WRONG_ARGUMENTS
ER_WRONG_VALUE_FOR_TYPE
WARN_DATA_TRUNCATED

Изменения режима SQL в MySQL 5.7

В MySQL 5.7.5 режим SQL ONLY_FULL_GROUP_BY включен по умолчанию потому что обработка GROUP BY стала более сложной, чтобы включать обнаружение функциональных зависимостей. Однако, если Вы считаете ONLY_FULL_GROUP_BY причиной проблем для существующих приложений, которые будут отклонены, любое из этих действий должно восстановить работу:

С MySQL 5.7.4 ERROR_FOR_DIVISION_BY_ZERO, NO_ZERO_DATE и NO_ZERO_IN_DATE устарели. С MySQL 5.7.4 до 5.7.7 они ничего не делают когда названы явно. Вместо этого их эффекты включены в эффекты строгого режима SQL (STRICT_ALL_TABLES или STRICT_TRANS_TABLES). Другими словами, строгий режим означает ту же самую вещь в тех версиях как строгий режим до 5.7.4 плюс ERROR_FOR_DIVISION_BY_ZERO, NO_ZERO_DATE и NO_ZERO_IN_DATE .

MySQL 5.7.4 изменен, чтобы сделать строгий режим более строгим включением ERROR_FOR_DIVISION_BY_ZERO, NO_ZERO_DATE и NO_ZERO_IN_DATE. Это вызывает некоторые проблемы. Например, в MySQL 5.6 со строгим режимом без NO_ZERO_DATE столбцы TIMESTAMP могут быть определены с DEFAULT '0000-00-00 00:00:00'. В MySQL 5.7.4 с теми же самыми настройками режима строгий режим включает эффект NO_ZERO_DATE, и столбцы TIMESTAMP не могут быть определены с DEFAULT '0000-00-00 00:00:00'. В итоге репилкация CREATE TABLE с 5.6 до 5.7.4 терпит неудачу, если запросы содержат такой столбец TIMESTAMP.

Долгосрочный план состоит в том, чтобы все еще иметь три затронутых режима включенными в строгом режиме SQL и удалить их как явные режимы в будущем выпуске MySQL. Но, чтобы восстановить совместимость строгих режимов в MySQL 5.7 с MySQL 5.6 и обеспечить дополнительное время для затронутых приложений, которые будут изменены, следующие изменения были произведены в MySQL 5.7.8:

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

Хотя в MySQL 5.7.8 и позже ERROR_FOR_DIVISION_BY_ZERO, NO_ZERO_DATE и NO_ZERO_IN_DATE могут использоваться отдельно от строгого режима, это предназначено, чтобы они использовались вместе. Как напоминание, происходит предупреждение, если их включают, также не включая строгий режим или наоборот.

Следующее обсуждение применяется только для версий от MySQL 5.7.4 до 5.7.7. Для обновлений от версии более старой, чем MySQL 5.7.4, мы рекомендуем обновить до MySQL 5.7.8 или позже.

Остаток этого раздела описывает настройки режима SQL, чтобы использовать в MySQL с 5.7.4 до 5.7.7, чтобы достигнуть того же самого выполнения запроса, как до 5.7.4, включая случаи для INSERT и UPDATE, в которых задано IGNORE. Это также обеспечивает мысли для того, чтобы Вы определили, нуждаются ли приложения в модификации, чтобы вести себя так же прежде и после изменений режима SQL.

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

Желаемое поведениеMySQL 5.7.x, кроме с 5.7.4 до 5.7.7MySQL с 5.7.4 до 5.7.7
Вставить NULL, не производить предупреждениеERROR_FOR_DIVISION_BY_ZERO выключен Строгий режим не включен
Вставить NULL, производить предупреждение ERROR_FOR_DIVISION_BY_ZERO, или ERROR_FOR_DIVISION_BY_ZERO + строгий режим + IGNORE Строгий режим + IGNORE
ОшибкаERROR_FOR_DIVISION_BY_ZERO + строгий режимСтрогий режим

Следующая таблица показывает, как управлять, разрешает ли сервер '0000-00-00' как допустимую дату в версиях, кроме MySQL с 5.7.4 до 5.7.7 и для MySQL с 5.7.4 до 5.7.7.

Желаемое поведениеMySQL 5.7.x, кроме с 5.7.4 до 5.7.7MySQL с 5.7.4 до 5.7.7
Вставить '0000-00-00' без предупрежденияNO_ZERO_DATE выключен Строгий режим выключен
Вставить '0000-00-00' с предупреждением NO_ZERO_DATE или NO_ZERO_DATE + строгий режим + IGNOREСтрогий режим + IGNORE
ОшибкаNO_ZERO_DATE + строгий режим Строгий режим

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

Желаемое поведениеMySQL 5.7.x, кроме с 5.7.4 до 5.7.7MySQL с 5.7.4 до 5.7.7
Вставить дату без предупреждения NO_ZERO_IN_DATE выключенСтрогий режим выключен
Вставить '0000-00-00' с предупреждением NO_ZERO_IN_DATE или NO_ZERO_IN_DATE + строгий режим + IGNOREСтрогий режим + IGNORE
ОшибкаNO_ZERO_IN_DATE + строгий режимСтрогий режим

Следующее обсуждение описывает условия, при которых данный запрос приводит к тому же самому или различному результату под изменениями режима SQL в MySQL с 5.7.4 до 5.7.7. Это рассматривает только строгий режим (STRICT_ALL_TABLES или STRICT_TRANS_TABLES) и три устаревших режима ( ERROR_FOR_DIVISION_BY_ZERO, NO_ZERO_DATE и NO_ZERO_IN_DATE ). Другие режимы SQL, например, ANSI_QUOTES или ONLY_FULL_GROUP_BY считаются постоянными до и после обновления.

Это обсуждение также описывает, как подготовиться к обновлению до 5.7.4 и до 5.7.7 от версии, более старой, чем 5.7.4. Любые модификации должны быть сделаны перед обновлением!

Нет никакого изменения в поведении между MySQL 5.6 и 5.7 для следующих настроек режима SQL. Запрос, который выполняется при одной из этих настроек, не нуждается ни в какой модификации, чтобы привести к тому же самому результату в ветках версий 5.6 и 5.7:

Изменение происходит от предупреждений в MySQL 5.6 к отсутствию предупреждений в MySQL 5.7 для следующих настроек режима SQL. Результат выполнения запросы тот же самый в 5.6 и 5.7, таким образом, запросы не нуждаются ни в какой модификации, если предупреждения не считаются существенными:

Изменение поведения происходит при следующих настройках режима SQL. Запрос, который выполняется при одной из этих настроек, должен быть изменен, чтобы привести к тому же самому результату в 5.6 и 5.7:

Чтобы подготовиться к обновлению до MySQL с 5.7.4 до 5.7.7, основной принцип должен удостовериться, что Ваши приложения будут управлять тем же самым путем в MySQL 5.6 и 5.7. Например, Вы можете принять любой из этих подходов к совместимости приложения:

Оценивая совместимость режима SQL между MySQL 5.6 и 5.7, рассмотрите особенно эти контексты выполнения:

6.1.9. Поддержка IPv6

Поддержка IPv6 в MySQL включает эти способности:

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

6.1.9.1. Подтверждение системной поддержки IPv6

Прежде, чем сервер MySQL может принять соединения IPv6, операционная система на Вашем узле сервера должна поддерживать IPv6. Как простой тест, чтобы определить, является ли это истиной, попробуйте эту команду:

shell> ping6 ::1
16 bytes from ::1, icmp_seq=0 hlim=64 time=0.171 ms
16 bytes from ::1, icmp_seq=1 hlim=64 time=0.077 ms
...

Чтобы произвести описание сетевых интерфейсов Вашей системы, вызовите ifconfig -a и ищите адреса IPv6 в выводе.

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

Эти ссылки могут быть полезными в установке IPv6 на различных платформах:

6.1.9.2. Конфигурирование сервера MySQL, чтобы разрешить соединения IPv6

Сервер MySQL слушает на единственном сетевом сокете для соединений TCP/IP. Это связано с единственным адресом, но для адреса возможно отобразиться на многократные сетевые интерфейсы. Чтобы определить адрес, используйте опцию --bind-address= addr при запуске сервера, где addr IPv4 или адрес IPv6 или имя хоста. Если addr имя хоста, сервер решает имя к IP-адресу и связывается с тем адресом.

Сервер обрабатывает различные типы адресов следующим образом:

Если Вы намереваетесь связать сервер с определенным адресом, убедитесь что таблица mysql.user содержит учетную запись с административными привилегиями, которую Вы можете использовать, чтобы соединиться с тем адресом. Иначе Вы не будете в состоянии закрыть сервер. Например, если Вы связываете сервер с *, Вы можете соединиться с этим, используя все существующие учетные записи. Но если Вы связываете сервер с ::1, это принимает соединения только на этом адресе. В этом случае сначала удостоверьтесь, что 'root'@'::1' присутствует в mysql.user, таким образом, Вы можете соединиться с сервером, чтобы закрыть его.

6.1.9.3. Соединение, используя местный адрес узла IPv6

Следующая процедура показывает, как сконфигурировать MySQL, чтобы разрешить соединения IPv6 клиентам, которые соединяются с локальным сервером, используя ::1. Инструкции, данные здесь, предполагают, что Ваша система поддерживает IPv6.

  1. Запустите сервер MySQL с соответствующей опцией --bind-address , чтобы разрешить принимать соединения IPv6. Например, поместите следующие строки в свой файл параметров сервера и перезапустите сервер:

    [mysqld]
    bind-address = *
    

    Альтернативно, Вы можете связать сервер с ::1, но это делает сервер более строгим для соединений TCP/IP. Это принимает только соединения IPv6 для того единственного адреса и отклоняет соединения IPv4. Для получения дополнительной информации см. раздел 6.1.9.2.

  2. Как администратор соединитесь с сервером и создайте учетную запись на местного пользователя, который соединится от ::1:
    mysql> CREATE USER 'ipv6user'@'::1' IDENTIFIED BY 'ipv6pass';
    

    Для разрешенного синтаксиса адресов IPv6 в имени учетной записи см. see раздел 7.2.3. В дополнение к CREATE USER Вы можете применить GRANT, который дает определенные привилегии учетной записи, хотя это не необходимо для остающихся шагов в этой процедуре.

  3. Вызовите клиент mysql, чтобы соединиться с сервером, используя новую учетную запись:
    shell> mysql -h ::1 -u ipv6user -pipv6pass
    
  4. Попробуйте некоторые простые запросы:
    mysql> STATUS
    ...
    Connection:   ::1 via TCP/IP
    ...
    
    mysql> SELECT CURRENT_USER(), @@bind_address;
    +----------------+----------------+
    | CURRENT_USER() | @@bind_address |
    +----------------+----------------+
    | ipv6user@::1   | ::             |
    +----------------+----------------+
    

6.1.9.4. Соединение, используя нелокальные адреса узла IPv6

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

Server host: 2001:db8:0:f101::1
Client host: 2001:db8:0:f101::2

Эти адреса выбраны из nonroutable адресного пространства, рекомендуемого IANA в целях документации и достаточны для того, чтобы проверить на Вашей местной сети. Чтобы принять соединения IPv6 от клиентов вне местной сети, у узла сервера должен быть общественный адрес. Если Ваш сетевой провайдер назначает Вам адрес IPv6, Вы можете использовать его. Иначе другой способ получить адрес состоит в том, чтобы использовать брокера IPv6, см. раздел 6.1.9.5.

  1. Запустите сервер MySQL с соответствующей опцией --bind-address , чтобы разрешить этому принимать соединения IPv6. Например, поместите следующие строки в свой файл параметров сервера и перезапустите сервер:

    [mysqld]
    bind-address = *
    

    Альтернативно, Вы можете связать сервер с 2001:db8:0:f101::1, но это делает сервер более строгим для соединений TCP/IP. Это принимает только соединения IPv6 для этого единственного адреса и отклоняет соединения IPv4. Для получения дополнительной информации см. раздел 6.1.9.2.

  2. На узле сервера (2001:db8:0:f101::1) создайте учетку на пользователя, который соединится от хоста клиента (2001:db8:0:f101::2):
    mysql> CREATE USER 'remoteipv6user'@'2001:db8:0:f101::2' IDENTIFIED BY 'remoteipv6pass';
    
  3. На хосте клиента (2001:db8:0:f101::2) вызовите mysql, чтобы соединиться с сервером, используя новую учетную запись:
    shell> mysql -h 2001:db8:0:f101::1 -u remoteipv6user -premoteipv6pass
    
  4. Попробуйте некоторые простые запросы:
    mysql> STATUS
    ...
    Connection:   2001:db8:0:f101::1 via TCP/IP
    ...
    
    mysql> SELECT CURRENT_USER(), @@bind_address;
    +-----------------------------------+----------------+
    | CURRENT_USER()                    | @@bind_address |
    +-----------------------------------+----------------+
    | remoteipv6user@2001:db8:0:f101::2 | ::             |
    +-----------------------------------+----------------+
    

6.1.9.5. Получение адреса IPv6 от брокера

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

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

[mysqld]
bind-address = *

Альтернативно, Вы можете связать сервер с определенным адресом IPv6, обеспеченным брокером, но это делает сервер более строгим для соединений TCP/IP. Это принимает только соединения IPv6 для того единственного адреса и отклоняет соединения IPv4. Для получения дополнительной информации см. раздел 6.1.9.2. Кроме того, если брокер выделяет динамические адреса, адрес Вашей системы мог бы измениться в следующий раз, когда Вы соединяетесь с брокером. Если так, любые учетные записи, которые Вы создаете для этого адреса, становятся недопустимыми. Чтобы связать с определенным адресом, но избежать этой проблемы смены адреса, работайте с брокером статического адреса IPv6.

Следующий пример показывает, как использовать Freenet6 в качестве брокера и пакет клиента IPv6 gogoc в Gentoo Linux.

  1. Создайте учетную запись в Freenet6, посещая этот URL:

    http://gogonet.gogo6.com
    
  2. После создания учетной записи создайте здесь пользовательское ID и пароль для брокера IPv6:
    
    http://gogonet.gogo6.com/page/freenet6-registration
    
  3. Как root установите gogoc:
    shell> emerge gogoc
    
  4. Редактируйте /etc/gogoc/gogoc.conf, чтобы установить userid и password, например:
    userid=gogouser
    passwd=gogopass
    
  5. Запустите gogoc:
    shell> /etc/init.d/gogoc start
    

    Чтобы запустить gogoc каждый раз при запуске Вашей системы, выполните эту команду:

    shell> rc-update add gogoc default
    
  6. Используйте ping6, чтобы попытаться проверить с помощью ping-запросов узел:
    shell> ping6 ipv6.google.com
    
  7. Чтобы увидеть Ваш адрес IPv6:
    shell> ifconfig tun
    

6.1.10. Серверная справка

MySQL Server поддерживает запрос HELP , который возвращает информацию из MySQL Reference manual (см. раздел 14.8.3). Несколько таблиц в системной базе данных mysql содержат информацию, чтобы поддержать этот запрос (см. раздел 6.3 ). Правильное функционирование этого запроса требует, чтобы эти таблицы справки были инициализированы, что сделано скриптом fill_help_tables.sql.

Если Вы устанавливаете MySQL, используя исходные тексты или двоичный дистрибутив в Unix, инициализация контента справки происходит, когда Вы инициализируете каталог данных (см. раздел 2.9.1). Для RPM в Linux или двоичного дистрибутива в Windows инициализация контента происходит как часть процесса установки MySQL.

Если Вы обновляете MySQL, используя двоичный дистрибутив, табличный контент справки не обновлен автоматически, но Вы можете обновить это вручную. Определите местонахождение файла fill_help_tables.sql в каталоге share или share/mysql. Перейдите в тот каталог и обработайте файл с помощью клиента mysql:

shell> mysql -u root mysql < fill_help_tables.sql

Вы можете также получить последний fill_help_tables.sql в любое время, чтобы обновить Ваши таблицы справки. Загрузите надлежащий файл для своей версии MySQL с http://dev.mysql.com/doc/index-other.html. После загрузки и распаковки файла обработайте это с mysql, как описано ранее.

Если Вы работаете с Git и исходным деревом развития MySQL, Вы должны использовать загруженную копию fill_help_tables.sql, потому что исходное дерево содержит только версию stub.

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

6.1.11. Ответ сервера на сигналы

В Unix сигналы можно послать в процессы. mysqld отвечает на сигналы, посланные ему, следующим образом:

6.1.12. Процесс завершения работы сервера

Процесс завершения работы сервера таков:

  1. Процесс завершения работы начат.

    Это может произойти разными способами. Например, пользователь с привилегией SHUTDOWN выполнил mysqladmin shutdown . mysqladmin может использоваться на любой платформе, поддержанной MySQL. Другие определенные для системы методы инициирования завершения работы возможны также: сервер закрывается в Unix, когда получает сигнал SIGTERM. Сервер, работающий как служба на Windows, закрывается, когда менеджер служб говорит ему это.

  2. Сервер создает поток завершения работы в случае необходимости.

    В зависимости от того, как было начато завершение работы, сервер мог бы создать поток, чтобы обработать процесс завершения работы. Если завершение работы требовал клиент, поток завершения работы создается. Если завершение работы результат получения сигнала SIGTERM, поток сигнала мог бы обработать завершение работы непосредственно, или это могло бы создать отдельный поток. Если сервер пытается создать поток завершения работы, и не может (например, если память исчерпана), это выдает диагностическое сообщение, которое появляется в журнале ошибок:

    Error: Can't create thread to kill server
    
  3. Сервер прекращает принимать новые соединения.

    Чтобы препятствовать тому, чтобы новая деятельность была начата во время завершения работы, сервер прекращает принимать новые соединения клиента, закрывая обработчики для сетевых интерфейсов, которыми слушает соединения: порт TCP/IP, файл сокета Unix, именованный канал Windows и совместно используемую память в Windows.

  4. Сервер заканчивает текущую деятельность.

    Для каждого потока, связанного с соединением клиента, сервер ломает соединение с клиентом и отмечает поток как уничтоженный. Потоки умирают, когда замечают, что так отмечены. Потоки для неактивных соединений закрываются быстро. Потоки, которые в настоящее время обрабатывают запросы, периодически проверяют свое состояние и занимают больше времени. Для дополнительной информации о завершении потока см. раздел 14.7.6.4, в особенности для инструкций об уничтожении REPAIR TABLE или OPTIMIZE TABLE на таблицах MyISAM.

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

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

    Если сервер это ведомый сервер репликации, он останавливает потоки ввода/вывода и SQL, если они являются активными, прежде, чем отметить потоки клиента как уничтоженные. Потоку SQL разрешают закончить его текущий запрос (чтобы избежать проблем), и затем останавливается. Если поток SQL находится в середине транзакции, сервер ждет, пока текущая группа событий (если есть) не закончит выполняться, или до пользовательского запроса KILL QUERY (или KILL CONNECTION). См. раздел 14.4.2.7. Так как нетранзакционные запросы не могут быть отменены, чтобы гарантировать безопасную от катастрофического отказа репликацию, только транзакционные таблицы должны использоваться.

    Чтобы гарантировать безопасность на ведомом устройстве, Вы должны выполнить ведомое устройство с опцией --relay-log-recovery.

    См. раздел 19.2.4.

  5. Сервер закрывает механизмы хранения.

    На данном этапе сервер сбрасывает табличный кэш и закрывает все открытые таблицы.

    Каждый механизм хранения выполняет любые действия, необходимые для таблиц, которыми он управляет. InnoDB сбрасывает буферный пул на диск (если innodb_fast_shutdown=2), пишет текущий LSN в табличное пространство и заканчивает свои собственные внутренние потоки. MyISAM сбрасывает потоки, которые ожидают записи индекса для таблицы.

  6. Все, сервер завершился.

Чтобы предоставить информацию управленческим процессам, сервер возвращает один из кодов завершения, описанных в следующем списке. Фраза в круглых скобках указывает на меры, предпринятые systemd в ответ на код, для платформ, на которых systemd используется, чтобы управлять сервером.

6.2. Каталог данных MySQL

Информация, которой управляет сервер MySQL, хранится в соответствии с якаталогом, известным как каталог данных. Следующий список кратко описывает элементы, как правило найденные в каталоге данных, с перекрестными ссылками для дополнительной информации:

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

6.3. Системная база данных mysql

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

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

Таблицы словаря данных

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

Словарь данных нов в MySQL 8.0. Данные, включенные в словарь, влекут за собой некоторые общие операционные различия по сравнению с предыдущими выпусками MySQL. Для деталей см. раздел 15.6. Кроме того, для обновлений до MySQL 8.0 от MySQL 5.7 процедура обновления несколько отличается от предыдущего MySQL и требует, чтобы Вы проверили готовность обновления своей установки, проверяя определенные предпосылки. Для получения дополнительной информации см. раздел 2.10.1.

Таблицы словаря данных невидимы. Они не могут быть считаны SELECT, не появляются в выводе SHOW TABLES , не перечислены в INFORMATION_SCHEMA.TABLES и т.д. Однако, в большинстве случаев есть соответствующие таблицы INFORMATION_SCHEMA, которые могут быть запрошены. Концептуально INFORMATION_SCHEMA обеспечивает представление, через которое MySQL выставляет метаданные о словаре данных. Например, Вы не можете выбрать из mysql.schemata напрямую:

mysql> SELECT * FROM mysql.schemata;
ERROR 3554 (HY000): Access to data dictionary table
           'mysql.schemata' is rejected.

Вместо этого выберите ту информацию из INFORMATION_SCHEMA:

mysql> SELECT * FROM INFORMATION_SCHEMA.SCHEMATA\G
*************************** 1. row ***************************
  CATALOG_NAME: def
   SCHEMA_NAME: mysql
DEFAULT_CHARACTER_SET_NAME: latin1
DEFAULT_COLLATION_NAME: latin1_swedish_ci
SQL_PATH: NULL
*************************** 2. row ***************************
  CATALOG_NAME: def
   SCHEMA_NAME: information_schema
DEFAULT_CHARACTER_SET_NAME: utf8
DEFAULT_COLLATION_NAME: utf8_general_ci
SQL_PATH: NULL
...

Это не таблица INFORMATION_SCHEMA, которая соответствует точно mysql.indexes, но INFORMATION_SCHEMA.STATISTICS содержит большую часть той же самой информации.

Пока еще нет таблицы в INFORMATION_SCHEMA, которая соответствует точно mysql.foreign_keys, mysql.foreign_key_column_usage. Стандартный SQL способ получить информацию о внешнем ключе при использовании INFORMATION_SCHEMA это таблицы REFERENTIAL_CONSTRAINTS и KEY_COLUMN_USAGE , эти таблицы теперь осуществлены как представления foreign_keys, foreign_key_column_usage, и других таблиц словаря данных.

Некоторые системные таблицы до MySQL 8.0 были заменены таблицами словаря данных и больше не присутствуют в базе данных mysql:

Системные таблицы привилегий

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

С MySQL 8.0 это InnoDB (транзакционные) таблицы. Ранее они были MyISAM (нетранзакционные) таблицы. Изменение механизма хранения таблиц лежит в основе изменения в MySQL 8.0 поведения запросов управления учетными записями, например, CREATE USER и GRANT. Ранее запрос, который назвал многочисленных пользователей, мог преуспеть для некоторых пользователей и потерпеть неудачу для других. Запросы являются теперь транзакционными и преуспевают для всех названных пользователей или откатываются назад и не имеют никакого эффекта, если ошибка происходит.

Если MySQL обновлен от более старой версии, но таблицы привилегий не были обновлены с MyISAM на InnoDB, сервер считает их только для чтения, и запросы управления производят ошибку. Для инструкций обновления см. раздел 2.10.1.

Таблицы информационной системы объекта

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

Системные таблицы журнала

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

Таблицы журнала используют механизм хранения CSV.

См. раздел 6.4.

Серверные таблицы системы справочной информации

Эти системные таблицы содержат серверную справочную информацию:

См. раздел 6.1.10.

Системные таблицы часового пояса

Эти системные таблицы содержат информацию о часовом поясе:

См. раздел 11.6.

Таблицы репликации

Сервер использует эти системные таблицы, чтобы поддержать репликацию:

Системные таблицы оптимизатора

Эти системные таблицы для оптимизатора:

Разные системные таблицы

Другие системные таблицы не соответствуют предыдущим категориям:

6.4. Журналы сервера MySQL

MySQL Server имеет несколько журналов, которые могут помочь Вам узнать, какая деятельность имеет место.

Тип журнала Что туда пишется
Журнал ошибок Проблемы с запуском, выполнением или остановкой mysqld
Общий журнал запроса Установленные соединения клиента и запросы от клиентов
Двоичный журнал Запросы об изменении данных (также используется для репликации)
Журнал релеИзменения данных, полученные от главного сервера репликации
Медленный журнал запросаЗапросы, которые заняли больше, чем long_query_time секунд для выполнения
Журнал DDL (журнал метаданных) Операции с метаданными из запросов DDL

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

По умолчанию сервер пишет файлы для всех включенных журналов в каталоге данных. Вы можете вынудить сервер закрыть и вновь открыть файлы системного журнала (или в некоторых случаях переключиться на новый файл системного журнала), сбрасывая журналы. Сброс журнала происходит, когда Вы командуете FLUSH LOGS, выполняете mysqladmin с параметром flush-logs или refresh или выполняете mysqldump с параметром --flush-logs или --master-data . См. разделы 14.7.6.3, 5.5.2 и 5.5.4. Кроме того, двоичный журнал сбрасывается, когда его размер достигает значения переменной max_binlog_size .

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

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

См. раздел 6.4.7.

См. раздел 7.1.2.3.

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

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

Управление журналом при запуске сервера. Опция --log-output определяет место назначения для вывода журнала. Эта опция сама по себе не включает журналы. Ее синтаксис --log-output[= value,...]:

general_log управляет журналированием общих запросов для выбранных мест назначения журнала. Если определено при запуске сервера, general_log берет дополнительный параметр 1 или 0, чтобы включить или отключить журнал. Чтобы определить имя файла кроме значения по умолчанию для журналирования файла, установите general_log_file. Точно так же slow_query_log управляет журналированием медленных запросов для выбранных мест назначения, установка slow_query_log_file определяет имя файла для журналирования. Если любой журнал включен, сервер открывает соответствующий файл системного журнала и пишет сообщения в него. Однако, далее журналирование запросов к файлу не происходит, если место назначения журнала FILE выбрано.

Примеры:

Управление журналом во время выполнения. Системные переменные, связанные с таблицами журнала и файлами, включают управление во время выполнения журналирования:

Использование таблиц для журнала дает такие преимущества:

У табличного выполнения журнала есть следующие характеристики:

6.4.2. Журнал ошибок

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

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

Если mysqld_safe используется, чтобы запустить mysqld, и mysqld вылетает, mysqld_safe замечает это, перезапускает mysqld и пишет сообщение mysqld restarted в журнал ошибок.

В следующем обсуждении консоль значит stderr, стандартный вывод ошибок, это Ваше окно терминала или консоль, если стандартный вывод ошибок не был перенаправлен.

В Windows опции --log-error, --pid-file и --console затрагивают регистрацию ошибок:

Кроме того, в Windows сервер по умолчанию пишет события и сообщения об ошибках в Windows Event Log в Application log. Записи, отмеченные как Error, Warning и Note, написаны в Event Log, но не к информационным сообщениям, таким как информационные запросы от отдельных механизмов хранения. У этих записей журнала есть источник MySQL. Информацией, записанной в Windows Event Log, можно управлять, используя log_syslog, как описано позже.

В Unix mysqld пишет сообщения журнала ошибок следующим образом:

Yum или APT установкам пакета свойственно сконфигурировать местоположение журнала ошибок под /var/log с параметром вроде log-error=/var/log/mysqld.log в конфигурационном файле сервера. Удаление имени файла из этой записи заставляетиспользоваться файл системного журнала по умолчанию, который написан в каталоге данных.

Если сервер пишет сообщения об ошибках на консоль, он устанавливает log_error в stderr. Иначе log_error указывает на имя файла журнала ошибок. В частности, в Windows --console переопределяет файл журнала ошибок и посылает сообщения об ошибках на консоль, таким образом, сервер устанавливает log_error в stderr. Это происходит даже, если также задана --log-error.

Если Вы определяете --log-error в файле опций в разделе [mysqld], [server] или [mysqld_safe], mysqld_safe находит и использует опцию.

Использование Syslog для журнала ошибок

Возможно, чтобы mysqld писал журнал ошибок в syslog в Unix и в Windows Event Log в Windows. Чтобы сделать так, используйте эти системные переменные:

В Unix перенаравление вывода к syslog также доступно с использованием mysqld_safe , который может получить ошибочный вывод сервера и передать его в syslog.

Использование mysqld_safe для регистрации ошибок в syslog устарело, Вы должны использовать системные переменные сервера вместо этого.

mysqld_safe имеет три опции регистрации ошибок, --syslog, --skip-syslog и --log-error . Значение по умолчанию без опций журналирования или с --skip-syslog должно использовать файл системного журнала по умолчанию. Чтобы явно определить использование файла журнала ошибок, надо определить --log-error= file_name в mysqld_safe и mysqld_safe предпишет mysqld писать сообщения в файл системного журнала. Чтобы использовать syslog вместо этого, определите опцию --syslog. Для вывода syslog тег может быть определен с помощью --syslog-tag= tag_val, это приложено к идентификатору сервера mysqld с ведущим дефисом.

Подробность журнала ошибок

log_error_verbosity управляет многословием сервера для того, чтобы написать ошибку, предупреждение и сообщение примечания в журнал ошибок. Разрешенные значения 1 (ошибки только), 2 (ошибки и предупреждения), 3 (ошибки, предупреждения и примечания), со значением по умолчанию 3. Если значение больше 2, сервер журналирует прерванные соединения и ошибки запрета доступа для новых попыток соединения. См. раздел B.5.2.10.

Формат сообщения журнала ошибок

log_timestamps управляет часовым поясом сообщений, написанных в журнал ошибок (так же, как общему журналу запросов и медленному журналу запросов). Разрешенные значения: UTC (значение по умолчанию) и SYSTEM (местный системный часовой пояс).

ID, включенное в сообщения журнала ошибок, является идентификатором потока в пределах mysqld , ответственного за запись сообщения. Это указывает, какая часть сервера произвела сообщение и совместима с общим журналом запроса и медленным журналом запроса, которые включают ID потока соединения.

Сброс и переименование файла журнала ошибок

Если Вы сбрасываете журналы командами FLUSH LOGS или mysqladmin flush-logs , и mysqld пишут журнал ошибок в файл (например, если это было запущено с опцией --log-error), сервер закрывает и вновь открывает файл системного журнала. Чтобы переименовать файл, сделайте это вручную перед сбросом. Сброс журналов тогда вновь открывает новый файл с оригинальным именем файла. Например, чтобы переименовать файл и создать новый, используйте следующие команды (считается, что имя файла системного журнала host_name.err):

shell> mv host_name.err host_name.err-old
shell> mysqladmin flush-logs
shell> mv host_name.err-old backup-directory

В Windows используйте rename вместо mv.

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

6.4.3. Общий журнал запроса

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

Каждая строка, которая показывает, когда клиент соединяется, включает using connection_type, чтобы указать на протокол. connection_type одно из TCP/IP (Соединение TCP/IP, установленное без SSL), SSL/TLS (TCP/IP с SSL), Socket (Соединение файла сокета Unix), Named Pipe (Соединение именованного канала в Windows) или Shared Memory (Соединение совместно используемой памяти в Windows).

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

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

Однако, используя основанное на строке двоичное журналирование, обновления посылают, когда строка изменяется, а не выполняются запросы SQL, и таким образом эти запросы никогда не пишутся в журнал запроса, когда binlog_format ROW. Данное обновление также не может быть написано в журнал запроса, когда эта переменная установлена в MIXED, в зависимости от используемого запроса. См. раздел 19.2.1.1.

По умолчанию общий журнал отключен. Чтобы определить начальное состояние общего журнала запроса явно, надо использовать --general_log[={0|1}] . Без параметра или с параметром 1, --general_log включает журнал. С параметром 0 эта опция отключает журнал. Чтобы определить имя файла системного журнала, надо использовать --general_log_file= file_name. Чтобы определить место назначения журнала, надо использовать --log-output (как описано в разделе 6.4.1).

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

Чтобы отключить или включить общий журнал или изменить название файла системного журнала во время выполнения, используйте глобальные переменные general_log и general_log_file . Установите general_log в 0 (или OFF), чтобы отключить журнал, или в 1 (или ON), чтобы включить. Установите general_log_file , чтобы определить название файла системного журнала. Если файл системного журнала уже открыт, он будет закрыт, а новый файл открыт.

Когда общий журнал запроса включен, сервер пишет вывод к любым местам назначения, определенным --log-output или log_output. Если Вы включаете журнал, сервер открывает файл системного журнала и пишет сообщения запуска ему. Однако, далее журналирование запросов к файлу не происходит, если выбрано назначение журнала FILE. Если назначение журнала NONE, сервер не пишет запросы, даже если общий журнал включен. Определение имени файла системного журнала не имеет никакого эффекта на журналирование, если целевое значение журнала не содержит FILE.

Перезапуски сервера и сброс журнала не заставляют новый общий файл системного журнала запроса быть произведенным (хотя сброс переоткрывает это). Чтобы переименовать файл и создать новый, используйте следующие команды:

shell> mv host_name.log host_name-old.log
shell> mysqladmin flush-logs
shell> mv host_name-old.log backup-directory

В Windows используйте rename вместо mv.

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

SET GLOBAL general_log = 'OFF';

С отключенным журналом, переименуйте файл системного журнала внешне, например, из командной строки. Тогда включите журнал снова:

SET GLOBAL general_log = 'ON';

Этот метод работает с любой платформой и не требует перезапуска сервера.

Сессионная переменная sql_log_off может быть установлена в ON или OFF, чтобы отключить или включить общее журналирование запроса для текущего соединения.

Пароли в запросах, написанных в общий журнал, переписаны сервером, чтобы не появляться буквально в простом тексте. Перезапись пароля может быть подавлена для общего журнала запроса, запуская сервер с опцией --log-raw. Эта опция может быть полезной в диагностических целях, чтобы видеть точный текст запросов как получен сервером, но из соображений безопасности не рекомендуется для производственного использования. См. также раздел 7.1.2.3.

Значение перезаписи пароля в том, что запросы, которые не могут быть разобраны (например, из-за синтаксических ошибок), не написаны в общий журнал запроса, потому что они содержат пароли. Используйте случаи, которые требуют, журналирование всех запросов, включая те, которые с ошибками, используя опцию --log-raw, принимая во внимание, что это также обходит перезапись пароля.

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

CREATE USER 'user1'@'localhost' IDENTIFIED BY PASSWORD 'not-so-secret';

Переменная log_timestamps управляет часовым поясом сообщений, написанных в общий файл системного журнала запроса (так же как в медленный файл и журнал ошибок). Это не затрагивает часовой пояс сообщений общего и медленного журналов запроса, написанные в таблицы, но строки, полученные от тех таблиц, могут быть преобразованы от местного системного часового пояса до любого желаемого часового пояса с помощью CONVERT_TZ() или устанавливая сеансовую переменную time_zone.

6.4.4. Двоичный журнал

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

Двоичный журнал не используется для таких запросов, как SELECT или SHOW, которые не меняют данные. Чтобы регистрировать все запросы (например, чтобы идентифицировать проблемный запрос), используют общий журнал запроса. См. раздел 6.4.3.

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

Двоичный журнал безопасен от катастрофического отказа. Только полные события или транзакции зарегистрированы.

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

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

Чтобы включить двоичный журнал, запустите сервер с опцией --log-bin[= base_name]. Если не задать base_name, имя по умолчанию это значение опции pid-file (которле по умолчанию является названием машины узла), сопровождаемое -bin. Если базовое имя дано, сервер пишет файл в каталоге данных, если базовое имя не дано с ведущим абсолютным путем, чтобы определить отличный каталог. Рекомендуется, чтобы Вы определили базовое имя явно вместо того, чтобы использовать значение по умолчанию, см. раздел B.5.7.

Если Вы поставляете расширение на имя журнала (например, --log-bin= base_name.extension), расширение тихо удалено и проигнорировано.

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

Чтобы отслеживать, которые из двоичных файлов журнала использовались, mysqld также создает двоичный индексный файл журнала, который содержит названия всех используемых двоичных файлов системного журнала. По умолчанию у этого есть то же самое базовое имя, как у двоичного файла системного журнала, с расширением '.index'. Вы можете поменять имя двоичного индексного файла журнала с помощью опции --log-bin-index[=file_name]. Вы не должны вручную редактировать этот файл в то время, как работает mysqld.

Клиент, который имеет привилегию SUPER, может отключить двоичное журналирование своих собственных запросов при использовании SET sql_log_bin=0, см. раздел 6.1.5.

По умолчанию сервер регистрирует продолжительность события так же, как событие непосредственно и использует это, чтобы проверить, что все было написано правильно. Вы можете также заставить сервер писать контрольные суммы для событий, устанавливая binlog_checksum. Читая назад из двоичного журнала, ведущее устройство использует длину событий по умолчанию, но может быть заставлено использовать контрольные суммы при наличии, включая master_verify_checksum. Ведомый поток ввода/вывода также проверяет события, полученные от ведущего устройства. Вы можете заставить ведомый поток SQL использовать контрольные суммы при наличии, читая из журнала реле, включая slave_sql_verify_checksum.

Формат событий, зарегистрированных в двоичном журнале, зависит от двоичного формата журналирования. Три типа формата поддержаны: основанное на строке, основанное на запросе и смешанное журналирование. Используемый формат журналирования зависит от версии MySQL. Для общих описаний форматов журналирования см. раздел 6.4.4.1 и MySQL Internals: The Binary Log.

Сервер оценивает --binlog-do-db и --binlog-ignore-db таким же образом, как опции --replicate-do-db и --replicate-ignore-db. См. раздел 19.2.5.1.

Ведомый сервер по умолчанию не пишет в собственный двоичный журнал модификаций данных, которые получены от ведущего устройства. Чтобы регистрировать эти модификации, запустите ведомое устройство с опцией --log-slave-updates в дополнение к --log-bin (см. раздел 19.1.6.3). Это сделано, когда ведомое устройство должно также действовать как ведущее устройство к другим ведомым устройствам в цепной репликации.

Вы можете удалить все двоичные файлы системного журнала с RESET MASTER или их подмножество с PURGE BINARY LOGS . См. разделы 14.7.6.6 и 14.4.1.1.

Если Вы используете репликацию, Вы не должны удалить старые двоичные файлы системного журнала на ведущем устройстве, пока Вы не уверены, что никакое ведомое устройство все еще не должно использовать их. Например, если Ваши ведомые устройства никогда не выполняются с отставанием больше, чем на три дня, один раз в день Вы можете выполнить mysqladmin flush-logs на ведущем устройстве, а затем удалить любые журналы, которые старше трех дней. Вы можете удалить файлы вручную, но предпочтительно использовать PURGE BINARY LOGS, который также безопасно обновляет двоичной индексный файл журнала для Вас (и который может взять параметр даты). См. раздел 14.4.1.1.

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

shell> mysqlbinlog log_file | mysql -h server_name

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

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

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

В пределах нейтральной транзакции, все обновления (UPDATE, DELETE или INSERT), которые меняют транзакционные таблицы, такие как InnoDB, кэшируются до COMMIT. В этом пункте mysqld пишет всю транзакцию двоичному журналу перед выполнением COMMIT.

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

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

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

max_binlog_cache_size (значение по умолчанию 4GB, которое является также максимумом) может использоваться, чтобы ограничить полный размер, используемый, чтобы кэшировать транзакцию из многих запросов. Если транзакция больше, чем это число байтов, она терпит неудачу и откатывается. Минимальное значение 4096.

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

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

Двоичное журналирование для сохраненных программ сделано как описано в разделе 21.7.

Отметьте, что двоичной формат журнала отличается в MySQL 8.0 от предыдущих версий MySQL, из-за улучшений в репликации, см. раздел 19.4.2.

Запись в двоичный файл системного журнала и индексный файл журнала обработаны таким же образом, как запись таблиц MyISAM, см. раздел B.5.3.4.

По умолчанию двоичный журнал синхронизирован с диском в каждой записи (sync_binlog=1). Если sync_binlog не был включена, и операционная система или машина (не только сервер MySQL) разрушены, есть шанс, что последние запросы двоичного журнала могли быть потеряны. Чтобы предотвратить это, включите sync_binlog, чтобы синхронизировать двоичный журнал с диском после каждых N групп передач. См. раздел 6.1.5. Самое безопасное значение для sync_binlog 1 (по умолчанию), но это является также самым медленным.

В более ранних выпусках MySQL был шанс несогласованности между табличным контентом и двоичным контентом журнала, если катастрофический отказ произошел, даже с sync_binlog = 1. Например, если Вы используете таблицы InnoDB и сервер MySQL обрабатывает COMMIT, это пишет много готовых транзакций в журнал последовательно, синхронизирует двоичный журнал, а затем передает транзакцию в InnoDB. Если бы сервер разрушился между теми двумя операциями, транзакция была бы отменена InnoDB при перезапуске, но все еще существовала бы в двоичном журнале. Такой вопрос был решен в предыдущих выпусках, включая в InnoDB поддержку двухфазовой передачи в транзакциях XA. В 5.8.0 и выше InnoDB эта поддержка всегда включается.

InnoDB поддерживая двухфазовую передачу в транзакциях XA, гарантирует что двоичный журнал и файлы с данными InnoDB синхронизированы. Однако, сервер MySQL должен также быть сконфигурирован, чтобы синхронизировать двоичный журнал и журналы InnoDB на диске прежде, чем передать транзакцию. InnoDB журналы синхронизированы по умолчанию, и sync_binlog=1 гарантирует, что двоичный журнал синхронизирован. Это гарантирует, что двоичный журнал отражает точные данные таблицы InnoDB, а поэтому ведомое устройство остается в синхронизации с ведущим устройством, потому что это не получает запрос, который был отменен.

Если сервер MySQL обнаруживает при восстановлении катастрофического отказа, что двоичный журнал короче, чем это должно было быть, это испытывает недостаток в по крайней мере одной успешно переданной транзакции InnoDB. Это не должно произойти, если sync_binlog=1 и диск/файловая система делает фактическую синхронизацию, когда надо (некоторые не делают), таким образом, сервер печатает сообщение об ошибке The binary log file_name is shorter than its expected size. В этом случае двоичный журнал неправилен, и репликация должна быть перезапущена от нового снимка данных ведущего устройства.

Значения сеанса следующих системных переменных написаны в двоичный журнал соблюдаются ведомым устройством, разбирая двоичный журнал:

6.4.4.1. Двоичные форматы журналирования

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

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

С основанным на запросе журналированием могут быть проблемы с мультиплицированием недетерминированных запросов. В решении, безопасен ли данный запрос для основанного на запросе варианта, MySQL определяет, может ли это гарантировать, что запрос может копироваться, используя основанное на запросе журналирование. Если MySQL не может дать эту гарантию, он отмечает запрос как потенциально ненадежный и выпускает предупреждение, Statement may not be safe to log in statement format.

Вы можете избежать этих проблем при использовании основанной на строке репликации MySQL вместо этого.

6.4.4.2. Установка двоичного формата журнала

Вы можете выбрать двоичной формат журналирования явно, запуская сервер MySQL с опцией --binlog-format=type. Поддержанные значения для type:

Формат журналирования также может быть переключен во время выполнения. Чтобы определить формат глобально для всех клиентов, установите глобальное значение binlog_format :

mysql> SET GLOBAL binlog_format = 'STATEMENT';
mysql> SET GLOBAL binlog_format = 'ROW';
mysql> SET GLOBAL binlog_format = 'MIXED';

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

mysql> SET SESSION binlog_format = 'STATEMENT';
mysql> SET SESSION binlog_format = 'ROW';
mysql> SET SESSION binlog_format = 'MIXED';

Каждый сервер MySQL может установить свой собственный и только свой собственный двоичной формат журналирования (неважно, задана ли binlog_format с глобальным или сеансовым контекстом). Это означает, что изменение формата журналирования на ведущем устройстве не заставляет ведомое устройство изменять свой формат журналирования, чтобы соответствовать. Использование binlog_format не копируется, используя MIXED или ROW, это копируется, но проигнорировано ведомым устройством. Изменение двоичного журналирования на ведущем устройстве в то время, как репликация продолжается, или также не изменяя это на ведомом устройстве, можно заставить репликацию терпеть неудачу с ошибками, такими как Error executing row event: 'Cannot execute statement: impossible to write to binary log since statement is in row format and BINLOG_FORMAT = STATEMENT.'.

Чтобы изменить глобальное или сеансовое значение binlog_format, значение, Вы должны иметь привилегию SUPER.

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

Есть исключения, когда Вы не можете переключить формат во время выполнения:

Попытка переключить формат в любом из этих случаев приводит к ошибке.

Если Вы используете InnoDB и операционный уровень изоляции READ COMMITTED или READ UNCOMMITTED, только основанное на строке журналирование может использоваться. Можно изменить формат журналирования на STATEMENT, но выполнение этого во время выполнения приводит очень быстро к ошибкам потому, что InnoDB больше не может вставлять.

Переключение формата во время выполнения не рекомендуется, когда любые временные таблицы существуют, потому что временные таблицы зарегистрированы только, используя основанный на запросе формат, тогда как с основанным на строке форматом они не зарегистрированы. Со смешанным форматом обычно регистрируются временные таблицы, исключения происходят с определяемыми пользователем функциями (UDF) и с функцией UUID().

С двоичным журналом в формате ROW много изменений написаны в двоичный журнал, используя основанный на строке формат. Некоторые изменения, однако, все еще используют основанный на запросе формат. Примеры включают весь DDL (язык определения данных), например, CREATE TABLE, ALTER TABLE или DROP TABLE.

Опция --binlog-row-event-max-size доступна для серверов, которые способны к основанному на строке формату. Строки сохранены в двоичный журнал кусками, имеющими размер в байтах, не превышающими значение этой опции. Значение должно быть кратным числом 256. Значение по умолчанию 8192.

Используя основанное на запросе журналирование для репликации, для данных по ведущему и ведомому устройствам возможно стать отличающимся, если запрос разработан таким способом, которым модификация данных недетерминирована, то есть, оптимизатор запросов может внести изменения. Вообще, это не хорошая практика даже за пределами репликации. Для подробного объяснения этой проблемы см. раздел B.5.7.

См. раздел 19.2.4.

6.4.4.3. Смешанный двоичной формат журналирования

Работая в формате MIXED, сервер автоматически переключается с основанного на запросе на основанное на строке журналирование при следующих условиях:

Предупреждение произведено, если Вы пытаетесь выполнить запрос, используя основанное на запросе журналирование, которое должно быть написано, используя основанное на строке журналирование. Предупреждение показывает в клиенте (в выводе SHOW WARNINGS) и через журнал ошибок mysqld . Предупреждение добавлено к таблице SHOW WARNINGS каждый раз, когда такой запрос выполнен. Однако, только первый запрос, который произвел предупреждение для каждого сеанса клиента, написан в журнал ошибок, чтобы предотвратить наводнение журнала.

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

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

Механизм хранения Поддержанное журналирование строки Поддержанное журналирование запроса
ARCHIVEДа Да
BLACKHOLEДаДа
CSVДаДа
EXAMPLEДаНет
FEDERATEDДаДа
HEAPДаДа
InnoDBДа Да, когда операционный уровень изоляции REPEATABLE READ или SERIALIZABLE , иначе нет.
MyISAMДаДа
MERGEДаДа
NDBДаНет

Должен ли запрос быть зарегистрирован, и режим журналирования, который будет использоваться, определен согласно типу запроса (безопасный, опасный), двоичному формату журналирования (STATEMENT, ROW или MIXED) и способности журналирования механизма хранения.

Запросы могут быть зарегистрированы с или без предупреждения, неудавшиеся запросы не зарегистрированы, но производят ошибки в журнале. Это показывают в следующей таблице решения, где SLC означает журналирование запроса, а RLC означает журналирование строки.

Выражение Действие
Тип binlog_format SLCRLC Ошибка\предупреждение Зарегистрированный как
**Нет НетError: Cannot execute statement: двоичное журналирование невозможно, так как по крайней мере один механизм вовлечен, который не способен к строке и запросу. -
SafeSTATEMENTДа Нет-STATEMENT
SafeMIXEDДа Нет-STATEMENT
SafeROWДаНет Error: Cannot execute statement: двоичное журналирование невозможно, так как BINLOG_FORMAT = ROW и по крайней мере одна таблица использует механизм хранения, который не способен к основанному на строке журналированию.-
UnsafeSTATEMENTДа НетWarning: Unsafe statement binlogged in statement format, поскольку BINLOG_FORMAT = STATEMENT STATEMENT
UnsafeMIXEDДа НетError: Cannot execute statement: двоичное журналирование опасного запроса невозможно, когда механизм хранения ограничен основанным на запросе журналированием, даже если BINLOG_FORMAT = MIXED.-
UnsafeROWДа НетError: Cannot execute statement: двоичное журналирование невозможно, так как BINLOG_FORMAT = ROW и по крайней мере одна таблица использует механизм хранения, который не способен к основанному на строке журналированию.-
Row InjectionSTATEMENT ДаНетError: Cannot execute row injection: двоичное журналирование невозможно, так как по крайней мере одна таблица использует механизм хранения, который не способен к основанному на строке журналированию.-
Row InjectionMIXEDДа НетError: Cannot execute row injection: двоичное журналирование невозможно, так как по крайней мере одна таблица использует механизм хранения, который не способен к основанному на строке журналированию.-
Row InjectionROWДа НетError: Cannot execute row injection: двоичное журналирование невозможно, так как по крайней мере одна таблица использует механизм хранения, который не способен к основанному на строке журналированию.-
SafeSTATEMENTНет ДаError: Cannot execute statement: двоичное журналирование невозможно с тех пор, как BINLOG_FORMAT = STATEMENT и по крайней мере одна таблица использует механизм хранения, который не способен к основанному на запросе журналированию.-
SafeMIXEDНет Да-ROW
SafeROWНетДа -ROW
UnsafeSTATEMENTНет ДаError: Cannot execute statement: двоичное журналирование невозможно с тех пор, как BINLOG_FORMAT = STATEMENT и по крайней мере одна таблица использует механизм хранения, который не способен к основанному на запросе журналированию.-
UnsafeMIXEDНет Да-ROW
UnsafeROWНет Да-ROW
Row InjectionSTATEMENT НетДаError: Cannot execute row injection: двоичное журналирование невозможно с тех пор, как BINLOG_FORMAT = STATEMENT.-
Row InjectionMIXEDНет Да-ROW
Row InjectionROWНет Да-ROW
SafeSTATEMENTДа Да-STATEMENT
SafeMIXEDДа Да-STATEMENT
SafeROWДаДа -ROW
UnsafeSTATEMENTДа ДаWarning: Unsafe statement binlogged in statement format поскольку BINLOG_FORMAT = STATEMENT. STATEMENT
UnsafeMIXEDДа Да-ROW
UnsafeROWДа Да-ROW
Row InjectionSTATEMENT ДаДаError: Cannot execute row injection: двоичное журналирование невозможно потому, что BINLOG_FORMAT = STATEMENT.-
Row InjectionMIXEDДа Да-ROW
Row InjectionROWДа Да-ROW

Когда предупреждение произведено определением, стандартное предупреждение MySQL произведено (и доступно через SHOW WARNINGS). Информация также написана в журнал ошибок mysqld. Только одна ошибка для каждого ошибочного случая за соединение клиента зарегистрирована, чтобы предотвратить наводнение журнала. Сообщение журнала включает запрос SQL, который был предпринят.

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

6.4.4.4. Формат журналирования для изменений таблиц базы данных mysql

Содержание таблиц привилегий в базе данных mysql может быть изменено непосредственно (например, через INSERT или DELETE) или косвенно (например, через GRANT или CREATE USER). Запросы, вовлекающие таблицы базы данных mysql, написаны в двоичный журнал, используя следующие правила:

CREATE TABLE ... SELECT комбинация манипуляции данными и определения данных. Часть CREATE TABLE зарегистрирована, используя формат запроса, а часть SELECT зарегистрирована, согласно значению binlog_format.

6.4.5. Медленный журнал запроса

Медленный журнал запроса состоит из запросов SQL, которые взяли больше, чем long_query_time секунд, чтобы выполнить и требуют, по крайней мере, min_examined_row_limit строк, которые будут исследованы. Минимальные и значения по умолчанию long_query_time это 0 и 10, соответственно. Значение может быть определено до микросекунд. Для того, чтобы зарегистрировать в файле, времена написаны, включая часть микросекунд. Для того, чтобы зарегистрировать в таблицы, написаны только времена целого числа, часть микросекунд проигнорирована.

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

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

По умолчанию медленный журнал запроса отключен. Чтобы определить начальное состояние журнала явно, надо использовать --slow_query_log[={0|1}] . Без параметра или с параметром 1 --slow_query_log включает журнал. С параметром 0 эта опция отключает журнал. Чтобы определить имя файла системного журнала, надо использовать --slow_query_log_file= file_name. Чтобы определить место назначения журнала, надо использовать --log-output (как описано в разделе 6.4.1).

Если Вы не определяете название медленного файла системного журнала, имя по умолчанию host_name-slow.log. Сервер создает файл в каталоге данных, если абсолютный путь не дан, чтобы определить отличный каталог.

Чтобы отключить или включить медленный журнал или изменить название файла системного журнала во время выполнения, используйте глобальные параметры slow_query_log и slow_query_log_file . Установите slow_query_log в 0 (или OFF), чтобы выключить, или в 1 (или ON), чтобы включить. Установите slow_query_log_file определить название файла системного журнала. Если файл системного журнала уже открыт, он будет закрыт, а новый файл открыт.

Когда медленный журнал запроса включен, сервер пишет вывод в любые места назначения, определенные опцией --log-output или переменной log_output . Если Вы включаете журнал, сервер открывает файл системного журнала и пишет сообщения запуска в него. Однако, далее журналирование запросов в файл не происходит, если место назначения FILE выбрано. Если место назначения NONE, сервер не пишет запросов, даже если медленный журнал запроса включен. Определение имени файла системного журнала не имеет никакого эффекта на журналирование, если целевое значение журнала не содержит FILE.

Сервер пишет меньше информации в медленный журнал запроса, если Вы используете опцию --log-short-format.

Чтобы включать медленные административные запросы в запросы, написанные в медленный журнал запроса, используйте переменную log_slow_admin_statements. Административные запросы включают ALTER TABLE, ANALYZE TABLE, CHECK TABLE, CREATE INDEX, DROP INDEX, OPTIMIZE TABLE и REPAIR TABLE.

Чтобы включать запросы, которые не используют индекс для поисков строки в запросах, написанных в медленный журнал запроса, включите log_queries_not_using_indexes. Когда такие запросы зарегистрированы, медленный журнал запроса может вырасти быстро. Возможно поместить ограничение скорости в эти запросы, устанавливая log_throttle_queries_not_using_indexes. По умолчанию эта переменная 0, что означает, что нет никакого предела. Положительные значения налагают минутный предел на журналировании запросов, которые не используют индекс. Первый такой запрос открывает 60-секундное окно, в пределах которого сервер журналирует запросы до данного предела, затем подавляет дополнительные запросы. Если там подавлены запросы, когда окно заканчивается, сервер регистрирует резюме, которое указывает, сколько было и совокупное время, проведенное в них. Следующее 60-секундное окно начинается, когда сервер регистрирует следующий запрос, который не использует индекс.

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

  1. Запрос не должен быть административным запросом, или log_slow_admin_statements должен быть включен.

  2. Запрос должен занять минимум long_query_time секунд или log_queries_not_using_indexes должен быть включен, и запрос не использует индекс для поисков строки.
  3. Запрос должен исследовать, по крайней мере, min_examined_row_limit строк.
  4. Запрос не должен быть подавлен согласно log_throttle_queries_not_using_indexes.

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

Все строки журнала содержат timestamp.

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

яПо умолчанию ведомое устройство не пишет копируемые запросы в медленный журнал запроса. Чтобы изменить это, используйте log_slow_slave_statements.

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

Медленный журнал запроса может использоваться, чтобы найти запросы, которые занимают много времени, чтобы выполнить и являются поэтому кандидатами на оптимизацию. Однако, исследование длинного медленного журнала запроса может стать трудной задачей. Чтобы сделать это легче, Вы можете обработать медленный журнал, используя mysqldumpslow, чтобы суммировать запросы, которые появляются в журнале. См. раздел 5.6.9.

6.4.6. Журнал DDL

Журнал DDL или журнал метаданных делает запись операций метаданных, произведенных запросами определения данных, например, DROP TABLE и ALTER TABLE. MySQL использует этот журнал, чтобы оправиться от катастрофических отказов, происходящих в середине работы с метаданными. Выполняя запрос DROP TABLE t1, t2, мы должны гарантировать удаление t1 и t2, и что каждое табличное удаление прошло полностью. Другой пример этого типа запросов SQL: ALTER TABLE t3 DROP PARTITION p2, где мы должны удостовериться, что разделение полностью удалено и что его определение удалено из списка разделов для таблицы t3.

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

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

Нет никаких конфигурируемых пользователем параметров сервера или переменных, связанных с этим файлом.

6.4.7. Обслуживание журнала сервера

Как сказано в разделе 6.4, MySQL Server может создать несколько различных файлов системного журнала, чтобы помочь Вам видеть, какая деятельность имеет место. Однако, Вы должны очистить эти файлы регулярно, чтобы гарантировать, что журналы не занимают слишком много дискового пространства.

Используя MySQL с журналированием, Вы можете хотеть зарезервировать и удалить старые файлы системного журнала время от времени и сказать MySQL начать регистрировать к новым файлам. См. раздел 8.2.

В Linux (Red Hat) Вы можете использовать скрипт mysql-log-rotate. Если Вы устанавливали MySQL из RPM, этот скрипт должен был быть установлен автоматически. Будьте осторожны с этим, если Вы используете двоичный журнал для репликации. Вы не должны удалить двоичные журналы, пока Вы не уверены, что их содержание было обработано всеми ведомыми устройствами.

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

Для двоичного журнала Вы можете установить expire_logs_days , чтобы истечь двоичные файлы системного журнала автоматически после данного числа дней (см. раздел 6.1.5). Если Вы используете репликацию, Вы должны установить переменную не ниже, чем максимальное количество дней, на которое Ваши ведомые устройства могли бы отстать от ведущего устройства. Чтобы удалить двоичные журналы по требованию, используйте PURGE BINARY LOGS (см. раздел 14.4.1.1).

Вы можете вынудить MySQL начать использовать новые файлы системного журнала, сбрасывая журналы. Это происходит, когда Вы используете FLUSH LOGS или mysqladmin flush-logs , mysqladmin refresh , mysqldump --flush-logs или mysqldump --master-data. См. разделы 14.7.6.3, 5.5.2 и 5.5.4. Кроме того, двоичный журнал сбрасывается, когда его размер достигает значения max_binlog_size .

FLUSH LOGS поддерживает дополнительные модификаторы, чтобы включить сброс отдельных журналов (например, FLUSH BINARY LOGS ).

Сбрасывающая журнал работа делает следующее:

Сервер создает новый двоичный файл системного журнала, когда Вы сбрасываете журналы. Однако, это только закрывает и вновь открывает общие и медленные файлы системного журнала запроса. Чтобы заставить новые файлы создаваться в Unix, переименуйте текущие файлы системного журнала прежде, чем сбросить их. Во время сброса сервер открывает новые файлы системного журнала с настоящими именами. Например, если общие и медленные файлы системного журнала запроса называют mysql.log и mysql-slow.log , Вы можете использовать ряд команд:

shell> cd mysql-data-directory
shell> mv mysql.log mysql.old
shell> mv mysql-slow.log mysql-slow.old
shell> mysqladmin flush-logs

В этом пункте Вы можете сделать резервное копирование mysql.old и mysql-slow.old. Подобная стратегия может использоваться, чтобы поддержать файл журнала ошибок.

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

SET GLOBAL general_log = 'OFF';
SET GLOBAL slow_query_log = 'OFF';

С отключенными журналами, переименуйте файлы системного журнала внешне, например, из командной строки. Тогда включите журналы снова:

SET GLOBAL general_log = 'ON';
SET GLOBAL slow_query_log = 'ON';

Этот метод работает с любой платформой и не требует перезапуска сервера.

6.5. Серверные компоненты

MySQL Server включает основанную на компоненте инфраструктуру для того, чтобы улучшить расширяемость сервера:

Запросы SQL для управления компонентами затрагивают работу сервера и системной таблицы mysql.component:

См. http://dev.mysql.com/doc/dev/mysql-server/.

6.6. Плагины MySQL Server

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

6.6.1. Доступные плагины сервера

MySQL включает несколько плагинов, которые осуществляют расширения сервера:

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

6.6.2. Установка и удаление плагинов

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

В то время как плагин загружен, информация об этом доступна во время выполнения через таблицу INFORMATION_SCHEMA.PLUGINS и запрос SHOW PLUGINS, см. раздел 6.6.3.

Установка плагинов

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

Встроенные плагины:

Встроенный плагин известен серверу автоматически. Обычно сервер включает плагин при запуске. Некоторые встроенные плагины разрешают их менять с опцией --plugin_name[=activation_state ].

Плагины зарегистрированные в системной таблице mysql.plugin:

Таблица mysql.plugin служит регистрацией плагинов (кроме встроенных плагинов, которые не должны быть зарегистрированы). При запуске сервер загружает каждый плагин, перечисленный в таблице. Обычно для плагина, загруженного из mysql.plugin, сервер также включает плагин. Это может быть изменено с опцией --plugin_name[= activation_state].

Если сервер запущен с опцией --skip-grant-tables, он не читает таблицу mysql.plugin и не загружает плагины, перечисленные там.

Плагины с параметрами командной строки:

Плагин, расположенный в файле библиотеки, может быть загружен при запуске сервера с опциями --plugin-load, --plugin-load-add или --early-plugin-load. Обычно для плагина, загруженного при запуске, сервер также включает плагин. Это может быть изменено с опцией --plugin_name[=activation_state ].

Опции --plugin-load и --plugin-load-add загружают плагины после встроенных плагинов и механизмов хранения во время последовательности запуска сервера. Опция --early-plugin-load используется, чтобы загрузить плагины, которые должны быть доступными до инициализации встроенных плагинов и механизмов хранения.

Значение каждой загружающей плагин опции: отделенный точкой с запятой список из значений name= plugin_library и plugin_library. Каждое name это название плагина, чтобы загрузить, а plugin_library название файла библиотеки, который содержит код. Если библиотеку называют без какого-либо предыдущего имени, сервер загружает все плагины в библиотеке. Сервер ищет файлы библиотеки в каталоге, названном в переменной plugin_dir.

Загружающие плагин опции не регистрируют плагин в таблице mysql.plugin. Для последующих перезапусков сервер загружает плагин снова только, если снова задана опция --plugin-load , --plugin-load-add или --early-plugin-load. Таким образом, опция производит одноразовую работу установки, которая сохраняется для единственной загрузки сервера.

--plugin-load , --plugin-load-add и --early-plugin-load позволяют плагинам быть загруженными даже когда --skip-grant-tables задана (которая заставляет сервер игнорировать таблицу mysql.plugin). --plugin-load , --plugin-load-add и --early-plugin-load также позволяют загрузить плагины при запуске, которые не могут быть загружены во время выполнения.

--plugin-load-add дополняет опцию --plugin-load:

Например, эти опции:

--plugin-load=x --plugin-load-add=y

эквивалентны этой опции:

--plugin-load="x;y"

Но эти опции:

--plugin-load-add=y --plugin-load=x

эквивалентны этой опции:

--plugin-load=x

Плагины, установленные запросом INSTALL PLUGIN:

Плагин, расположенный в файле библиотеки, может быть загружен во время выполнения с INSTALL PLUGIN . Запрос также регистрирует плагин в таблице mysql.plugin, чтобы заставить сервер загружать это при последующих перезапусках. Поэтому INSTALL PLUGIN требует привилегии INSERT для таблицы mysql.plugin.

Базовое имя файла библиотеки зависит от Вашей платформы. Общие суффиксы .so для Unix и .dll для Windows.

Пример: опция --plugin-load устанавливает плагин при запуске сервера. Чтобы установить плагин myplugin из файла библиотеки somepluglib.so, используйте эти строки в файле my.cnf:

[mysqld]
plugin-load=myplugin=somepluglib.so

В этом случае плагин не зарегистрирован в mysql.plugin. Перезапуск сервера без --plugin-load не загружает плагин при запуске.

Альтернативно INSTALL PLUGIN заставляет сервер загружать код плагина из файла библиотеки во время выполнения:

INSTALL PLUGIN myplugin SONAME 'somepluglib.so';

INSTALL PLUGIN также регистрирует плагин, перечисляя в таблице mysql.plugin, чтобы гарантировать, что сервер загружает это при последующих перезапусках.

Много плагинов могут быть загружены при запуске сервера или во время выполнения. Однако, если плагин разработан таким образом, что он должен быть загружен и инициализирован во время запуска сервера, попытка загрузить это во время выполнения при использовании INSTALL PLUGIN произведет ошибку:

mysql> INSTALL PLUGIN myplugin SONAME 'somepluglib.so';
ERROR 1721 (HY000): Plugin 'myplugin' is marked as not dynamically
installable. You have to stop the server to install it.

В этом случае Вы должны использовать --plugin-load , --plugin-load-add или --early-plugin-load.

Если плагин называют в опции --plugin-load , --plugin-load-add или --early-plugin-load и в таблице mysql.plugin (как результат INSTALL PLUGIN ), сервер запускается, но пишет эти сообщения в журнал ошибок:

[ERROR] Function 'plugin_name' already exists
[Warning] Couldn't load plugin named 'plugin_name'
with soname 'plugin_object_file'.

Управление статусом активации плагина

Если сервер знает о плагине, когда он запускается (например, потому что плагин называют, используя опцию --plugin-load или он зарегистрирован в таблице mysql.plugin), сервер загружает и включает плагин по умолчанию. Возможно управлять статусом активации для такого плагина, используя опцию --plugin_name [=activation_state], где plugin_name название плагина, например, innodb, csv или validate_password. Как с другими опциями, тире и подчеркивания являются взаимозаменяемыми в именах опций. Кроме того, значения статуса активации не являются чувствительными к регистру. Например, --my_plugin=ON и --my-plugin=on эквивалентны.

Статусы активации видимы в столбце LOAD_OPTION таблицы INFORMATION_SCHEMA.PLUGINS .

Предположите, что встроенные подключаемые механизмы хранения CSV, BLACKHOLE и ARCHIVE, и что Вы хотите, чтобы сервер загрузил их при запуске согласно этим условиям: серверу разрешают работать, если инициализация CSV терпит неудачу, должен потребовать, чтобы инициализация BLACKHOLE была успешной, и отключил ARCHIVE. Чтобы достигнуть этого, используйте эти строки в файле опций:

[mysqld]
csv=ON
blackhole=FORCE
archive=OFF

Опция --enable-plugin_name синоним для --plugin_name=ON. Опция --disable-plugin_name и --skip-plugin_name синонимы для --plugin_name=OFF.

Если плагин отключен, явно с помощью OFF или неявно потому что включили ON, но инициализация провалилась, аспекты работы сервера, которые требуют плагин, изменятся. Например, если плагин осуществляет механизм хранения, существующие таблицы для механизма хранения становятся недоступными, и сервер пытается составить новые таблицы для механизма хранения в таблицах, которые не используют механизм хранения значения по умолчанию, если режим SQL NO_ENGINE_SUBSTITUTION позволяет вызвать ошибку вместо этого.

Отключение плагина может потребовать корректировки других опций. Например, если Вы запускаете сервер c использованием --skip-innodb, чтобы отключить InnoDB, другие опции innodb_xxx, вероятно, должны будут быть опущены при запуске. Кроме того, потому что InnoDB механизм хранения по умолчанию, это не будет запускаться, если Вы не определите другой доступный механизм хранения с помощью --default_storage_engine. Вы должны также установить --default_tmp_storage_engine.

Удаление плагинов

Во время выполнения запрос UNINSTALL PLUGIN отключает и удаляет плагин, известный серверу. Запрос выгружает плагин и удаляет его из таблицы mysql.plugin, если это зарегистрировано там. Поэтому UNINSTALL PLUGIN требует привилегии DELETE для mysql.plugin. Сервер не будет загружать плагин автоматически для последующих перезапусков.

UNINSTALL PLUGIN может выгрузить плагин независимо от того, было ли это загружено во время выполнения с INSTALL PLUGIN или при запуске с загружающей плагин опцией согласно этим условиям:

Чтобы удалить плагин, который в настоящее время загружается при запуске сервера с загружающей плагин опцией, используйте эту процедуру:

  1. Удалите любые опции, связанные с плагином, из файла my.cnf.

  2. Перезапустите сервер.
  3. Плагины обычно устанавливаются, используя или загружающую плагин опцию при запуске или с INSTALL PLUGIN во время выполнения, но не оба способа. Однако, удаление опций для плагина из my.cnf, возможно, недостаточно, чтобы удалить это, если в некоторый момент INSTALL PLUGIN также использовался. Если плагин все еще появляется в выводе INFORMATION_SCHEMA.PLUGINS или SHOW PLUGINS, надо использовать UNINSTALL PLUGIN , чтобы удалить это из таблицы mysql.plugin. Тогда перезапустите сервер снова.

6.6.3. Получение информации о плагине сервера

Есть несколько способов определить, какие плагины установлены в сервере:

6.6.4. Плагин перезаписи запроса

MySQL Server поддерживает плагины перезаписи запроса, которые могут исследовать и возможно изменить запросы, полученные сервером прежде, чем сервер выполнит их.

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

Следующие разделы описывают, как установить и использовать плагин Rewriter и предоставляет информацию о ссылке для своих связанных компонентов.

6.6.4.1. Установка или удаление плагина перезаписи запроса

Если установлено, Rewriter вовлекает некоторые затраты даже когда отключен. Чтобы избежать этого, не устанавливайте плагин, если Вы не планируете использовать его.

Чтобы устанавливать или удалять Rewriter, выбирают скрипт в каталоге share MySQL:

Выполните выбранный скрипт следующим образом:

shell> mysql -u root -p < install_rewriter.sql
Enter password: (enter root password here)

Пример здесь использует install_rewriter.sql. Сделайте соответствующую замену, если Вы выбираете другой скрипт.

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

mysql> SHOW GLOBAL VARIABLES LIKE 'rewriter_enabled';
+------------------+-------+
| Variable_name    | Value |
+------------------+-------+
| rewriter_enabled | ON    |
+------------------+-------+

См. разделы 6.6.4.2 и 6.6.4.3.

6.6.4.2. Применение плагина перезаписи запроса

Чтобы включить или отключить плагин, включите или отключите rewriter_enabled . По умолчанию Rewriter включен, когда Вы устанавливаете его (см. раздел 6.6.4.1). Чтобы установить статус плагина явно, Вы можете установить переменную при запуске сервера. Например, чтобы включить плагин в файле опций, используйте эти строки:

[mysqld]
rewriter_enabled=ON

Также возможно включить или отключить плагин во время выполнения:

mosql> SET GLOBAL rewriter_enabled = ON;
mysql> SET GLOBAL rewriter_enabled = OFF;

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

Добавление правил подстановки

Чтобы добавить правила для плагина Rewriter, добавляют строки к таблице rewrite_rules, затем вызывают хранимую процедуру flush_rewrite_rules(), чтобы загрузить правила из таблицы в плагин. Следующий пример создает простое правило соответствия запросам, которые выбирают единственное буквальное значение:

mysql> INSERT INTO query_rewrite.rewrite_rules (pattern, replacement)
    ->        VALUES('SELECT ?', 'SELECT ? + 1');

Получающееся табличное содержание похоже на это:

mysql> SELECT * FROM query_rewrite.rewrite_rules\G
*************************** 1. row ***************************
id: 1
 pattern: SELECT ?
  pattern_database: NULL
 replacement: SELECT ? + 1
 enabled: YES
 message: NULL
pattern_digest: NULL
normalized_pattern: NULL

Правило определяет шаблон образца, указывающий, который SELECT соответствует, и шаблон замены, указывающий, как переписать соответствие запросов. Однако, добавлить правило к таблице rewrite_rules недостаточно, чтобы вызвать его применение в Rewriter. Вы должны вызвать flush_rewrite_rules(), чтобы загрузить табличное содержание в плагин в кэш-памяти:

mysql> CALL query_rewrite.flush_rewrite_rules();

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

Когда плагин читает каждое правило из таблицы правил, это вычисляет нормализованную форму (обзор) от образца и значения хеша обзора и обновляет столбцы normalized_pattern и pattern_digest:

mysql> SELECT * FROM query_rewrite.rewrite_rules\G
*************************** 1. row ***************************
id: 1
 pattern: SELECT ?
  pattern_database: NULL
 replacement: SELECT ? + 1
 enabled: YES
 message: NULL
pattern_digest: 46b876e64cd5c41009d91c754921f1d4
normalized_pattern: select ?

См. раздел 23.7 .

Образцы используют тот же самый синтаксис, как подготовленные запросы (см. раздел 14.5.1). В пределах шаблона образца символы ? действуют как маркеры параметра, соответствуя значениям данных. Маркеры параметра могут использоваться только там, где значения данных должны появиться, но не для ключевых слов SQL, идентификаторов и т.д. Символ ? не должны быть приложены в пределах кавычек.

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

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

mysql> SELECT PI();
+----------+
| PI()     |
+----------+
| 3.141593 |
+----------+
1 row in set (0.01 sec)

mysql> SELECT 10;
+--------+
| 10 + 1 |
+--------+
| 11     |
+--------+
1 row in set, 1 warning (0.00 sec)

Никакая перезапись не происходит для первого SELECT, но делается для второго. Второй запрос иллюстрирует это, когда плагин Rewriter переписывает запрос, он производит предупреждающее сообщение. Чтобы просмотреть сообщение, надо использовать SHOW WARNINGS:

mysql> SHOW WARNINGS\G
*************************** 1. row ***************************
  Level: Note
   Code: 1105
Message: Query 'SELECT 10' rewritten to 'SELECT 10 + 1' by
         a query rewrite plugin

Чтобы включить или отключить существующее правило, измените столбец enabled и перезагрузите таблицу в плагин. Отключить правило 1:

mysql> UPDATE query_rewrite.rewrite_rules SET enabled = 'NO' WHERE id = 1;
mysql> CALL query_rewrite.flush_rewrite_rules();

Это позволяет Вам дезактивировать правило, не удаляя его из таблицы.

Повторно включить правило 1:

mysql> UPDATE query_rewrite.rewrite_rules SET enabled = 'YES'
                 WHERE id = 1;
mysql> CALL query_rewrite.flush_rewrite_rules();

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

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

SELECT * FROM users WHERE appdb.id = id_value;
SELECT * FROM users WHERE id = id_value;

Предположите также, что столбец id переименован в user_id (возможно, таблица должна быть изменена, чтобы добавить другой тип ID и необходимо указать более определенно, какой ID задает столбец id).

Изменение означает, что приложения должны отнестись к user_id вместо id в WHERE. Но если есть старые приложения, которые не могут быть переписаны, чтобы изменить запросы SELECT, которые они производят, они больше не будут работать должным образом. Плагин Rewriter может решить эту проблему. Чтобы соответствовать и переписать запросы, добавьте следующие два правила и перезагрузите таблицу правил:

mysql> INSERT INTO query_rewrite.rewrite_rules
    ->        (pattern, replacement) VALUES(
    ->        'SELECT * FROM appdb.users WHERE id = ?',
    ->        'SELECT * FROM appdb.users WHERE user_id = ?');
mysql> INSERT INTO query_rewrite.rewrite_rules
    ->        (pattern, replacement, pattern_database) VALUES(
    ->        'SELECT * FROM users WHERE id = ?',
    ->        'SELECT * FROM users WHERE user_id = ?', 'appdb');
mysql> CALL query_rewrite.flush_rewrite_rules();

Rewriter использует первое правило, чтобы соответствовать запросам, которые используют компетентное имя таблицы. Это использует второе, чтобы соответствовать запросам, которые использовали неквалифицированное имя, но только если база данных по умолчанию appdb (значение в pattern_database).

Как работает соответствие

Rewriter использует обзоры запросов, чтобы соответствовать поступающим запросам против правил подстановки шаг за шагом. max_digest_length определяет размер буфера, используемого для вычислительных обзоров запроса. Большие значения включают вычисление обзоров, которые отличают более длинные запросы. Меньшие значения используют меньше памяти, но увеличивают вероятность более длинных запросов, сталкивающихся с тем же самым значением обзора.

Плагин соответствует каждый запрос правилам подстановки следующим образом:

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

  2. Если значение хеша обзора соответствует какому-либо значению хеша обзора образца, нормализованная форма запроса соответствует нормализованной форме соответствующих образцов правила.
  3. Если нормализованный запрос соответствует правилу, сравниваются буквальные значения в запросе и образце. ? в образце соответствует любому буквальному значению в запросе. Если запрос готовит SELECT, ? в образце также соответствует ? в запросе. Иначе соответствующие литералы должны быть теми же самыми.

Если многократные правила соответствуют запросу, не определено, которое использовано, чтобы переписать запрос.

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

Перезапись готовых запросов

Готовые запросы переписаны во время разбора (то есть, когда они подготовлены), а не когда они выполнены позже.

Готовые запросы отличаются от неготовых запросов, в которых они могут содержать символы ? как маркеры параметра. Чтобы соответствовать ? в готовом запросе, образец Rewriter должен содержать ? в том же самом местоположении. Предположите, что у правила подстановки есть этот образец:

SELECT ?, 3

Следующая таблица показывает несколько подготовленных SELECT и соответствует ли образец правила им.

Готовый запрос Соответствует ли образец запросу
PREPARE s AS 'SELECT 3, 3' Да
PREPARE s AS 'SELECT ?, 3'Да
PREPARE s AS 'SELECT 3, ?'Нет
PREPARE s AS 'SELECT ?, ?'Нет
Операционная информация плагина Rewriter

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

mysql> SHOW GLOBAL STATUS LIKE 'Rewriter%';
+-----------------------------------+-------+
| Variable_name                     | Value |
+-----------------------------------+-------+
| Rewriter_number_loaded_rules      | 1     |
| Rewriter_number_reloads           | 5     |
| Rewriter_number_rewritten_queries | 1     |
| Rewriter_reload_error             | ON    |
+-----------------------------------+-------+

См. раздел 6.6.4.3.4.

Когда Вы загружаете таблицу правил, вызывая хранимую процедуру flush_rewrite_rules(), если ошибка происходит для правила, CALL производит ошибку, и плагин устанавливает Rewriter_reload_error в ON:

mysql> CALL query_rewrite.flush_rewrite_rules();
ERROR 1644 (45000): Loading of some rule(s) failed.

mysql> SHOW GLOBAL STATUS LIKE 'Rewriter_reload_error';
+-----------------------+-------+
| Variable_name         | Value |
+-----------------------+-------+
| Rewriter_reload_error | ON    |
+-----------------------+-------+

В этом случае проверьте столбец message таблицы rewrite_rules на значения не NULL, чтобы видеть, какова проблема была.

Использование плагином наборов символов

Когда таблица rewrite_rules загружена в Rewriter, плагин интерпретирует запросы, используя текущее глобальное значение character_set_client. Если глобальная переменная character_set_client изменена впоследствии, таблица правил должна быть перезагружена.

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

6.6.4.3. Ссылка плагина Rewriter

Следующее обсуждение служит ссылкой на эти компоненты, связанные с Rewriter:

6.6.4.3.1. Таблица правил плагина перезаписи запроса

Таблица правил Rewriter в базе данных query_rewrite обеспечивает постоянное хранение правил, которые Rewriter применяет, чтобы решить, переписать ли запрос.

Пользователи общаются с плагином, изменяя ряд правил, сохраненный в этой таблице. Плагин общается с пользователями через столбец message.

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

Таблица rewrite_rules имеет столбцы:

6.6.4.3.2. Процедуры и функции плагина перезаписи запроса

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

6.6.4.3.3. Системные переменные плагина перезаписи запроса

Плагин Rewriter использует следующие системные переменные. Эти переменные доступны, только если плагин установлен (см. раздел 6.6.4.1).

6.6.4.3.4. Переменные статуса Rewriter

Rewriter поддерживает следующие переменные статуса. Эти переменные доступны, только если плагин устанавлен (см. раздел 6.6.4.1).

6.6.5. Version Tokens

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

У интерфейса Version Tokens есть эти особенности:

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

6.6.5.1. Компоненты Version Tokens

Version Tokens основаны на библиотеке, которая осуществляет эти компоненты:

6.6.5.2. Установка или деинсталлирование Version Tokens

Если установлено, Version Tokens вовлекает некоторые издержки. Чтобы избежать этого, не устанавливайте плагин, если вы не планируете использовать.

Этот раздел описывает, как установить или деинсталлировать Version Tokens, который осуществляется в файле библиотеки, содержащем плагин и определенные пользователями функции. См. разделы 6.6.2 и 26.4.2.5.

Чтобы быть применимым сервером, файл библиотеки должен быть расположен в каталоге плагинов (каталог, названный в системной переменной plugin_dir). Если необходимо, установите значение plugin_dir при запуске сервера, чтобы сказать серверу местоположение каталога.

Базовое имя файла библиотеки version_tokens. Суффикс имени файла отличается в зависимости от платформы (например, .so в Unix и .dll в Windows).

Чтобы установить плагин и UDF, используйте INSTALL PLUGIN и CREATE FUNCTION (замените суффикс .so для вашей платформы по мере необходимости):

INSTALL PLUGIN version_tokens SONAME 'version_token.so';
CREATE FUNCTION version_tokens_set RETURNS STRING SONAME 'version_token.so';
CREATE FUNCTION version_tokens_show RETURNS STRING SONAME 'version_token.so';
CREATE FUNCTION version_tokens_edit RETURNS STRING SONAME 'version_token.so';
CREATE FUNCTION version_tokens_delete RETURNS STRING SONAME 'version_token.so';
CREATE FUNCTION version_tokens_lock_shared RETURNS INT SONAME 'version_token.so';
CREATE FUNCTION version_tokens_lock_exclusive RETURNS INT SONAME 'version_token.so';
CREATE FUNCTION version_tokens_unlock RETURNS INT SONAME 'version_token.so';

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

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

После того, как установлен, плагин Version Tokens и UDF остаются установленными, пока не деинсталлированы. Чтобы удалить их, используйте UNINSTALL PLUGIN и DROP FUNCTION:

UNINSTALL PLUGIN version_tokens;
DROP FUNCTION version_tokens_set;
DROP FUNCTION version_tokens_show;
DROP FUNCTION version_tokens_edit;
DROP FUNCTION version_tokens_delete;
DROP FUNCTION version_tokens_lock_shared;
DROP FUNCTION version_tokens_lock_exclusive;
DROP FUNCTION version_tokens_unlock;

6.6.5.3. Применение Version Tokens

Перед использованием Version Tokens, установите его согласно инструкциям, предоставленным в разделе 6.6.5.2.

Сценарий, в котором Version Tokens может быть полезным, является системой, которая получает доступ к коллекции серверов MySQL, но должна управлять ими в целях выравнивания нагрузки, контролируя их и регулируя назначения сервера согласно изменениям. Такая система включает эти компоненты:

Version Tokens разрешают управлять доступом к серверу согласно назначению, не требуя, чтобы клиенты неоднократно запрашивали серверы об их назначениях:

Клиентская логика для обнаружения ошибок символа и отбора нового сервера может быть осуществлена различными путями:

Следующий пример иллюстрирует предыдущее обсуждение в более конкретной форме.

Когда Version Tokens инициализируют на данном сервере, список вариантов пуст. Обслуживание списка выполняется, вызывая определенные пользователями функции (UDF). Трпебуется привилегия SUPER, чтобы вызывать любую Version Token UDF, таким образом, модификация списка, как ожидают, будет сделана приложением для управления или административным приложением, у которого есть эта привилегия.

Предположим, что приложение для управления общается с рядом серверов, которые запрашиваются клиентами, чтобы получить доступ к базам данных emp и prod). Всем серверам разрешают обработать запросы поиска данных, но только некоторым из них разрешают сделать обновления базы данных. Чтобы обращаться с этим на определенной для базы данных основе, приложение для управления составляет список символов вариантов на каждом сервере. В символическом списке для данного сервера символические имена представляют имена базы данных и значения read или write в зависимости от того, должна ли база данных использоваться только для чтения или для обновления.

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

Чтобы определить список вариантов для сервера, приложение для управления вызывает UDF version_token_set(). Есть также UDF для изменения и показа символического списка, описанные позже. Например, приложение могло бы послать эти запросы группе из трех серверов:

Server 1:

mysql> SELECT version_tokens_set('emp=read;prod=read');
+------------------------------------------+
| version_tokens_set('emp=read;prod=read') |
+------------------------------------------+
| 2 version tokens set.                    |
+------------------------------------------+

Server 2:

mysql> SELECT version_tokens_set('emp=write;prod=read');
+-------------------------------------------+
| version_tokens_set('emp=write;prod=read') |
+-------------------------------------------+
| 2 version tokens set.                     |
+-------------------------------------------+

Server 3:

mysql> SELECT version_tokens_set('emp=read;prod=write');
+-------------------------------------------+
| version_tokens_set('emp=read;prod=write') |
+-------------------------------------------+
| 2 version tokens set.                     |
+-------------------------------------------+

Список в каждом случае определяется как отделенный точкой с запятой список пар name=value. Получающийся список оценивает результат в этих назначениях сервера:

В дополнение к назначению каждого сервера приложение для управления также обслуживает кэш, который отражает назначения сервера.

Прежде, чем общаться с серверами, клиентское приложение связывается с приложением для управления и получает информацию о назначениях сервера. Тогда клиент выбирает сервер на основе тех назначений. Предположим, что клиент хочет читать и писать базу данных emp. На основе предыдущих назначений годится только сервер 2. Клиент соединяется с сервером 2 и регистрирует его требования сервера, устанавливая его системную переменную version_tokens_session:

mysql> SET @@session.version_tokens_session = 'emp=write';

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

mysql> UPDATE emp.employee SET salary = salary * 1.1 WHERE id = 4981;
Query OK, 1 row affected (0.07 sec)
Rows matched: 1  Changed: 1  Warnings: 0

mysql> SELECT last_name, first_name FROM emp.employee WHERE id = 4981;
+-----------+------------+
| last_name | first_name |
+-----------+------------+
| Smith     | Abe        |
+-----------+------------+
1 row in set (0.01 sec)

Несоответствия между списками сервера и версии клиента могут произойти двумя путями:

Пока назначение сервера 2 не изменяется, клиент продолжает использовать это для чтения и записи. Но предположите, что приложение для управления хочет изменить назначения сервера так, чтобы записи в emp нужно послать в сервер 1 вместо сервера 2. Чтобы сделать это, приложение использует version_tokens_edit(), чтобы изменить значение символа emp на этих двух серверах (и обновить кэш назначений сервера):

Server 1:

mysql> SELECT version_tokens_edit('emp=write');
+----------------------------------+
| version_tokens_edit('emp=write') |
+----------------------------------+
| 1 version tokens updated.        |
+----------------------------------+

Server 2:

mysql> SELECT version_tokens_edit('emp=read');
+---------------------------------+
| version_tokens_edit('emp=read') |
+---------------------------------+
| 1 version tokens updated.       |
+---------------------------------+

version_tokens_edit() меняет названные символы в списке сервера и оставляет другие символы без изменений.

В следующий раз, когда клиент посылает запрос серверу 2, его собственный список больше не соответствует списку символов сервера, и ошибка происходит:

mysql> UPDATE emp.employee SET salary = salary * 1.1 WHERE id = 4982;
ERROR 3136 (42000): Version token mismatch for emp. Correct value read

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

Каждый клиент должен сотрудничать с Version Tokens, посылая только запросы в соответствии с символическим списком, который регистрируется в данном сервере. Например, если клиент регистрирует символический список 'emp=read', нет ничего в Version Tokens, чтобы препятствовать тому, чтобы клиент послал обновления для базы данных emp. Клиент самостоятельно должен воздержаться от выполнения этого.

Для каждого запроса, полученного от клиента, сервер неявно использует блокировку следующим образом:

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

Предыдущий пример использует только несколько определенных пользователями функций, включенных в библиотеку плагина Version Tokens, но есть другие. Один набор UDF разрешает управлять и просматривать список символов сервера. Другой набор UDF разрешает блокировать символы.

Эти UDF разрешают списку сервера быть созданным, измененным, удаленным и просмотренным:

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

mysql> SELECT version_tokens_set('tok1=a;tok2=b');
+-------------------------------------+
| version_tokens_set('tok1=a;tok2=b') |
+-------------------------------------+
| 2 version tokens set.               |
+-------------------------------------+

mysql> SELECT version_tokens_edit('tok3=c');
+-------------------------------+
| version_tokens_edit('tok3=c') |
+-------------------------------+
| 1 version tokens updated.     |
+-------------------------------+

mysql> SELECT version_tokens_delete('tok2;tok1');
+------------------------------------+
| version_tokens_delete('tok2;tok1') |
+------------------------------------+
| 2 version tokens deleted.          |
+------------------------------------+

mysql> SELECT version_tokens_show();
+-----------------------+
| version_tokens_show() |
+-----------------------+
| tok3=c;               |
+-----------------------+

Предупреждения происходят, если символический список неправилен:

mysql> SELECT version_tokens_set('tok1=a; =c');
+----------------------------------+
| version_tokens_set('tok1=a; =c') |
+----------------------------------+
| 1 version tokens set.            |
+----------------------------------+
1 row in set, 1 warning (0.00 sec)

mysql> SHOW WARNINGS\G
*************************** 1. row ***************************
  Level: Warning
   Code: 42000
Message: Invalid version token pair encountered. The list provided
 is only partially updated.
1 row in set (0.00 sec)

Как упомянуто ранее, символы вариантов определяются, используя отделенный точкой с запятой список пар name=value. Рассмотрите этот вызов version_tokens_set():

mysql> SELECT version_tokens_set('tok1=b;;; tok2= a = b ; tok1 = 1\'2 3"4')
+---------------------------------------------------------------+
| version_tokens_set('tok1=b;;; tok2= a = b ; tok1 = 1\'2 3"4') |
+---------------------------------------------------------------+
| 3 version tokens set.                                         |
+---------------------------------------------------------------+

Version Tokens интерпретируют аргумент следующим образом:

Учитывая эти правила, предыдущий запрос version_tokens_set() получит результаты в символическом списке с двумя символами: tok1 имеет значение 1'2 3"4, а tok2 имеет значение a = b. Чтобы проверить это, вызовите version_tokens_show():

mysql> SELECT version_tokens_show();
+--------------------------+
| version_tokens_show()    |
+--------------------------+
| tok2=a = b;tok1=1'2 3"4; |
+--------------------------+

Если символический список содержит два символа, почему version_tokens_set() вернул 3 значения символа? Это произошло, потому что оригинальный символический список содержал два определения для tok1, и второе определение заменило первое.

UDF Version Tokens имеет эти ограничения на имена и значения:

Version Tokens также включают ряд UDF, предоставляющих возможности блокировки:

Каждая функция блокировки возвращает отличное от нуля значение для успеха. Иначе ошибка происходит:

mysql> SELECT version_tokens_lock_shared('lock1', 'lock2', 0);
+-------------------------------------------------+
| version_tokens_lock_shared('lock1', 'lock2', 0) |
+-------------------------------------------------+
| 1                                               |
+-------------------------------------------------+
mysql> SELECT version_tokens_lock_shared(NULL, 0);
ERROR 3131 (42000): Incorrect locking service lock name '(null)'.

Блокировки, использующие функции блокировки Version Tokens, консультативны, приложения должны согласиться сотрудничать.

Возможно заблокировать несуществующие символические имена. Это не создает символы.

Функции блокировки Version Tokens основаны на сервисе из раздела 26.3.1 и имеют ту же самую семантику для коллективных и монопольных блокировок. Version Tokens используют служебные подпрограммы, встроенные в сервер, а не интерфейс UDF, таким образом, те UDF не должны быть установлены, чтобы использовать Version Tokens. Блокировки, приобретенные Version Tokens, используют сервисное пространство имен version_token_locks. Блокировки могут быть проверены, используя Performance Schema, таким образом, это также верно для блокировок Version Tokens. См. раздел 26.3.1.2.3.

Для функций блокировки Version Tokens аргументы имени используются точно, как определены. Окружение пробелами не проигнорировано и позволены = и ;. Это вызвано тем, что Version Tokens просто передают имена, которые будут заблокированы, сервису блокировок.

6.6.5.4. Ссылки Version Tokens

Следующее обсуждение служит ссылкой на эти компоненты Version Tokens:

6.6.5.4.1. Функции Version Tokens

Библиотека плагина Version Tokens включает несколько определенных пользователями функций. Один набор UDF разрешает управлять и просматривать список сервера символов вариантов. Другой набор UDF разрешает работать с блокировками. Привилегия SUPER требуется, чтобы вызывать любые Version Tokens UDF.

Следующие UDF разрешают создать, изменить, удалить и просмотреть список маркеров версии сервера. Интерпретация параметров name_list и token_list (включая обработку пробелов) происходит, как описано в разделе 6.6.5.3, который предоставляет подробную информацию о синтаксисе для определения маркеров, а также дополнительные примеры.

Следующие UDFs разрешают управлять блокировкой маркеров:

Функции блокировки имеют эти особенности:

6.6.5.4.2. Системные переменные Version Tokens

Version Tokens поддерживают следующие системные переменные. Эти переменные недоступны, если плагин Version Tokens не установлен (см. раздел 6.6.5.2).

6.7. Выполнение многих экземпляров MySQL на одной машине

В некоторых случаях вы могли бы хотеть выполнить многократные экземпляры MySQL на единственной машине. Вы могли бы хотеть протестировать новый выпуск MySQL, оставляя существующую производственную установку без помех. Или вы могли бы хотеть предоставить различный пользовательский доступ к различным серверам mysqld . Например, вы могли бы быть Интернет-провайдером, который хочет предоставить независимые установки MySQL различным клиентам.

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

Используете ли вы отличные двоичные файлы сервера, каждый экземпляр, который вы выполняете, должен быть сконфигурирован с уникальными значениями для нескольких операционных параметров. Это устраняет потенциал для конфликта между экземплярами. Параметры могут быть установлены в командной строке, в файлах опций или установив переменные окружения. См. раздел 5.2.3. Чтобы видеть значения, используемые экземпляром, соединитесь с ним и выполните SHOW VARIABLES.

Основной ресурс, которым управляет экземпляр MySQL, является каталогом данных. Каждый экземпляр должен использовать различный каталог данных, местоположение которого определяется, используя --datadir=dir_name. Для методов конфигурирования каждого экземпляра с его собственным каталогом данных и предупреждений об опасностях см. раздел 6.7.1.

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

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

Для дальнейшего обсуждения опций файла журнала посмотрите раздел 6.4.

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

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

Если у вас есть многократные установки MySQL в различных местах, можно определить основной каталог для каждой установки с --basedir= dir_name. Это заставляет каждый экземпляр автоматически использовать различный каталог данных, файлы журнала и файл PID, потому что значение по умолчанию для каждого из этих параметров задается относительно основного каталога. В этом случае единственные опции, которые необходимо определить, это --socket и --port. Предположим, что вы устанавливаете различные версии MySQL, используя двоичные дистрибутивы tar. Они устанавливаются в различных местах, таким образом, можно запустить сервер для каждой установки, используя команду bin/mysqld_safe в соответствии с ее основным каталогом. mysqld_safe определяет надлежащую опцию --basedir, чтобы передать ее mysqld , и вы должны определить только --socket и --port.

Как обсуждено в следующем разделs, возможно запустить дополнительные серверы, определяя соответствующие опции команды или устанавливая переменные окружения. Однако, если необходимо выполнить многократные серверы на более постоянной основе, более удобно использовать файлы опции, чтобы определить для каждого сервера те значения опции, которые должны быть уникальны для него. Опция --defaults-file очень полезна для этого.

6.7.1. Установка многих каталогов данных

У каждого экземпляра MySQL на машине должен быть свой собственный каталог данных. Местоположение определяется, используя опцию --datadir=dir_name.

Есть различные методы установки каталога данных для нового экземпляра:

Следующее обсуждение обеспечивает больше деталей о каждом методе.

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

Даже когда предыдущие меры предосторожности выполняются, этот вид установки работает только с таблицами MyISAM и MERGE. Кроме того, это предупреждение против совместного использования каталога данных среди серверов всегда применяется в окружающей среде NFS. Разрешение многим серверам MySQL получить доступ к каталогу общих данных по NFS является очень плохой идеей. Основная проблема состоит в том, что NFS узкое место по скорости. Это не предназначено для такого использования. Другой риск с NFS состоит в том, что необходимо создать способ гарантировать, чтобы два или больше сервера не вмешивались друг в друга. Обычно захват файла NFS обрабатывается сервисом lockd, но в данный момент нет никакой платформы, которая выполняет блокировку 100% достоверно в каждой ситуации.

Создайте новый каталог данных

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

В Unix инициализируйте каталог данных. Посмотрите раздел 2.9.

В Windows каталог данных включен в MySQL:

Скопируйте существующий каталог данных

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

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

  2. Скопируйте каталог данных в место, где новый каталог данных должен быть.
  3. Скопируйте файл опции my.cnf или my.ini, используемый существующим экземпляром. Это служит основанием для нового экземпляра.
  4. Измените новый файл опции так, чтобы любые пути, обращающиеся к исходному каталогу данных, обратились к новому каталогу данных. Кроме того, измените любые другие опции, которые должны быть уникальными для экземпляра, такие как номер порта TCP/IP и файлы журнала. Для списка параметров, которые должны быть уникальными, посмотрите раздел 6.7.
  5. Запустите новый экземпляр, указав ему использовать новый файл опции.

6.7.2. Выполнение нескольких экземпляров MySQL в Windows

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

6.7.2.1. Запуск нескольких экземпляров MySQL в командной строке Windows

Процедура запуска единственного сервера MySQL вручную из командной строки описана в разделе 2.3.5.6 . Чтобы запустить много серверов этим путем, можно определить подходящие варианты в командной строке или в файле опции. Более удобно поместить опции в файл опции, но необходимо удостовериться, что каждый сервер получает свой собственный набор опций. Чтобы сделать это, создайте файл опции для каждого сервера и скажите серверу имя файла с помощью опции --defaults-file .

Предположим, что вы хотите выполнить один экземпляр mysqld на порту 3307 с каталогом данных C:\mydata1, а другой экземпляр на порту 3308 с каталогом данных C:\mydata2. Используйте эту процедуру:

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

  2. Создайте два файла опции. Например, создайте один файл C:\my-opts1.cnf, который похож на это:
    [mysqld]
    datadir = C:/mydata1
    port = 3307
    

    Создайте второй файл C:\my-opts2.cnf:

    [mysqld]
    datadir = C:/mydata2
    port = 3308
    
  3. Используйте опцию --defaults-file, чтобы запустить каждый сервер с его собственным файлом опций:
    C:\> C:\mysql\bin\mysqld --defaults-file=C:\my-opts1.cnf
    C:\> C:\mysql\bin\mysqld --defaults-file=C:\my-opts2.cnf
    

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

Чтобы закрыть серверы, соединитесь с каждым с использованием соответствующего номера порта:

C:\> C:\mysql\bin\mysqladmin --port=3307 --host=127.0.0.1 --user=root --password shutdown
C:\> C:\mysql\bin\mysqladmin --port=3308 --host=127.0.0.1 --user=root --password shutdown

Серверы сконфигурированны, чтобы соединиться по TCP/IP. Если ваша версия Windows поддерживает именованные каналы, и вы также хотите разрешить соединения именованного канала, определите опции, которые включают именованный канал и определяют его имя. Каждый сервер, который поддерживает соединения именованного канала, должен использовать уникальное имя канала. Например, файл C:\my-opts1.cnf мог бы быть записан так:

[mysqld]
datadir = C:/mydata1
port = 3307
enable-named-pipe
socket = mypipe1

Измените C:\my-opts2.cnf так же для использования вторым сервером. Тогда запустите серверы, как описано ранее.

Подобная процедура применяется к серверам, которым вы хотите разрешить сопряжения с общей памятью. Включите такие соединения с опцией --shared-memory и определяет уникальное имя общей памяти для каждого сервера с --shared-memory-base-name.

6.7.2.2. Запуск нескольких экземпляров MySQL как Windows Services

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

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

Для следующих инструкций предположите, что вы хотите выполнить mysqld от двух различных версий MySQL, которые установлены в C:\mysql-5.5.9 и C:\mysql-8.0.1. Это могло бы иметь место, если вы работаете с 5.5.9 как с рабочим сервером, но также хотите провести тесты, используя 8.0.1.

Чтобы установить MySQL как службу Windows, используйте опцию --install или --install-manual. См. раздел 2.3.5.8.

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

Чтобы удалить многократные службы, используйте mysqld --remove для каждой, определяя имя службы после опции --remove. Если имя службы значение по умолчанию (MySQL), можно опустить его.

6.7.3. Выполнение нескольких экземпляров MySQL в Unix

Обсуждение здесь использует mysqld_safe. Для установки MySQL, используя RPM, запуск сервера и завершение работы управляется systemd на нескольких платформах Linux. На этих платформах не устанавливается mysqld_safe , потому что не нужен. Для получения информации об использовании systemd, чтобы обработать многократные экземпляры MySQL, см. раздел 2.5.9.

Один путь запустить разные копии MySQL в Unix: скомпилировать различные серверы с различными портами TCP/IP по умолчанию и файлами сокета Unix так, чтобы каждый слушал на различных сетевых интерфейсах. Компиляция в различных основных каталогах для каждой установки также приводит автоматически к отдельному вкомпилированному каталогу данных, файлу журнала и расположению файла PID для каждого сервера.

Предположите, что существующий сервер 5.7 сконфигурирован для номера порта TCP/IP по умолчанию (3306) и файла сокета Unix (/tmp/mysql.sock). Чтобы сконфигурировать новый сервер 8.0.1, чтобы иметь различные операционные параметры, используйте команду CMake:

shell> cmake . -DMYSQL_TCP_PORT=port_number \
                  -DMYSQL_UNIX_ADDR=file_name \
                  -DCMAKE_INSTALL_PREFIX=/usr/local/mysql-8.0.1

Здесь port_number и file_name должны отличаться от номера порта TCP/IP по умолчанию и имени пути к файлу сокета Unix, а CMAKE_INSTALL_PREFIX должно определить каталог установки, отличающийся от того, в котором расположена существующая установка MySQL.

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

shell> mysqladmin --host=host_name --port=port_number variables

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

Если вы определяете localhost как имя хоста, mysqladmin по умолчанию применяет сокет Unix вместо TCP/IP. Чтобы явно определить протокол подключения, используйте опцию --protocol={TCP|SOCKET|PIPE|MEMORY}.

Вы не должны компилировать новый сервер MySQL только чтобы запуститься с иным файлом сокета Unix и номером порта TCP/IP. Также возможно использовать тот же самый двоичный файл сервера и запустить каждый экземпляр с различными значениями параметра во время выполнения. Один способ сделать так при помощи параметров командной строки:

shell> mysqld_safe --socket=file_name --port=port_number

Чтобы запустить второй сервер, обеспечьте отличающиеся опции --socket и --port и передайте --datadir= dir_name в mysqld_safe, чтобы сервер использовал отличный каталог данных.

Альтернативно, поместите опции для каждого сервера в ином файле опций, затем запустите каждый сервер, используя --defaults-file , которая определяет путь к файлу подходящего варианта. Например, если файлы опции для двух экземпляров сервера называются /usr/local/mysql/my.cnf и /usr/local/mysql/my.cnf2, запустите серверы так:

shell> mysqld_safe --defaults-file=/usr/local/mysql/my.cnf
shell> mysqld_safe --defaults-file=/usr/local/mysql/my.cnf2

Другой способ достигнуть подобного эффекта состоит в том, чтобы использовать переменные окружения, чтобы установить имя файла сокета Unix и номер порта TCP/IP:

shell> MYSQL_UNIX_PORT=/tmp/mysqld-new.sock
shell> MYSQL_TCP_PORT=3307
shell> export MYSQL_UNIX_PORT MYSQL_TCP_PORT
shell> bin/mysqld --initialize --user=mysql
shell> mysqld_safe --datadir=/path/to/datadir &

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

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

В Unix скрипт mysqld_multi обеспечивает другой способ запустить многократные серверы. См. раздел 5.3.4.

6.7.4. Использование клиентских программ в многосерверной среде

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

6.8. Трассировка mysqld, используя DTrace

Зонды DTrace в сервере MySQL разработаны, чтобы предоставить информацию о выполнении запросов в пределах MySQL и различных областей системы, используемой во время процесса. Организация и инициирование зондов подразумевают, что выполнение всего запроса может контролироваться с одним уровнем зондов (query-start и query-done), но контролируя другие зонды можно получить последовательно более подробную информацию о выполнении запроса с точки зрения используемых блокировок, методов сортировки и даже строк и информации о выполнении уровня механизма хранения.

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

Рис. 6.1. MySQL использует подключаемые механизмы хранения

Глобальная информация предоставляется в параметрах зондам DTrace на различных уровнях. Глобальная информация, то есть ID соединения и пользователь/узел и релевантная строка запроса предоставляется на ключевых уровнях (connection-start, command-start, query-start и query-exec-start). Поскольку вы идете глубже в зонды, это выдает любые сведения, которыми вы только интересуетесь (зонды уровня строки предоставляют информацию только об имени базы данных и имени таблицы), или если вы объедините зонды уровня строки с отвлеченными родительскими зондами, чтобы предоставить информацию об определенном запросе. Примеры этого будут даны как формат и параметры для каждого зонда.

MySQL включает поддержку зондов DTrace на этих платформах:

Включение зондов должно быть автоматическим на этих платформах. Чтобы явно включить или отключить зонды во время сборки, используйте опции -DENABLE_DTRACE=1 или -DENABLE_DTRACE=0 для CMake.

Если платформа не-Solaris будет включать поддержку DTrace, то создание mysqld на этой платформе будет включать поддержку DTrace.

Дополнительные ресурсы

6.8.1. Обзор зондов mysqld DTrace

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

Таблица 6.5. Зонды MySQL DTrace

ГруппаЗонды
Connectionconnection-start, connection-done
Command command-start, command-done
Query query-start, query-done
Query Parsingquery-parse-start, query-parse-done
Query Cachequery-cache-hit, query-cache-miss
Query Executionquery-exec-start, query-exec-done
Row Level insert-row-start, insert-row-done
update-row-start, update-row-done
delete-row-start, delete-row-done
Row Reads read-row-start, read-row-done
Index Reads index-read-row-start, index-read-row-done
Lock handler-rdlock-start, handler-rdlock-done
handler-wrlock-start, handler-wrlock-done
handler-unlock-start, handler-unlock-done
Filesort filesort-start, filesort-done
Statement select-start, select-done
insert-start, insert-done
insert-select-start, insert-select-done
update-start, update-done
multi-update-start, multi-update-done
delete-start, delete-done
multi-delete-start, multi-delete-done
Network net-read-start, net-read-done, net-write-start, net-write-done
Keycachekeycache-read-start, keycache-read-block, keycache-read-done, keycache-read-hit, keycache-read-miss, keycache-write-start, keycache-write-block, keycache-write-done

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

6.8.1.1. Зонды соединения

Зонды connection-start и connection-done отслеживают соединение клиента, независимо от того, выполнено ли соединение посредством сокетного или сетевого соединения.

connection-start(connectionid, user, host)
connection-done(status, connectionid)

Следующий D-скрипт будет определять количество и суммировать среднюю продолжительность конкретных соединений, выводя информацию каждые 60 секунд:

#!/usr/sbin/dtrace -s
mysql*:::connection-start
{
  self->start = timestamp;
}

mysql*:::connection-done
/self->start/
{
  @ = quantize(((timestamp - self->start)/1000000));
  self->start = 0;
}

tick-60s
{
  printa(@);
}

Когда выполняется на сервере с большим количеством клиентов вы могли бы видеть примерно такой вывод:

1  57413:tick-60s

 value  ------------- Distribution ------------- count
  -1 | 0
   0 |@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ 30011
   1 | 59
   2 | 5
   4 | 20
   8 | 29
  16 | 18
  32 | 27
  64 | 30
 128 | 11
 256 | 10
 512 | 1
1024 | 6
2048 | 8
4096 | 9
8192 | 8
 16384 | 2
 32768 | 1
 65536 | 1
131072 | 0
262144 | 1
524288 | 0

6.8.1.2. Зонды команды

Зонды команды выполняются, прежде и после того, как клиентская команда выполняется, включая любой SQL-оператор, который мог бы быть выполнен в течение того периода. Команды включают операции, такие как инициализация DB, использование COM_CHANGE_USER (поддержано протоколом MySQL) и манипуляция подготовленными операторами. Многие из этих команд используются только клиентским API MySQL от различных коннекторов, таких как PHP и Java.

command-start(connectionid, command, user, host)
command-done(status)

Зонды command-start и command-done лучше всего используются, когда объединены с зондами оператора, чтобы понять полное время выполнения.

6.8.1.3. Зонды запроса

Зонды query-start и query-done инициированы, когда определенный запрос получен сервером и когда запрос был завершен, а информация была успешно отправлена клиенту.

query-start(query, connectionid, database, user, host)
query-done(status)

Можно получить простой отчет о времени выполнения для каждого запроса, используя следующий скрипт:

#!/usr/sbin/dtrace -s
#pragma D option quiet
dtrace:::BEGIN
{
  printf("%-20s %-20s %-40s %-9s\n", "Who", "Database", "Query", "Time(ms)");
}

mysql*:::query-start
{
  self->query = copyinstr(arg0);
  self->connid = arg1;
  self->db= copyinstr(arg2);
  self->who   = strjoin(copyinstr(arg3),strjoin("@",copyinstr(arg4)));
  self->querystart = timestamp;
}

mysql*:::query-done
{
  printf("%-20s %-20s %-40s %-9d\n",self->who,self->db,
         self->query, (timestamp - self->querystart) / 1000000);
}

Выполняя вышеупомянутый скрипт необходимо получить общее представление о времени выполнения запросов:

shell> ./query.d
WhoDatabase QueryTime(ms)
root@localhost test select * from t1 order by i limit 10 0
root@localhost test set global query_cache_size=00
root@localhost test select * from t1 order by i limit 10 776
root@localhost test select * from t1 order by i limit 10 773
root@localhost test select * from t1 order by i desc limit 10 795

6.8.1.4. Зонды анализа запроса

Зонды анализа запроса инициированы, прежде чем исходный SQL-оператор анализируется и когда парсинг оператора и определение модели выполнения, требуемой, чтобы обработать оператор, были завершены:

query-parse-start(query)
query-parse-done(status)

Например, вы могли контролировать время выполнения для парсинга данного запроса, используя следующий скрипт:

#!/usr/sbin/dtrace -s
#pragma D option quiet
mysql*:::query-parse-start
{
  self->parsestart = timestamp;
  self->parsequery = copyinstr(arg0);
}

mysql*:::query-parse-done
/arg0 == 0/
{
  printf("Parsing %s: %d microseconds\n", self->parsequery,
         ((timestamp - self->parsestart)/1000));
}

mysql*:::query-parse-done
/arg0 != 0/
{
  printf("Error parsing %s: %d microseconds\n",
         self->parsequery,((timestamp - self->parsestart)/1000));
}

В вышеупомянутом скрипте предикат используется в query-parse-done, чтобы различный вывод был произведен, основываясь на значении состояния зонда.

Выполняя скрипт и контролируя выполнение будет вот что:

shell> ./query-parsing.d
Error parsing select from t1 join (t2) on (t1.i = t2.i) order by t1.s,t1.i
      limit 10: 36 ms
Parsing select * from t1 join (t2) on (t1.i = t2.i) order by t1.s,t1.i
        limit 10: 176 ms

6.8.1.5. Зонды кэша запроса

Зонды кэша запроса запущены, выполняя любой запрос. query-cache-hit инициирован, когда запрос существует в кэше запроса и может использоваться, чтобы возвратить информацию о кэше запроса. Параметры содержат текст исходного запроса и число строк, возвращенных из кэша запроса для запроса. Если запрос не в пределах кэша запроса, или кэш запроса не включен, то вместо этого инициирован query-cache-miss .

query-cache-hit(query, rows)
query-cache-miss(query)

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

#!/usr/sbin/dtrace -s
#pragma D option quiet
dtrace:::BEGIN
{
  printf("%-20s %-20s %-40s %2s %-9s\n", "Who", "Database", "Query",
         "QC", "Time(ms)");
}

mysql*:::query-start
{
  self->query = copyinstr(arg0);
  self->connid = arg1;
  self->db= copyinstr(arg2);
  self->who   = strjoin(copyinstr(arg3),strjoin("@",copyinstr(arg4)));
  self->querystart = timestamp;
  self->qc = 0;
}

mysql*:::query-cache-hit
{
  self->qc = 1;
}

mysql*:::query-cache-miss
{
  self->qc = 0;
}

mysql*:::query-done
{
  printf("%-20s %-20s %-40s %-2s %-9d\n",self->who,self->db,
         self->query,(self->qc ? "Y" : "N"),
         (timestamp - self->querystart) / 1000000);
}

Выполняя скрипт, вы видите эффект кэша запроса. Первоначально кэш запроса отключен. Если вы устанавливаете размер кэша запроса и затем выполняете запрос многократно, видно, что кэш запроса используется, чтобы возвратить данные запроса:

shell> ./query-cache.d
root@localhost test select * from t1 order by i limit 10 N  1072
root@localhostset global query_cache_size=262144 N  0
root@localhost test select * from t1 order by i limit 10 N  781
root@localhost test select * from t1 order by i limit 10 Y  0

6.8.1.6. Зонды выполнения запросов

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

query-exec-start(query, connectionid, database, user, host, exec_type)
query-exec-done(status)

Информация, предоставленная в параметрах для query-start и query-exec-start почти идентична и разработана так, чтобы можно было контролировать любой процесс запроса целиком (используя query-start) или только выполнение (query-exec-start), представляя базовую информацию о пользователе, клиенте и выполняемом запросе.

6.8.1.7. Зонды уровня строки

Зонды *row-{start,done} инициированы каждый раз, когда операция по строке передана механизму хранения. Например, если вы выполняете INSERT для 100 строк, то insert-row-start и insert-row-done будут инициированы 100 раз каждый, когда каждая строка вставляется.

insert-row-start(database, table)
insert-row-done(status)

update-row-start(database, table)
update-row-done(status)

delete-row-start(database, table)
delete-row-done(status)

Параметры, поддержанные зондами, последовательны для зондов start и done в каждом случае:

Поскольку зонды уровня строки инициированы для каждого отдельного доступа к строке, эти зонды могут быть инициированы много тысяч раз каждую секунду, что может иметь неблагоприятный эффект на контролирующий скрипт и на MySQL. Окружающая среда DTrace должна ограничить инициирование на этих зондах, чтобы предотвратить оказываемое негативное влияние на работу. Используйте зонды экономно или используйте счетчик или агрегатные функции, чтобы сообщить данные относительно этих зондов и затем предоставить сводку, когда скрипт завершится или как часть зондов query-done или query-exec-done.

Следующий скрипт в качестве примера суммирует продолжительность каждой операции по строке в пределах большего запроса:

#!/usr/sbin/dtrace -s
#pragma D option quiet
dtrace:::BEGIN
{
  printf("%-2s %-10s %-10s %9s %9s %-s \n",
         "St", "Who", "DB", "ConnID", "Dur ms", "Query");
}

mysql*:::query-start
{
  self->query = copyinstr(arg0);
  self->who = strjoin(copyinstr(arg3),strjoin("@",copyinstr(arg4)));
  self->db = copyinstr(arg2);
  self->connid = arg1;
  self->querystart = timestamp;
  self->rowdur = 0;
}

mysql*:::query-done
{
  this->elapsed = (timestamp - self->querystart) /1000000;
  printf("%2d %-10s %-10s %9d %9d %s\n", arg0, self->who, self->db,
         self->connid, this->elapsed, self->query);
}

mysql*:::query-done
/ self->rowdur /
{
  printf("%34s %9d %s\n", "", (self->rowdur/1000000), "-> Row ops");
}

mysql*:::insert-row-start
{
  self->rowstart = timestamp;
}

mysql*:::delete-row-start
{
  self->rowstart = timestamp;
}

mysql*:::update-row-start
{
  self->rowstart = timestamp;
}

mysql*:::insert-row-done
{
  self->rowdur += (timestamp-self->rowstart);
}

mysql*:::delete-row-done
{
  self->rowdur += (timestamp-self->rowstart);
}

mysql*:::update-row-done
{
  self->rowdur += (timestamp-self->rowstart);
}

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

St Who        DBConn  ID   Dur ms  Query
 0 @localhost test    13   20767   insert into t1(select * from t2)
4827 -> Row ops

6.8.1.8. Зонды чтения строк

Зонды чтения строк инициированы на уровне механизма хранения каждый раз, когда операция чтения строки происходит. Эти зонды определяются в пределах каждого механизма хранения (в противоположность *row-start, которые находятся в интерфейсе механизма хранения). Эти зонды могут поэтому использоваться, чтобы контролировать отдельные операции уровня строки механизма хранения. Поскольку эти зонды инициированы в интерфейсе чтения строки механизма хранения, они могут быть вызваны значительное количество раз во время основного запроса.

read-row-start(database, table, scan_flag)
read-row-done(status)

6.8.1.9. Индексные зонды

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

index-read-row-start(database, table)
index-read-row-done(status)

6.8.1.10. Зонды блокировки

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

handler-rdlock-start(database, table)
handler-rdlock-done(status)

handler-wrlock-start(database, table)
handler-wrlock-done(status)

handler-unlock-start(database, table)
handler-unlock-done(status)

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

#!/usr/sbin/dtrace -s
#pragma D option quiet
mysql*:::handler-rdlock-start
{
  self->rdlockstart = timestamp;
  this->lockref = strjoin(copyinstr(arg0),strjoin("@",copyinstr(arg1)));
  self->lockmap[this->lockref] = self->rdlockstart;
  printf("Start: Lock->Read   %s.%s\n",copyinstr(arg0),copyinstr(arg1));
}

mysql*:::handler-wrlock-start
{
  self->wrlockstart = timestamp;
  this->lockref = strjoin(copyinstr(arg0),strjoin("@",copyinstr(arg1)));
  self->lockmap[this->lockref] = self->rdlockstart;
  printf("Start: Lock->Write  %s.%s\n",copyinstr(arg0),copyinstr(arg1));
}

mysql*:::handler-unlock-start
{
  self->unlockstart = timestamp;
  this->lockref = strjoin(copyinstr(arg0),strjoin("@",copyinstr(arg1)));
  printf("Start: Lock->Unlock %s.%s (%d ms lock duration)\n",
         copyinstr(arg0),copyinstr(arg1),
         (timestamp - self->lockmap[this->lockref])/1000000);
}

mysql*:::handler-rdlock-done
{
  printf("End:   Lock->Read   %d ms\n",
         (timestamp - self->rdlockstart)/1000000);
}

mysql*:::handler-wrlock-done
{
  printf("End:   Lock->Write  %d ms\n",
         (timestamp - self->wrlockstart)/1000000);
}

mysql*:::handler-unlock-done
{
  printf("End:   Lock->Unlock %d ms\n",
         (timestamp - self->unlockstart)/1000000);
}

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

Start: Lock->Read   test.t2
End:   Lock->Read   0 ms
Start: Lock->Unlock test.t2 (25743 ms lock duration)
End:   Lock->Unlock 0 ms
Start: Lock->Read   test.t2
End:   Lock->Read   0 ms
Start: Lock->Unlock test.t2 (1 ms lock duration)
End:   Lock->Unlock 0 ms
Start: Lock->Read   test.t2
End:   Lock->Read   0 ms
Start: Lock->Unlock test.t2 (1 ms lock duration)
End:   Lock->Unlock 0 ms
Start: Lock->Read   test.t2
End:   Lock->Read   0 ms

6.8.1.11. Зонды сортировки

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

filesort-start(database, table)
filesort-done(status, rows)

Пример этого находится в следующем скрипте, который отслеживает продолжительность процесса filesort в дополнение к продолжительности главного запроса:

#!/usr/sbin/dtrace -s
#pragma D option quiet

dtrace:::BEGIN
{
  printf("%-2s %-10s %-10s %9s %18s %-s \n",
         "St", "Who", "DB", "ConnID", "Dur microsec", "Query");
}

mysql*:::query-start
{
  self->query = copyinstr(arg0);
  self->who = strjoin(copyinstr(arg3),strjoin("@",copyinstr(arg4)));
  self->db = copyinstr(arg2);
  self->connid = arg1;
  self->querystart = timestamp;
  self->filesort = 0;
  self->fsdb = "";
  self->fstable = "";
}

mysql*:::filesort-start
{
  self->filesort = timestamp;
  self->fsdb = copyinstr(arg0);
  self->fstable = copyinstr(arg1);
}

mysql*:::filesort-done
{
  this->elapsed = (timestamp - self->filesort) /1000;
  printf("%2d %-10s %-10s %9d %18d Filesort on %s\n",
         arg0, self->who, self->fsdb,
         self->connid, this->elapsed, self->fstable);
}

mysql*:::query-done
{
  this->elapsed = (timestamp - self->querystart) /1000;
  printf("%2d %-10s %-10s %9d %18d %s\n",
         arg0, self->who, self->db,
         self->connid, this->elapsed, self->query);
}

Выполнение запроса на большой таблице с ORDER BY, который инициировал filesort и затем создание индекса на таблице c повторением того же самого запроса, вы видите различие в скорости выполнения:

St Who        DB    ConnID  Dur microsec   Query
 0 @localhost test  14       11335469      Filesort on t1
 0 @localhost test  14       11335787      select * from t1 order by i limit 100
 0 @localhost test  14      466734378      create index t1a on t1 (i)
 0 @localhost test  14          26472      select * from t1 order by i limit 100

6.8.1.12. Зонды оператора

Отдельные зонды оператора обеспечиваются, чтобы дать определенную информацию о различных типах оператора. Для запуска строка запроса обеспечиваются как единственный параметр. В зависимости от типа оператора, будет отличаться информация, предоставленная соответствующим зондом. Для всех зондов состояние операции (0 для успеха, >0 для неудачи), обеспечивается. Для SELECT, INSERT, INSERT ... (SELECT FROM ...), DELETE и DELETE FROM t1,t2 число затронутых строк возвращается.

Для UPDATE и UPDATE t1,t2 ... число подобранных строк и число строк, фактически измененных, обеспечиваются. Это потому, что число строк, фактически подобранных передачей WHERE, и число измененных строк могут отличаться. MySQL не обновляет значение строки, если значение уже соответствует новой установке.

select-start(query)
select-done(status,rows)

insert-start(query)
insert-done(status,rows)

insert-select-start(query)
insert-select-done(status,rows)

update-start(query)
update-done(status,rowsmatched,rowschanged)

multi-update-start(query)
multi-update-done(status,rowsmatched,rowschanged)

delete-start(query)
delete-done(status,rows)

multi-delete-start(query)
multi-delete-done(status,rows)

Параметры для зондов оператора:

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

#!/usr/sbin/dtrace -s
#pragma D option quiet
dtrace:::BEGIN
{
  printf("%-60s %-8s %-8s %-8s\n", "Query", "RowsU", "RowsM", "Dur (ms)");
}

mysql*:::update-start, mysql*:::insert-start,
mysql*:::delete-start, mysql*:::multi-delete-start,
mysql*:::multi-delete-done, mysql*:::select-start,
mysql*:::insert-select-start, mysql*:::multi-update-start
{
  self->query = copyinstr(arg0);
  self->querystart = timestamp;
}

mysql*:::insert-done, mysql*:::select-done,
mysql*:::delete-done, mysql*:::multi-delete-done, mysql*:::insert-select-done
/ self->querystart /
{
  this->elapsed = ((timestamp - self->querystart)/1000000);
  printf("%-60s %-8d %-8d %d\n", self->query, 0, arg1, this->elapsed);
  self->querystart = 0;
}

mysql*:::update-done, mysql*:::multi-update-done
/ self->querystart /
{
  this->elapsed = ((timestamp - self->querystart)/1000000);
  printf("%-60s %-8d %-8d %d\n", self->query, arg1, arg2,
         this->elapsed);
  self->querystart = 0;
}

Когда выполняется вы видите основные времена выполнения и соответствия строк:

QueryRowsURowsMDur (ms)
select * from t2 02750
insert into t2 (select * from t2)02759
update t2 set i=5 where i > 75 1101108
update t2 set i=5 where i < 25 25413412
delete from t2 where i < 5 000

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

#!/usr/sbin/dtrace -s
#pragma D option quiet
mysql*:::update-start, mysql*:::insert-start,
mysql*:::delete-start, mysql*:::multi-delete-start,
mysql*:::multi-delete-done, mysql*:::select-start,
mysql*:::insert-select-start, mysql*:::multi-update-start
{
  self->querystart = timestamp;
}

mysql*:::select-done
{
  @statements["select"] = sum(((timestamp - self->querystart)/1000000));
}

mysql*:::insert-done, mysql*:::insert-select-done
{
  @statements["insert"] = sum(((timestamp - self->querystart)/1000000));
}

mysql*:::update-done, mysql*:::multi-update-done
{
  @statements["update"] = sum(((timestamp - self->querystart)/1000000));
}

mysql*:::delete-done, mysql*:::multi-delete-done
{
  @statements["delete"] = sum(((timestamp - self->querystart)/1000000));
}

tick-30s
{
  printa(@statements);
}

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

  delete 0
  update 0
  insert 23
  select 2484

  delete 0
  update 0
  insert 39
  select 10744

  delete 0
  update 26
  insert 56
  select 10944

  delete 0
  update 26
  insert 2287
  select 15985

6.8.1.13. Сетевые зонды

Сетевые зонды контролируют передачу информации от сервера MySQL и клиентов всех типов по сети. Зонды определяются следующим образом:

net-read-start()
net-read-done(status, bytes)
net-write-start(bytes)
net-write-done(status)

Можно использовать сетевые зонды, чтобы контролировать время, потраченное на чтение и запись в сетевых клиентах во время выполнения. Следующий скрипт обеспечивает пример этого. Совокупное время для чтения или записи вычисляется и число байтов. Обратите внимание на то, что размер динамической переменной был увеличен (с использованием опции dynvarsize), чтобы справляться с быстрым ростом данных для сетевых чтений/записей.

#!/usr/sbin/dtrace -s
#pragma D option quiet
#pragma D option dynvarsize=4m

dtrace:::BEGIN
{
  printf("%-2s %-30s %-10s %9s %18s %-s \n",
         "St", "Who", "DB", "ConnID", "Dur microsec", "Query");
}

mysql*:::query-start
{
  self->query = copyinstr(arg0);
  self->who = strjoin(copyinstr(arg3),strjoin("@",copyinstr(arg4)));
  self->db = copyinstr(arg2);
  self->connid = arg1;
  self->querystart = timestamp;
  self->netwrite = 0;
  self->netwritecum = 0;
  self->netwritebase = 0;
  self->netread = 0;
  self->netreadcum = 0;
  self->netreadbase = 0;
}

mysql*:::net-write-start
{
  self->netwrite += arg0;
  self->netwritebase = timestamp;
}

mysql*:::net-write-done
{
  self->netwritecum += (timestamp - self->netwritebase);
  self->netwritebase = 0;
}

mysql*:::net-read-start
{
  self->netreadbase = timestamp;
}

mysql*:::net-read-done
{
  self->netread += arg1;
  self->netreadcum += (timestamp - self->netreadbase);
  self->netreadbase = 0;
}

mysql*:::query-done
{
  this->elapsed = (timestamp - self->querystart) /1000000;
  printf("%2d %-30s %-10s %9d %18d %s\n", arg0, self->who, self->db,
         self->connid, this->elapsed, self->query);
  printf("Net read: %d bytes (%d ms) write: %d bytes (%d ms)\n",
  self->netread, (self->netreadcum/1000000),
  self->netwrite, (self->netwritecum/1000000));
}

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

St Who                       DB    ConnID Dur microsec Query
 0 root@::ffff:192.168.0.108 test  31     3495         select * from t1 limit 1000000
Net read: 0 bytes (0 ms) write: 10000075 bytes (1220 ms)

6.8.1.14. Зонды ключевого кэша

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

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

keycache-read-start(filepath, bytes, mem_used, mem_free)
keycache-read-block(bytes)
keycache-read-hit()
keycache-read-miss()
keycache-read-done(mem_used, mem_free)
keycache-write-start(filepath, bytes, mem_used, mem_free)
keycache-write-block(bytes)
keycache-write-done(mem_used, mem_free)

Считывая данные из индексных файлов в кэш, процесс сначала инициализирует операцию чтения (обозначенную keycache-read-start), затем загружает блоки данных (keycache-read-block) и читает блоки данных, определяемые любым совпадением (keycache-read-hit) или больше данных должно быть считано (keycache-read-miss). Как только операция чтения завершилась, чтение остановлено с keycache-read-done.

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

Записи происходят, когда информация об индексе обновляется во время INSERT, UPDATE или DELETE, и кэшируемая ключевая информация сбрасывается назад к индексному файлу.