Глава 5. Программы MySQL

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

5.1. Обзор программ MySQL

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

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

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

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

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

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

Программы клиента MySQL, которые соединяются с сервером MySQL:

Утилиты управления MySQL:

Утилиты развития программы MySQL:

Разные дополнительные утилиты:

Oracle Corporation также обеспечивает MySQL Workbench GUI, который используется, чтобы управлять серверами MySQL и базами данных, создавать, выполнять и оценивать запросы, мигрировать схемы и данные от других систем управления реляционной базы данных для использования с MySQL. Дополнительные инструменты GUI включают MySQL Notifier и MySQL for Excel.

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

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

Для полного списка переменных окружения, используемых программами MySQL, см. раздел 5.9.

Использование MYSQL_PWD опасно, см. раздел 7.1.2.1.

5.2. Использование программ MySQL

5.2.1. Вызов программ MySQL

Чтобы вызвать программу MySQL из командной строки (то есть, из Вашей оболочки или командной строки), вводят название программы, сопровождаемое любыми опциями или другими параметрами, которые должны проинструктировать программу, что Вы хотите. Следующие команды показывают некоторые примеры вызова программы. shell> представляет подсказку для Вашего интерпретатора команд, это не часть того, что Вы вводите. Особая подсказка, которую Вы видите, зависит от Вашего интерпретатора команд. Типичные подсказки $ для sh, ksh или bash, % для csh или tcsh и C:\> для Windows command.com или cmd.exe.

shell> mysql --user=root test
shell> mysqladmin extended-status variables
shell> mysqlshow --help
shell> mysqldump -u root personnel
Параметры, которые начинаются с единственного или двойного тире (-, --), задают опции программы. Опции, как правило, указывают на тип соединения, которое программа должна сделать к серверу, или определяют операционный режим. Синтаксис опций описан в разделе 5.2.3.

Параметры не опции (параметры без ведущего тире) обеспечивают дополнительную информацию программе. Например, mysql интерпретирует первый параметр не опции как имя базы данных, таким образом, команда mysql --user=root test указывает, что Вы хотите использовать базу данных test.

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

Некоторые опции характерны для многих программ. Наиболее часто используемые из них --host (-h), --user (-u) и --password (-p) определяют параметры соединения. Они указывают на хост, где сервер MySQL работает, имя пользователя и пароль Вашей учетной записи MySQL. Все программы клиента MySQL понимают эти опции, они позволяют Вам определить с которым сервером соединиться и учетную запись, чтобы использовать на том сервере. Другие опции соединения --port (-P) определяет номер порта TCP/IP и --socket (-S) указывает файл сокета на Unix (или именованный канал в Windows). См. раздел 5.2.2.

Вы можете счесть необходимым вызвать программы MySQL, используя путь для каталога bin, в котором они установлены. Это, вероятно, будет иметь место, если Вы получаете ошибку program not found , когда Вы пытаетесь выполнить программу MySQL из любого каталога кроме bin. Чтобы сделать более удобным использование MySQL, Вы можете добавить путь bin в переменную PATH. Это позволяет Вам выполнить программу, вводя только ее имя. Например, если mysql установлена в /usr/local/mysql/bin, Вы можете выполнить программу, вызывая это как mysql и не надо вызвать это как /usr/local/mysql/bin/mysql.

Консультируйтесь с документацией для своего интерпретатора команд для инструкций по установке PATH. Синтаксис для того, чтобы установить переменные окружения является определенным для интерпретатора. См. раздел 5.2.10. После изменения Вашего PATH, откройте новую консоль в Windows или войдите в систему снова в Unix, чтобы установка вступила в силу.

5.2.2. Соединение с сервером MySQL

Этот раздел описывает, как установить соединение с сервером MySQL. Для дополнительной информации, если Вы не способны соединиться, см. раздел 7.2.8.

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

Примеры здесь используют mysql, но принципы относятся к другим клиентам, таким как mysqldump, mysqladmin или mysqlshow .

Эта команда вызывает mysql не определяя параметров соединения явно:

shell> mysql
Поскольку нет никаких опций параметра, значения по умолчанию применяются:

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

shell> mysql --host=localhost --user=myname --password=mypass mydb
shell> mysql -h localhost -u myname -pmypass mydb
Для опций пароля значение является дополнительным:

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

shell> mysql --host=localhost --user=myname --password mydb
shell> mysql -h localhost -u myname -p mydb
Когда у опции пароля нет никакого значения пароля, программа клиента печатает подсказку и ждет ввода пароля. В этих примерах mydb не интерпретируется как пароль, потому что это отделено от предыдущей опции пароля пробелом.

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

В Unix программы MySQL особо обрабатывают имя хоста localhost способом, который, вероятно, отличается от того, что Вы ожидаете по сравнению с другими основанными на сети программами. Для соединений с localhost программы MySQL пытаются соединиться с локальным сервером при использовании файла сокета Unix. Это происходит даже если --port или -P заданы, чтобы определить номер порта. Чтобы гарантировать, что клиент делает соединение по TCP/IP с локальным сервером, надо использовать --host или -h и определить значение имени хоста 127.0.0.1 или IP-адрес (или имя) локального сервера. Вы можете также определить протокол соединения явно, даже для localhost, опцией --protocol=TCP :

shell> mysql --host=127.0.0.1
shell> mysql --protocol=TCP
Опция --protocol позволяет Вам установить особый тип соединения, даже когда другие опции обычно принимали бы значение по умолчанию к некоторому другому протоколу.

Если сервер сконфигурирован, чтобы принять соединения IPv6, клиенты могут соединиться по IPv6, используя --host=::1. См. раздел 6.1.9.

В Windows Вы можете вынудить клиента MySQL использовать соединение именованного канала, определяя --pipe или --protocol=PIPE или точку (.) как имя хоста. Если соединения именованного канала не включены, происходит ошибка. Используйте опцию --socket, чтобы определить название канала, если Вы не хотите использовать имя канала значения по умолчанию.

Соединения с удаленными серверами всегда используют TCP/IP. Эта команда соединяется с remote.example.com через порт о умолчанию (3306):

shell> mysql --host=remote.example.com
Чтобы определить номер порта явно, используйте --port или -P:
shell> mysql --host=remote.example.com --port=13306
Вы можете определить номер порта для соединений с локальным сервером. Однако, как обозначено ранее, соединения с localhost в Unix будет использовать файл сокета по умолчанию. Вы должны будете вызвать соединение TCP/IP как уже описано или любую опцию, которая определяет, что номер порта будет проигнорирован.

Для этой команды программа использует файл сокета в Unix, опция --port проигнорирована:

shell> mysql --port=13306 --host=localhost
Чтобы заставить использовать номер порта, вызовите программу любым из этих способов:
shell> mysql --port=13306 --host=127.0.0.1
shell> mysql --port=13306 --protocol=TCP

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

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

5.2.3. Определение опций программы

Есть несколько способов определить опции для программ MySQL:

Опции обработаны в таком порядке, что если опция определена многократно, последнее возникновение имеет приоритет. Следующая команда заставляет mysql соединяться с сервером на localhost:

shell> mysql -h example.com -h localhost
Если есть конфликт или даны связанные опции, более поздние опции имеют приоритет перед более ранними опциями. Следующая команда не выполняет mysql в режиме no column names:
shell> mysql --column-names --skip-column-names

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

Для сервера применяется одно исключение: файл опций mysqld-auto.cnf в каталоге данных обработан последним, таким образом, это имеет приоритет даже перед параметрами командной строки.

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

5.2.4. Использование опций в командной строке

Опции программы, определенные в командной строке, следуют этим правилам:

Значения опции, которые содержат пробелы, должны быть заключены в кавычки, когда даны в командной строке. Например, --execute (-e) может использоваться с mysql, чтобы передать запросы SQL серверу. Когда эта опция используется, mysql выполняет запросы в значении опции и выходит. Запросы должны быть приложены в кавычках. Например, Вы можете использовать следующую команду, чтобы получить список учетных записей пользователей:

shell> mysql -u root -p --execute="SELECT User, Host FROM mysql.user"
Enter password: <******
+------+-----------+
| User | Host      |
+------+-----------+
|      | gigan     |
| root | gigan     |
|      | localhost |
| jon  | localhost |
| root | localhost |
+------+-----------+
shell>

Подробная форма ( --execute) сопровождается знаком =.

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

Многократные запросы SQL можно передать в значении опции в командной строке, отделенной точками с запятой:

shell> mysql -u root -p -e "SELECT VERSION();SELECT NOW()"
Enter password: <******
+---------------------+
| VERSION()           |
+---------------------+
| 5.8.0-m17-debug-log |
+---------------------+
+---------------------+
| NOW()               |
+---------------------+
| 2015-11-05 20:00:20 |
+---------------------+

5.2.5. Модификаторы опции программы

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

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

--disable-column-names
--skip-column-names
--column-names=0
Префиксы --disable и --skip и суффикс =0 все имеют тот же самый эффект: они выключают опцию.

Форма enabled опции может быть определена любым из этих способов:

--column-names
--enable-column-names
--column-names=1
Значения ON, TRUE, OFF и FALSE также признаны за булевы опции (не чувствительны к регистру).

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

shell> mysql --loose-no-such-option
mysql: WARNING: unknown option '--loose-no-such-option'
Префикс --loose может быть полезным, когда Вы выполняете программы от многократных установок MySQL на той же самой машине и перечисляете опции в файле опции. Опция, которая не может быть признана всеми версиями, может быть дана, используя --loose (или loose в файле опции). Версии программы, которые признают опцию, обычно обрабатывают ее, и версии, которые не признают, выпускают предупреждение и игнорируют это.

Префикс --maximum доступен только для mysqld и разрешает установить предел в максимальное значение для системных переменных сеанса программы клиента. Чтобы сделать это, используйте --maximum с именем переменной. Например, --maximum-max_heap_table_size=32M препятствует тому, чтобы любой клиент применил табличный предел размера кучи больше, чем 32M.

--maximum предназначен для использования с системными переменными, у которых есть значение сеанса. Если применяется к системной переменной, у которой есть только глобальное значение, ошибка происходит. Например, с --maximum-query_cache_size=4M сервер производит эту ошибку:

Maximum value of 'query_cache_size' cannot be set

5.2.6. Использование файлов опций

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

Чтобы определить, читает ли программа файлы опции, вызовите ее с --help. Для mysqld используйте --verbose и --help. Если файлы опции читаются, сообщение справки указывает, какие файлы она ищет и какие группы опции признает.

Программа MySQL с --no-defaults не читает файлов опции кроме .mylogin.cnf.

Сервер с отключенной переменной persisted_globals_load не читает mysqld-auto.cnf.

Много файлов опции это файлы простого текста, создаваемые с использованием любого текстового редактора. Исключения:

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

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

Таблица 5.1. Чтение файлов опций на системах Windows

Имя файлаЦель
%PROGRAMDATA%\MySQL\MySQL Server 8.0\my.ini, %PROGRAMDATA%\MySQL\MySQL Server 8.0\my.cnfГлобальные опции
%WINDIR%\my.ini, %WINDIR%\my.cnfГлобальные опции
C:\my.ini, C:\my.cnf Глобальные опции
BASEDIR\my.ini, BASEDIR\my.cnf Глобальные опции
defaults-extra-file Файл, определенный с --defaults-extra-file, если есть
%APPDATA%\MySQL\.mylogin.cnf Опции пути входа в систему (только клиенты)
DATADIR\mysqld-auto.cnf Опции, сохраненные с SET PERSIST (только для сервера)

В предыдущей таблице %PROGRAMDATA% представляет каталог файловой системы, который содержит данные приложения для всех пользователей хоста. Этот путь по умолчанию C:\ProgramData в Microsoft Windows Vista и выше или C:\Documents and Settings\All Users\Application Data в старых версиях Microsoft Windows.

%WINDIR% представляет местоположение Вашего каталога Windows. Это обычно C:\WINDOWS. Используйте следующую команду, чтобы определить точное местоположение:

C:\> echo %WINDIR%
%APPDATA% представляет значение каталога данных приложений Windows. Используйте следующую команду, чтобы определить точное местоположение:
C:\> echo %APPDATA%
BASEDIR представляет каталог установки MySQL. Когда MySQL 8.0 был установлен, используя MySQL Installer, это, как правило, C:\PROGRAMDIR\MySQL\MySQL 8.0 Server, где PROGRAMDIR представляет каталог программ (обычно Program Files в Windows), См. раздел 2.3.3.

DATADIR представляет каталог данных MySQL. При использовании mysqld-auto.cnf, его значение по умолчанию: местоположение каталога данных, встроенное, когда MySQL был собран, но может быть изменено через опцию --datadir, определенную в файле опции или параметром командной строки, обработанным прежде mysqld-auto.cnf.

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

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

Таблица 5.2. Чтение файлов опций в Unix

Имя файлаСмысл
/etc/my.cnfГлобальные опции
/etc/mysql/my.cnfГлобальные опции
SYSCONFDIR/my.cnf Глобальные опции
$MYSQL_HOME/my.cnf Определенные для сервера опции (только сервер)
defaults-extra-file Файл, определенный --defaults-extra-file, если есть
~/.my.cnf Определенные для пользователя опции
~/.mylogin.cnf Определенные для пользователя опции пути входа в систему (только клиенты)
DATADIR/mysqld-auto.cnf Опции, сохраненные SET PERSIST (только сервер)

В предыдущей таблице ~ представляет корневой каталог текущего пользователя (значение $HOME).

SYSCONFDIR представляет каталог, определенный опцией SYSCONFDIR CMake, когда MySQL был создан. По умолчанию это каталог etc, расположенный под каталогом установки.

MYSQL_HOME это переменная окружения, содержащая путь к каталогу, в котором лежит определенный для сервера my.cnf. Если MYSQL_HOME не установлен и Вы запускаете сервер, используя mysqld_safe , то mysqld_safe устанавливает это в BASEDIR, базовый каталог MySQL.

DATADIR представляет каталог данных MySQL. При использовании mysqld-auto.cnf, значение по умолчанию: местоположение каталога данных, встроенное, когда MySQL был собран, но может быть изменено через опцию --datadir, определенную в файле опции или параметр командной строки, обработанный прежде mysqld-auto.cnf.

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

Следующее описание синтаксиса файла опции относится к файлам, которые Вы редактируете вручную. Это исключает .mylogin.cnf, который зашифрован и создается, используя mysql_config_editor и mysqld-auto.cnf, который сервер создает в формате JSON.

Любая длинная опция, которая может быть дана в командной строке, выполняя программу MySQL, может быть дана в файле опции также. Чтобы получить список доступных параметров для программы, выполните ее с --help. Для mysqld используйте --verbose и --help.

Синтаксис для того, чтобы определить опции в файле опции подобен синтаксису командной строки (см. раздел 5.2.4). Однако, в файле опции, Вы опускаете начальные тире и определяете только одну опцию на строку. Например, --quick и --host=localhost в командной строке должны быть определены как quick и host=localhost на отдельных строках в файле опции. Определить опцию формы --loose-opt_name в файле опции можно как loose-opt_name .

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

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

Вы можете использовать escape-последовательности \b, \t, \n, \r, \\ и \s в значениях опции, чтобы представить клавишу Backspace, tab, newline, carriage return, backslash и пробел. В файлах опции применяются эти правила:

Предыдущие правила означают, что буквальная наклонная черта влево может быть дана как \\ или \, если это не сопровождается допустимым символом escape-последовательности.

Правила для escape-последовательностей в файлах опции отличаются от правил для escape-последовательностей в строковых литералах в запросах SQL. В последнем контексте, если x не допустимый символ escape-последовательности, \x становится x вместо \x. См. раздел 10.1.1.

Правила экранировки для значений файла опции являются особенно подходящими для путей Windows, которые используют \ как разделитель пути. Разделитель в пути Windows должен быть написан как \\, если это сопровождается символом escape-последовательности. Это может быть написано как \\ или \. Альтернативно / может использоваться в путях Windows и будет обработан как \. Предположите, что Вы хотите определить основной каталог C:\Program Files\MySQL\MySQL Server 8.0 в файле опции. Это может быть сделано несколькими способами. Некоторые примеры:

basedir="C:\Program Files\MySQL\MySQL Server 8.0"
basedir="C:\\Program Files\\MySQL\\MySQL Server 8.0"
basedir="C:/Program Files/MySQL/MySQL Server 8.0"
basedir=C:\\Program\sFiles\\MySQL\\MySQL\sServer\s8.0
Если название группы опции то же, что и название программы, опции в группе применяются определенно к этой программе. Например, группы [mysqld] и [mysql] относятся к серверу mysqld и программе-клиенту mysql .

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

Вот типичный глобальный файл опции:

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

[mysqld]
port=3306
socket=/tmp/mysql.sock
key_buffer_size=16M
max_allowed_packet=8M

[mysqldump]
quick
Вот типичный пользовательский файл опции:
[client]
# The following password will be sent to all standard MySQL clients
password="my password"

[mysql]
no-auto-rehash
connect_timeout=2
Чтобы создать группы опции только для чтения серверами mysqld от определенного ряда выпуска MySQL, используйте группы с названиями [mysqld-5.7], [mysqld-8.0] и т.д. Следующая группа указывает, что параметр sql_mode должен использоваться только серверами MySQL с номера версии 8.0.x:
[mysqld-8.0]
sql_mode=TRADITIONAL
Возможно использовать директивы !include в файлах опции, чтобы включать другие файлы опции и !includedir, чтобы искать определенные каталоги с файлами опций. Например, чтобы включать файл /home/mydir/myopt.cnf используйте следующее:
!include /home/mydir/myopt.cnf
Искать в каталоге /home/mydir и читать файлы опции, найденные там, можно так:
!includedir /home/mydir
MySQL не дает гарантии порядка, в котором будут считаны файлы опции в каталоге.

Любые файлы, которые будут найдены и включены через !includedir в Unix должны иметь имена файла, заканчивающиеся .cnf. В Windows проверяются файлы с расширениями .ini или .cnf.

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

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

!include /home/mydir/myopt.cnf
И предположите, что /home/mydir/myopt.cnf похож на это:
[mysqladmin]
force

[mysqld]
key_buffer_size=16M
Если my.cnf обработан mysqld, используется только группа [mysqld] в /home/mydir/myopt.cnf. Если файл обработан mysqladmin , используется только группа [mysqladmin]. Если файл обработан какой-либо другой программой, никакие опции в /home/mydir/myopt.cnf не используются.

!includedir обработана так же, за исключением того, что считаны все файлы опции в названном каталоге.

Если файл опции содержит !include или !includedir, файлы, названные этими директивами, обработаны всякий раз, когда файл опции обработан, независимо от того, где они появляются в файле.

5.2.7. Параметры командной строки и обработка файла опции

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

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

5.2.8. Использование опций, чтобы установить переменные программы

У многих программ MySQL есть внутренние переменные, которые могут быть установлены во время выполнения, используя. См. разделы 14.7.4.1 и 6.1.6.

Большинство этих переменных программы также может быть установлено при запуске сервера при использовании того же самого синтаксиса, который относится к определению опций программы. Например, mysql имеет переменную max_allowed_packet, которая управляет максимальным размером коммуникационного буфера. Установить max_allowed_packet для mysql в 16MB можно, применив любую из следующих команд:

shell> mysql --max_allowed_packet=16777216
shell> mysql --max_allowed_packet=16M
Первая команда определяет значение в байтах. Вторая определяет значение в мегабайтах. Для переменных, которые берут числовое значение, оно может быть дано с суффиксом K, M или G (в любом регистре), чтобы указать на множитель 1024, 10242 или 10243. Например, когда устанавливается max_allowed_packet, суффиксы указывают на модули килобайты, мегабайты или гигабайты.

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

[mysql]
max_allowed_packet=16777216
Или:
[mysql]
max_allowed_packet=16M
Если Вам нравится, подчеркивания в имени переменной могут быть определены как тире. Следующие группы опции эквивалентны. Обе устанавливают размер ключевого буфера сервера в 512 МБ:
[mysqld]
key_buffer_size=512M

[mysqld]
key-buffer-size=512M
Переменная может быть определена при написании полностью или как любая однозначная приставка. Например, max_allowed_packet может быть установлена для mysql как --max_a, но не как --max потому, что последний вариант неоднозначен:
shell> mysql --max=1000000
mysql: ambiguous option '--max=1000000' (max_allowed_packet, max_join_size)
Знайте, что использование переменных приставок может вызвать проблемы, когда новые переменные осуществлены для программы. Приставка, которая однозначна теперь, могла бы стать неоднозначной в будущем.

Суффиксы для того, чтобы определить множитель значения могут использоваться, устанавливая переменную при запуске сервера, но не значение с 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;

5.2.9. Значения по умолчанию опции, опции, ожидаемые значения и знак =

В соответствии с соглашением, длинные формы опций, которые назначают значение, написаны со знаком =:

shell> mysql --host=tonfisk --user=jon
Для опций, которые требуют значение (то есть, не имеют значения по умолчанию), знака равенства не требуется и таким образом следующее также допустимо:
shell> mysql --host tonfisk --user jon
В обоих случаях mysql пытается соединиться с сервером MySQL, работающим на хосте, названном tonfisk, с использованием учетной записи с именем пользователя jon.

Из-за этого поведения могут иногда возникать проблемы, когда никакое значение не обеспечено для опции, которая его ожидает. Рассмотрите следующий пример, где пользователь соединяется с сервером MySQL, работающим на хосте tonfisk как пользователь jon:

shell> mysql --host 85.224.35.45 --user jon
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 3
Server version: 8.0.1 Source distribution

Type 'help;' or '\h' for help. Type '\c' to clear the buffer.

mysql> SELECT CURRENT_USER();
+----------------+
| CURRENT_USER() |
+----------------+
| jon@%          |
+----------------+
1 row in set (0.00 sec)
Исключение необходимого значения для одного из этих параметров приводит к такой ошибке:
shell> mysql --host 85.224.35.45 --user
mysql: option '--user' requires an argument
В этом случае mysql не был способен найти значение после опции --user, потому что ничто не прибыло после этого в командную строку. Однако, если Вы опускаете значение для опции, которая не является последней опцией, которая будет использоваться, Вы получаете иную ошибку, которую Вы не можете ожидать:
shell> mysql --host --user jon
ERROR 2005 (HY000):
Unknown MySQL server host '--user' (1)
Поскольку mysql предполагает, что любая строка после --host это имя хоста, --host --user интерпретируется как --host=--user, клиент пытается соединиться с сервером MySQL, работающим на хосте, названном --user.

Опции, имеющие значения по умолчанию, всегда требуют знак равенства, назначая значение, будучи не в состоянии сделать это, они выдают ошибку. Например, у опции сервера MySQL --log-error есть значение по умолчанию host_name.err, где host_name это имя хоста, на котором работает MySQL. Предположите, что Вы выполняете MySQL на компьютере, имя хоста которого tonfisk, и рассмотрите следующий запрос mysqld_safe :

shell> mysqld_safe &
[1] 11699
shell> 080112 12:53:40 mysqld_safe Logging to '/usr/local/mysql/var/tonfisk.err'.
          080112 12:53:40 mysqld_safe Starting mysqld daemon with databases from /usr/local/mysql/var
shell>
После закрытия сервера, перезапустите это следующим образом:
shell> mysqld_safe --log-error &
[1] 11699
shell> 080112 12:53:40 mysqld_safe Logging to '/usr/local/mysql/var/tonfisk.err'.
          080112 12:53:40 mysqld_safe Starting mysqld daemon with databases from /usr/local/mysql/var
shell>
Результат тот же самый, с тех пор, как --log-error не сопровождается ничем больше на командной строке и поставляет свое собственное значение по умолчанию. Символ & говорит операционной системе выполнять MySQL в фоне, это проигнорировано MySQL непосредственно. Теперь предположим, что Вы хотите зарегистрировать ошибки в файле my-errors.err. Вы могли бы попытаться запустить сервер с --log-error my-errors, но это не имеет намеченного эффекта, как показано здесь:
shell> mysqld_safe --log-error my-errors &
[1] 31357
shell> 080111 22:53:31 mysqld_safe Logging to '/usr/local/mysql/var/tonfisk.err'.
          080111 22:53:32 mysqld_safe Starting mysqld daemon with databases from /usr/local/mysql/var
          080111 22:53:34 mysqld_safe mysqld from pid file /usr/local/mysql/var/tonfisk.pid ended
[1]+  Done./mysqld_safe --log-error my-errors
Сервер попытался начать использовать /usr/local/mysql/var/tonfisk.err как журнал ошибок, но завершился. Изучение последних немногих строк этого файла показывает причину:
shell> tail /usr/local/mysql/var/tonfisk.err
2013-09-24 T 15:36:22.278034Z 0 [ERROR] Too many arguments (first extra is 'my-errors').
2013-09-24 T 15:36:22.278059Z 0 [Note] Use --verbose --help to get a list of available options!
2013-09-24 T 15:36:22.278076Z 0 [ERROR] Aborting
2013-09-24 T 15:36:22.279704Z 0 [Note] InnoDB: Starting shutdown...
2013-09-24 T 15:36:23.777471Z 0 [Note] InnoDB: Shutdown completed; log sequence number 2319086
2013-09-24 T 15:36:23.780134Z 0 [Note] mysqld: Shutdown complete
Так как --log-error поставляет значение по умолчанию, Вы должны использовать знак равенства, чтобы назначить иное значение, как показано здесь:
shell> mysqld_safe --log-error=my-errors &
[1] 31437
shell> 080111 22:54:15 mysqld_safe Logging to '/usr/local/mysql/var/my-errors.err'.
          080111 22:54:15 mysqld_safe Starting mysqld daemon with databases from /usr/local/mysql/var
shell>
Теперь сервер был запущен успешно, и регистрирует ошибки в файл /usr/local/mysql/var/my-errors.err.

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

[mysql]
host
user
Когда mysql читает этот файл, эти записи разобраны как --host --user или --host=--user, с результатом, показанным здесь:
shell> mysql
ERROR 2005 (HY000): Unknown MySQL
server host '--user' (1)
Однако, в файлах опции знак равенства не принят. Предположите файл my.cnf как показано здесь:
[mysql]

user jon
Попытка запустить mysql в этом случае вызывает иную ошибку:
shell> mysql
mysql: unknown option '--user jon'
Подобная ошибка произошла бы, если Вы должны были написать host tonfisk в файле опции, а не host=tonfisk. Вместо этого Вы должны использовать знак равенства:
[mysql]

user=jon
Теперь попытка входа в систему удается:
shell> mysql
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 5
Server version: 8.0.1 Source distribution

Type 'help;' or '\h' for help. Type '\c' to clear the buffer.

mysql> SELECT USER();
+---------------+
| USER()        |
+---------------+
| jon@localhost |
+---------------+
1 row in set (0.00 sec)
Это не то же самое поведение как с командной строкой, где знак равенства не требуется:
shell> mysql --user jon --host tonfisk
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 6
Server version: 8.0.1 Source distribution

Type 'help;' or '\h' for help. Type '\c' to clear the buffer.

mysql> SELECT USER();
+---------------+
| USER()        |
+---------------+
| jon@tonfisk   |
+---------------+
1 row in set (0.00 sec)
Определение опции, требующей значения, без указания значения в файле опции, заставляет сервер прерываться с ошибкой. Предположите такой файл my.cnf:
[mysqld]
log_error
relay_log
relay_log_index
Это заставляет сервер терпеть неудачу на запуске, как показано здесь:
shell> mysqld_safe &

130924 10:41:46 mysqld_safe Logging to '/home/jon/bin/mysql/var/tonfisk.err'.
130924 10:41:46 mysqld_safe Starting mysqld daemon with databases from /home/jon/bin/mysql/var
130924 10:41:47 mysqld_safe mysqld from pid file /home/jon/bin/mysql/var/tonfisk.pid ended
Опция --log-error не требует параметра, однако, --relay-log требует, как показано в журнале ошибок (который в отсутствие указанного значения, по умолчанию datadir/ hostname.err):
shell> tail -n 3 ../var/tonfisk.err

130924 10:41:46 mysqld_safe Starting mysqld daemon with databases from
                /home/jon/bin/mysql/var
2013-09-24 T 15:41:47.217180Z 0 [ERROR] /home/jon/bin/mysql/libexec/mysqld:
             option '--relay-log' requires an argument
2013-09-24 T 15:41:47.217479Z 0 [ERROR] Aborting
Это изменение от предыдущего поведения, где сервер интерпретировал бы последние две строки в примере my.cnf как --relay-log=relay_log_index и создавал бы файл системного журнала реле, используя relay_log_index как базовое имя (Bug #25192).

5.2.10. Установка переменных окружения

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

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

SET USER=your_name
Синтаксис в Unix зависит от Вашей оболочки. Предположите, что Вы хотите определить номер порта TCP/IP, используя переменную MYSQL_TCP_PORT. Типичный синтаксис (что касается sh, ksh, bash, zsh и т.п.):
MYSQL_TCP_PORT=3306
export MYSQL_TCP_PORT
Первая команда устанавливает переменную, команда export экспортирует переменную в окружающую среду оболочки так, чтобы ее значение стало доступным для MySQL и других процессов.

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

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

В Windows Вы можете установить переменные окружения, используя System Control Panel (в Advanced).

В Unix типичные файлы запуска оболочки .bashrc или .bash_profile в bash или .tcshrc для tcsh.

Предположите, что Ваши программы MySQL установлены в /usr/local/mysql/bin и Вы хотите облегчить вызов этих программ. Чтобы сделать это, установите значение переменной окружения PATH, чтобы включать тот каталог. Например, если Ваша оболочка bash, добавьте следующую строку к Вашему файлу .bashrc:

PATH=${PATH}:/usr/local/mysql/bin
bash использует различные файлы запуска для оболочек входа в систему и nonlogin-оболочек, таким образом, Вы могли бы хотеть добавить установку в .bashrc для оболочек входа в систему и в .bash_profile для остальных, чтобы установить PATH независимо.

Если Ваша оболочка tcsh, добавьте следующую строку к Вашему .tcshrc:

setenv PATH ${PATH}:/usr/local/mysql/bin
Если соответствующий файл запуска не существует в Вашем корневом каталоге, создайте его.

После изменения Вашего PATH, откройте новую консоль в Windows или войдите в систему снова в Unix так, чтобы установка вступила в силу.

5.3. Сервер MySQL и программы запуска сервера

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

5.3.1. mysqld, собственно сервер MySQL

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

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

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

shell> mysqld --verbose --help
У сервера MySQL также есть ряд системных переменных, которые затрагивают работу. Системные переменные могут быть установлены при запуске сервера, многие из них могут быть изменены во время выполнения, чтобы произвести динамическое реконфигурирование сервера. У сервера MySQL также есть ряд переменных состояния, которые предоставляют информацию о работе. Вы можете контролировать эти переменные состояния, чтобы получить доступ к техническим характеристикам во время выполнения.

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

5.3.2. mysqld_safe скрипт запуска MySQL

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

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

mysqld_safe пытается запустить mysqld. Чтобы переопределить поведение по умолчанию и определить явно название сервера, надо указать опцию --mysqld или --mysqld-version в mysqld_safe. Вы можете также использовать --ledir, чтобы указать на каталог, где mysqld_safe должен искать сервер.

Многие из опций mysqld_safe те же самые, как опции mysqld. См. раздел 6.1.4.

Опции, неизвестные , mysqld_safe передаются mysqld, если они определены в командной строке, но проигнорированы, если они определены в группе [mysqld_safe] файла опции. См. раздел 5.2.6.

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

[mysqld]
log-error=error.log
Для обратной совместимости mysqld_safe также читает [safe_mysqld], но Вы должны переименовать такие разделы в [mysqld_safe].

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

Таблица 5.3. Опции mysqld_safe

ФорматОписание
--basedirПуть к каталогу установки MySQL
--core-file-sizeРазмер основного файла, который mysqld должен быть в состоянии создать
--datadirПуть к каталогу данных
--defaults-extra-fileЧитать файл опции в дополнение к обычным файлам опции
--defaults-fileНазванный файл опции только для чтения
--helpСообщение справки и выход
--ledirПуть к каталогу, где сервер расположен
--log-errorЖурналировать ошибки при записи к названному файлу
--malloc-libАльтернатива библиотеки malloc для mysqld
--mysqldНазвание программы сервера (в каталоге ledir)
--mysqld-safe-log-timestampsФормат метки времени для того, чтобы зарегистрировать
--mysqld-versionСуффикс для названия программы сервера
--niceИспользуйте nice, чтобы установить приоритет планирования сервера
--no-defaultsНе читать файлы опций
--open-files-limitЧисло файлов, которые mysqld должен быть в состоянии открыть
--pid-fileПуть к файлу ID процесса
--plugin-dirКаталог, где плагины установлены
--port Номер порта, на котором слушать соединения TCP/IP
--skip-kill-mysqldНе пытаться уничтожить беспризорные процессы mysqld
--skip-syslogНе делать сообщений ошибки при записи к syslog, использовать файл журнала ошибок
--socket Файл сокета, на котором слушать сокетные соединения Unix
--syslog Сообщения ошибки при записи в syslog
--syslog-tagСуффикс тега для сообщений, написанных в syslog
--timezoneУстановить переменную окружения часового пояса TZ к названному значению
--user Выполнить mysqld как пользователь, имеющий имя user_name или числовой идентификатор ID user_id

Если Вы выполняете mysqld_safe с опцией --defaults-file или --defaults-extra-file, чтобы назвать файл опции, опция должна быть первой, данной в командной строке, или файл опции не будет использоваться. Например, эта команда не будет использовать названный файл опции:

mysql> mysqld_safe --port=port_num \
                      --defaults-file=file_name
Вместо этого используйте следующую команду:
mysql> mysqld_safe --defaults-file=file_name \
                      --port=port_num
Скрипт mysqld_safe написан так, чтобы он обычно мог запустить сервер, который был установлен или из исходных текстов или двоичного дистрибутива MySQL, даже при том, что эти типы дистрибутивов, как правило, устанавливают сервер в немного отличающихся местоположениях. См. раздел 2.1.4. mysqld_safe ожидает одно из следующих условий:

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

shell> cd mysql_installation_directory
shell> bin/mysqld_safe &
Если mysqld_safe терпит неудачу, даже когда вызван из каталога установки MySQL, определите опции --ledir и --datadir, чтобы указать на каталоги, в которых сервер и базы данных расположены на Вашей системе.

mysqld_safe пытается использовать утилиты системы sleep и date, чтобы определить, сколько раз в секунду попыталось запуститься. Если эти утилиты присутствуют, и предпринято больше 5 запусков в секунду, mysqld_safe ждет 1 целую секунду прежде, чем запуститься снова. Это предназначено, чтобы предотвратить чрезмерное использование центрального процессора в случае повторных отказов (Bug #11761530, Bug #54035).

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

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

Если ни одна из этих опций не дана, значение по умолчанию --skip-syslog .

Когда mysqld_safe пишет сообщение, уведомления идут к месту назначения журналирования (syslog или файл журнала ошибок) и stdout. Ошибки идут к месту назначения журналирования и stderr.

Управление регистрацией mysqld из mysqld_safe устарело. Используйте встроенную в сервер поддержку syslog, см. раздел 6.4.2.

5.3.3. Скрипт запуска сервера mysql.server

Дистрибутивы MySQL в Unix включают скрипт, названный mysql.server , который запускает сервер, используя mysqld_safe . Это может использоваться на системах, таких как Linux и Solaris, , которые используют стиль System V-каталогов, чтобы запустить и остановить системные службы. Это также используется OS X Startup Item для MySQL.

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

Чтобы запустить или остановить сервер вручную, используя mysql.server , вызовите это с параметром start или stop :

shell> mysql.server start
shell> mysql.server stop
Прежде, чем mysql.server запускает сервер, он изменяет местоположение на каталог установки MySQL и затем вызывает mysqld_safe. Чтобы выполнить сервер от некоторого определенного пользователя, добавьте соответствующую опцию user в группу [mysqld] файла /etc/my.cnf, как показано позже в этом разделе. Возможно, что Вы должны отредактировать mysql.server, если Вы установили двоичный дистрибутив MySQL в нестандартном местоположении. Измените это, чтобы изменить местоположение в надлежащий каталог прежде, чем это выполнит mysqld_safe . Если Вы делаете это, Ваша измененная версия mysql.server может быть перезаписана, если Вы обновляете MySQL в будущем, таким образом, Вы должны сделать копию своей версии.

mysql.server stop останавливает сервер, посылая ему сигнал. Вы можете также остановить сервер вручную, выполняя mysqladmin shutdown .

Чтобы запустить и остановить MySQL автоматически на Вашем сервере, Вы должны добавить команды к соответствующим местам в Ваших файлах /etc/rc*.

Если Вы используете пакет RPMсервера Linux (MySQL-server-VERSION.rpm) или родную установку пакета Linux, скрипт mysql.server может быть установлен в /etc/init.d с именем mysql. См. раздел 2.5.4.

Некоторые продавцы обеспечивают пакеты RPM, которые устанавливают скрипт запуска под другим именем, таким как mysqld.

Если Вы устанавливаете MySQL из исходных текстов или с использованием двоичного формата распределения, который не устанавливает mysql.server автоматически, Вы можете установить это вручную. Скрипт может быть найден в подкаталоге support-files в соответствии с каталогом установки MySQL или в исходном дереве MySQL. Скопируйте это в /etc/init.d с именем mysql, затем сделайте это выполнимым:

shell> cp mysql.server /etc/init.d/mysql
shell> chmod +x /etc/init.d/mysql

Старые системы Red Hat используют /etc/rc.d/init.d вместо /etc/init.d. Скорректируйте предыдущие команды соответственно. Альтернативно, сначала создайте /etc/init.d как символическую ссылку, которая указывает на /etc/rc.d/init.d:

shell> cd /etc
shell> ln -s rc.d/init.d .
После установки скрипта должны были активироваться команды, чтобы работать при системном запуске, это зависит от Вашей операционной системы. В Linux Вы можете использовать chkconfig :
shell> chkconfig --add mysql
На некоторых системах Linux следующая команда также, кажется, необходима, чтобы полностью включить mysql :
shell> chkconfig --level 345 mysql on
В FreeBSD скрипты запуска вообще должны быть в /usr/local/etc/rc.d/. rc(8) manual page заявляет, что скрипты в этом каталоге выполнены, только если их базовое имя соответствует образцу имени файла оболочки *.sh. Любые другие файлы или каталоги в пределах каталога тихо проигнорированы. Другими словами, на FreeBSD, Вы должны установить скрипт mysql.server как /usr/local/etc/rc.d/mysql.server.sh, чтобы включить автоматический запуск.

Как альтернатива предыдущей установке, некоторые операционные системы также используют /etc/rc.local или /etc/init.d/boot.local, чтобы запустить дополнительные службы. Чтобы запустить MySQL, используя этот метод, добавьте команду к соответствующему файлу запуска:

/bin/sh -c 'cd /usr/local/mysql; ./bin/mysqld_safe --user=mysql &'
Для других систем консультируйтесь со своей документацией операционной системы, чтобы видеть, как установить скрипты запуска.

mysql.server читает опции из групп [mysql.server] и [mysqld] файлов опции. Для обратной совместимости это также читает [mysql_server], но Вы должны переименовать такие разделы в [mysql.server].

Вы можете добавить опции для mysql.server в глобальном файле /etc/my.cnf. Типичный файл /etc/my.cnf:

[mysqld]
datadir=/usr/local/mysql/var
socket=/var/tmp/mysql.sock
port=3306
user=mysql

[mysql.server]
basedir=/usr/local/mysql
Скрипт mysql.server поддерживает следующие опции. Если определены, они должны быть размещены в файле опций, а не в командной строке. mysql.server поддерживает только start и stop как параметры командной строки.

Таблица 5.4. Опции mysql.server

ФорматОписание
--basedir Путь к каталогу установки MySQL
--datadirПуть к каталогу данных MySQL
--pid-fileФайл, в который сервер должен записать свой идентификатор процесса
--service-startup-timeout Сколько времени ждать запуска сервера

5.3.4. mysqld_multi, управление несколькими серверами MySQL

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

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

mysqld_multi ищет группы [mysqldN] в my.cnf (или в файле, названном в опции --defaults-file). N может быть любым положительным целым числом. Это число упомянуто в следующем обсуждении как групповое число опции или GNR. Групповые числа отличают группы опций от друг друга и используются в качестве параметров mysqld_multi , чтобы определить, какие серверы Вы хотите запустить, остановить или получить отчет о состоянии. Опции, перечисленные в этих группах, являются тем же самым, что Вы использовали бы в группе [mysqld] для того, чтобы начать mysqld. См. раздел 2.9.5. Однако, используя многократные серверы, необходимо чтобы каждый использовал собственное значение для таких опций, как файл сокета Unix и номер порта TCP/IP. Для получения дополнительной информации о том, которые опции должны быть уникальны для сервера в окружающей среде нескольких серверов см. раздел 6.7.

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

shell> mysqld_multi [options]
          {start|stop|reload|report} [GNR[,GNR] ...]
start, stop, reload (остановить и перезапустить) и report указывают, что надо сделать. Вы можете выполнить определяемую работу для единственного или многих серверов, в зависимости от списка GNR, который следует за именем опции. Если нет никакого списка, mysqld_multi выполняет работу для всех серверов в файле опции.

Каждое значение GNR представляет групповое число опции или диапазон групповых чисел. Значение должно быть числом в конце названия группы в файле опции. Например, GNR для группы [mysqld17] = 17. Чтобы определить диапазон чисел, отделите числа тире. GNR 10-13 задает группы от [mysqld10] по [mysqld13]. Многократные группы или групповые диапазоны могут быть определены в командной строке, через запятую. Не должно быть никаких пробельных символов (пробелы или табуляции) в списке GNR, что-либо после пробельного символа проигнорировано.

Эта команда запускает единственную группу опции сервера [mysqld17]:

shell> mysqld_multi start 17
Эта команда останавливает несколько серверов, используя группы опции [mysqld8] и с [mysqld10] по [mysqld13] :
shell> mysqld_multi stop 8,10-13
Для примера того, как Вы могли бы настроить файл опции, используйте эту команду:
shell> mysqld_multi --example
mysqld_multi ищет файлы опции следующим образом:

В файлах опции ищутся группы [mysqld_multi] и [mysqldN]. Группа [mysqld_multi] может использоваться для опций mysqld_multi . Группы [mysqldN] могут использоваться для опций, которые передают к определенным экземплярам mysqld.

Группы [mysqld] или [mysqld_safe] могут использоваться для общих опций, считанных всеми экземплярами mysqld или mysqld_safe . Вы можете определить --defaults-file=file_name, чтобы использовать иной конфигурационный файл для того того случая, когда группы [mysqld] или [mysqld_safe] из того файла будут использоваться.

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

Некоторые примечания о mysqld_multi:

Следующий пример показывает, как Вы могли бы настроить файл опции для использования с mysqld_multi. Порядок, в котором mysqld запущены или остановлены, зависит от порядка, в котором они появляются в файле опции. Групповые числа не обязаны сформировать непрерывную последовательность. Первая и пятая группы [mysqldN] были преднамеренно опущены в примере, чтобы иллюстрировать, что у Вас может быть промежуток в файле опции. Это дает Вам больше гибкости.

# This is an example of a my.cnf file for mysqld_multi.
# Usually this file is located in home dir ~/.my.cnf or /etc/my.cnf

[mysqld_multi]
mysqld = /usr/local/mysql/bin/mysqld_safe
mysqladmin = /usr/local/mysql/bin/mysqladmin
user = multi_admin
password   = my_password

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

[mysqld3]
mysqld = /path/to/mysqld_safe
ledir= /path/to/mysqld-binary/
mysqladmin = /path/to/mysqladmin
socket = /tmp/mysql.sock3
port = 3308
pid-file   = /usr/local/mysql/data3/hostname.pid3
datadir= /usr/local/mysql/data3
language   = /usr/local/mysql/share/mysql/swedish
user = unix_user2

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

[mysqld6]
socket = /tmp/mysql.sock6
port = 3311
pid-file   = /usr/local/mysql/data6/hostname.pid6
datadir= /usr/local/mysql/data6
language   = /usr/local/mysql/share/mysql/japanese
user = unix_user4
См. раздел 5.2.6.

5.4. Связанные с установкой программы MySQL

Программы в этом разделе используются, устанавливая или обновляя MySQL.

5.4.1. comp_err Компиляция файла сообщений об ошибке MySQL

comp_err создает файл errmsg.sys, который используется mysqld, чтобы определить сообщения об ошибках, чтобы вывести на экран для различных кодов ошибки. comp_err обычно выполняется автоматически, когда MySQL создан. Это собирает файл errmsg.sys из текстового файла sql/share/errmsg-utf8.txt, расположенного в исходных текстах MySQL.

comp_err также производит заголовочные файлы mysqld_error.h, mysqld_ername.h и sql_state.h.

Для получения дополнительной информации о том, как сообщения об ошибках определены, см. MySQL Internals Manual.

Вызов comp_err :

shell> comp_err [options]
comp_err поддерживает следующие опции.

5.4.2. mysql_secure_installation улучшение безопасности установки MySQL

Эта программа позволяет Вам улучшить безопасность своей установки MySQL следующими способами:

mysql_secure_installation помогает Вам осуществить рекомендации безопасности, подобные описанным в разделе 2.9.4.

Нормальное использование должно соединиться с местным сервером MySQL, вызовите mysql_secure_installation без параметров:

shell> mysql_secure_installation
Когда выполнен, mysql_secure_installation просит Вас определять, которые действия выполнить.

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

Большинство обычных опций клиента MySQL, например, --host и --port может использоваться на командной строке и в файлах опции. Например, чтобы соединиться с локальным сервером по IPv6, используя порт 3307, используйте эту команду:

shell> mysql_secure_installation --host=::1 --port=3307
mysql_secure_installation поддерживает следующие опции, которые могут быть определены в командной строке или в группах [mysql_secure_installation] и [client] файла опции. Для информации о файлах опции, используемых программами MySQL, см. раздел 5.2.6.

Таблица 5.5. Опции mysql_secure_installation

ФорматОписание
--defaults-extra-fileЧитает данный файл опции в дополнение к обычным файлам опции
--defaults-fileЧитать только данный файл опций
--defaults-group-suffixГрупповое значение суффикса опции
--help Отобразить справку и выйти
--host IP-адрес или имя хоста для соединения
--no-defaultsНе читать файлы опции
--password Принят, но всегда проигнорирован. Всякий раз, когда mysql_secure_installation вызван, пользователь запрошен о пароле независимо.
--port Номер порта TCP/IP, чтобы использовать для соединения
--print-defaultsНапечатать опции по умолчанию
--protocol Протокол соединения, чтобы использовать
--socket Для соединений с localhost файл сокета Unix
--ssl-ca Путь к файлу, который содержит список доверенных SSL CA
--ssl-capath Путь к каталогу, который содержит доверенные сертификаты SSL CA в формате PEM
--ssl-cert Путь к файлу, который содержит сертификат X509 в формате PEM
--ssl-cipher Список разрешенных шифров для шифрования соединения
--ssl-crl Путь к файлу, который содержит списки аннулирования сертификатов
--ssl-crlpath Путь к каталогу, который содержит файлы списка аннулирования сертификатов
--ssl-key Путь к файлу, который содержит ключ X509 в формате PEM
--tls-versionПротоколы, разрешенные для безопасных соединений
--use-defaultВыполнить без пользовательской активности
--user Имя пользователя MySQL, чтобы использовать, соединяясь с сервером

5.4.3. mysql_ssl_rsa_setup создание файлов SSL/RSA

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

mysql_ssl_rsa_setup использует openssl, таким образом, ее использование зависит от наличия OpenSSL на Вашей машине.

Другой способ произвести SSL и файлы RSA для дистрибутивов MySQL, собранных, используя OpenSSL, состоит в том, чтобы сервер произвел их автоматически. См. раздел 7.4.6.1.

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

Вызов mysql_ssl_rsa_setup:

shell> mysql_ssl_rsa_setup [options]
Опция --datadir определяет, где создать файлы, а --verbose показывает команды openssl, которые выполняет mysql_ssl_rsa_setup.

mysql_ssl_rsa_setup пытается создать SSL и файлы RSA, используя набор имен файлов по умолчанию. Это работает следующим образом:

  1. mysql_ssl_rsa_setup проверяет наличие openssl в местоположениях, определенных переменной окружения PATH. Если openssl там нет, mysql_ssl_rsa_setup ничего не делает. Если openssl есть, mysql_ssl_rsa_setup ищет значение по умолчанию SSL и файлы RSA в каталоге данных MySQL, определенном опцией --datadir или в каталоге данных, если эта опция не дана.

  2. mysql_ssl_rsa_setup проверяет каталог данных на файлы SSL со следующими именами:
    ca.pem
    server-cert.pem
    server-key.pem
    
  3. Если какой-либо из тех файлов присутствует, mysql_ssl_rsa_setup не создает файлов SSL. Иначе, это вызывает openssl, чтобы создать их и некоторые дополнительные файлы:
    ca.pem          Self-signed CA certificate
    ca-key.pem      CA private key
    server-cert.pem Server certificate
    server-key.pem  Server private key
    client-cert.pem Client certificate
    client-key.pem  Client private key
    
    Эти файлы включают безопасные соединения клиента, используя SSL, см. раздел 7.4.4.
  4. mysql_ssl_rsa_setup проверяет каталог данных на файлы RSA со следующими именами:
    private_key.pem Private member of private/public key pair
    public_key.pem  Public member of private/public key pair
    
  5. Если какой-либо из этих файлов присутствует, mysql_ssl_rsa_setup не создает файлов RSA. Иначе, это вызывает openssl, чтобы создать их. Эти файлы включают безопасный обмен паролями, использующий RSA по незашифрованным соединениям для учетных записей, заверенных плагином sha256_password, см. раздел 7.5.1.2.

Для информации о характеристиках файлов, создаваемых mysql_ssl_rsa_setup см. раздел 7.4.6.1.

При запуске сервер MySQL автоматически использует файлы SSL, создаваемые mysql_ssl_rsa_setup , чтобы включить SSL, если не задано никаких явных опций SSL, кроме --ssl. Если Вы предпочитаете определять файлы явно, используйте опции --ssl-ca, --ssl-cert и --ssl-key при запуске, чтобы назвать файлы ca.pem, server-cert.pem и server-key.pem, соответственно.

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

Если сервер SSL включен, клиенты используют SSL по умолчанию для соединения. Чтобы определить сертификат и ключевые файлы явно, используйте опции --ssl-ca, --ssl-cert и --ssl-key, чтобы назвать файлы ca.pem, client-cert.pem и client-key.pem, соответственно. Однако, некоторая дополнительная установка клиента может требоваться сначала, потому что mysql_ssl_rsa_setup по умолчанию создает те файлы в каталоге данных. Разрешения для каталога данных обычно включают доступу только к системной учетной записи, которая выполняет сервер MySQL, таким образом, программы клиента не могут использовать файлы, расположенные там. Чтобы сделать файлы доступными, скопируйте их в каталог, который читаемый (но не перезаписываемый) клиентами:

Если файлы SSL, используемые для установки MySQL, истекли, Вы можете использовать mysql_ssl_rsa_setup, чтобы создать новые:

  1. Остановите сервер.

  2. Переименуйте или удалите существующие файлы SSL. Вы можете хотеть сделать резервное копирование сначала. айлы RSA не истекают, таким образом, Вы не должны удалить их. mysql_ssl_rsa_setup будет видеть, что они существуют и не перезаписывает их.
  3. Запустите mysql_ssl_rsa_setup с опцией --datadir , чтобы определить, где создать новые файлы.
  4. Перезапустите сервер.

mysql_ssl_rsa_setup поддерживает следующие параметры, которые могут быть определены в командной строке или в группах [mysql_ssl_rsa_setup] и [mysqld] файла опции. Для информации о файлах опции, используемых программами MySQL, см. раздел 5.2.6.

Таблица 5.6. Опции mysql_ssl_rsa_setup

ФорматОписание
--datadir Путь к каталогу данных
--helpОтобразить справку и выйти
--suffixСуффикс для признака общего названия сертификата X509
--uidИмя эффективного пользователя, чтобы использовать для разрешений файла
--verboseПодробный режим
--versionИнформация о версии и выход

5.4.4. mysql_tzinfo_to_sql Загрузка таблицы часового пояса

mysql_tzinfo_to_sql загружает таблицы часового пояса в базу данных mysql. Это используется на системах, у которых есть база данных zoneinfo (набор файлов, описывающих часовые пояса). Примеры таких систем: Linux, FreeBSD, Solaris и OS X. Одно вероятное местоположение для этих файлов: каталог /usr/share/zoneinfo (/usr/share/lib/zoneinfo в Solaris). Если у Вашей системы нет базы данных zoneinfo, Вы можете использовать загружаемый пакет, описанный в разделе 11.6.

mysql_tzinfo_to_sql может быть вызвана несколькими путями:

shell> mysql_tzinfo_to_sql tz_dir
shell> mysql_tzinfo_to_sql tz_file tz_name
shell> mysql_tzinfo_to_sql --leap tz_file
яДля первого синтаксиса передайте zoneinfo имя пути к каталогу к mysql_tzinfo_to_sql и пошлите вывод в mysql:
shell> mysql_tzinfo_to_sql /usr/share/zoneinfo | mysql -u root mysql
mysql_tzinfo_to_sql читает файлы часового пояса Вашей системы и производит запросы SQL от них. mysql обрабатывает эти запросы, чтобы загрузить таблицы часового пояса.

Второй синтаксис заставляет mysql_tzinfo_to_sql загружать единственный файл часового пояса tz_file, который соответствует имени часового пояса tz_name:

shell> mysql_tzinfo_to_sql tz_file tz_name | mysql -u root mysql
Если Ваш часовой пояс должен учитывать секунды сдвига, запустите mysql_tzinfo_to_sql , используя третий синтаксис, который инициализирует информацию сдвига секунд. tz_file это название Вашего файла часового пояса:
shell> mysql_tzinfo_to_sql --leap tz_file | mysql -u root mysql
После выполнения mysql_tzinfo_to_sql лучше перезапускать сервер, чтобы это не продолжило использовать любые ранее кэшируемые данные о часовом поясе.

5.4.5. mysql_upgrade проверка и обновление таблицы MySQL

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

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

Вы должны выполнить mysql_upgrade каждый раз, когда Вы обновляете MySQL.

mysql_upgrade общается непосредственно с сервером MySQL, посылая запросы SQL, требуемые, чтобы выполнить обновление.

В Windows Server 2008, Vista и новее Вы должны выполнить mysql_upgrade как администратор системы. Вы можете сделать это, выполняя командную строку как Администратор и выполняя команду.

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

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

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

shell> mysql_upgrade [options]
После выполнения mysql_upgrade, остановите сервер и перезапустите его, чтобы любые изменения, произведенные в системных таблицах, вступили в силу.

Если у Вас есть многократное выполнение серверов MySQL, вызовите mysql_upgrade с параметрами соединения, подходящими для соединения с желаемым сервером. Например, с серверами, работающими на местном узле на портах 3306-3308, обновите каждый из них, соединяясь с соответствующим портом:

shell> mysql_upgrade --protocol=tcp -P 3306 [other_options]
shell> mysql_upgrade --protocol=tcp -P 3307 [other_options]
shell> mysql_upgrade --protocol=tcp -P 3308 [other_options]
Для местных соединений в Unix опция --protocol=tcp вызывает соединение, используя TCP/IP, а не файл сокета Unix.

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

Для деталей о том, что влекут за собой проверяющие таблицу операции см. описание опции FOR UPGRADE команды CHECK TABLE (раздел 14.7.2.2).

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

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

mysql_upgrade проверяет строки таблицы user и, для любой строки с пустым столбцом plugin, устанавливает этот столбец в 'mysql_native_password', если привилегии используют формат хеша, совместимый с этим плагином. Строки с паролями в хэше версии pre-4.1 должны быть обновлены вручную.

mysql_upgrade не обновляет содержание таблиц справки. Для инструкций обновления см. раздел 6.1.10.

Если не вызвано с опцией --skip-sys-schema, mysql_upgrade устанавливает схему sys, если это не установлено, и обновляет это до текущей версии иначе. mysql_upgrade возвращает ошибку, если схема sys существует, но не имеет представления version, при условии, что его отсутствие указывает на создаваемую пользователем схему:

Error occurred: A sys schema exists with no sys.version view. If
you have a user created sys schema, this must be renamed for the
upgrade to succeed.
Чтобы обновиться в этом случае, сначала удалите или переименуйте существующую схему sys.

mysql_upgrade проверяет на разделение таблицы InnoDB, которые были составлены, используя родной обработчик разделения и пытается обновить их до родного разделения InnoDB. Вы можете обновить такие таблицы индивидуально в mysql , используя ALTER TABLE ... UPGRADE PARTITIONING.

По умолчанию mysql_upgrade работает как MySQL-пользователь root. Если истек пароль для root, когда Вы выполняете mysql_upgrade , Вы будете видеть сообщение, что Ваш пароль истекает и что mysql_upgrade потерпел неудачу в результате. Чтобы исправить это, сбросьте пароль root в неистекающий и выполните mysql_upgrade снова. Соединитесь с сервером как root:

shell> mysql -u root -p
Enter password: <****  <- enter root password here
Сбросьте пароль ALTER USER:
mysql> ALTER USER USER() IDENTIFIED BY 'root-password';
Теперь выйдите из mysql и выполните mysql_upgrade снова:
shell> mysql_upgrade [options]
mysql_upgrade поддерживает следующие опции, которые могут быть определены в командной строке или в группах [mysql_upgrade] и [client] файла опции. Для информации о файлах опции, используемых программами MySQL, см. раздел 5.2.6.

Таблица 5.7. Опции mysql_upgrade

ФорматОписание
--bind-addressИспользуйте определенный сетевой интерфейс, чтобы соединиться с MySQL Server
--character-sets-dirКаталог, где наборы символов установлены
--compressСжимать всю информацию, посланную между клиентом и сервером
--debug Вести журнал отладки
--debug-checkИнформация об отладке, когда программа завершается
--debug-infoИнформация об отладке, память и статистика центрального процессора, когда программа завершается
--default-authПлагин аутентификации, чтобы использовать
--default-character-setОпределите набор символов значения по умолчанию
--defaults-extra-fileЧитать этот файл опции в дополнение к обычным файлам опции
--defaults-fileЧитать только этот файл опции
--defaults-group-suffixГрупповое значение суффикса опции
--force Выполнение, даже если mysql_upgrade был уже выполнен для текущей версии MySQL
--help Отобразить справку и выйти
--host Хост сервера MySQL
--login-pathЧитать опции пути входа в систему из .mylogin.cnf
--max-allowed-packetМаксимальная пакетная длина, чтобы послать в или получить от сервера
--net-buffer-lengthРазмер буфера для TCP/IP и сокета
--no-defaultsНе читать файлы опции
--passwordПароль, чтобы соединиться с сервером
--pipe В Windows соединиться с сервером, используя именованный канал
--plugin-dirКаталог, где плагины установлены
--port Номер порта TCP/IP, чтобы использовать для соединения
--print-defaultsНапечатать опции по умолчанию
--protocolПротокол соединения, чтобы использовать
--shared-memory-base-nameНазвание совместно используемой памяти, чтобы использовать для соединений
--skip-sys-schemaНе устанавливать или обновлять схему sys
--socketДля соединений с localhost файл сокета Unix
--ssl-ca Путь к файлу, который содержит список доверенных SSL CA
--ssl-capathПуть к каталогу, который содержит доверенные сертификаты SSL CA в формате PEM
--ssl-certПуть к файлу, который содержит сертификат X509 в формате PEM
--ssl-cipherСписок разрешенных шифров, чтобы использовать для шифрования соединения
--ssl-crlПуть к файлу, который содержит списки аннулирования сертификатов
--ssl-crlpathПуть к каталогу, который содержит файлы списка аннулирования сертификатов
--ssl-keyПуть к файлу, который содержит ключ X509 в формате PEM
--ssl-modeСтатус безопасности соединения с сервером
--tls-versionПротоколы, разрешенные для безопасных соединений
--upgrade-system-tablesОбновите только системные таблицы, но не данные
--user Имя пользователя MySQL, чтобы использовать, соединяясь с сервером
--verboseПодробный отчет
--version-checkПроверить на надлежащую версию сервера
--write-binlogЗаписать все запросы в двоичный журнал

5.5. Программы клиента MySQL

Этот раздел описывает программы клиента, которые соединяются с сервером MySQL.

5.5.1. Клиент mysql

mysql это простая оболочка SQL с поддержкой редактирования строки. Это поддерживает интерактивное и неинтерактивное использование. Когда используется в интерактивном режиме, результаты запроса представлены в формате таблицы ASCII. Когда используется не в интерактивном режиме (например, как фильтр), результат представлен в отделенном табуляциями формате. Выходной формат может быть изменен, используя опции команды.

Если у Вас есть проблемы из-за недостаточной памяти для больших наборов результатов, используйте --quick. Это вынуждает mysql получить с сервера строку за один раз вместо того, чтобы получить весь набор результатов и буферизовать это в памяти прежде, чем вывести на экран. Это сделано, возвращая набор результатов, используя mysql_use_result() C API в библиотеке клиент-сервер, а не mysql_store_result() .

Альтернативно, MySQL Shell предлагает доступ к X DevAPI. Для деталей см. раздел 3.8.

Использование mysql очень легко. Вызовите это из подсказки Вашего интерпретатора команды следующим образом:

shell> mysql db_name
Или:
shell> mysql --user=user_name --password=your_password db_name
Теперь введите запрос SQL, закончите его ;, \g или \G и нажмите Enter.

Ввод Control+C прерывает текущий запрос, если он есть, или отменяет какую-либо частичную входную строку иначе.

Вы можете выполнить запросы SQL в файле скрипта (пакетный файл):

shell> mysql db_name < script.sql > em>output.tab
В Unix mysql регистрирует запросы, выполненные в интерактивном режиме, в файле истории. См. раздел 5.5.1.3.

5.5.1.1. Опции mysql

mysql понимает следующие опции, которые могут быть определены в командной строке или в группах [mysql] и [client] файла опции. Для информации о файлах опции, используемых программами MySQL, см. раздел 5.2.6.

Таблица 5.8. Опции mysql

ФорматОписание
--auto-rehashВключить автоматическое рехэширование
--auto-vertical-outputВключить автоматический вертикальный вывод набора результатов
--batch Не использовать файл истории
--binary-modeВыключить трансляцию \r\n - to - \n и не рассматривать \0 как конец запроса
--bind-addressИспользовать определенный сетевой интерфейс, чтобы соединиться с MySQL Server
--character-sets-dirКаталог, где наборы символов установлены
--column-namesПисать имена столбцов в результатах
--column-type-infoВыведить на экран метаданные о наборе результатов
--comments Сохранить или убрать комментарии в запросах, посланных серверу
--compress Сжать всю информацию, посланную между клиентом и сервером
--connect-expired-passwordУказать серверу, что клиент может обработать режим песочницы для пароля с истекшим сроком
--connect_timeoutЧисло секунд перед тайм-аутом соединения
--database База данных, чтобы использовать
--debug Писать журнал отладки, поддержано только если MySQL был создан с поддержкой отладки
--debug-checkИнформация об отладке, когда программа завершена
--debug-info>Информация об отладке, памяти и статистика центрального процессора, когда программа завершена
--default-authПлагин аутентификации, чтобы использовать
--default-character-setОпределить набор символов по умолчанию
--defaults-extra-fileЧитать этот файл опций в дополнение к обычным файлам опций
--defaults-fileЧитать только этот файл опций
--defaults-group-suffixГрупповое значение суффикса опции
--delimiter Установить разделитель запросов
--enable-cleartext-plugin Включить плагин аутентификации открытого текста
--execute Выполнить запрос и выйти
--force Продолжить, даже если ошибка SQL происходит
--help Отобразить справку и выйти
--histignoreОбразцы, определяющие, которые запросы проигнорировать для регистрации
--host Соединиться с сервером MySQL на данном хосте
--html Вывод в формате HTML
--ignore-spacesПроигнорировать пробелы после имен функций
--init-commandЗапрос SQL, чтобы выполнить после соединения
--line-numbersНаписать номера строки для ошибок
--local-infileВключить или отключить LOCAL для LOAD DATA INFILE
--login-pathЧитать опции пути входа в систему из .mylogin.cnf
--max_allowed_packetМаксимальная пакетная длина, чтобы послать в или получить от сервера
--max_join_sizeАвтоматический предел для строк в соединении, используя --safe-updates
--named-commandsВключить названные команды mysql
--net_buffer_lengthРазмер буфера для TCP/IP и сокета
--no-auto-rehashВыключить автоматическое рехэширование
--no-beep Не сигналить, когда ошибки происходят
--no-defaultsНе читать файлы опции
--one-databaseПроигнорировать запросы кроме тех, которые для базы данных по умолчанию, названной в командной строке
--pager Используйте данную команду для вывода запроса оповещения
--password Пароль, чтобы использовать, соединяясь с сервером
--pipe В Windows использовать именованный канал
--plugin-dirКаталог, где плагины установлены
--port Номер порта TCP/IP, чтобы использовать для соединения
--print-defaultsНапечатайте опции по умолчанию
--prompt Установить подсказку в указанный формат
--protocol Протокол соединения, чтобы использовать
--quick Не кэшируовать каждый результат запроса
--raw Написать значения столбцов без преобразования escape
--reconnect Если соединение с сервером потеряно, автоматически попытаться повторно соединиться
--i-am-a-dummy, --safe-updatesПозволить только UPDATE и DELETE, которые определяют значения ключа
--secure-authНе посылать пароли серверу в старом формате (pre-4.1)
--select_limitАвтоматический предел для запросов SELECT, используя --safe-updates
--server-public-key-pathПуть к файлу, содержащему открытый ключ RSA
--shared-memory-base-nameНазвание совместно используемой памяти, чтобы использовать для соединений
--show-warningsПоказать предупреждения после каждого запроса, если есть
--sigint-ignoreПроигнорировать сигналы SIGINT (как правило, результат ввода Control+C)
--silent Тихий режим вывода
--skip-auto-rehashВыключить автоматическое рехэширование
--skip-column-namesНе писать имена столбцов в результатах
--skip-line-numbersПропустить номера строки для ошибок
--skip-named-commandsОтключить названные команды mysql
--skip-pager Отключить оповещение
--skip-reconnectОтключить пересоединение
--socket Для соединений с localhost файл сокета Unix
--ssl-ca Путь к файлу, который содержит список доверенных SSL CA
--ssl-capath Путь к каталогу, который содержит довереннные сертификаты SSL CA в формате PEM
--ssl-cert Путь к файлу, который содержит сертификат X509 в формате PEM
--ssl-cipher Список разрешенных шифров, чтобы использовать для шифрования соединения
--ssl-crl Путь к файлу, который содержит списки аннулирования сертификатов
--ssl-crlpath Путь к каталогу, который содержит файлы списка аннулирования сертификатов
--ssl-key Путь к файлу, который содержит ключ X509 в формате PEM
--ssl-mode Статус безопасности соединения с сервером
--syslog Зарегистрировать интерактивные запросы в syslog
--table Показать вывод в табличном формате
--tee Добавить копию вывода к названному файлу
--tls-versionПротоколы, разрешенные для безопасных соединений
--unbufferedСбросить буфер после каждого запроса
--user Имя пользователя MySQL, чтобы использовать, соединяясь с сервером
--verbose Подробный режим вывода
--version Отобразить версию и выйти
--vertical Запрос вывода строк вертикально (одна строка на значение столбца)
--wait Если соединение не может быть установлено, ждать и повторить вместо прерывания
--xml Вывод в формате XML

Вы можете также установить следующие переменные при использовании --var_name=value.

5.5.1.2. Команды mysql

mysql посылает каждый введенный запрос SQL серверу. Есть также ряд команд, которые интерпретирует сам mysql . Для списка этих команд надо ввести help или \h на подсказку mysql>:

mysql> help

List of all MySQL commands:
Note that all text commands must be first on line and end with ';'
? (\?)         Synonym for `help'.
clear (\c)     Clear the current input statement.
connect (\r)   Reconnect to the server. Optional arguments are db and host.
delimiter (\d) Set statement delimiter.
edit (\e)      Edit command with $EDITOR.
ego (\G)       Send command to mysql server, display result vertically.
exit (\q)      Exit mysql. Same as quit.
go (\g)        Send command to mysql server.
help (\h)      Display this help.
nopager (\n)   Disable pager, print to stdout.
notee (\t)     Don't write into outfile.
pager (\P)     Set PAGER [to_pager]. Print the query results via PAGER.
print (\p)     Print current command.
prompt (\R)    Change your mysql prompt.
quit (\q)      Quit mysql.
rehash (\#)    Rebuild completion hash.
source (\.)    Execute an SQL script file. Takes a file name as an argument.
status (\s)    Get status information from the server.
system (\!)    Execute a system shell command.
tee (\T)       Set outfile [to_outfile]. Append everything into given outfile.
use (\u)       Use another database. Takes database name as argument.
charset (\C)   Switch to another charset. Might be needed for processing
               binlog with multi-byte charsets.
warnings (\W)  Show warnings after every statement.
nowarning (\w) Don't show warnings after every statement.
resetconnection (\x) Clean session context.

For server side help, type 'help contents'
Если mysql вызван с опцией --binary-mode, все команды mysql отключены, кроме charset и delimiter в неинтерактивном режиме (для ввода, переданного по каналу mysql или загруженному использованием команды source).

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

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

Вот несколько подсказок о команде pager:

Вы можете также объединить функции tee и pager. Имейте включенный файл tee и установите pager в less, теперь Вы в состоянии просмотреть результаты, используя less и все еще добавите все в файл в то же самое время. Различие между Unix tee, используемый с pager и встроенной в mysql командой tee состоит в том, что встроенная tee работает, даже если Вы не имеете доступа к Unix tee. Встроенная tee также журналирует все, что напечатано на экране, тогда как Unix tee с pager не регистрирует так много. Дополнительно журналирование файла tee может быть включено в интерактивном режиме изнутри mysql. Это полезно, когда Вы хотите зарегистрировать некоторые запросы к файлу, но не другие.

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

ОпцияОписание
\C Текущий идентификатор соединения
\cСчетчик, который постепенно увеличивается для каждого запроса, который Вы делаете
\DПолная текущая дата
\dБаза данных по умолчанию
\hХост сервера
\lТекущий разделитель
\mМинуты текущего времени
\nСимвол перевода строки
\OТекущий месяц в трехбуквенном формате (Jan, Feb, ...)
\oТекущий месяц в числовом формате
\Pam/pm
\pТекущий порт TCP/IP или файл сокета
\R Текущее время в 24-часовом формате (0-23)
\r Текущее время, стандартный 12-часовой формат (1-12)
\SТочка с запятой
\sСекунды текущего времени
\tСимвол табуляции
\U

Ваше полное user_name@host_name для учетной записи

\uВаше имя пользователя
\vВерсия сервера
\wТекущий день недели в трехбуквенном формате (Mon, Tue, ...)
\YТекущий год, четыре цифры
\yТекущий год, две цифры
\_Пробел
\ Пробел (следует за наклонной чертой влево)
\'Одинарная кавычка
\"Двойная кавычка
\\Символ \
\x

x, для любого не упомянутого выше x

Вы можете установить подсказку несколькими способами:

5.5.1.3. Журналирование mysql

mysql может делать эти типы журналирования для запросов, выполненных в интерактивном режиме:

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

Как журналирование происходит

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

Следовательно, входной запрос, который охватывает многократные строки, может быть зарегистрирован дважды. Рассмотрите этот ввод:

mysql> SELECT
    -> 'Today is'
    -> ,
    -> CURDATE()
    -> ;
В этом случае mysql пишет SELECT, 'Today is' , ,, CURDATE() и ; строки пока читает их. Это также регистрирует полный запрос после отображения SELECT\n'Today is'\n,\nCURDATE() на SELECT 'Today is' , CURDATE() плюс разделитель. Таким образом, эти строки появляются в зарегистрированном выводе:
SELECT
'Today is'
,
CURDATE()
;
SELECT 'Today is' , CURDATE();
mysql игнорирует регистрацию запросов, которые соответствуют любому образцу в списке ignore. По умолчанию список образцов "*IDENTIFIED*:*PASSWORD*", чтобы проигнорировать запросы, которые относятся к паролям. Соответствующий образец не является чувствительным к регистру. В пределах образцов два символа являются особенными:

Чтобы определить дополнительные образцы, используйте опцию --histignore или задайте переменную окружения MYSQL_HISTIGNORE. Если оба варианта определены, значение опции имеет приоритет. Значение должно быть отделенным двоеточиями списком из одного или более образцов, которые добавлены к списку образца по умолчанию.

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

shell> mysql --histignore="*UPDATE*:*DELETE*"
Управление файлом истории

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

Если Вы не хотите поддерживать файл истории, сначала удалите .mysql_history, если есть. Затем используйте любой из следующих методов, чтобы препятствовать тому, чтобы это было создано снова:

Журналирование характеристик syslog

Если дана опция --syslog, mysql пишет интерактивные запросы системному средству журналирования. У журналирования сообщения есть следующие характеристики.

Журналирование происходит в уровень information. Это соответствует приоритету LOG_INFO для syslog в Unix/Linux syslog и EVENTLOG_INFORMATION_TYPE для Windows Event Log.

Размер сообщения ограничен 1024 байтами.

Сообщения состоят из идентификатора MysqlClient сопровождаемого этими значениями:

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

Mar  7 12:39:25 myhost MysqlClient[20824]:
  SYSTEM_USER:'oscar', MYSQL_USER:'my_oscar', CONNECTION_ID:23,
  DB_SERVER:'127.0.0.1', DB:'--', QUERY:'USE test;'
Mar  7 12:39:28 myhost MysqlClient[20824]:
  SYSTEM_USER:'oscar', MYSQL_USER:'my_oscar', CONNECTION_ID:23,
  DB_SERVER:'127.0.0.1', DB:'test', QUERY:'SHOW TABLES;'

5.5.1.4. Справка сервера mysql

mysql> help search_string
Если Вы обеспечиваете параметр help, mysql использует это в качестве строки поиска, чтобы получить доступ к серверной справке MySQL Reference Manual. Правильное функционирование этой команды требует, чтобы таблицы справки в базе данных mysql были инициализированы с информацией о теме справки (см. раздел 6.1.10).

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

mysql> help me

Nothing found
Please try to run 'help contents' for a list of all accessible topics
Используйте help contents , чтобы видеть список категорий справки:
mysql> help contents
You asked for help about help category: "Contents"
For more information, type 'help <item>', where <item> is one of the
following categories:
   Account Management
   Administration
   Data Definition
   Data Manipulation
   Data Types
   Functions
   Functions and Modifiers for Use with GROUP BY
   Geographic Features
   Language Structure
   Plugins
   Storage Engines
   Stored Routines
   Table Maintenance
   Transactions
   Triggers
Если строка поиска соответствует многим элементам, mysql показывает список соответствия тем:
mysql> help logs
Many help items for your request exist.
To make a more specific request, please type 'help <item>',
where <item> is one of the following topics:
   SHOW
   SHOW BINARY LOGS
   SHOW ENGINE
   SHOW LOGS
Используйте тему в качестве строки поиска, чтобы видеть элемент справки для той темы:
mysql> help show binary logs
Name: 'SHOW BINARY LOGS'
Description:
Syntax:
SHOW BINARY LOGS
SHOW MASTER LOGS

Lists the binary log files on the server. This statement is used as
part of the procedure described in [purge-binary-logs], that shows how
to determine which logs can be purged.

mysql> SHOW BINARY LOGS;
+---------------+-----------+
| Log_name      | File_size |
+---------------+-----------+
| binlog.000015 | 724935    |
| binlog.000016 | 733481    |
+---------------+-----------+
Строка поиска может содержать подстановочные символы % и _. У них есть то же самое значение, что касается соответствия образцу операций, выполненных с LIKE. Например, HELP rep% возвращает список тем, которые начинаются с rep:
mysql> HELP rep%
Many help items for your request exist.
To make a more specific request, please type 'help <item>',
where <item> is one of the following
topics:
   REPAIR TABLE
   REPEAT FUNCTION
   REPEAT LOOP
   REPLACE
   REPLACE FUNCTION

5.5.1.5. Выполнение запросов SQL из текстового файла

mysql, как правило, используется в интерактивном режиме:

shell> mysql db_name
Однако, также возможно поместить Ваши запросы SQL в файл и затем велеть mysql читать свой ввод из того файла. Чтобы сделать так, создайте текстовый файл text_file, который содержит запросы, которые Вы хотите выполнить. Тогда вызовите mysql :
shell> mysql db_name < text_file
Если Вы помещаете USE db_name как первый запрос в файле, не нужно определить имя базы данных в командной строке:
shell> mysql < text_file
Если Вы уже выполняете mysql , Вы можете выполнить файл скрипта SQL, используя команду source или \.:
mysql> source file_name
mysql> \. file_name
Иногда Вы можете хотеть, чтобы Ваш скрипт вывел на экран информацию о работе. Для этого Вы можете вставить запросы так:
SELECT '<info_to_display>' AS ' ';
Этот запрос выведет <info_to_display>.

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

mysql игнорирует символы Unicode byte order mark (BOM) в начале входных файлов. Ранеео он считал их и посылал в сервер, приводя к синтаксической ошибке. Присутствие BOM не заставляет mysql изменять свой набор символов по умолчанию. Чтобы сделать это, вызовите mysql с опцией --default-character-set=utf8.

См. раздел 4.5.

5.5.1.6. Подсказки по mysql

Этот раздел описывает некоторые методы, которые могут помочь Вам использовать mysql .

5.5.1.6.1. Редактирование входной строки

mysql поддерживает редактирование входной строки, которое позволяет Вам изменить текущую входную строку или вспомнить предыдущие входные строки. Например, left-arrow и right-arrow перемещают курсор горизонтально в пределах текущей входной строки, а up-arrow и down-arrow вверх и вниз через набор ранее вводимых строк. Backspace удаляет символ перед курсором, ввод новых символов вводит их в позиции курсора. Чтобы ввести строку, нажмите Enter.

В Windows последовательности клавиш для редактирования те же самые, как поддержано для редактирования команды в консолях. В Unix сочетания клавиш зависят от входной библиотеки, использовавшейся, чтобы создать mysql (например, libedit или readline).

Документация для libedit и readline доступны онлайн. Чтобы изменить набор сочетаний клавиш, разрешенных данной входной библиотекой, определите привязки клавиш в файле запуска библиотеки. Это файл в Вашем корневом каталоге: .editrc для libedit и .inputrc для readline.

Например, в libedit Control+W удаляет все перед текущей позицией курсора и Control+U удаляет всю строку. В readline Control+W удаляет слово перед курсором и Control+U удаляет все перед текущей позицией курсора. Если mysql был создан, используя libedit, пользователь, который предпочитает readline для этих двух клавиш может вставить следующие строки в свой файл .editrc:

bind "^W" ed-delete-prev-word
bind "^U" vi-kill-line-prev
Чтобы видеть текущий набор привязок клавиш, временно поместите строку, которая говорит только bind в конце .editrc. mysql покажет привязку, когда он запустится.

5.5.1.6.2. Поддержка Unicode в Windows

Windows обеспечивает API на основе UTF-16LEдля того, чтобы читать из и писать в консоль, клиент mysql для Windows в состоянии использовать эти API. Установщик Windows создает элемент в меню MySQL под именем MySQL command line client - Unicode. Этот элемент вызывает mysql с набором свойств, чтобы сообщить через консоль серверу, что надо применить Unicode.

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

  1. Откройте окно консоли.

  2. Перейдите в свойства консоли, выберите вкладку шрифта и выберите Lucida Console или некоторый другой совместимый шрифт Unicode. Это необходимо, потому что консоли запускаются по умолчанию, используя растровый шрифт DOS, который является несоответствующим для Unicode.
  3. Выполните mysql.exe с опцией --default-character-set=utf8 (или utf8mb4). Эта опция необходима потому, что utf16le не поддержан как набор символов соединения.

С этими изменениями mysql будет использовать Windows API, чтобы общаться с консолью, используя UTF-16LE и с сервером, используя UTF-8. Пункт меню, упомянутый ранее, устанавливает набор шрифтов и набор символов как только что описано.

Чтобы избежать этих шагов каждый раз, когда Вы выполняете mysql, Вы можете создать ярлык, который вызывает mysql.exe. Ярлык должен установить шрифт консоли в Lucida Console или некоторый другой совместимый шрифт Unicode и передать опцию --default-character-set=utf8 (или utf8mb4) mysql.exe.

Альтернативно, создайте ярлык, который только устанавливает шрифт и установите набор символов в группе [mysql] файла my.ini :

[mysql]
default-character-set=utf8
5.5.1.6.3. Отображение результатов запроса вертикально

Некоторые результаты запроса намного больше читаемы, когда выведены на экран вертикально, а не в обычном горизонтальном формате таблицы. Запросы могут быть выведены на экран вертикально, заканчивая запрос с \G вместо точки с запятой. Например, более длинные текстовые значения, которые включают новые строки, намного легче считать с вертикальным выводом:

mysql> SELECT * FROM mails WHERE LENGTH(txt) < 300 LIMIT 300,1\G
*************************** 1. row ***************************
  msg_nro: 3068
 date: 2000-03-01 23:29:50
time_zone: +0200
mail_from: Monty
reply: monty@no.spam.com
  mail_to: "Thimble Smith" <tim@no.spam.com>
sbj: UTF-8
txt: >>>>> "Thimble" == Thimble Smith writes:

Thimble> Hi.  I think this is a good idea.  Is anyone familiar
Thimble> with UTF-8 or Unicode? Otherwise, I'll put this on my
Thimble> TODO list and see what happens.

Yes, please do that.

Regards,
Monty
 file: inbox-jani-1
 hash: 190402944
1 row in set (0.09 sec)
5.5.1.6.4. Использование опции --safe-updates

Для новичков полезная опция запуска --safe-updates (или --i-am-a-dummy). Полезно для случаев, когда Вы, возможно, скомандовали DELETE FROM tbl_name, но забыли про WHERE. Обычно такой запрос удаляет все строки из таблицы, что очень полезно в целях обучения. С --safe-updates Вы можете удалить строки только определяя значения ключа, которые идентифицируют их. Это помогает предотвратить несчастные случаи.

Когда Вы используете --safe-updates, mysql делает следующий запрос, когда соединяется с сервером MySQL:

SET sql_safe_updates=1, sql_select_limit=1000, max_join_size=1000000;
См. раздел 6.1.5.

SET имеет следующие эффекты:

Чтобы определить пределы, отличающиеся от 1000 и 1000000, Вы можете переопределить значения по умолчанию при использовании опций --select_limit и --max_join_size:

shell> mysql --safe-updates --select_limit=500 --max_join_size=10000
5.5.1.6.5. Отключение mysql реконнекта

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

mysql> SET @a=1;
Query OK, 0 rows affected (0.05 sec)

mysql> INSERT INTO t VALUES(@a);
ERROR 2006: MySQL server has gone away
No connection. Trying to reconnect...
Connection id:1
Current database: test

Query OK, 1 row affected (1.30 sec)

mysql> SELECT * FROM t;
+------+
| a    |
+------+
| NULL |
+------+
1 row in set (0.05 sec)
Переменная @a была потеряна с соединением и после пересоединения это неопределено. Если важно иметь mysql прерванный с ошибкой, если соединение было потеряно, Вы можете запустить клиент mysql с опцией --skip-reconnect .

См. раздел 25.8.16.

5.5.2. mysqladmin Клиент для управления сервером MySQL

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

Вызов mysqladmin :

shell> mysqladmin [options] command
                     [command-arg]
                     [command
                     [command-arg]] ...
mysqladmin поддерживает следующие команды. Некоторые из команд берут параметр после названия команды.

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

shell> mysqladmin proc stat
+----+-------+-----------+----+---------+------+-------+------------------+
| Id | User  | Host      | db | Command | Time | State | Info             |
+----+-------+-----------+----+---------+------+-------+------------------+
| 51 | monty | localhost |    | Query   |    0 |       | show processlist |
+----+-------+-----------+----+---------+------+-------+------------------+
Uptime: 1473624  Threads: 1  Questions: 39487
Slow queries: 0  Opens: 541  Flush tables: 1
Open tables: 19  Queries per second avg: 0.0268

mysqladmin status выводит на экран следующие значения:

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

mysqladmin поддерживает следующие опции, которые могут быть определены в командной строке или в группах [mysqladmin] и [client] файла опции. Для информации о файлах опции, используемых программами MySQL, см. раздел 5.2.6.

Таблица 5.9. Опции mysqladmin

ФорматОписание
--bind-addressИспользуйте определенный сетевой интерфейс, чтобы соединиться с MySQL Server
--compressСжать всю информацию, посланную между клиентом и сервером
--connect_timeoutЧисло секунд перед тайм-аутом соединения
--count Число итераций повторного выполнения команды
--debug Писать журнал отладки
--debug-checkИнформация об отладке, когда программа выходит
--debug-infoИнформация об отладке, памяти и статистика центрального процессора, когда программа выходит
--default-authПлагин аутентификации, чтобы использовать
--default-character-setОпределите набор символов по умолчанию
--defaults-extra-fileЧитать этот файл опции в дополнение к обычным файлам опции
--defaults-fileЧитать только этот файл опции
--defaults-group-suffixГрупповое значение суффикса опции
--enable-cleartext-plugin Включить плагин аутентификации открытого текста
--force Продолжить, даже если ошибка SQL происходит
--help Отобразить сообщение справки
--host Соединитесь с сервером MySQL на данном хосте
--login-pathЧитать опции пути входа в систему из .mylogin.cnf
--no-beepНе пищать при ошибке
--no-defaultsНе читать файлы опции
--passwordПароль, чтобы использовать, соединяясь с сервером
--pipe В Windows соединитесь с сервером, используя именованный канал
--plugin-dirКаталог, где плагины установлены
--port Номер порта TCP/IP, чтобы использовать для соединения
--print-defaultsНапечатать опции по умолчанию
--protocolПротокол соединения, чтобы использовать
--relativeПоказать различие между текущими и предыдущими значениями, когда используется с опцией --sleep
--secure-authНе посылайте пароли серверу в старом формате (pre-4.1)
--shared-memory-base-nameНазвание совместно используемой памяти, чтобы использовать для соединений совместно используемой памяти
--show-warningsПокажите предупреждения после выполнения запроса
--shutdown_timeoutМаксимальное количество секунд, которое ждать завершения работы сервера
--silent Тихий режим
--sleep Выполнить команды неоднократно, между циклами спать
--socket Для соединений с localhost файл сокета Unix
--ssl-ca Путь к файлу, который содержит список доверенных SSL CA
--ssl-capath Путь к каталогу, который содержит доверенные сертификаты SSL CA в формате PEM
--ssl-cert Путь к файлу, который содержит сертификат X509 в формате PEM
--ssl-cipher Список разрешенных шифров, чтобы использовать для шифрования соединения
--ssl-crl Путь к файлу, который содержит списки аннулирования сертификатов
--ssl-crlpathПуть к каталогу, который содержит файлы списка аннулирования сертификатов
--ssl-key Путь к файлу, который содержит ключ X509 в формате PEM
--ssl-mode Статус безопасности соединения с сервером
--tls-versionПротоколы, разрешенные для безопасных соединений
--user Имя пользователя MySQL, чтобы использовать, соединяясь с сервером
--verboseПодробный режим
--versionОтобразить информацию о версии
--verticalЗапрос выводит строки вертикально (одна строка на значение столбца)
--wait Если соединение не может быть установлено, ждать и повторить вместо прерывания

Вы можете также установить следующие переменные при использовании --var_name=value.

5.5.3. mysqlcheck табличная программа обслуживания

mysqlcheck выполняет табличное обслуживание: это проверяет, восстанавливает, оптимизирует или анализирует таблицы.

Каждая таблица заблокирована и поэтому недоступна другим сеансам в то время, как она обрабатывается, хотя для операций проверки таблица заблокирована только с блокировкой READ (см. раздел 14.3.5). Табличные операции обслуживания могут быть отнимающими много времени, особенно для больших таблиц. Если Вы используете опцию --databases или --all-databases, чтобы обработать все таблицы в одной или более базах данных, вызов mysqlcheck может занять много времени. Это также истина для mysql_upgrade , потому что эта программа вызывает mysqlcheck , чтобы проверить все таблицы и восстановить их в случае необходимости.

mysqlcheck подобен в функциональности myisamchk, но работает по-другому. Основное операционное различие в том, что mysqlcheck должен использоваться, когда mysqld работает, тогда как myisamchk должен использоваться, когда это не так. Выгода от использования mysqlcheck в том, что Вы не должны остановить сервер, чтобы выполнить табличное обслуживание.

mysqlcheck использует запросы SQL CHECK TABLE, REPAIR TABLE, ANALYZE TABLE и OPTIMIZE TABLE удобным для пользователя способом. Это определяет, какие запросы использовать Вы хотите выполнить, а затем посылает запросы серверу, который будет их выполнять. Для деталей о механизмах хранения см. описания этих запросов в разделе 14.7.2.

Механизм хранения MyISAM поддерживает все четыре операции обслуживания, таким образом mysqlcheck может использоваться, чтобы выполнить любую из них на таблицах MyISAM. Другие механизмы хранения не обязательно поддерживают все операции. В таких случаях на экран будет выведено сообщение об ошибке. Например, если test.t является таблицей типа MEMORY, попытка проверить это приводит к этому результату:

shell> mysqlcheck test t
test.t
note: The storage engine for the table doesn't support check
Если mysqlcheck не способен восстановить таблицу, см. раздел 2.10.4. Это будет иметь место, например, для таблиц InnoDB, которые можно проверить CHECK TABLE , но не починить их REPAIR TABLE.

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

Есть три общих способа вызвать mysqlcheck :

shell> mysqlcheck [options] db_name
                     [tbl_name ...]
shell> mysqlcheck [options] --databases db_name ...
shell> mysqlcheck [options] --all-databases
Если Вы не называете таблиц после db_name или если Вы используете --databases или --all-databases , все базы данных проверены.

У mysqlcheck есть специальная функция по сравнению с другими программами клиента. Поведение значения по умолчанию проверки таблиц (--check) может быть изменено, переименовывая исполняемый модуль. Если Вы хотите иметь инструмент, который восстанавливает таблицы по умолчанию, Вы должны только сделать копию mysqlcheck под именем mysqlrepair или сделать символическую ссылку к mysqlcheck под именем mysqlrepair. Если Вы вызываете mysqlrepair, это восстанавливает таблицы.

Имена, показанные в следующей таблице, могут использоваться, чтобы изменить логику действий mysqlcheck.

КомандаСмысл
mysqlrepair Опция по умолчанию --repair
mysqlanalyze Опция по умолчанию --analyze
mysqloptimize Опция по умолчанию --optimize

mysqlcheck поддерживает следующие опции, которые могут быть определены в командной строке или в группах [mysqlcheck] и [client] файла опции. Для информации о файлах опции, используемых программами MySQL, см. раздел 5.2.6.

Таблица 5.10. Опции mysqlcheck

ФорматОписание
--all-databasesПроверить все таблицы во всех базах данных
--all-in-1Выполнить единственный запрос для каждой базы данных, который называет все таблицы этой базы данных
--analyzeПроанализируйте таблицы
--auto-repairЕсли проверенная таблица повреждена, автоматически восстановить
--bind-addressИспользуйте определенный сетевой интерфейс, чтобы соединиться с MySQL Server
--character-sets-dirКаталог, где наборы символов установлены
--check Проверьте таблицы на ошибки
--check-only-changedПроверка только таблиц, которые изменились, начиная с последней проверки
--check-upgradeВызовите CHECK TABLE с опцией FOR UPGRADE
--compressСжать всю информацию, посланную между клиентом и сервером
--databasesИнтерпретируйте все параметры как имена базы данных
--debug Писать журнал отладки
--debug-checkИнформация об отладке, когда программа выходит
--debug-infoИнформация об отладке, памяти и статистика центрального процессора, когда программа выходит
--default-authПлагин аутентификации, чтобы использовать
--default-character-setОпределите набор символов по умолчанию
--defaults-extra-fileЧитать этот файл опции в дополнение к обычным файлам опции
--defaults-fileЧитать только этот файл опции
--defaults-group-suffixГрупповое значение суффикса опции
--enable-cleartext-plugin Включить плагин аутентификации открытого текста
--extendedПроверьте и восстановите таблицы
--fast Проверка только таблиц, которые не были закрыты должным образом
--force Продолжите, даже если ошибка SQL происходит
--help Отобразить справку и выйти
--host Соединитесь с сервером MySQL на данном хосте
--login-pathЧитать опции пути входа в систему из .mylogin.cnf
--medium-checkСделайте проверку, которая быстрее, чем --extended
--no-defaultsНе читать файлы опции
--optimizeОптимизируйте таблицы
--passwordПароль, чтобы использовать, соединяясь с сервером
--pipe В Windows соединитесь с сервером, используя именованный канал
--plugin-dirКаталог, где плагины установлены
--port Номер порта TCP/IP, чтобы использовать для соединения
--print-defaultsНапечатайте опции по умолчанию
--protocolПротокол соединения, чтобы использовать
--quick Самый быстрый метод проверки
--repair Выполните ремонт, который может восстановить почти все, кроме уникальных ключей, которые не уникальны
--secure-authНе посылайте пароли серверу в старом формате (pre-4.1)
--shared-memory-base-nameНазвание совместно используемой памяти, чтобы использовать для соединений совместно используемой памяти
--silent Тихий режим
--skip-databaseПропустите эту базу данных в выполняемых операциях
--socket Для соединений с localhost, файл сокета Unix
--ssl-ca Путь к файлу, который содержит список доверенных SSL CA
--ssl-capath Путь к каталогу, который содержит доверенные сертиифкаты SSL CA в формате PEM
--ssl-cert Путь к файлу, который содержит сертификат X509 в формате PEM
--ssl-cipher Список разрешенных шифров, чтобы использовать для шифрования соединения
--ssl-crl Путь к файлу, который содержит списки аннулирования сертификатов
--ssl-crlpathПуть к каталогу, который содержит файлы списка аннулирования сертификатов
--ssl-key Путь к файлу, который содержит ключ X509 в формате PEM
--ssl-mode Статус безопасности соединения с сервером
--tables Переопределение опции --databases или -B
--tls-versionПротоколы, разрешенные для безопасных соединений
--use-frmДля операций ремонта на таблицах MyISAM
--user Имя пользователя MySQL, чтобы использовать, соединяясь с сервером
--verboseПодробный режим
--versionИнформация о версии и выход
--write-binlogЖурналировать запросы ANALYZE, OPTIMIZE, REPAIR в двоичный журнал. --skip-write-binlog добавляет NO_WRITE_TO_BINLOG к этим запросам.

5.5.4. mysqldump Резервная программа базы данных

mysqldump выполняет логические резервные копии, производя ряд запросов SQL, которые могут быть выполнены, чтобы воспроизвести оригинальные определения объекта базы данных и табличные данные. Это выводит одну или более баз данных MySQL для резервного копирования или передачи в другой SQL-сервер. mysqldump может также произвести вывод в CSV, другом разграниченном тексте или формате XML.

mysqldump требует, по крайней мере, привилегию SELECT для выводимых таблиц, SHOW VIEW для вывода представлений, TRIGGER для резервирования триггеров и LOCK TABLES, если не используется опция --single-transaction. Определенные опции могли бы потребовать других привилегий как отмечено в описаниях опции.

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

Вывод mysqldump может включать запросы ALTER DATABASE, которые изменяют сопоставление базы данных. Они могут использоваться, когда дамп сохранил кодировки символов. Чтобы перезагружать файл дампа, содержащий такие запросы, нужна привилегия ALTER для затронутой базы данных.

Дамп, сделанный, используя PowerShell в Windows с выходным перенаправлением, создает файл, у которого есть кодирование UTF-16:

shell> mysqldump [options] > dump.sql
Но UTF-16 не разрешен как набор символов соединения (см. раздел 11.1.4), таким образом, файл дампа не будет загружаться правильно. Чтобы обойти эту проблему, используйте опцию --result-file, которая создает вывод в формате ASCII:
shell> mysqldump [options] --result-file=dump.sql

Работа и соображения масштабируемости

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

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

mysqldump может получить и вывести табличное содержание построчно или это может получить весь контент таблицы и буферизовать его в памяти прежде, чем вывести. Буферизация в памяти может быть проблемой, если Вы выводите большие таблицы. Чтобы вывести таблицу построчно, используйте опцию --quick (или --opt, которая включает --quick ). Опция --opt --quick ) включена по умолчанию, так что, чтобы включить буферизацию в памяти, надо использовать --skip-quick.

Если Вы используете недавнюю версию mysqldump, чтобы произвести дамп, который будет перезагружен в очень старый сервер MySQL, используйте --skip-opt вместо --opt или --extended-insert.

См. раздел 8.4.

Синтаксис вызова

Есть общие способы использовать mysqldump, чтобы вывести одну или большее количество таблиц, одну или более полных баз данных или весь сервер MySQL, как показано здесь:

shell> mysqldump [options] db_name
                    [tbl_name ...]
shell> mysqldump [options] --databases
                    db_name ...
shell> mysqldump [options] --all-databases
Чтобы вывести все базы данных, не называйте таблицы после db_name или используйте опции --databases или --all-databases.

Чтобы видеть список опций, введите mysqldump --help .

Синтаксис опций, алфавитное резюме

mysqldump поддерживает следующие опции, которые могут быть определены в командной строке или в группах [mysqldump] и [client] файла опции. Для информации о файлах опции, используемых программами MySQL, см. раздел 5.2.6.

Таблица 5.11. Опции mysqldump

ФорматОписание
--add-drop-databaseДобавить DROP DATABASE перед каждым CREATE DATABASE
--add-drop-tableДобавить DROP TABLE перед каждым CREATE TABLE
--add-drop-triggerДобавить DROP TRIGGER перед каждым CREATE TRIGGER
--add-locks Окружите каждый табличный дамп LOCK TABLES и UNLOCK TABLES
--all-databasesВыведите все таблицы во всех базах данных
--allow-keywordsПозвольте создание имен столбцов, которые являются ключевыми словами
--apply-slave-statementsВключить STOP SLAVE перед CHANGE MASTER и START SLAVE в конце вывода
--bind-addressИспользуйте определенный сетевой интерфейс, чтобы соединиться с MySQL Server
--character-sets-dirКаталог, где наборы символов установлены
--commentsДобавьте комментарии, чтобы вывести файл
--compactПроизведите более компактный вывод
--compatibleПроизведите вывод, который более совместим с другими системами базы данных или с более старыми серверами MySQL
--complete-insertИспользуйте полные запросы INSERT, которые включают имена столбцов
--compressСжать всю информацию, посланную между клиентом и сервером
--create-optionsВключайте все MySQL-специфичные табличные опции в CREATE TABLE
--databasesИнтерпретируйте все параметры имени как имена базы данных
--debugПисать журнал отладки
--debug-checkИнформация об отладке, когда программа выходит
--debug-infoИнформация об отладке, памяти и статистика центрального процессора, когда программа выходит
--default-authПлагин аутентификации, чтобы использовать
--default-character-setОпределите набор символов по умолчанию
--defaults-extra-fileЧитать этот файл опции в дополнение к обычным файлам опции
--defaults-fileЧитать только этот файл опции
--defaults-group-suffixГрупповое значение суффикса опции
--delete-master-logsНа основном сервере репликации удалите двоичные журналы после выполнения работы дампа
--disable-keysДля каждой таблицы окружите запросы INSERT запросами, чтобы отключить и включить ключи
--dump-dateВключайте дату дампа как комменитарий "Dump completed on", если есть опция --comments
--dump-slaveВключить CHANGE MASTER, который перечисляет координаты в двоичном журнале ведущего устройства
--enable-cleartext-plugin Включите плагин аутентификации открытого текста
--eventsСобытия дампа от выведенных баз данных
--extended-insertМногострочный формат INSERT
--fields-enclosed-byОпция используется с --tab и имеет то же самое значение как соответствующий пункт для LOAD DATA INFILE
--fields-escaped-byОпция используется с --tab и имеет то же самое значение как соответствующий пункт для LOAD DATA INFILE
--fields-optionally-enclosed-by Опция используется с --tab и имеет то же самое значение как соответствующий пункт для LOAD DATA INFILE
--fields-terminated-byОпция используется с --tab и имеет то же самое значение как соответствующий пункт для LOAD DATA INFILE
--flush-logsСбросить файлы системного журнала сервера MySQL перед дампом
--flush-privilegesЗапрос FLUSH PRIVILEGES после дампа базы данных mysql
--forceПродолжите, даже если ошибка SQL происходит во время табличного дампа
--helpОтобразить справочное сообщение
--hex-blobВыведите двоичные столбцы, используя шестнадцатеричное представление
--hostХост, чтобы соединиться (IP-адрес или имя)
--ignore-errorПроигнорируйте определенные ошибки
--ignore-tableНе выводите данную таблицу
--include-master-host-portВключить MASTER_HOST/MASTER_PORT в CHANGE MASTER с --dump-slave
--insert-ignoreПисать INSERT IGNORE вместо INSERT
--lines-terminated-byОпция используется с --tab и имеет то же самое значение как соответствующий пункт для LOAD DATA INFILE
--lock-all-tablesЗаблокируйте все таблицы и все базы данных
--lock-tablesЗаблокируйте все таблицы прежде, чем вывести их
--log-errorДобавить предупреждения и ошибки к названному файлу
--login-pathЧитать опции пути входа в систему из .mylogin.cnf
--master-dataНапишите имя файла системного журнала и позицию в нем в дамп
--max_allowed_packetМаксимальная пакетная длина, чтобы послать в или получить от сервера
--net_buffer_lengthРазмер буфера для TCP/IP и коммуникации сокета
--no-autocommitДобавить запросы INSERT для каждой выведенной таблицы в пределах SET autocommit = 0 и COMMIT
--no-create-dbНе писать CREATE DATABASE
--no-create-infoНе писать CREATE TABLE, которые обновляют каждую выведенную таблицу
--no-dataНе выводите табличное содержание
--no-defaultsНе читайте файлы опции
--no-set-namesАналог --skip-set-charset
--no-tablespacesНе писать CREATE LOGFILE GROUP или CREATE TABLESPACE в вывод
--opt Сокращение для --add-drop-table --add-locks --create-options --disable-keys --extended-insert --lock-tables --quick --set-charset
--order-by-primaryВыведите строки каждой таблицы, сортированные ее первичным ключом, или ее первым уникальным индексом
--passwordПароль, чтобы использовать, соединяясь с сервером
--pipeВ Windows соединитесь с сервером, используя именованный канал
--plugin-dirКаталог, где плагины установлены
--portНомер порта TCP/IP для соединения
--print-defaultsНапечатайте опции по умолчанию
--protocolПротокол соединения, чтобы использовать
--quick Получите строки для таблицы от сервера поштучно
--quote-namesИдентификаторы кавычки в пределах символов обратной кавычки
--replaceПисать REPLACE вместо INSERT
--result-fileПрямой вывод к данному файлу
--routinesВыведите сохраненные подпрограммы (процедуры и функции) от выведенных баз данных
--secure-authНе посылайте пароли в сервер в старом формате (pre-4.1)
--set-charsetДобавьте SET NAMES default_character_set в вывод
--set-gtid-purgedДобавить ли SET @@GLOBAL.GTID_PURGED в вывод
--shared-memory-base-nameНазвание совместно используемой памяти, чтобы использовать для соединений совместно используемой памяти
--single-transactionBEGIN прежде, чем вывести данные
--skip-add-drop-tableНе добавлять DROP TABLE перед каждым CREATE TABLE
--skip-add-locksНе добавляйте блокировки
--skip-commentsНе добавляйте комментарии
--skip-compactНе производите более компактный вывод
--skip-disable-keysНе отключайте ключи
--skip-extended-insertВыключите расширенный insert
--skip-optВыключите опции, установленные --opt
--skip-quickНе получайте строки для таблицы от сервера поштучно
--skip-quote-namesНе заключайте идентификаторы в кавычки
--skip-set-charsetНе писать SET NAMES
--skip-triggersНе выводить триггеры
--skip-tz-utcВыключить tz-utc
--socketДля соединений с localhost файл сокета Unix
--ssl-caПуть к файлу, который содержит список доверенных SSL CA
--ssl-capathПуть к каталогу, который содержит доверенные сертификаты SSL CA в формате PEM
--ssl-certПуть к файлу, который содержит сертификат X509 в формате PEM
--ssl-cipherСписок разрешенных шифров, чтобы использовать для шифрования соединения
--ssl-crlПуть к файлу, который содержит списки аннулирования сертификатов
--ssl-crlpathПуть к каталогу, который содержит файлы списка аннулирования сертификатов
--ssl-keyПуть к файлу, который содержит ключ X509 в формате PEM
--ssl-modeСтатус безопасности соединения с сервером
--tabПроизведите отделенные табуляциями файлы с данными
--tablesПерекрыть --databases или -B
--tls-versionПротоколы для безопасных соединений
--triggersДамп триггеров для каждой выведенной таблицы
--tz-utcДобавить SET TIME_ZONE='+00:00' в дамп
--userИмя пользователя MySQL, чтобы использовать, соединяясь с сервером
--verboseПодробный режим
--versionИнформация о версии
--whereВыведите только строки, выбранные данным условием WHERE
--xmlВывод в формате XML

Опции соединения

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

Вы можете также установить следующие переменные при использовании --var_name=value:

Опции файла опций

Эти опции используются, чтобы управлять, который файл опции читать.

Опции DDL

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

Опции отладки

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

Справочные опции

Следующие опции выводят на экран информацию о mysqldump.

Опции интернационализации

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

Опции репликации

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

Опции формата

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

Фильтрация опций

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

Исполнительные опции

Следующие опции являются самыми важными для исполнения, особенно операций восстановления. Для больших наборов данных, восстановление (обработка INSERT в файле дампа), самая отнимающая много времени часть. Когда не срочно восстановить данные быстро, стоит запланировать и проверить исполнение этого этапа заранее. В случае времен восстановления, измеренных в часах, Вы могли бы предпочесть альтернативное резервное копирование и восстановление, такое как MySQL Enterprise Backup для InnoDB и смешанных баз данных.

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

Опции транзакций

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

Группы опций

Когда Вы выборочно включаете или отключаете эффект групповой опции, порядок важен, потому что опции обработаны по порядку. Например, --disable-keys --lock-tables --skip-opt не имело бы намеченного эффекта, это то же самое, как отдельно --skip-opt.

Примеры

Сделать резервное копирование всей базы данных:

shell> mysqldump db_name > em>backup-file.sql
Загрузить файл дампа назад в сервер:
shell> mysql db_name < backup-file.sql
Другой способ перезагрузить файл дампа:
shell> mysql -e "source /path-to-backup/backup-file.sql" db_name
mysqldump также очень полезен для заполнения баз данных, копируя данные от одного сервера MySQL в другой:
shell> mysqldump --opt db_name | mysql --host=remote_host
                    -C db_name
Вы можете вывести несколько баз данных одной командой:
shell> mysqldump --databases db_name1
                    [db_name2 ...] > my_databases.sql
Чтобы вывести все базы данных, используйте опцию --all-databases :
shell> mysqldump --all-databases > all_databases.sql
Для таблиц InnoDB mysqldump обеспечивает способ сделать резервное копирование онлайн:
shell> mysqldump --all-databases --master-data
                    --single-transaction > all_databases.sql
Это резервное копирование приобретает глобальную блокировку чтения на всех таблицах (с использованием FLUSH TABLES WITH READ LOCK) в начале дампа. Как только эта блокировка была приобретена, двоичные координаты журнала считаны, и блокировка снята. Если долго обновляющие запросы работают, когда запущен FLUSH, сервер MySQL может быть остановлен, пока те запросы не заканчиваются. После этого дамп освобождает блокировку и не нарушает чтения и записи на таблицах. Если запросы обновления, что сервер MySQL получает, коротки (с точки зрения времени выполнения), начальный период блокировки не должен быть примечательным, даже со многими обновлениями.

Для восстановления момента времени (также известный как roll-forward, когда Вы должны восстановить старую резервную копию и переиграть изменения, которые произошли начиная с того резервного копирования), часто полезно ротировать двоичный журнал (см. раздел 6.4.4) или, по крайней мере, знать двоичные координаты журнала, которым соответствует дамп:

shell> mysqldump --all-databases --master-data=2 > all_databases.sql
Или:
shell> mysqldump --all-databases --flush-logs --master-data=2
     >           all_databases.sql
Опции --master-data и --single-transaction могут использоваться одновременно, что обеспечивает удобный способ сделать резервное копирование онлайн подходящим для использования до восстановления момента времени, если таблицы сохранены, используя InnoDB.

См. разделы 8.2 и 8.3.

Ограничения

mysqldump не выводит performance_schema или sys по умолчанию. Чтобы вывести любую из них, назовите их явно в командной строке. Вы можете также назвать их с опцией --databases . Для performance_schema также используйте опцию --skip-lock-tables .

mysqldump не выводит INFORMATION_SCHEMA.

mysqldump включает запросы, чтобы обновить таблицы general_log и slow_query_log для дампов базы данных mysql. Табличное содержание журнала не выведено.

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

5.5.5. mysqlimport программа импорта данных

mysqlimport обеспечивает интерфейс командной строки для SQL-запроса LOAD DATA INFILE. Большинство опций mysqlimport соответствует непосредственно параметрам LOAD DATA INFILE, см. раздел 14.2.6.

Вызов mysqlimport :

shell> mysqlimport [options] db_name
                      textfile1 [textfile2 ...]
Для каждого текстового файла, названного в командной строке, mysqlimport отрезает любое расширение от имени файла и использует результат, чтобы определить название таблицы, в которую можно импортировать содержание файла. Например, файлы patient.txt, patient.text и patient все были бы импортированы в таблицу patient.

mysqlimport поддерживает следующие опции, которые могут быть определены в командной строке или в группах [mysqlimport] и [client] файла опции. Для информации о файлах опции, используемых программами MySQL, см. раздел 5.2.6.

Таблица 5.12. Опции mysqlimport

ФорматОписание
--bind-address Используйте определенный сетевой интерфейс, чтобы соединиться с MySQL Server
--columnsЭта опция берет список разделенных запятой значений имен столбцов как значение
--compressСжать всю информацию, посланную между клиентом и сервером
--debug Писать журнал отладки
--debug-checkИнформация об отладке, когда программа выходит
--debug-infoИнформация об отладке, памяти и статистика центрального процессора, когда программа выходит
--default-authПлагин аутентификации, чтобы использовать
--default-character-setОпределите набор символов значения по умолчанию
--defaults-extra-fileЧитать файл опции в дополнение к обычным файлам опции
--defaults-fileЧитать только этот файл опции
--defaults-group-suffixГрупповое значение суффикса опции
--delete Освободить таблицу прежде, чем импортировать текстовый файл
--enable-cleartext-plugin Включите плагин аутентификации открытого текста
--fields-enclosed-byУ этой опции есть то же самое значение, как соответствующий параметр LOAD DATA INFILE
--fields-escaped-byЭта опция имеет то же значение, что и соответствующий параметр LOAD DATA INFILE
--fields-optionally-enclosed-byЭта опция имеет то же значение, что и соответствующий параметр LOAD DATA INFILE
--fields-terminated-byЭта опция имеет то же значение, что и соответствующий параметр LOAD DATA INFILE
--forceПродолжите, даже если ошибка SQL происходит
--helpОтобразить справочное сообщение
--host Соединитесь с сервером MySQL на данном хосте
--ignore См. описание опции --replace
--ignore-linesПроигнорируйте первые N строк файла с данными
--lines-terminated-byЭта опция имеет то же значение, что и соответствующий параметр LOAD DATA INFILE
--local Читать входные файлы локально с хоста клиента
--lock-tablesЗаблокируйте все таблицы для записи прежде, чем обработать любые текстовые файлы
--login-pathЗагрузить опции пути входа в систему из .mylogin.cnf
--low-priorityПрименить LOW_PRIORITY, загружая таблицу
--no-defaultsНе читать файлы опций
--passwordПароль, чтобы использовать, соединяясь с сервером
--pipe В Windows соединитесь с сервером, используя именованный канал
--plugin-dirКаталог, где плагины установлены
--port Номер порта TCP/IP, чтобы использовать для соединения
--print-defaultsНапечатайте опции по умолчанию
--protocolПротокол соединения, чтобы использовать
--replaceОпции --replace и --ignore управляют обработкой входных строк, которые дублируют существующие строки на уникальных значениях ключа
--secure-authНе посылайте пароли в сервер в старом формате (pre-4.1)
--shared-memory-base-nameНазвание совместно используемой памяти, чтобы использовать для соединений совместно используемой памяти
--silent Произведите вывод только, когда ошибки происходят
--socket Для соединений с localhost файл сокета Unix
--ssl-ca Путь к файлу, который содержит список доверенных SSL CA
--ssl-capathПуть к каталогу, который содержит доверенные сертификаты SSL CA в формате PEM
--ssl-cert Путь к файлу, который содержит сертификат X509 в формате PEM
--ssl-cipherСписок разрешенных шифров, чтобы использовать для шифрования соединения
--ssl-crlПуть к файлу, который содержит списки аннулирования сертификатов
--ssl-crlpathПуть к каталогу, который содержит файлы списка аннулирования сертификатов
--ssl-keyПуть к файлу, который содержит ключ X509 в формате PEM
--ssl-modeСтатус безопасности соединения с сервером
--tls-versionПротоколы для безопасных соединений
--use-threadsЧисло потоков для параллельной загрузки файла
--user Имя пользователя MySQL, чтобы использовать, соединяясь с сервером
--verboseПодробный режим отчета
--versionОтобразить информацию о версии

Вот типовой сеанс, который демонстрирует использование mysqlimport :

shell> mysql -e 'CREATE TABLE imptest(id INT, n VARCHAR(30))' test
shell> ed
a
100 Max Sydow
101 Count Dracula
.
w imptest.txt
32
q
shell> od -c imptest.txt
0000000   1   0   0  \t   M   a   x S   y   d   o   w  \n   1   0
0000020   1  \t   C   o   u   n   t D   r   a   c   u   l   a  \n
0000040

shell> mysqlimport --local test imptest.txt
test.imptest: Records: 2  Deleted: 0  Skipped: 0  Warnings: 0
shell> mysql -e 'SELECT * FROM imptest' test
+-----+---------------+
|  id | n             |
+-----+---------------+
| 100 | Max Sydow     |
| 101 | Count Dracula |
+-----+---------------+

5.5.6. mysqlpump программа резервирования базы данных

mysqlpump выполняет логические резервные копии, производя ряд запросов SQL, которые могут быть выполнены, чтобы воспроизвести оригинальные определения объекта базы данных и табличные данные. Это выводит одну или более баз данных MySQL для резервного копирования или передачи в другой SQL-сервер.

Возможности mysqlpump :

mysqlpump использует функции MySQL, введенные в MySQL 5.7, и таким образом предполагает использование с MySQL 5.7 или выше.

mysqlpump требует, по крайней мере, привилегию SELECT для выведенных таблиц, SHOW VIEW для выведенных представлений, TRIGGER для выведенных триггеров и LOCK TABLES, если не применяется опция --single-transaction. Привилегия SELECT на системной базе данных mysql нужна, чтобы выводить пользовательские определения. Определенные опции могли бы потребовать других привилегий, как отмечено в описаниях опции.

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

Дамп, сделанный, используя PowerShell на Windows с выходным перенаправлением, создает файл, у которого есть кодирование UTF-16:

shell> mysqlpump [options] > dump.sql
Но UTF-16 не разрешен как набор символов соединения (см. раздел 11.1.4), таким образом, файл дампа не будет загружаться правильно. Чтобы решить проблему, используйте опцию --result-file, которая создает вывод в формате ASCII:
shell> mysqlpump [options] --result-file=dump.sql

Синтаксис вызова mysqlpump

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

shell> mysqlpump --all-databases
Чтобы вывести единственную базу данных или определенные таблицы в пределах той базы данных, укажите базу данных в командной строке, произвольно сопровождаемую именами таблиц:
shell> mysqlpump db_name
shell> mysqlpump db_name tbl_name1 tbl_name2 ...
Чтобы обработать все параметры имени как имена базы данных, используйте --databases :
shell> mysqlpump --databases db_name1 db_name2 ...
По умолчанию mysqlpump не выводит определения учетной записи пользователя, даже если Вы выводите системную базу данных mysql, которая содержит таблицы привилегий. Чтобы вывести табличное содержание привилегий как логические определения в форме CREATE USER и GRANT, используйте опцию --users и весь дамп базы данных:
shell> mysqlpump --exclude-databases=% --users
В предыдущей команде подстановочный знак % соответствует всем именам базы данных для --exclude-databases.

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

Чтобы перезагрузить файл дампа, выполните запросы, которые это содержит. Например, используйте mysql:

shell> mysqlpump [options] > dump.sql
shell> mysql < dump.sql
Следующее обсуждение обеспечивает дополнительные примеры использования mysqlpump.

Чтобы видеть список опций mysqlpump, введите команду mysqlpump --help .

Обзор опций mysqlpump

mysqlpump поддерживает следующие опции, которые могут быть определены в командной строке или в группах [mysqlpump] и [client] файла опции. Для информации о файлах опции, используемых программами MySQL, см. раздел 5.2.6.

Таблица 5.13. Опции mysqlpump

ФорматОписание
--add-drop-databaseДобавить DROP DATABASE перед каждым CREATE DATABASE
--add-drop-tableДобавить DROP TABLE перед каждым CREATE TABLE
--add-drop-userДобавить DROP USER перед каждым CREATE USER
--add-locksОкружите каждый табличный дамп LOCK TABLES и UNLOCK TABLES
--all-databasesВыведите все базы данных
--bind-addressИспользуйте определенный сетевой интерфейс, чтобы соединиться с MySQL Server
--character-sets-dirКаталог, где наборы символов установлены
--complete-insertИспользуйте полные запросы INSERT, которые включают имена столбцов
--compressСжать всю информацию, посланную между клиентом и сервером
--compress-outputВыходной алгоритм сжатия
--databasesИнтерпретируйте все параметры имени как имена базы данных
--debug Вести журнал отладки
--debug-checkИнформация об отладке, когда программа выходит
--debug-infoИнформация об отладке, памяти и статистика центрального процессора, когда программа выходит
--default-authПлагин аутентификации, чтобы использовать
--default-character-setОпределите набор символов по умолчанию
--default-parallelismЧисло потоков по умолчанию для параллельной обработки
--defaults-extra-fileЧитать файл опции в дополнение к обычным файлам опции
--defaults-fileЧитать только этот файл опции
--defaults-group-suffixГрупповое значение суффикса опции
--defer-table-indexesДля того, чтобы перезагрузить, задержать создание индекса до окончания загрузки строк таблицы
--events События дампа от выведенных баз данных
--exclude-databasesБазы данных, чтобы исключить из дампа
--exclude-eventsСобытия, чтобы исключить из дампа
--exclude-routinesСохраненные подпрограммы, чтобы исключить из дампа
--exclude-tablesТаблицы, чтобы исключить из дампа
--exclude-triggersТриггеры, чтобы исключить из дампа
--exclude-usersПользователи, чтобы исключить из дампа
--extended-insertМногострочный синтаксис INSERT
--help Вывести сообщение справки
--hex-blobВыведите двоичные столбцы, используя шестнадцатеричный формат
--host Хост сервера (IP-адрес или имя)
--include-databasesБазы данных, чтобы включать в дамп
--include-eventsСобытия, чтобы включать в дамп
--include-routinesСохраненные подпрограммы, чтобы включать в дамп
--include-tablesТаблицы, чтобы включать в дамп
--include-triggersТриггеры, чтобы включать в дамп
--include-usersПользователи, чтобы включать в дамп
--insert-ignoreПисать INSERT IGNORE вместо INSERT
--log-error-file Добавить предупреждения и ошибки к названному файлу
--login-pathСчитайте опции пути входа в систему из .mylogin.cnf
--max-allowed-packetМаксимальная пакетная длина, чтобы послать в или получить от сервера
--net-buffer-lengthРазмер буфера для TCP/IP
--no-create-dbНе писать CREATE DATABASE
--no-create-infoНе писать CREATE TABLE, которые пересоздают каждую выведенную таблицу
--no-defaultsНе читать файлы опции
--parallel-schemasОпределите обрабатывающий схему параллелизм
--passwordПароль, чтобы использовать, соединяясь с сервером
--plugin-dirКаталог, где плагины установлены
--port Номер порта TCP/IP, чтобы использовать для соединения
--print-defaultsНапечатайте опции по умолчанию
--protocolПротокол соединения, чтобы использовать
--replace Писать REPLACE вместо INSERT
--result-fileПрямой вывод к данному файлу
--routinesВыведите сохраненные подпрограммы (процедуры и функции) от выведенных баз данных
--secure-authНе посылайте пароли в сервер в старом формате (pre-4.1)
--set-charsetДобавить SET NAMES default_character_set в вывод
--single-transaction Дамп таблиц в пределах единственной транзакции
--skip-definerОпустите DEFINER и SQL SECURITY для CREATE, создающих представления и сохраненные подпрограммы
--skip-dump-rowsНе выводите строки таблицы
--socket Для соединений с localhost файл сокета Unix
--ssl-ca Путь к файлу, который содержит список доверенных SSL CAs
--ssl-capath Путь к каталогу, который содержит доверенные сертификаты SSL CA в формате PEM
--ssl-cert Путь к файлу, который содержит сертификат X509 в формате PEM
--ssl-cipher Список разрешенных шифров, чтобы использовать для шифрования соединения
--ssl-crl Путь к файлу, который содержит списки аннулирования сертификатов
--ssl-crlpath Путь к каталогу, который содержит файлы списка аннулирования сертификатов
--ssl-key Путь к файлу, который содержит ключ X509 в формате PEM
--ssl-mode Статус безопасности соединения с сервером
--tls-versionПротоколы для безопасных соединений
--triggersДамп триггеров для каждой выведенной таблицы
--tz-utc Добавить в дамп SET TIME_ZONE='+00:00'
--user Имя пользователя MySQL, чтобы использовать, соединяясь с сервером
--users Вывести учетные записи пользователей
--version Отобразить информаци о версии
--watch-progressПоказать индикатор выполнения

mysqlpump Option Descriptions

Выбор объектов mysqlpump

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

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

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

--exclude-databases=test,world
--include-tables=customer,invoice
Подстановочные символы разрешены в названиях объекта:

Например, --include-tables=t%,__tmp соответствует всем именам таблиц, которые начинаются на t и всем пятисимвольным именам таблиц, которые кончаются строго на tmp.

Для пользователей имя, определенное без части хоста, интерпретируется с подразумеваемым хостом %. Например, u1 и u1@% аналогичны. Это та же самая эквивалентность, которая применяется в MySQL вообще (см. раздел 7.2.3).

Опции включения и исключения взаимодействуют следующим образом:

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

shell> mysqlpump --include-databases=db1,db2 --exclude-tables=db1.t1,db2.t2

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

Параллельная обработка mysqlpump

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

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

mysqlpump использует очередь по умолчанию для того, чтобы обработать любые базы данных, не названные явно с --parallel-schemas, и для дампа пользовательских определений, если опции команды выбирают их.

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

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

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

Примеры:

shell> mysqlpump --parallel-schemas=db1,db2 --parallel-schemas=db3
mysqlpump настраивает очередь, чтобы обработать db1 и db2, другую очередь, чтобы обработать db3 и очередь по умолчанию, чтобы обработать все другие базы данных. Все очереди используют по два потока.
shell> mysqlpump --parallel-schemas=db1,db2 --parallel-schemas=db3
                    --default-parallelism=4
Это то же самое, как предыдущий пример за исключением того, что все очереди используют по четыре потока.
shell> mysqlpump --parallel-schemas=5:db1,db2 --parallel-schemas=3:db3
Очередь для db1 и db2 применяет пять потоков, очередь для db3 три потока, а очередь по умолчанию использует значение по умолчанию из двух потоков.

Как особый случай, с --default-parallelism=0 и без --parallel-schemas mysqlpump работает как однопоточный процесс и не создает очередей.

Ограничения mysqlpump

mysqlpump не выводит performance_schema, ndbinfo или sys по умолчанию. Чтобы вывести любую из них, назовите их явно в командной строке. Вы можете также назвать их с --databases или --include-databases.

mysqlpump вообще никак не выводит INFORMATION_SCHEMA.

mysqlpump выводит учетные записи пользователя в логической форме using CREATE USER и GRANT (например, когда Вы используете --include-users или --users). Поэтому дампы системной базы данных mysql по умолчанию не включают таблицы привилегий, которые содержат пользовательские определения: user, db, tables_priv, columns_priv, procs_priv или proxies_priv. Чтобы вывести любую из этих таблиц, назовите mysql с именами таблиц:

shell> mysqlpump mysql user db ...

5.5.7. mysqlshow Показ информации о базе данных, таблице и столбце

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

mysqlshow обеспечивает интерфейс командной строки к нескольким SQL-запросам SHOW, см. раздел 14.7.5. Та же самая информация может быть получена при использовании тех запросов непосредственно. Например, Вы можете дать их из mysql.

Вызов mysqlshow :

shell> mysqlshow [options] [db_name
                    [tbl_name [col_name]]]

Вывод выводит на экран только названия тех баз данных, таблиц или столбцов, для которых у Вас есть хоть какие-то привилегии.

Если последний параметр содержит подстановочные символы SQL или оболочки (*, ?, % или _), только те имена, которые являются соответствующими подстановочным знаком, показывают. Если имя базы данных содержит какие-либо подчеркивания, их нужно экранировать наклонной чертой влево (некоторые оболочки Unix требуют две), чтобы получить список надлежащих таблиц или столбцов. * и ? преобразованы в SQL % и _. Это могло бы вызвать некоторый беспорядок, когда Вы пытаетесь вывести на экран столбцы для таблицы с _ в имени, потому что в этом случае mysqlshow показывает Вам только имена таблиц, которые соответствуют образцу. Это легко установлено, добавляя дополнительный % последним в командной строке как отдельный параметр.

mysqlshow поддерживает следующие опции, которые могут быть определены в командной строке или в группах [mysqlshow] и [client] файла опции. Для информации о файлах опции, используемых программами MySQL, см. раздел 5.2.6.

Таблица 5.14. Опции mysqlshow

ФорматОписание
--bind-addressИспользуйте определенный сетевой интерфейс, чтобы соединиться с MySQL Server
--compressСжать всю информацию, посланную между клиентом и сервером
--count Покажите число строк в таблице
--debug Писать журнал отладки
--debug-checkИнформация об отладке, когда программа выходит
--debug-infoИнформация об отладке, памяти и статистика центрального процессора, когда программа выходит
--default-authПлагин аутентификации, чтобы использовать
--default-character-setОпределите набор символов по умолчанию
--defaults-extra-fileЧитать этот файл опции в дополнение к обычным файлам опции
--defaults-fileЧитать только этот файл опции
--defaults-group-suffixГрупповое значение суффикса опции
--enable-cleartext-plugin Включите плагин аутентификации открытого текста
--help Показать справочное сообщение
--host Соединитесь с сервером MySQL на данном хосте
--keys Покажите индексы таблицы
--login-pathЧитать опции пути входа в систему из .mylogin.cnf
--no-defaultsНе читать файлы опции
--passwordПароль, чтобы использовать, соединяясь с сервером
--pipe В Windows соединитесь с сервером, используя именованный канал
--plugin-dirКаталог, где плагины установлены
--port Номер порта TCP/IP, чтобы использовать для соединения
--print-defaultsНапечатайте опции по умолчанию
--protocolПротокол для соединения
--secure-authНе посылайте пароли серверу в старом формате (pre-4.1)
--shared-memory-base-nameНазвание совместно используемой памяти, чтобы использовать для соединений совместно используемой памяти
--show-table-typeПокажите столбец, указывающий табличный тип
--socket Для соединений с localhost файл сокета Unix
--ssl-ca Путь к файлу, который содержит список доверенных SSL CA
--ssl-capath Путь к каталогу, который содержит доверенные сертификаты SSL CA в формате PEM
--ssl-cert Путь к файлу, который содержит сертификат X509 в формате PEM
--ssl-cipher Список разрешенных шифров, чтобы использовать для шифрования соединения
--ssl-crl Путь к файлу, который содержит списки аннулирования сертификатов
--ssl-crlpath Путь к каталогу, который содержит файлы списка аннулирования сертификатов
--ssl-key Путь к файлу, который содержит ключ X509 в формате PEM
--ssl-mode Статус безопасности соединения с сервером
--status Выведите на экран дополнительную информацию о каждой таблице
--tls-versionПротоколы для безопасных соединений
--user Имя пользователя MySQL, чтобы использовать, соединяясь с сервером
--verboseПодробный режим вывода
--versionПоказать информацию о версии

5.5.8. mysqlslap клиент эмуляции загрузки

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

Вызов mysqlslap :

shell> mysqlslap [options]
Некоторые опции, например, --create или --query, позволяют Вам определить строку, содержащую запрос SQL или файл, содержащий запросы. Если Вы определяете файл, по умолчанию это должно содержать один запрос на строку. Таким образом, неявный разделитель запросов это символ новой строки. Примените опцию --delimiter , чтобы определить иной разделитель, который позволяет Вам определить запросы, которые охватывают многократные строки или помещают многократные запросы в одной строке. Вы не можете включать комментарии в файл, mysqlslap не понимает их.

mysqlslap работает в три шага:

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

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

Пример:

Создайте таблицу и выполните запросы SQL с 50 запрашивающими клиентами и 200 выбирающими для каждого запроса (введите команду в одну строку):

mysqlslap --delimiter=";"
          --create="CREATE TABLE a (b int);INSERT INTO a VALUES (23)"
          --query="SELECT * FROM a" --concurrency=50 --iterations=200
Пусть mysqlslap создаст запрос SQL с таблицей из двух столбцов INT и трех VARCHAR. Используйте пять клиентов, запрашивающих 20 раз каждый. Не составляйте таблицу и не вставляйте данные (то есть, используйте схему предыдущего теста и данные):
mysqlslap --concurrency=5 --iterations=20
          --number-int-cols=2 --number-char-cols=3 --auto-generate-sql
Скажите программе загружать создавать вставлять и запрашивать запросы SQL от указанных файлов, где create.sql имеет много табличные запросы создания, разграниченные ';' и многократные запросы вставки, разграниченные ';'. Файл в --query разграничивает запросы ';'. Выполните все запросы загрузки, затем выполните все запросы в файле запроса с пятью клиентами (пять раз каждый):
mysqlslap --concurrency=5 --iterations=5
          --query=query.sql
          --create=create.sql --delimiter=";"
mysqlslap поддерживает следующие опции, которые могут быть определены в командной строке или в группах [mysqlslap] и [client] файла опции. Для информации о файлах опции, используемых программами MySQL, см. раздел 5.2.6.

Таблица 5.15. Опции mysqlslap

ФорматОписание
--auto-generate-sqlПроизведите запросы SQL автоматически, когда они не даны в файлах или опциях команды
--auto-generate-sql-add-autoincrement Добавить столбец AUTO_INCREMENT к автоматически произведенным таблицам
--auto-generate-sql-execute-number Определите сколько запросов произвести автоматически
--auto-generate-sql-guid-primaryДобавьте основанный на GUID первичный ключ к автоматически произведенным таблицам
--auto-generate-sql-load-type Определите испытательный тип загрузки
--auto-generate-sql-secondary-indexes Определите, сколько вторичных индексов добавить к автоматически произведенным таблицам
--auto-generate-sql-unique-query-number Сколько различных запросов произвести для автоматических тестов
--auto-generate-sql-unique-write-number Сколько различных запросов произвести для --auto-generate-sql-write-number
--auto-generate-sql-write-number Сколько строк вставлять в каждом потоке
--commit Сколько запросов выполнить перед commit
--compressСжать всю информацию, посланную между клиентом и сервером
--concurrencyЧисло клиентов, чтобы моделировать, делая SELECT
--create Файл или строка, содержащая запрос, чтобы использовать для того, чтобы составить таблицу
--create-schemaСхема, в которой можно выполнить тесты
--csv Произведите вывод в отделенном запятыми формате значений
--debug Писать журнал отладки
--debug-checkИнформация об отладке, когда программа выходит
--debug-infoИнформация об отладке, памяти и статистика центрального процессора, когда программа выходит
--default-authПлагин аутентификации, чтобы использовать
--defaults-extra-fileЧитать этот файл опции в дополнение к обычным файлам опции
--defaults-fileЧитать только этот файл опции
--defaults-group-suffixГрупповое значение суффикса опции
--delimiterРазделитель, чтобы использовать в запросах SQL
--detach Отделить (закрыть и вновь открыть) каждое соединение после каждых N запросов
--enable-cleartext-plugin Включите плагин аутентификации открытого текста
--engine Механизм хранения для того, чтобы составить таблицу
--help Отобразить сообщение справки
--host Соединитесь с сервером MySQL на данном хосте
--iterationsСколько раз выполнить тесты
--login-pathСчитайте опции пути входа в систему из .mylogin.cnf
--no-defaultsНе читайте файлы опции
--no-dropНе удалять любую схему, созданную во время испытания
--number-char-colsЧисло столбцов VARCHAR, чтобы использовать, если определена --auto-generate-sql
--number-int-colsЧисло столбцов INT, чтобы использовать, если определена --auto-generate-sql
--number-of-queriesОграничьте каждого клиента приблизительно этим числом запросов
--only-printНе соединяйтесь с базами данных. mysqlslap только печатает то, что он сделал бы
--passwordПароль, чтобы использовать, соединяясь с сервером
--pipe В Windows соединитесь с сервером, используя именованный канал
--plugin-dirКаталог, где плагины установлены
--port Номер порта TCP/IP, чтобы использовать для соединения
--post-queryФайл или строка, содержащая запрос, чтобы выполнить после тестов
--post-systemСтрока, чтобы выполнить через system() после тестов
--pre-queryФайл или строка, содержащая запрос, чтобы выполнить прежде, чем выполнить тесты
--pre-systemСтрока, чтобы выполнить через system() до тестов
--print-defaultsНапечатайте опции по умолчанию
--protocolПротокол соединения, чтобы использовать
--query Файл или строка, содержащая запрос SELECT, чтобы использовать для того, чтобы получить данные
--secure-authНе посылайте пароли серверу в старом формате (pre-4.1)
--shared-memory-base-nameНазвание совместно используемой памяти, чтобы использовать для соединений
--silent Тихий режим
--socketДля соединений с localhost файл сокета Unix
--sql-modeЗадать режим SQL для сеанса клиента
--ssl-ca Путь к файлу, который содержит список доверенных SSL CA
--ssl-capath Путь к каталогу, который содержит доверенные сертификаты SSL CA в формате PEM
--ssl-cert Путь к файлу, который содержит сертификат X509 в формате PEM
--ssl-cipher Список разрешенных шифров, чтобы использовать для шифрования соединения
--ssl-crl Путь к файлу, который содержит списки аннулирования сертификатов
--ssl-crlpath Путь к каталогу, который содержит файлы списка аннулирования сертификатов
--ssl-keyПуть к файлу, который содержит ключ X509 в формате PEM
--ssl-modeСтатус безопасности соединения с сервером
--tls-versionПротоколы для безопасных соединений
--userИмя пользователя MySQL, чтобы использовать, соединяясь с сервером
--verboseПодробный режим
--versionОтобразить информацию о версии

5.6. Административные утилиты MySQL

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

5.6.1. ibd2sdi Утилита извлечения SDI табличного пространства InnoDB

ibd2sdi это утилита InnoDB, чтобы извлечь serialized dictionary information (SDI) из файлов табличного пространства InnoDB.

Данные SDI не присутствуют в постоянных табличных пространствах InnoDB в MySQL 8.0.0. ibd2sdi сохранена для будущего использования.

5.6.2. innochecksum офлайновая утилита контрольной суммы файла InnoDB

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

innochecksum не может использоваться на файлах табличного пространства, которые сервер уже открыл. Для таких файлов Вы должны использовать CHECK TABLE, чтобы проверять таблицы в пределах табличного пространства. Попытка выполнить innochecksum на табличном пространстве, которое сервер уже имеет открытым, приведет к ошибке Unable to lock file.

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

Вызов innochecksum :

shell> innochecksum [options] file_name

Опции innochecksum

innochecksum поддерживает следующие опции. Для опций, которые обращаются к номерам страниц, числа начинаются с 0.

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

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

Запустите innochecksum для всего табличного пространства (файлы .ibd) в базе данных test:

shell> innochecksum ./data/test/*.ibd
Запустите innochecksum для всех файлов табличного пространства (файлы .ibd), у которых есть имя файла, начинающееся с t:
shell> innochecksum ./data/test/t*.ibd
Запустите innochecksum для всех файлов табличного пространства (файлы .ibd) в каталоге data:
shell> innochecksum ./data/*/*.ibd

Запуск innochecksum на многих определяемых пользователем файлах табличного пространства не поддержано на операционных системах Windows, поскольку в Windows оболочка cmd.exe не понимает глобальное расширение образца. На системах Windows innochecksum должен быть выполнен отдельно для каждого определяемого пользователем файла табличного пространства. Например:

cmd> innochecksum.exe t1.ibd
cmd> innochecksum.exe t2.ibd
cmd> innochecksum.exe t3.ibd

Выполнение innochecksum на многих системных файлах табличного пространства

По умолчанию в InnoDB есть только один системный файл табличного пространства (ibdata1), но многие файлы для системного табличного пространства могут быть определены, используя опцию innodb_data_file_path. В следующем примере три файла для системного табличного пространства определены, используя innodb_data_file_path: ibdata1, ibdata2 и ibdata3.

shell> ./bin/mysqld --no-defaults
          --innodb-data-file-path="ibdata1:10M;ibdata2:10M;ibdata3:10M:autoextend"
Три файла (ibdata1, ibdata2 и ibdata3) формируют одно логическое системное табличное пространство. Чтобы выполнить innochecksum на многих файлах, которые формируют одно логическое системное табличное пространство, innochecksum требует опцию -, чтобы считать файлы табличного пространства из стандартного ввода, который эквивалентен связыванию многократных файлов, чтобы создать один единый файл. Для примера, обеспеченного выше, использовалась бы следующая команда:
  shell> cat ibdata* | innochecksum -

Запуск innochecksum на многократных файлах в том же самом табличном пространстве не поддержано на операционных системах Windows, так как в Windows оболочка cmd.exe не понимает глобальное расширение образца. На системах Windows innochecksum должен быть выполнен отдельно для каждого системного файла табличного пространства. Например:

cmd> innochecksum.exe ibdata1
cmd> innochecksum.exe ibdata2
cmd> innochecksum.exe ibdata3

5.6.3. myisam_ftdump отображение информации полнотекстового индекса

myisam_ftdump выводит на экран информацию об индексах FULLTEXT таблиц MyISAM. Это читает индексный файл MyISAM непосредственно, таким образом, это должно быть выполнено на хосте сервера, где таблица расположена. Перед использованием myisam_ftdump сначала выполните FLUSH TABLES, если сервер работает.

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

Вызов myisam_ftdump :

shell> myisam_ftdump [options] tbl_name
                        index_num
tbl_name должен быть названием таблицы MyISAM. Вы можете также определить таблицу, называя ее индексный файл (файл с расширением .MYI). Если Вы не вызываете myisam_ftdump в каталоге, где табличные файлы расположены, имени таблицы или индексного файла должен предшествовать путь к каталогу базы данных таблицы. Индексы начинаются с 0.

Пример: Предположите, что база данных test содержит таблицу mytexttable, у которой есть следующее определение:

CREATE TABLE mytexttable (id INT NOT NULL, txt TEXT NOT NULL,
                          PRIMARY KEY (id), FULLTEXT (txt)) ENGINE=MyISAM;
Индекс на id это индекс 0, а индекс FULLTEXT на txt это индекс 1. Если Ваш рабочий каталог это каталог базы данных test, вызов myisam_ftdump :
shell> myisam_ftdump mytexttable 1
Если путь к каталогу базы данных test это /usr/local/mysql/data/test, Вы можете также определить параметр имени таблицы, используя этот путь. Это полезно, если Вы не вызываете myisam_ftdump в каталоге базы данных:
shell> myisam_ftdump /usr/local/mysql/data/test/mytexttable 1
Вы можете использовать myisam_ftdump, чтобы произвести список индекных записей в порядке частоты возникновения:
shell> myisam_ftdump -c mytexttable 1 | sort -r
myisam_ftdump понимает следующие опции:

5.6.4. myisamchk утилита табличного обслуживания MyISAM

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

Вы можете также использовать CHECK TABLE и REPAIR TABLE для проверки и ремонта таблиц MyISAM, см. разделы 14.7.2.2 и 14.7.2.5.

Использование myisamchk с разделенными таблицами не поддержано.

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

Вызов myisamchk :

shell> myisamchk [options] tbl_name ...
options определяют то, что Вы хотите от myisamchk. Они описаны в следующих разделах. Вы можете также получить список опций, вызывая myisamchk --help .

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

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

Вы можете назвать несколько таблиц в командной строке myisamchk. Вы можете также определить таблицу, называя ее индексный файл (файл с расширением .MYI). Это позволяет Вам определить все таблицы в каталоге при использовании образца *.MYI. Например, если Вы находитесь в каталоге базы данных, Вы можете проверить все таблицы MyISAM в этом каталоге:

shell> myisamchk *.MYI
Если Вы не находитесь в каталоге базы данных, Вы можете проверить все таблицы там, определяя путь к каталогу:
shell> myisamchk /path/to/database_dir/*.MYI
Вы можете даже проверить все таблицы во всех базах данных, определяя подстановочный знак с путем к каталогу данных MySQL:
shell> myisamchk /path/to/datadir/*/*.MYI
Рекомендуемый способ быстро проверить все таблицы MyISAM:
shell> myisamchk --silent --fast /path/to/datadir/*/*.MYI
Если Вы хотите проверить все таблицы MyISAM и отремонтировать те, которые повреждены, Вы можете использовать следующую команду:
shell> myisamchk --silent --force --fast --update-state \
                    --key_buffer_size=64M --myisam_sort_buffer_size=64M \
                    --read_buffer_size=1M --write_buffer_size=1M \
                    /path/to/datadir/*/*.MYI
Эта команда предполагает, что у Вас свободно больше 64 МБ. Для получения дополнительной информации о распределении памяти с myisamchk см. раздел 5.6.4.6.

Для дополнительной информации об использовании myisamchk см. раздел 8.6.

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

Иначе, когда Вы выполняете myisamchk, это может вывести на экран следующее сообщение об ошибке:

warning: clients are using or haven't closed the table properly
Это означает, что Вы пытаетесь проверить таблицу, которая была обновлена другой программой (такой как mysqld), которая еще не закрыла файл, или это отвалилось, не закрывая файл должным образом, что может иногда приводить к повреждению одной или больше таблиц MyISAM.

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

Однако, самый легкий способ избежать этой проблемы состоит в том, чтобы использовать CHECK TABLE вместо myisamchk , чтобы проверить таблицы. См. раздел 14.7.2.2.

myisamchk поддерживает следующие опции, которые могут быть определены в командной строке или в группе [myisamchk] файла опции. Для информации о файлах опции, используемых программами MySQL, см. раздел 5.2.6.

Таблица 5.16. Опции myisamchk

ФорматОписание
--analyzeПроанализируйте распределение значений ключа
--backup Сделайте резервное копирование файла .MYD как file_name-time.BAK
--block-searchНайдите запись, которой принадлежит блок при данном смещении
--check Проверьте таблицу на ошибки
--check-only-changedПроверка только таблиц, которые изменились, начиная с последней проверки
--correct-checksumИсправьте информацию о контрольной сумме для таблицы
--data-file-lengthМаксимальная длина файла с данными (для пересоздания файла с данными, когда это полно)
--debug Вести журнал отладки
--defaults-extra-fileЧитать этот файл опции в дополнение к обычным файлам опции
--defaults-fileЧитать только этот файл опций
--defaults-group-suffixГрупповое значение суффикса опции
--descriptionНапечатайте описательную информацию о таблице
--extend-checkСделайте очень полную табличную проверку или ремонт, который пытается возвратить каждую возможную строку файла с данными
--fast Проверка только таблиц, которые не были закрыты должным образом
--force Сделайте ремонт автоматически, если myisamchk находит какие-либо ошибки в таблице
--forceПерезапишите старые временные файлы. Для использования с опцией -r или -o
--ft_max_word_len Максимальная длина слова для индексов FULLTEXT
--ft_min_word_len Минимальная длина слова для индексов FULLTEXT
--ft_stopword_file Используйте стоп-слова из этого файла вместо встроенного списка
--HELPПоказать сообщение справки
--helpПоказать сообщение справки
--informationНапечатайте статистику о таблице, которая проверена
--key_buffer_sizeРазмер буфера, используемого для индексных блоков для таблиц MyISAM
--keys-usedБитовое значение, которое указывает, который индекс обновить
--max-record-lengthПропустите строки, более крупные, чем данная длина, если myisamchk не может выделить память, чтобы их обработать
--medium-checkСделайте проверку, которая быстрее, чем --extend-check
--myisam_block_sizeРазмер блока, который будет использоваться для индексных страниц MyISAM
--myisam_sort_buffer_size Буфер, который выделен, сортируя индексы, при выполнении функции REPAIR или при создании индексов с CREATE INDEX или ALTER TABLE
--no-defaultsНе читать файлы опций
--parallel-recoverИспользует тот же самый метод, как -r и -n, но создает все ключи параллельно, используя различные потоки (бета)
--print-defaultsНапечатайте опции по умолчанию
--quick Для более быстрого ремонта, не изменяя файл с данными
--read_buffer_sizeКаждый поток, который делает последовательный просмотр, выделяет буфер этого размера для каждой таблицы, которую просматривает
--read-onlyНе отмечайте таблицу как "проверено"
--recoverСделайте ремонт, который может решить почти любую проблему, кроме уникальных ключей, которые не уникальны
--safe-recoverСделайте ремонт, используя старый метод восстановления, который считывает все строки в порядке и обновляет все индексные деревья, основанные на найденных строках
--set-auto-incrementУстановить нумерацию AUTO_INCREMENT для новых записей с этого значения
--set-collationОпределите сопоставление, чтобы использовать для того, чтобы сортировать индексы таблицы
--silent Тихий режим
--sort_buffer_sizeБуфер, который выделен, сортируя индекс при выполнении REPAIR или когда индексы создаются с CREATE INDEX или ALTER TABLE
--sort-indexСортируйте индексные блоки дерева в порядке high-low
--sort-recordsСортировать записи согласно индексу
--sort-recoverИспользовать сортировку, чтобы решить ключи, даже если временные файлы были бы очень большими
--stats_methodОпределяет, как код набора индексной статистики MyISAM должен обработать NULL
--tmpdirПуть к каталогу, который будет использоваться для того, чтобы хранить временные файлы
--unpackРаспакуйте таблицу, которая была упакована myisampack
--update-stateХраните информацию в .MYI, чтобы указать, когда таблица была проверена и повреждена ли таблица
--verboseПодробный режим
--versionПоказать информацию о версии
--write_buffer_sizeРазмер буфера записи

5.6.4.1. Основные опции myisamchk

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

Вы можете также установить следующие переменные при использовании --var_name=value:

Переменная Значение по умолчанию
decode_bits9
ft_max_word_lenversion-dependent
ft_min_word_len4
ft_stopword_fileВстроенный список
key_buffer_size523264
myisam_block_size1024
myisam_sort_key_blocks16
read_buffer_size262136
sort_buffer_size2097144
sort_key_blocks16
stats_methodnulls_unequal
write_buffer_size262136

Возможные переменные и их значения по умолчанию могут быть изучены с myisamchk --help :

myisam_sort_buffer_size используется, когда ключи отремонтированы, сортируя ключи, что является нормальным случаем, когда Вы используете --recover . sort_buffer_size устаревший синоним для myisam_sort_buffer_size.

key_buffer_size используется, когда Вы проверяете таблицу с --extend-check или когда ключи отремонтированы, вставляя ключевые строки поштучно в таблицу (как делают нормальные вставки). Восстановление через ключевой буфер используется в следующих случаях:

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

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

myisam_block_size размер, используемый для индексных блоков.

stats_method влияет на то, как значения NULL обработаны для набора индексной статистики, когда задана опция --analyze. Это действует как системная переменная myisam_stats_method. См. разделы 6.1.5 и 9.3.7.

ft_min_word_len и ft_max_word_len указывают на минимальную и максимальную длину слова для индексов FULLTEXT в таблицах MyISAM. ft_stopword_file имя файла стоп-слов. Они должны быть установлены при следующих обстоятельствах.

Если Вы используете myisamchk, чтобы выполнить работу, которая изменяет индексы таблицы (например, ремонт или анализ), индексы FULLTEXT пересозданы, используя значения по умолчанию параметров для минимальной и максимальной длины слова и файла стоп-слов, если Вы не определяете иначе. Это может привести к провалу попытки запросов.

Проблема происходит, потому что эти параметры известны только серверу. Они не сохранены в индексных файлах MyISAM. Чтобы избежать проблемы, если Вы изменили минимальную или максимальную длину слова или файл стоп-слов в сервере, определите те же самые ft_min_word_len, ft_max_word_len и ft_stopword_file в myisamchk, которые Вы используете для mysqld. Например, если Вы установили минимальную длину слова в 3, Вы можете восстановить таблицу с myisamchk:

shell> myisamchk --recover --ft_min_word_len=3 tbl_name.MYI
Чтобы гарантировать, что myisamchk и сервер используют те же самые значения для полнотекстовых параметров, Вы можете разместить каждый в обоих разделах [mysqld] и [myisamchk] файла опции:
[mysqld]
ft_min_word_len=3

[myisamchk]
ft_min_word_len=3
Альтернатива использованию myisamchk это применение REPAIR TABLE, ANALYZE TABLE, OPTIMIZE TABLE или ALTER TABLE. Эти запросы выполнены сервером, который знает надлежащие значения параметра.

5.6.4.2. Опции проверки myisamchk

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

5.6.4.3. Ремонтные опции myisamchk

myisamchk поддерживает следующие опции для операций ремонта таблицы (операции, выполненные, когда заданы опции вроде --recover или --safe-recover ):

5.6.4.4. Другие опции myisamchk

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

5.6.4.5. Получение информации о таблице с myisamchk

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

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

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

CREATE TABLE person (id INT NOT NULL AUTO_INCREMENT,
                     last_name VARCHAR(20) NOT NULL,
                     first_name VARCHAR(20) NOT NULL,
                     birthDATE, deathDATE, PRIMARY KEY (id),
                     INDEX (last_name, first_name), INDEX (birth))
                     MAX_ROWS = 1000000;
Предположите также, что у таблицы есть эти размеры индексного файла и файла с данными:
-rw-rw----  1 mysql  mysql  9347072 Aug 19 11:47 person.MYD
-rw-rw----  1 mysql  mysql  6066176 Aug 19 11:47 person.MYI
Пример вывода myisamchk -dvv :
MyISAM file: person
Record format: Packed
Character set: latin1_swedish_ci (8)
File-version:1
Creation time: 2009-08-19 16:47:41
Recover time:2009-08-19 16:47:56
Status:  checked,analyzed,optimized keys
Auto increment key:           1  Last value:              306688
Data records:            306688  Deleted blocks:               0
Datafile parts:          306688  Deleted data:                 0
Datafile pointer (bytes):     4  Keyfile pointer (bytes):      3
Datafile length:        9347072  Keyfile length:         6066176
Max datafile length: 4294967294  Max keyfile length: 17179868159
Recordlength: 54

table description:
Key Start Len Index   Type            Rec/key Root  Blocksize
1   2     4   unique  long            199328        1024
2   6     20  multip. varchar prefix  5123563520    1024
2   7     20          varchar         512
3   4     83  multip. uint24 NULL     3066886065152 1024

Field Start Length Nullpos Nullbit  Type
1     1     1
2     2     4              no zeros
3     6     21                      varchar
4     27    21                      varchar
5     48    31     1       no zeros
6     51    31     2       no zeros
Объяснения типов информации myisamchk даны здесь. Keyfile обращается к индексному файлу. Record и row это синонимы, как field и column .

Начальная часть табличного описания содержит эти значения:

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

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

Huff tree и Bits выведены на экран, если таблица была сжата myisampack . См. раздел 5.6.6.

Пример вывода myisamchk -eiv:

Checking MyISAM file: person
Data records:  306688   Deleted blocks: 0
- check file-size
- check record delete-chain
No recordlinks
- check key delete-chain
block_size 1024:
- check index reference
- check data record references index: 1
Key:  1:  Keyblocks used:  98%  Packed:0%  Max levels:  3
- check data record references index: 2
Key:  2:  Keyblocks used:  99%  Packed:   97%  Max levels:  3
- check data record references index: 3
Key:  3:  Keyblocks used:  98%  Packed:  -14%  Max levels:  3
Total:Keyblocks used:  98%  Packed:   89%

- check records and index references
*** LOTS OF ROW NUMBERS DELETED ***

Records:306688  M.recordlength: 25  Packed:83%
Recordspace used: 97% Empty space:   2% Blocks/Record:   1.00
Record blocks:306688  Delete blocks: 0
Record data: 7934464  Deleted data:  0
Lost space: 256512  Linkdata:1156096

User time 43.08, System time 1.68
Maximum resident set size 0, Integral resident set size 0
Non-physical pagefaults 0, Physical pagefaults 0, Swaps 0
Blocks in 0 out 7, Messages in 0 out 0, Signals 0
Voluntary context switches 0, Involuntary context switches 0
Maximum memory usage: 1046926 bytes (1023k)
Вывод myisamchk -eiv включает следующую информацию:

5.6.4.6. Использование памяти myisamchk

Распределение памяти важно, когда Вы выполняете myisamchk. myisamchk не использует больше памяти, чем значения, в которые установлены его связанные с памятью переменные. Если Вы собираетесь использовать myisamchk на очень больших таблицах, Вы должны сначала решить, сколько памяти Вы хотите, чтобы он использовал. Значение по умолчанию должно использовать только приблизительно 3 МБ, чтобы выполнить ремонт. При использовании больших значений Вы можете заставить myisamchk работать быстрее. Например, если Вы имеете в наличии больше 512 МБ RAM, Вы могли бы использовать такие опции (в дополнение к любым другим опциям, которые Вы могли бы определить):

shell> myisamchk --myisam_sort_buffer_size=256M \
                    --key_buffer_size=512M \
                    --read_buffer_size=64M --write_buffer_size=64M ...
Использование --myisam_sort_buffer_size=16M достаточно вероятно для большинства случаев.

Знайте, что myisamchk использует временные файлы в TMPDIR. Если TMPDIR указывает на файловую систему в памяти, ошибки памяти могут легко произойти. Если это происходит, выполните myisamchk с --tmpdir= dir_name, чтобы определить каталог в файловой системе, у которой есть больше пространства.

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

Если у Вас есть проблема с дисковым пространством во время ремонта, Вы можете попробовать --safe-recover вместо --recover.

5.6.5. myisamlog показ содержания файла системного журнала MyISAM

myisamlog обрабатывает содержание файла системного журнала MyISAM. Чтобы создать такой файл, запустите сервер с --log-isam=log_file.

Вызов myisamlog :

shell> myisamlog [options] [file_name
                    [tbl_name] ...]
Работа по умолчанию это обновление (-u). Если восстановление сделано (-r), все записи и возможно обновления и удаления сделаны, а ошибки только посчитаны. Имя файла системного журнала по умолчанию myisam.log, если не дана опция log_file. Если таблицы называют в командной строке, только те таблицы обновлены.

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

5.6.6. myisampack генератор сжатых таблиц MyISAM только для чтения

myisampack сжимает таблицы MyISAM. myisampack работает, сжимая каждый столбец в таблице отдельно. Обычно myisampack упаковывает файл с данными на 40%-70%.

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

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

Пожалуйста, отметьте следующее:

Вызов myisampack :

shell> myisampack [options] file_name ...
Каждый параметр имени файла должен быть названием индекса (.MYI). Если Вы не находитесь в каталоге базы данных, Вы должны определить путь к файлу. Допустимо опустить расширение .MYI.

После того, как Вы сжимаете таблицу myisampack, используйте myisamchk -rq для пересоздания индексов, см. раздел 5.6.4.

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

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

shell> ls -l station.*
-rw-rw-r--   1 montymy 994128 Apr 17 19:00 station.MYD
-rw-rw-r--   1 montymy  53248 Apr 17 19:00 station.MYI

shell> myisamchk -dvv station
MyISAM file: station
Isam-version:  2
Creation time: 1996-03-13 10:08:58
Recover time:  1997-02-02  3:06:43
Data records:  1192  Deleted blocks:  0
Datafile parts:1192  Deleted data:0
Datafile pointer (bytes): 2  Keyfile pointer (bytes): 2
Max datafile length:   54657023  Max keyfile length:   33554431
Recordlength:   834
Record format: Fixed length

table description:
Key Start Len Index   Type          Root  Blocksize Rec/key
1   2     4   unique  unsigned long 1024  1024      1
2   32    30  multip. text          10240 1024      1

Field Start Length Type
1     1     1
2     2     4
3     6     4
4     10    1
5     11    20
6     31    1
7     32    30
8     62    35
9     97    35
10    132   35
11    167   4
12    171   16
13    187   35
14    222   4
15    226   16
16    242   20
17    262   20
18    282   20
19    302   30
20    332   4
21    336   4
22    340   1
23    341   8
24    349   8
25    357   8
26    365   2
27    367   2
28    369   4
29    373   4
30    377   1
31    378   2
32    380   8
33    388   4
34    392   4
35    396   4
36    400   4
37    404   1
38    405   4
39    409   4
40    413   4
41    417   4
42    421   4
43    425   4
44    429   20
45    449   30
46    479   1
47    480   1
48    481   79
49    560   79
50    639   79
51    718   79
52    797   8
53    805   1
54    806   1
55    807   20
56    827   4
57    831   4

shell> myisampack station.MYI
Compressing station.MYI: (1192 records)
- Calculating statistics

normal: 20  empty-space:   16  empty-zero: 12  empty-fill:  11
pre-space:   0  end-space: 12  table-lookups:   5  zero: 7
Original trees:  57  After join: 17
- Compressing file
87.14%
Remember to run myisamchk -rq on compressed tables

shell> myisamchk -rq station
- check record delete-chain
- recovering (with sort) MyISAM-table 'station'
Data records: 1192
- Fixing index 1
- Fixing index 2

shell> mysqladmin -uroot flush-tables
shell> ls -l station.*
-rw-rw-r--   1 montymy 127874 Apr 17 19:00 station.MYD
-rw-rw-r--   1 montymy  55296 Apr 17 19:04 station.MYI

shell> myisamchk -dvv station
MyISAM file: station
Isam-version:  2
Creation time: 1996-03-13 10:08:58
Recover time:  1997-04-17 19:04:26
Data records:   1192  Deleted blocks:  0
Datafile parts: 1192  Deleted data:0
Datafile pointer (bytes):3  Keyfile pointer (bytes): 1
Max datafile length:16777215  Max keyfile length: 131071
Recordlength:834
Record format: Compressed

table description:
Key Start Len Index   Type          Root     Blocksize Rec/key
1   2     4   unique  unsigned long 10240    1024      1
2   32    30  multip. text          54272    1024      1

Field   Start Length Type                               Huff tree  Bits
1       1     1      constant                           1          0
2       2     4      zerofill(1)                        2          9
3       6     4      no zeros, zerofill(1)              2          9
4       10    1                                         3          9
5       11    20     table-lookup                       4          0
6       31    1                                         3          9
7       32    30     no endspace, not_always            5          9
8       62    35     no endspace, not_always, no empty  6          9
9       97    35     no empty                           7          9
10      132   35     no endspace, not_always, no empty  6          9
11      167   4      zerofill(1)                        2          9
12      171   16     no endspace, not_always, no empty  5          9
13      187   35     no endspace, not_always, no empty  6          9
14      222   4      zerofill(1)                        2          9
15      226   16     no endspace, not_always, no empty  5          9
16      242   20     no endspace, not_always            8          9
17      262   20     no endspace, no empty              8          9
18      282   20     no endspace, no empty              5          9
19      302   30     no endspace, no empty              6          9
20      332   4      always zero                        2          9
21      336   4      always zero                        2          9
22      340   1                                         3          9
23      341   8      table-lookup                       9          0
24      349   8      table-lookup                       10         0
25      357   8      always zero                        2          9
26      365   2                                         2          9
27      367   2      no zeros, zerofill(1)              2          9
28      369   4      no zeros, zerofill(1)              2          9
29      373   4      table-lookup                       11         0
30      377   1                                         3          9
31      378   2      no zeros, zerofill(1)              2          9
32      380   8      no zeros                           2          9
33      388   4      always zero                        2          9
34      392   4      table-lookup                       12         0
35      396   4      no zeros, zerofill(1)              13         9
36      400   4      no zeros, zerofill(1)              2          9
37      404   1                                         2          9
38      405   4      no zeros                           2          9
39      409   4      always zero                        2          9
40      413   4      no zeros                           2          9
41      417   4      always zero                        2          9
42      421   4      no zeros                           2          9
43      425   4      always zero                        2          9
44      429   20     no empty                           3          9
45      449   30     no empty                           3          9
46      479   1                                         14         4
47      480   1                                         14         4
48      481   79     no endspace, no empty              15         9
49      560   79     no empty                           2          9
50      639   79     no empty                           2          9
51      718   79     no endspace                        16         9
52      797   8      no empty                           2          9
53      805   1                                         17         1
54      806   1                                         3          9
55      807   20     no empty                           3          9
56      827   4      no zeros, zerofill(2)              2          9
57      831   4      no zeros, zerofill(1)              2          9
myisampack выводит на экран следующие виды информации:

После того, как таблица была сжата, строки Field, выведенные на экран myisamchk -dvv , включают дополнительную информацию о каждом столбце:

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

shell> myisamchk -rq --sort-index --analyze tbl_name.MYI
После того, как Вы установили упакованную таблицу в каталог базы данных MySQL, Вы должны выполнить mysqladmin flush-tables, чтобы mysqld начал использовать новую таблицу.

Чтобы распаковать упакованную таблицу, используйте опцию --unpack в myisamchk.

5.6.7. mysql_config_editor утилита конфигурации MySQL

mysql_config_editor позволяет Вам сохранить параметры аутентификации в зашифрованном файле пути входа в систему .mylogin.cnf . Местоположение файла %APPDATA%\MySQL в Windows и корневой каталог текущего пользователя на системах не-Windows. Файл может быть считан позже программами клиента MySQL, чтобы получить параметры аутентификации для того, чтобы соединиться с MySQL Server.

Незашифрованный формат .mylogin.cnf состоит из групп опции, подобных другим файлам опции. Каждая группа опций в .mylogin.cnf называется login path, который является группой, которая разрешает только определенные опции: host, user, password, port и socket. Думайте о группе опции пути входа в систему как о ряде опций, которые определяют, с каким сервером MySQL соединиться и которые указывают, как подтвердить подлинность. Вот незашифрованный пример:

[client]
user = mydefaultname
password = mydefaultpass
host = 127.0.0.1
[mypath]
user = myothername
password = myotherpass
host = localhost
Когда Вы вызываете программу клиента, чтобы соединиться с сервером, клиент использует .mylogin.cnf в соединении с другими файлами опции. Его приоритет выше, чем другие файлы опции, но меньше чем опции, определенные явно в командной строке клиента. Для информации о порядке, в котором используются файлы опции, см. раздел 5.2.6.

Чтобы определить дополнительное имя файла пути входа в систему, установите переменную окружения MYSQL_TEST_LOGIN_FILE. Эта переменная признана mysql_config_editor, стандартными клиентами MySQL (mysql, mysqladmin и т.д.) и утилитой тестирования mysql-test-run.pl .

Программы используют группы в файле пути входа в систему следующим образом:

mysql_config_editor шифрует файл .mylogin.cnf, таким образом, это не может быть считано как открытый текст и его содержание, когда дешифровано программами клиента, используется только в памяти. Таким образом, пароли могут быть сохранены в файле в формате не открытого текста и использоваться позже, никогда не будучи выставленными в командной строке или в переменной окружения. mysql_config_editor обеспечивает команду print для того, чтобы вывести на экран содержание файла пути входа в систему, но даже в этом случае значения пароля замаскированы, чтобы никогда не появляться так, чтобы другие пользователи могли увидеть их.

Шифрование, используемое mysql_config_editor препятствует тому, чтобы пароли появились в .mylogin.cnf как открытый текст и обеспечивает меры безопасности, предотвращая небрежное хранение пароля. Например, если Вы выводите на экран незашифрованный файл опций клиента my.cnf, любые пароли, которые это содержит, видимы для любого. С .mylogin.cnf это не истина. Но используемое шифрование не будет удерживать решительного нападавшего, и Вы не должны считать это невскрываемым. Пользователь, который может получить привилегии системного администрирования на Вашей машине, чтобы получить доступ к Вашим файлам, может дешифровать .mylogin.cnf с некоторым усилием.

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

Вызов mysql_config_editor:

shell> mysql_config_editor [program_options]
                               command
                               [command_options]
Если файл пути входа в систему не существует, mysql_config_editor его создаст автоматически.

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

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

shell> mysql_config_editor --help set
shell> mysql_config_editor set --help
Первая командная строка выводит на экран общее сообщение справки mysql_config_editor и игнорирует команду set. Вторая командная строка выводит на экран сообщение справки, определенное именно для команды set.

Предположите, что Вы хотите установить путь входа в систему client, который определяет Ваши параметры соединения по умолчанию, и дополнительный путь входа в систему remote для того, чтобы соединить с сервером MySQL хост remote.example.com. Вы хотите войти в систему следующим образом:

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

shell> mysql_config_editor set --login-path=client
                --host=localhost --user=localuser --password
Enter password: enter password "localpass" here

shell> mysql_config_editor set --login-path=remote
                --host=remote.example.com --user=remoteuser --password
Enter password: enter password "remotepass" here
mysql_config_editor использует путь входа в систему по умолчанию client, таким образом, опция --login-path=client может быть опущена в первой команде, не изменяя ее эффект.

Чтобы увидеть, что mysql_config_editor пишет в файл .mylogin.cnf, используйте команду print:

shell> mysql_config_editor print --all
[client]
user = localuser
password = *****
host = localhost
[remote]
user = remoteuser
password = *****
host = remote.example.com
Команда print выводит на экран каждый путь входа в систему как ряд строк, начинающихся с группового заголовка, указывающего на путь входа в систему в квадратных скобках, сопровождаемых значениями опции для пути входа в систему. Значения пароля замаскированы и не появляются как открытый текст.

Если Вы не определяете --all, чтобы вывести на экран все пути входа в систему или --login-path=name, чтобы вывести на экран названный путь входа в систему, команда print выводит на экран путь входа в систему по умолчанию client, если он есть.

Как показано предыдущим примером, файл пути входа в систему может содержать многократные пути входа в систему. Таким образом, mysql_config_editor облегчает настройку многих multiple персонализаций для того, чтобы соединиться с различными серверами MySQL или для того, чтобы соединиться с данным сервером, используя различные учетные записи. Любая из них может быть выбрана по имени через опцию --login-path, когда Вы вызываете программу клиента. Например, чтобы соединиться с удаленным сервером, используйте эту команду:

shell> mysql --login-path=remote
mysql читает группы опции [client] и [mysql] из других файлов опции и группы [client], [mysql] и [remote] из файла пути входа в систему.

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

shell> mysql --login-path=client
Так как mysql читает пути входа в систему по умолчанию client и mysql, --login-path ничего не добавляет в этом случае. Команда эквивалентна:
shell> mysql
Опции, считанные из файла пути входа в систему, имеют приоритет перед опциями, считанным из других файлов опции. Опции, считанные из групп пути входа в систему, упомянутых позже в файле пути входа в систему, имеют приоритет перед опциями из групп, приведенных ранее в файле.

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

Когда Вы используете команду set с mysql_config_editor , чтобы создать путь входа в систему, Вы не должны определить все возможные значения опций (имя хоста, имя пользователя, пароль, порт, сокет). Любые недостающие значения позже могут быть определены, когда Вы вызываете путь клиента, чтобы соединиться с сервером MySQL, в других файлах опции или в командной строке. Любые опции, определенные в командной строке, переопределяют определенные в файле пути входа в систему или других файлах опции. Например, если параметры пути входа в систему remote также применимы к хосту remote2.example.com, соединитесь с сервером на том хосте примерно так:

shell> mysql --login-path=remote --host=remote2.example.com

Основные опции mysql_config_editor

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

Таблица 5.17. Основные опции mysql_config_editor

ФорматОписание
--debug Писать журнал отладки
--helpОтобразить справочное сообщение
--verboseПодробный режим
--versionИнформация о версии

Команды и определенные для команды опции mysql_config_editor

Этот раздел описывает разрешенные команды mysql_config_editor и, для каждой, определенные для команды опции после названия команды в командной строке.

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

mysql_config_editor поддерживает эти команды:

5.6.8. mysqlbinlog утилита для обработки двоичных файлов системного журнала

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

Вызов mysqlbinlog :

shell> mysqlbinlog [options] log_file ...
Например, чтобы вывести на экран содержание двоичного файла системного журнала binlog.000003 надо:
shell> mysqlbinlog binlog.0000003
Вывод включает события, содержавшиеся в binlog.000003. Для основанного на запросе журналирования информация о событии включает запрос SQL, идентификатор сервера, на котором это было выполнено, timestamp, когда запрос было выполнено, сколько времени потребовалось и т.д. Для основанного на строке журналирования событие указывает на изменение строки, а не запрос SQL. См. раздел 19.2.1.

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

# at 141
#100309  9:28:36 server id 123  end_log_pos 245
  Query thread_id=3350  exec_time=11  error_code=0
В первой строке чисор после at указывает на смещение файла или стартовую позицию события в двоичном файле системного журнала.

Вторая строка начинается с даты и времени, указывая, когда запрос запускался на сервере, где событие произошло. Для репликации этот timestamp размножен к ведомым серверам. server id это server_id сервера, где событие произошло. end_log_pos указывает, где следующее событие начинается (то есть, это позиция конца текущего события + 1). thread_id указывает, какой поток запускал событие. exec_time потраченное на выполнение время на главном сервере. На ведомом устройстве это время конца выполнения на ведомом устройстве минус время начала выполнения на ведущем устройстве. Различие служит индикатором того, на сколько репликация отстает от ведущего устройства. error_code указывает на результат выполнения события. Ноль означает, что никакая ошибка не произошла.

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

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

Обычно Вы используете mysqlbinlog, чтобы считать двоичные файлы системного журнала непосредственно и применить их к местному серверу MySQL. Также возможно считать двоичные журналы из удаленного сервера при использовании опции --read-from-remote-server. Чтобы считать удаленные двоичные журналы, опции параметра соединения могут быть даны, чтобы указать, как соединиться с сервером. Это опции --host, --password , --port, --protocol , --socket и --user , они проигнорированы кроме тех случаев, когда Вы также используете --read-from-remote-server.

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

mysqlbinlog поддерживает следующие опции, которые могут быть определены в командной строке или в группах [mysqlbinlog] и [client] файла опции. Для информации о файлах опции, используемых программами MySQL, см. раздел 5.2.6.

Таблица 5.18. Опции mysqlbinlog

ФорматОписание
--base64-output Напечатайте двоичные записи журнала, используя кодировку base-64
--bind-addressИспользуйте определенный сетевой интерфейс, чтобы соединиться с MySQL Server
--binlog-row-event-max-size Максимальный размер событий двоичного журнала
--character-sets-dirКаталог, где наборы символов установлены
--connection-server-idИспользуется для тестирования и отладки. См. текст для применимых значений по умолчанию и других подробных сведений
--databaseЗаписи списка только для этой базы данных
--debugПисать журнал ошибок
--debug-checkИнформация об отладке, когда программа выходит
--debug-infoИнформация об отладке, памяти и статистика центрального процессора, когда программа выходит
--default-authПлагин аутентификации, чтобы использовать
--defaults-extra-fileЧитать этот файл опции в дополнение к обычным файлам опции
--defaults-fileЧитать только этот файл опции
--defaults-group-suffixГрупповое значение суффикса опции
--disable-log-binОтключите двоичное журналирование
--exclude-gtidsНе показывайте группы в наборе GTID
--force-if-openСчитайте двоичные файлы системного журнала даже если они открыты или не закрыты должным образом
--force-readЕсли mysqlbinlog читает событие двоичного журнала, которое он не понял, он печатает предупреждение
--help Отобразить сообщение справки
--hexdumpВыведите на экран шестнадцатеричный дамп журнала в комментариях
--hostСоединитесь с сервером MySQL на данном хосте
--idempotentЗаставьте сервер использовать идемпотентный режим, обрабатывая двоичные обновления журнала только от этого сеанса
--include-gtidsПокажите только группы в обеспеченном наборе GTID
--local-loadПодготовьте местные временные файлы к LOAD DATA INFILE в указанном каталоге
--login-pathСчитайте опции пути входа в систему из .mylogin.cnf
--no-defaultsНе читать файлы опций
--offset Пропустите первые N записей в журнале
--passwordПароль, чтобы использовать, соединяясь с сервером
--plugin-dirКаталог, где плагины установлены
--port Номер порта TCP/IP, чтобы использовать для соединения
--print-defaultsНапечатайте опции по умолчанию
--protocolПротокол для соединения
--raw Напишите события в сыром (двоичном) формате в выходные файлы
--read-from-remote-masterСчитайте двоичный журнал с ведущего устройства MySQL вместо того, чтобы читать местный файл системного журнала
--read-from-remote-serverСчитайте двоичный журнал с сервера MySQL, а не местный файл системного журнала
--result-fileПрямой вывод к названному файлу
--rewrite-dbСоздайте правила подстановки для баз данных, воспроизводя от журналов, написанных в основанном на строке формате. Может использоваться многократно.
--secure-authНе посылайте пароли в сервер в старом формате (pre-4.1)
--server-idИзвлеките только события, создаваемые сервером, имеющим данный идентификатор сервера
--server-id-bits Скажите mysqlbinlog, как интерпретировать server ID в двоичном журнале, когда журнал был написан mysqld, у которого его server-id-bits меньше, чем максимум, поддержано только версией MySQL Cluster mysqlbinlog
--set-charsetДобавить SET NAMES charset_name в вывод
--shared-memory-base-nameНазвание совместно используемой памяти, чтобы использовать для соединений совместно используемой памяти
--short-formВыведите на экран только запросы, содержавшиеся в журнале
--skip-gtidsНе печатайте GTID, используйте это при записи файла дампа от двоичных журналов, содержащих GTID
--socket Для соединений с localhost файл сокета Unix
--ssl-ca Путь к файлу, который содержит список доверенных SSL CA
--ssl-capathПуть к каталогу, который содержит доверенные сертификаты SSL CA в формате PEM
--ssl-certПуть к файлу, который содержит сертификат X509 в формате PEM
--ssl-cipherСписок разрешенных шифров, чтобы использовать для шифрования соединения
--ssl-crlПуть к файлу, который содержит списки аннулирования сертификатов
--ssl-crlpathПуть к каталогу, который содержит файлы списка аннулирования сертификатов
--ssl-keyПуть к файлу, который содержит ключ X509 в формате PEM
--ssl-modeСтатус безопасности соединения с сервером
--start-datetimeСчитайте двоичный журнал с первого события с timestamp, равным или позже, чем параметр datetime
--start-positionСчитайте двоичный журнал с первого события с позицией, равной или больше, чем параметр
--stop-datetimeПрекратите читать двоичный журнал на первом событии с timestamp, равным или больше, чем параметр datetime
--stop-neverОстаньтесь соединенными с сервером после чтения последнего двоичного файла системного журнала
--stop-never-slave-server-idИдентификатор ведомого сервера
--stop-positionПрекратите читать двоичный журнал на первом событии с позицией, равной или больше, чем параметр
--tls-versionПротоколы для безопасных соединений
--to-last-logНе останавливайтесь в конце требуемого двоичного журнала с сервера MySQL, а продолжайте печать до конца последнего двоичного журнала
--user Имя пользователя MySQL
--verboseВосстановите события строки как запросы SQL
--verify-binlog-checksum Проверьте контрольные суммы в двоичном журнале
--versionОтобразить информацию о версии

Вы можете также установить следующую переменную при использовании --var_name=value:

Вы можете передать вывод mysqlbinlog по каналу в mysql, чтобы запустить события, содержавшиеся в двоичном журнале. Этот метод используется, чтобы восстановиться от катастрофического отказа, когда у Вас есть старая резервная копия (см. раздел 8.5 ):

shell> mysqlbinlog binlog.000001 | mysql -u root -p
Или:
shell> mysqlbinlog binlog.[0-9]* | mysql -u root -p
Если запросы, произведенные mysqlbinlog, могут содержать значения BLOB, они могут вызвать проблемы, когда mysql их обрабатывает. В этом случае вызовите mysql с опцией --binary-mode .

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

shell> mysqlbinlog binlog.000001 > tmpfile
shell> ... edit tmpfile ...
shell> mysql -u root -p < tmpfile
Когда mysqlbinlog вызван с --start-position, это выводит на экран только события со смещением в двоичном журнале больше чем или равным данной позиции (данная позиция должна соответствовать началу одного события). Также есть опции, чтобы остановиться и запуститься, когда это видит событие с данной датой и временем. Это позволяет Вам выполнить восстановление момента времени, используя --stop-datetime (чтобы быть в состоянии сказать, например, продвинуть вперёд мои базы данных к тому состоянию, в каком они были сегодня в 10:30 a.m.).

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

shell> mysqlbinlog binlog.000001 | mysql -u root -p # DANGER!!
shell> mysqlbinlog binlog.000002 | mysql -u root -p # DANGER!!
Обработка двоичных журналов этим способом использует много соединений и создает проблему, если первый файл системного журнала содержит CREATE TEMPORARY TABLE, а второй содержит запрос, которое использует временную таблицу. Когда первый процесс mysql заканчивается, сервер удаляет временную таблицу. Когда второй процесс mysql пытается использовать таблицу, сервер сообщает unknown table.

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

shell> mysqlbinlog binlog.000001 binlog.000002 | mysql -u root -p
Другой подход должен написать все журналы в один файл и затем обработать файл:
shell> mysqlbinlog binlog.000001 >  /tmp/statements.sql
shell> mysqlbinlog binlog.000002 >> /tmp/statements.sql
shell> mysql -u root -p -e "source /tmp/statements.sql"
mysqlbinlog может произвести вывод, который воспроизводит LOAD DATA INFILE без оригинального файла с данными. mysqlbinlog копирует данные к временному файлу и пишет LOAD DATA LOCAL INFILE, который относится к файлу. Местоположение каталога по умолчанию, где эти файлы написаны, является определенным для системы. Чтобы определить каталог явно, используйте --local-load .

Так как mysqlbinlog преобразовывает LOAD DATA INFILE в LOAD DATA LOCAL INFILE (то есть, добавляет LOCAL), клиент и сервер, который Вы используете, чтобы обработать запросы, должны быть сконфигурированы с включенной поддержкой LOCAL, см. раздел 7.1.6.

Временные файлы, создаваемые для LOAD DATA LOCAL, не удалены автоматически, потому что они необходимы, пока Вы фактически не выполняете те запросы. Вы должны удалить временные файлы самостоятельно после того, как Вы больше не нуждаетесь в журнале. Файлы могут быть найдены во временном каталоге и иметь имена вроде original_file_name-#-#.

5.6.8.1. Формат шестнадцатеричного дампа mysqlbinlog

--hexdump предписывает mysqlbinlog производить шестнадцатеричный дамп содержания двоичного журнала:

shell> mysqlbinlog --hexdump master-bin.000001
Шестнадцатеричный вывод состоит из строк, начинающихся с комментария #, таким образом, вывод мог бы быть похожим на это для предыдущей команды:
/*!40019 SET @@session.max_insert_delayed_threads=0*/;
/*!50003 SET @OLD_COMPLETION_TYPE=@@COMPLETION_TYPE,COMPLETION_TYPE=0*/;
# at 4
#051024 17:24:13 server id 1  end_log_pos 98
# Position  Timestamp   Type   Master ID SizeMaster PosFlags
# 00000004 9d fc 5c 43   0f   01 00 00 00   5e 00 00 00   62 00 00 00   00 00
# 00000017 04 00 35 2e 30 2e 31 35  2d 64 65 62 75 67 2d 6c |..5.0.15.debug.l|
# 00000027 6f 67 00 00 00 00 00 00  00 00 00 00 00 00 00 00 |og..............|
# 00000037 00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00 |................|
# 00000047 00 00 00 00 9d fc 5c 43  13 38 0d 00 08 00 12 00 |.......C.8......|
# 00000057 04 04 04 04 12 00 00 4b  00 04 1a|.......K...|
# Start: binlog v 4, server v 5.0.15-debug-log created 051024 17:24:13
# at startup
ROLLBACK;
Вывод дампа в настоящее время содержит элементы в следующем списке. Этот формат подвержен изменениям. Для получения дополнительной информации о двоичном формате журнала см. MySQL Internals: The Binary Log.

5.6.8.2. Показ строк событий в mysqlbinlog

Следующие примеры иллюстрируют, как mysqlbinlog выводит на экран события строки, которые определяют модификации данных. Они соответствуют событиям с кодами типов WRITE_ROWS_EVENT, UPDATE_ROWS_EVENT и DELETE_ROWS_EVENT. Опции --base64-output=DECODE-ROWS и --verbose могут использоваться, чтобы затронуть вывод строки событий.

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

CREATE TABLE t (id INT NOT NULL, name VARCHAR(20) NOT NULL,
                date DATE NULL) ENGINE = InnoDB;
START TRANSACTION;
INSERT INTO t VALUES(1, 'apple', NULL);
UPDATE t SET name = 'pear', date = '2009-01-01' WHERE id = 1;
DELETE FROM t WHERE id = 1;
COMMIT;
По умолчанию mysqlbinlog выводит на экран события строки, закодированные как строки base-64 с использованием BINLOG. Опуская посторонние строки, вывод для событий строки, произведенных предыдущей последовательностью запросов, похож на это:
shell> mysqlbinlog log_file
...
# at 218
#080828 15:03:08 server id 1  end_log_pos 258   Write_rows: table id 17 flags: STMT_END_F

BINLOG '
fAS3SBMBAAAALAAAANoAAAAAABEAAAAAAAAABHRlc3QAAXQAAwMPCgIUAAQ=
fAS3SBcBAAAAKAAAAAIBAAAQABEAAAAAAAEAA//8AQAAAAVhcHBsZQ==
'/*!*/;
...
# at 302
#080828 15:03:08 server id 1  end_log_pos 356   Update_rows: table id 17 flags: STMT_END_F

BINLOG '
fAS3SBMBAAAALAAAAC4BAAAAABEAAAAAAAAABHRlc3QAAXQAAwMPCgIUAAQ=
fAS3SBgBAAAANgAAAGQBAAAQABEAAAAAAAEAA////AEAAAAFYXBwbGX4AQAAAARwZWFyIbIP
'/*!*/;
...
# at 400
#080828 15:03:08 server id 1  end_log_pos 442   Delete_rows: table id 17 flags: STMT_END_F

BINLOG '
fAS3SBMBAAAALAAAAJABAAAAABEAAAAAAAAABHRlc3QAAXQAAwMPCgIUAAQ=
fAS3SBkBAAAAKgAAALoBAAAQABEAAAAAAAEAA//4AQAAAARwZWFyIbIP
'/*!*/;
Чтобы рассмотреть события строки как комментарии в форме pseudo-SQL, выполните mysqlbinlog с --verbose или -v. Вывод будет содержать строки, начинающиеся с ###:
shell> mysqlbinlog -v log_file
...
# at 218
#080828 15:03:08 server id 1  end_log_pos 258   Write_rows: table id 17 flags: STMT_END_F

BINLOG '
fAS3SBMBAAAALAAAANoAAAAAABEAAAAAAAAABHRlc3QAAXQAAwMPCgIUAAQ=
fAS3SBcBAAAAKAAAAAIBAAAQABEAAAAAAAEAA//8AQAAAAVhcHBsZQ==
'/*!*/;
### INSERT INTO test.t
### SET
###   @1=1
###   @2='apple'
###   @3=NULL
...
# at 302
#080828 15:03:08 server id 1  end_log_pos 356   Update_rows: table id 17 flags: STMT_END_F

BINLOG '
fAS3SBMBAAAALAAAAC4BAAAAABEAAAAAAAAABHRlc3QAAXQAAwMPCgIUAAQ=
fAS3SBgBAAAANgAAAGQBAAAQABEAAAAAAAEAA////AEAAAAFYXBwbGX4AQAAAARwZWFyIbIP
'/*!*/;
### UPDATE test.t
### WHERE
###   @1=1
###   @2='apple'
###   @3=NULL
### SET
###   @1=1
###   @2='pear'
###   @3='2009:01:01'
...
# at 400
#080828 15:03:08 server id 1  end_log_pos 442   Delete_rows: table id 17 flags: STMT_END_F

BINLOG '
fAS3SBMBAAAALAAAAJABAAAAABEAAAAAAAAABHRlc3QAAXQAAwMPCgIUAAQ=
fAS3SBkBAAAAKgAAALoBAAAQABEAAAAAAAEAA//4AQAAAARwZWFyIbIP
'/*!*/;
### DELETE FROM test.t
### WHERE
###   @1=1
###   @2='pear'
###   @3='2009:01:01'
Определите --verbose или -v дважды, чтобы также вывести на экран типы данных и некоторые метаданные для каждого столбца. Вывод будет содержать дополнительный комментарий после каждого изменения столбца:
shell> mysqlbinlog -vv log_file
...
# at 218
#080828 15:03:08 server id 1  end_log_pos 258   Write_rows: table id 17 flags: STMT_END_F

BINLOG '
fAS3SBMBAAAALAAAANoAAAAAABEAAAAAAAAABHRlc3QAAXQAAwMPCgIUAAQ=
fAS3SBcBAAAAKAAAAAIBAAAQABEAAAAAAAEAA//8AQAAAAVhcHBsZQ==
'/*!*/;
### INSERT INTO test.t
### SET
###   @1=1 /* INT meta=0 nullable=0 is_null=0 */
###   @2='apple' /* VARSTRING(20) meta=20 nullable=0 is_null=0 */
###   @3=NULL /* VARSTRING(20) meta=0 nullable=1 is_null=1 */
...
# at 302
#080828 15:03:08 server id 1  end_log_pos 356   Update_rows: table id 17 flags: STMT_END_F

BINLOG '
fAS3SBMBAAAALAAAAC4BAAAAABEAAAAAAAAABHRlc3QAAXQAAwMPCgIUAAQ=
fAS3SBgBAAAANgAAAGQBAAAQABEAAAAAAAEAA////AEAAAAFYXBwbGX4AQAAAARwZWFyIbIP
'/*!*/;
### UPDATE test.t
### WHERE
###   @1=1 /* INT meta=0 nullable=0 is_null=0 */
###   @2='apple' /* VARSTRING(20) meta=20 nullable=0 is_null=0 */
###   @3=NULL /* VARSTRING(20) meta=0 nullable=1 is_null=1 */
### SET
###   @1=1 /* INT meta=0 nullable=0 is_null=0 */
###   @2='pear' /* VARSTRING(20) meta=20 nullable=0 is_null=0 */
###   @3='2009:01:01' /* DATE meta=0 nullable=1 is_null=0 */
...
# at 400
#080828 15:03:08 server id 1  end_log_pos 442   Delete_rows: table id 17 flags: STMT_END_F

BINLOG '
fAS3SBMBAAAALAAAAJABAAAAABEAAAAAAAAABHRlc3QAAXQAAwMPCgIUAAQ=
fAS3SBkBAAAAKgAAALoBAAAQABEAAAAAAAEAA//4AQAAAARwZWFyIbIP
'/*!*/;
### DELETE FROM test.t
### WHERE
###   @1=1 /* INT meta=0 nullable=0 is_null=0 */
###   @2='pear' /* VARSTRING(20) meta=20 nullable=0 is_null=0 */
###   @3='2009:01:01' /* DATE meta=0 nullable=1 is_null=0 */
Вы можете сказать mysqlbinlog подавлять BINLOG для событий строки при использовании опции --base64-output=DECODE-ROWS. Это подобно --base64-output=NEVER, но не выходит с ошибкой, если событие строки найдено. Комбинация --base64-output=DECODE-ROWS и --verbose обеспечивает удобный способ рассмотреть события строки только как запросы SQL:
shell> mysqlbinlog -v --base64-output=DECODE-ROWS log_file
...
# at 218
#080828 15:03:08 server id 1  end_log_pos 258   Write_rows: table id 17 flags: STMT_END_F
### INSERT INTO test.t
### SET
###   @1=1
###   @2='apple'
###   @3=NULL
...
# at 302
#080828 15:03:08 server id 1  end_log_pos 356   Update_rows: table id 17 flags: STMT_END_F
### UPDATE test.t
### WHERE
###   @1=1
###   @2='apple'
###   @3=NULL
### SET
###   @1=1
###   @2='pear'
###   @3='2009:01:01'
...
# at 400
#080828 15:03:08 server id 1  end_log_pos 442   Delete_rows: table id 17 flags: STMT_END_F
### DELETE FROM test.t
### WHERE
###   @1=1
###   @2='pear'
###   @3='2009:01:01'

Вы не должны подавить BINLOG, если Вы намереваетесь повторно выполнить вывод mysqlbinlog .

Запросы SQL, произведенные --verbose для строки события намного больше читаемы, чем соответствующие BINLOG. Однако, они не соответствуют точно оригинальным запросам SQL, которые произвели события. Следующие ограничения применяются:

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

Если двоичной журнал не содержит какие-либо события, требующие BINLOG (то есть, никаких событий строки), --base64-output=NEVER может использоваться, чтобы препятствовать тому, чтобы этот заголовок был написан.

5.6.8.3. Применение mysqlbinlog для резервирования двоичных файлов системного журнала

По умолчанию mysqlbinlog читает двоичные файлы системного журнала и выводит на экран их содержание в текстовом формате. Это позволяет Вам изучить события в пределах файлов более легко и повторно выполнить их (например, при использовании вывода как входа для mysql). mysqlbinlog может считать файлы системного журнала непосредственно из местной файловой системы или с опцией --read-from-remote-server это может соединиться с сервером и запросить содержание журнала с того сервера. mysqlbinlog пишет текстовый вывод на стандартный вывод или в файл, названный как значение опции --result-file=file_name, если та опция дана.

mysqlbinlog может считать двоичные файлы системного журнала и написать новые файлы, содержащие тот же самый контент, то есть, в текстовом, а не в двоичном формате. Эта способность позволяет легко поддержать журнал регистрации в его оригинальном формате. mysqlbinlog может сделать статическое резервное копирование, поддерживая ряд файлов системного журнала и останавливаясь, когда конец последнего файла достигнут. Это может также сделать непрерывное (живое) резервное копирование, оставаясь соединенным с сервером, когда это достигает конца последнего файла системного журнала и продолжая копировать новые события, когда они произведены. В непрерывно-резервной работе mysqlbinlog выполняется до конца соединения (например, когда сервер завершается) или mysqlbinlog явно закончен. Когда соединение заканчивается, mysqlbinlog не ждет и повторяет соединение, в отличие от ведомого сервера репликации. Чтобы продолжить живое резервное копирование после того, как сервер был перезапущен, Вы должны также перезапустить mysqlbinlog .

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

Наряду с --read-from-remote-server, стоит определить другие опции: --host указывает, где сервер работает, и Вы, возможно, также должны определить такие опции соединения, как --user и --password.

Несколько других опций полезны в соединении с --raw:

Чтобы поддержать двоичные файлы системного журнала сервера с mysqlbinlog , Вы должны определить имена файла, которые фактически существуют на сервере. Если Вы не знаете имена, соединяетесь с сервером и используете SHOW BINARY LOGS, чтобы видеть текущие имена. Предположите, что запрос производит этот вывод:

mysql> SHOW BINARY LOGS;
+---------------+-----------+
| Log_name      | File_size |
+---------------+-----------+
| binlog.000130 | 27459     |
| binlog.000131 | 13719     |
| binlog.000132 | 43268     |
+---------------+-----------+
С этой информацией Вы можете использовать mysqlbinlog , чтобы поддержать двоичной журнал к текущему каталогу следующим образом (введите каждую команду в одну строку):

Выходное обозначение файла

Без --raw mysqlbinlog производит текстовый вывод, и если есть опция --result-file , определяет название единственного файла, в который написан весь вывод. С --raw mysqlbinlog пишет один файл вывода для каждого файла системного журнала, переданного с сервера. По умолчанию mysqlbinlog пишет файлы в текущем каталоге с теми же самыми именами, как оригинальные файлы системного журнала. Чтобы изменить выходные имена файла, используйте --result-file . В соединении с --raw значение опции --result-file обработано как приставка, которая изменяет выходные имена файлов.

Предположите, что серверу в настоящее время указали файлы системного журнала binlog.000999 и выше. Если Вы используете mysqlbinlog --raw , чтобы зарезервировать файлы, --result-file производит выходные имена файла как показано в следующей таблице. Вы можете написать файлы в определенный каталог, используя --result-file с путем к каталогу. Если --result-file состоит только из имени каталога, значение должно закончиться символом разделителя пути. Выходные файлы перезаписаны, если они существуют.

Опция --result-fileВыходные имена файла
--result-file=x xbinlog.000999 и выше
--result-file=/tmp/ /tmp/binlog.000999 и выше
--result-file=/tmp/x /tmp/xbinlog.000999 и выше
Пример: mysqldump + mysqlbinlog для резервного копирования и восстановления

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

Используйте mysqlbinlog , чтобы сделать непрерывное резервное копирование двоичного журнала:

mysqlbinlog --read-from-remote-server --host=host_name
            --raw --stop-never binlog.000999
Используйте mysqldump , чтобы создать файл дампа как снимок данных сервера. Используйте --all-databases, --events и --routines, чтобы зарезервировать все данные и --master-data=2 , чтобы включить текущие координаты двоичного журнала в файл дампа.
mysqldump --host=host_name --all-databases --events \
          --routines --master-data=2dump_file
Выполните mysqldump периодически, чтобы создать более новые снимки.

Если потеря данных происходит (например, если сервер отказывает), используйте новый файл дампа, чтобы восстановить данные:

mysql --host=host_name -u root -p < dump_file
Теперь используйте двоичное резервное копирование журнала, чтобы повторно запустить события, которые были написаны после координат в файле дампа. Предположите, что координаты в файле похожи на это:
-- CHANGE MASTER TO MASTER_LOG_FILE='binlog.001002', MASTER_LOG_POS=27284;
Если новый файл системного журнала называют binlog.001004, повторно запустите события журнала так:
mysqlbinlog --start-position=27284 binlog.001002 binlog.001003 binlog.001004
            | mysql --host=host_name -u root -p
Вы могли бы счесть, что легче скопировать резервные файлы (файл дампа и двоичные файлы системного журнала) на хост сервера, чтобы облегчить работу восстановления, или если MySQL не позволяет удаленный доступ root .

5.6.8.4. Определение mysqlbinlog Server ID

При вызове с опцией --read-from-remote-server mysqlbinlog соединяется с сервером MySQL, определяет идентификатор сервера, чтобы идентифицировать себя, и просит двоичные файлы системного журнала от сервера. Вы можете использовать mysqlbinlog, чтобы запросить файлы системного журнала от сервера несколькими способами:

Только с --read-from-remote-server mysqlbinlog соединяется с использованием ID = 0, который говорит серверу разъединять связь после посылки последнего требуемого файла системного журнала.

С --read-from-remote-server и --stop-never mysqlbinlog соединяется с использованием ID, отличного от нуля, таким образом, сервер не разъединяет связь после посылки последнего файла системного журнала. Идентификатор сервера 65535 по умолчанию, но это может быть изменено опцией --stop-never-slave-server-id.

Таким образом, для первых двух способов запросить файлы, сервер разъединяет связь, потому что mysqlbinlog указывает server ID = 0. Это не разъединяет связь, если --stop-never дана, потому что mysqlbinlog определяет идентификатор сервера, отличный от нуля.

5.6.9. mysqldumpslow обзор файлов медленного системного журнала

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

Обычно mysqldumpslow группирует запросы, которые подобны за исключением особых значений числа, и представляют значения данных в виде строки. Это абстрагирует эти значения к N и 'S', выводя на экран итоговый вывод. Опции -a и -n могут использоваться, чтобы изменить поведение реферирования значения.

Вызов mysqldumpslow :

shell> mysqldumpslow [options] [log_file ...]
mysqldumpslow поддерживает следующие опции.

Таблица 5.19. Опции mysqldumpslow

ФорматОписание
-a Не резюмируйте все числа к N и строки к S
-n Отвлеченные числа с, по крайней мере, указанным количеством цифр
--debug Писать информацию об отладке
-g Только рассмотрите запросы, которые соответствуют образцу
--help Вывести справочное сообщение
-h Имя хоста сервера в имени файла системного журнала
-i Название экземпляра сервера
-l Не вычитайте время блокировки из полного времени
-r Реверсировать порядок сортировки
-s Как сортировать вывод
-t Выведите на экран только первые цифровые запросы
--verboseПодробный режим вывода

Пример использования програмы:

shell> mysqldumpslow

Reading mysql slow query log from /usr/local/mysql/data/mysqld51-apple-slow.log
Count: 1  Time=4.32s (4s)  Lock=0.00s (0s)  Rows=0.0 (0), root[root]@localhost
 insert into t2 select * from t1

Count: 3  Time=2.53s (7s)  Lock=0.00s (0s)  Rows=0.0 (0), root[root]@localhost
 insert into t2 select * from t1 limit N

Count: 3  Time=2.13s (6s)  Lock=0.00s (0s)  Rows=0.0 (0), root[root]@localhost
 insert into t1 select * from t1

5.7. Утилиты развития MySQL

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

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

shell> my_print_defaults client mysql
--port=3306
--socket=/tmp/mysql.sock
--no-auto-rehash
Отметьте: обработка файла опции осуществлена в библиотеке клиента C, просто обрабатывая все опции в соответствующей группе или группах перед любыми параметрами командной строки. Это работает хорошо в программах, которые используют последний случай опции, которая определена многократно. Если у Вас есть C или C++ программа, которая обрабатывает определенные многократно опции этим путем, но не читает файлы опции, Вы должны добавить только три строки, чтобы дать такую возможность. Проверьте исходный код любого из стандартных клиентов MySQL, чтобы увидеть, как сделать это.

Несколько других языковых интерфейсов к MySQL основаны на библиотеке клиента C и некоторые из них обеспечивают способ получить доступ к содержанию файла опции. Они включают Perl и Python. Для деталей см. документацию для своего интерфейса.

5.7.1. mysql_config показ опций для компилирования клиентов

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

pkg-config может использоваться в качестве альтернативы mysql_config , чтобы получить такую информацию, как флаги компилятора или библиотеки требуемые, чтобы собирать приложения MySQL. Для получения дополнительной информации см. раздел 25.8.4.2.

Для двоичных дистрибутивов для Solaris mysql_config не обеспечивает параметры соединения со встроенной библиотекой. Чтобы получить параметры соединения с встроенной библиотекой, используйте скрипт mysql_server_config.

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

Если Вы вызываете mysql_config без опций, он выводит на экран список всех опций, которые он поддерживает, и их значения:

shell> mysql_config
Usage: /usr/local/mysql/bin/mysql_config [options]
Options:
  --cflags [-I/usr/local/mysql/include/mysql -mcpu=pentiumpro]
  --cxxflags [-I/usr/local/mysql/include/mysql -mcpu=pentiumpro]
  --include[-I/usr/local/mysql/include/mysql]
  --libs   [-L/usr/local/mysql/lib/mysql -lmysqlclient
   -lpthread -lm -lrt -lssl -lcrypto -ldl]
  --libs_r [-L/usr/local/mysql/lib/mysql -lmysqlclient_r
   -lpthread -lm -lrt -lssl -lcrypto -ldl]
  --plugindir[/usr/local/mysql/lib/plugin]
  --socket [/tmp/mysql.sock]
  --port   [3306]
  --version[5.8.0-m17]
  --libmysqld-libs [-L/usr/local/mysql/lib/mysql -lmysqld
   -lpthread -lm -lrt -lssl -lcrypto -ldl -lcrypt]
  --variable=VAR   VAR is one of:
  pkgincludedir [/usr/local/mysql/include]
  pkglibdir [/usr/local/mysql/lib]
  plugindir [/usr/local/mysql/lib/plugin]
Вы можете использовать mysql_config в пределах командной строки, используя обратные галочки, чтобы включать вывод, который он производит для особых опций. Например, чтобы собрать программу клиента MySQL, используйте mysql_config :
gcc -c `mysql_config --cflags` progname.c
gcc -o progname progname.o `mysql_config --libs`

5.7.2. my_print_defaults показ опций из файлов опций

my_print_defaults выводит на экран опции, которые присутствуют в группах опции файлов опции. Вывод указывает на то, какие опции будут использоваться программами, которые читают указанные группы опции. Например, mysqlcheck читает группы [mysqlcheck] и [client]. Чтобы видеть, какие опции присутствуют в тех группах в стандартных файлах опции, вызовите my_print_defaults так:

shell> my_print_defaults mysqlcheck client
--user=myusername
--password=secret
--host=localhost
Вывод состоит из опций, по одной в строке, в той форме, как они были бы определены в командной строке.

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

5.7.3. resolve_stack_dump преобразование числового дампа трассировки стека к символам

resolve_stack_dump преобразует числовой дамп трассировки стека к символам.

Вызов resolve_stack_dump:

shell> resolve_stack_dump [options] symbols_file
                             [numeric_dump_file]
Файл символов должен включать вывод от команды nm --numeric-sort mysqld. Числовой файл дампа должен содержать числовую трассировку стека от mysqld. Если никакой числовой файл дампа не называют в командной строке, трассировка стека считана из стандартного ввода.

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

См. раздел 26.5.1.5.

5.8. Разные программы

5.8.1. lz4_decompress распаковывает сжатый LZ4 вывод mysqlpump

lz4_decompress распаковывает вывод mysqlpump, который создавался, используя сжатие LZ4.

Если MySQL был сконфигурирован с опцией -DWITH_LZ4=system , lz4_decompress не создана. В этом случае системная команда lz4 может использоваться вместо этого.

Вызов lz4_decompress :

shell> lz4_decompress input_file output_file
Например:
shell> mysqlpump --compress-output=LZ4 > dump.lz4
shell> lz4_decompress dump.lz4 dump.txt
Чтобы увидеть сообщение справки, вызовите lz4_decompress без параметров вообще.

Чтобы распаковать ZLIB-сжатый вывод mysqlpump, используйте zlib_decompress . См. раздел 5.8.5.

5.8.2. perror объясняет коды ошибки

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

message ... (errno: #)
message ... (Errcode: #)
Вы можете узнать то, что код ошибки подразумевает, изучая документацию для Вашей системы или при использовании perror.

perror печатает описание для системного кода ошибки или для кода ошибки механизма хранения (табличный обработчик).

Вызов perror :

shell> perror [options] errorcode ...
Например:
shell> perror 13 64
OS error code  13:  Permission denied
OS error code  64:  Machine is not on the network
Чтобы получить сообщение об ошибке для кода ошибки MySQL Cluster, вызовите perror с опцией --ndb:
shell> perror --ndb errorcode
Значение системных сообщений об ошибках может зависеть от Вашей операционной системы. Данный код ошибки может означать разные вещи на различных операционных системах.

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

5.8.3. replace утилита строковой замены

replace изменяет строки в файлах или стандартном вводе.

Вызов replace выполняется одним из следующих способов:

shell> replace from to
                  [from to] ...
                  -- file_name [file_name] ...
shell> replace from to
                  [from to] ...
                  < file_name
from представляет строку, чтобы искать, а to представляет ее замену. Могут быть одна или более пар строк.

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

Если опции -- нет, replace читает стандартный ввод и пишет на стандартный вывод.

replace использует конечный автомат, чтобы соответствовать более длинным строкам сначала. Это может использоваться, чтобы обменивать строки. Например, следующяя команда обменивает строки a и b в данных файлах file1 и file2:

shell> replace a b b a -- file1 file2 ...
replace поддерживает следующие опции.

5.8.4. resolveip преобразование имени хоста к IP-адресу или наоборот

resolveip обеспечивает преобразование имени хоста к IP-адресу и наоборот.

Вызов resolveip :

shell> resolveip [options]
                    {host_name|ip-addr} ...
resolveip поддерживает следующие опции.

5.8.5. zlib_decompress распаковывает ZLIB-сжатый вывод mysqlpump

zlib_decompress распаковывает ZLIB-сжатый вывод mysqlpump.

Если MySQL был сконфигурирован с опцией -DWITH_ZLIB=system , zlib_decompress не создана. В этом случае системная команда openssl zlib может использоваться вместо этого.

Вызов zlib_decompress :

shell> zlib_decompress input_file output_file
Например:
shell> mysqlpump --compress-output=ZLIB > dump.zlib
shell> zlib_decompress dump.zlib dump.txt
Чтобы увидеть справочное сообщение, вызовите zlib_decompress без параметров.

Чтобы распаковать вывод mysqlpump, сжатый LZ4, примените lz4_decompress . См. раздел 5.8.1.

5.9. Переменные окружения программы MySQL

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

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

ПеременнаяОписание
CXX Название Вашего компилятора C++ (для того, чтобы выполнить CMake).
CC Название Вашего компилятора C (для того, чтобы выполнить CMake).
DBI_USER Имя пользователя по умолчанию для Perl DBI.
DBI_TRACE Опции трассировки для Perl DBI.
HOME Путь по умолчанию для файла истории mysql $HOME/.mysql_history.
LD_RUN_PATH Используется, чтобы определить местоположение libmysqlclient.so.
LIBMYSQL_ENABLE_CLEARTEXT_PLUGIN Включить плагин mysql_clear_password, см. раздел 7.5.1.4.
LIBMYSQL_PLUGIN_DIR Каталог, в котором можно искать плагины клиента.
LIBMYSQL_PLUGINS Плагины клиента, чтобы предварительно загрузить.
MYSQL_DEBUG Опции трассировки отладки.
MYSQL_GROUP_SUFFIX Групповое значение суффикса опции (как определение --defaults-group-suffix).
MYSQL_HISTFILE Путь к файлу истории mysql . Если эта переменная установлена, ее значение переопределяет значение по умолчанию для $HOME/.mysql_history.
MYSQL_HISTIGNORE Образцы, определяющие запросы, которые mysql не должен зарегистрировать в $HOME/.mysql_history или syslog, если дана опция --syslog.
MYSQL_HOME Путь к каталогу, в котором находится определенный для сервера файл my.cnf.
MYSQL_HOST Имя хоста по умолчанию для mysql.
MYSQL_PS1Командная строка, чтобы использовать в mysql .
MYSQL_PWDПароль по умолчанию, соединяясь с mysqld . Использование этого опасно. См. раздел 7.1.2.1.
MYSQL_TCP_PORT Значение по умолчанию порта TCP/IP.
MYSQL_TEST_LOGIN_FILE Название файла пути входа в систему .mylogin.cnf.
MYSQL_TEST_TRACE_CRASH Разрушает ли испытательный плагин трассировки протокола клиентов.
MYSQL_TEST_TRACE_DEBUG Производит ли испытательный плагин трассировки протокола вывод.
MYSQL_UNIX_PORTИмя файла сокета Unix по умолчанию для соединений с localhost.
PATHИспользуется оболочкой, чтобы найти программы MySQL.
PKG_CONFIG_PATH Расположение файла mysqlclient.pc pkg-config.
TMPDIR Каталог, в котором создаются временные файлы.
TZЭто должно быть установлено в Вашу зону местного времени. См. раздел B.5.3.7.
UMASK Режим создания пользовательского файла.
UMASK_DIR Режим создания пользовательского каталога.
USER Имя пользователя по умолчанию в Windows, соединяясь с mysqld.

Для информации о файле истории mysql см. раздел 5.5.1.3.

MYSQL_TEST_LOGIN_FILE путь файла пути входа в систему (файл, создаваемый mysql_config_editor). Если не задано, значение по умолчанию %APPDATA%\MySQL\.mylogin.cnf в Windows и $HOME/.mylogin.cnf в не-Windows. См. раздел 5.6.7.

Переменные MYSQL_TEST_TRACE_DEBUG и MYSQL_TEST_TRACE_CRASH управляют испытательным плагином клиента трассировки протокола, если MySQL собран с этим включенным плагином. Для получения дополнительной информации см. раздел 26.2.4.11.1.

Значение по умолчанию UMASK и UMASK_DIR: соответственно 0640 и 0750. MySQL предполагает, что значение для UMASK или UMASK_DIR восьмеричное, если это начинается с 0. Например, установка UMASK=0600 равнозначна UMASK=384, так как восьмеричное 0600 это десятичное 384.

UMASK и UMASK_DIR, несмотря на их имена, используются в качестве режимов, не масок:

Может быть необходимо установить PKG_CONFIG_PATH, если Вы используете pkg-config для создания программ MySQL. См. раздел 25.8.4.2.