Isamchk
Проверка, восстановление, управление и сбор статистики по таблицам MySQL.
СИНТАКСИС:
isamchk [-?adeiqrsvwzIV] [-k #] [-O xxxx=size] [-Si] [-Sr #] [-O keybuffer=#] [-O readbuffer=#] [-O writebuffer=#] [-O sortbuffer=#] [-O sort_key_blocks=#] files
ОПИСАНИЕ:
Программа isamchk используется для проверки непротиворечивости таблиц и устранения любых проблем, которые это может вызвать. Isamchk может также использоваться, чтобы усилить таблицы в базах данных, которые содержат BLOB или поля символов переменной длины. Это необходимо только, если Вы часто добавляете и удаляете записи из этих таблиц.
Необходимо остановить СУБД MySQL перед запуском isamchk с единственным переключателем -r.
Вообще, используйте переключатель -rq для ремонта таблицы, потому что он выполняет "оперативный" ремонт. Для такого ремонта не нужно временного места в памяти, таким образом он проходит быстро, так как isamchk не копирует файл данных.
Перед началом работы, надо перейти в каталог с таблицей, которая нуждается в проверке и/или ремонте. В общем случае, это $DATADIR/DBNAME.
Опции программы isamchk:
-# | Вывести в протокол отладочную информацию. В общем виде 'd:t:o,filename`. Подробности в главе о . |
-? | Справка. |
-a | Анализ. Используется для для оптимизации размещения таблиц. |
-d | Информация о таблице. |
-e | Расширенная проверка. При запуске с этой опцией надо остановить демон mysqld. |
-f | Принудительно создать временный файл. Эта опция вызовет 'isamchk -r', если таблица разрушена. |
-k# | Используемые ключи. |
-i | Дополнительная информация. |
-q | Быстрая проверка. |
-r[o] | Восстановление, Эта опция также уплотнит внутренние индексы B-Tree, используемые MySQL. Используйте эту опцию, чтобы уменьшить место, занимаемое таблицей, за счет удаления неиспользуемых индексов. |
-s | Работать молча. |
-u | Распаковать упакованный файл. |
-v | Подробный вывод. Используется вместе с другими параметрами, чтобы получить большее количество информации. Можно задать большее количество символов v для повышения объема выдаваемой информации (например, vv). |
-w | Ждать, если таблица заблокирована. |
-I | Справка. |
-S[ir]# | Сортировать индекс/записи по ключу #. Эта опция оптимизирует размещение данных в таблице. |
-V | Информация о версии. |
-O | var=# Опция оптимизации var=#[k][m] |
Можно использовать вторую опцию '-q', чтобы использовать старый файл данных. -ro использует старый метод восстановления: медленнее, но надежнее -r. -r может исправить почти все ошибки, кроме уникальных ключей, которые оказались все же не уникальными. УБЕДИТЕСЬ, ЧТО ДЕМОН MYSQLD НЕ ЗАПУЩЕН, ЕСЛИ ИСПОЛЬЗУЕТЕ ЭТУ ОПЦИЮ! Если -f задан при проверке таблицы, то таблицы с ошибками будут автоматически исправлены.
Имеется несколько примеров. См. .
ПРИМЕРЫ:
isamchk -r [table_name] | Убрать все дырки, которые сформировались из-за использования BLOBS или VARCHARS. Также установить какие еще есть проблемы. |
isamchk -ei [table_name] | Проверить таблицу и отобразить статистику. |
isamchk [table_name] | Найти большинство ошибок. |
isamchk -rq [table_name] | Обновить только индексный файл. Быстро, но не исправляет ошибки в файле данных. |
isamchk -d -v [table_name] | Описание таблицы. |
isamchk -rq -Si [table_name] | Полная оптимизация таблицы [table_name]. Надолго... |
Isamlog
Получение статистики, и использование isam-журналов.
СИНТАКСИС:
isamlog [-?iruvIV] [-c #] [-f #] [-p #] [-F filepath/] [-o #] [-R file recordpos] [-w write_file] [log-filename]
ОПИСАНИЕ:
Эта программа используется вместе с опцией --log-isam=file_name демона mysqld.
Файл file_name будет хранить протокол всех изменений для всех таблиц. Программа isamlog может быть использована для получения информации об этом файле и обновить все таблицы и базы данных.
Чтобы восстановить базу данных, нужна копия, которая содержит вашу базу данных до того, как mysqld сгенерировал ISAM журнал, или полный набор ISAM журналов с начала работы вашей базы данных.
-? or -I | Справка. |
-V | Информация о версии. |
-c # | Выполнить только # команд. |
-f # | Максимальное число открытых файлов. Если откроется больше чем # файлов, то лишние будут автоматически закрыты и вновь открыты по мере необходимости. |
-F [path] | Файл протокола ISAM содержит полный путь к таблицам. Вы можете использовать эту опцию, чтобы отменить сохраненный путь. |
ПРИМЕР:
-F '/var/mirror/' заставит isamlog работать с файлами в /var/mirror, а не с теми, которые указаны в сохраненном пути.
isamlog -R /usr/local/data/mysql/user.ISM 1234 Выведет все изменения в таблице /usr/local/data/mysql/user, которые найдены в позиции 123 4. Это полезно для ситуаций, в которых Вы имеете разрушенную запись в известной позиции. Вы, возможно, получили эту информацию посредством isamlog -vvv или из isamchk. Если Вы укажете позицию -1, будут обработаны все записи.
Как работают пароли
Зашифрованный пароль сохраняется в таблице пользователей ('user ').
При установлении соединения сервер посылает случайное число клиенту. Клиент шифрует пароль, чтобы получить то, что имеет сервер (он хранит пароли в зашифрованном виде) и вычисляет число из полученного с сервера случайного числа и зашифрованного пароля. Это число отсылается на сервер. Сервер вычисляет число из сохраненного в зашифрованном виде пароля и сгенерированного случайного числа. Если это число совпадет с тем, которое прислал клиент, связь устанавливается.
Запуск mysqld (при загрузке системы)
Solaris
Скопируйте скрипт mysql.server из каталога mysql bin в /etc/init.d .
Проверьте все пути в скрипте mysql.server. Проверьте и установите safe_mysqld в /etc/init.d/mysql.server и в /etc/rc2.d/S99mysql.server .
Linux
В Caldera Open Linux надо добавить в файл /etc/rc.d/rc.local следующее:
/usr/local/bin/safe_mysql &
Конечно, здесь надо задать правильный путь в каталог с MySQL.
Запуск mysqld (при запущенной системе)
Программа mysqld может быть запущена от имени любого пользователя. По умолчанию она запускается от имени root. Если она запускается от имени любого другого пользователя, надо установить правильные права доступа ко всем необходимым файлам.
Зайдите в систему как пользователь-владелец MySQL и дайте следующую команду (Предполагается, что исполняемый модуль mysql находится в вашем пути. Если это не так, укажите полный путь):
safe_mysql &
Клиентские функции
MySQL API использует структуры данных MYSQL (определены в mysql.h) чтобы установить связь с СУБД. Вы можете устанавливать много соединений из одной программы-клиента, однако, каждое соединений должно быть связано с собственной отдельной структурой MYSQL.
После успешного запроса, если данные должны быть возвращены пользователю, набор результатов должен быть передан через функции mysql_use_result или через функцию mysql_store_result. Обе эти функции сохраняют набор результатов в структуре MYSQL_RES. Разница в том, что mysql_store_result передает весь набор результатов в память клиента, а mysql_use_result инструктирует клиента, чтобы он мог получить строку динамически с сервера с каждым обращением к mysql_fetch_row. Имейте в виду, что mysql_use_result занимает ресурсы сервера, и не должен использоваться для интерактивных прикладных программ, где действия пользователя часто непредсказуемы и могут привести к большим задержкам. Обратите внимание также, что Вы можете держать только одно соединение, которое использует mysql_user_result, открытым, и это должно быть последнее созданное соединение. По умолчанию процесс mysqld закроет соединение после тридцати секунд неактивности.
Данные, переданные из набора результатов с помощью mysql_fetch_row, будут помещены в структуру MYSQL_ROW, которая является просто массивом указателей на начало каждого поля.
Ключи
MySQL таблица может иметь до 16 ключей, каждый из которых может иметь до 15 полей. Максимальная поддерживаемая длина ключа 120 байт. Вы можете увеличить длину ключа, изменяя N_MAX_KEY_LENGTH в файле nisam.h и перекомпилировав пакет. Обратите внимание, что длинные ключи могут привести к низкой эффективности.
Ключи могут иметь имена. В случае первичного ключа имя будет всегда PRIMARY. Если имя ключа не задано в процессе создания таблицы, то заданное по умолчанию имя ключа - первое имя столбца с факультативным суффиксом (_2, _3, и т. д.) чтобы сделать это имя уникальным. Имя ключа может использоваться с командой , чтобы удалить ключ.
При создании ключа Вы можете факультативно определить, что только первые N символов поля будут использоваться. Например, если Вы хотите создавать уникальный ключ на поле, в котором только первые 40 символов уникальны, можно сделать следующее.
CREATE TABLE SomeTable (composite CHAR(200), INDEX comp_idx(composite(40)));
Хорошая идея - использовать эту опцию на неуникальных полях, поскольку эта мера значительно уменьшит размер вашего индекса, а снижение производительности будет очень не большим.
Вы можете иметь один первичный ключ на таблицу. Если поле определено, как поле первичного ключа, то генерируется индекс. Нет никакой необходимости определять нормальный ключ. Кроме того, при определении дополнительных индексов, которые содержат первичный ключ не будет иметь смысла, поскольку первичный ключ сделает индекс бесполезным.
Ключи с несколькими полями следует использовать для оптимизации узкоспецифических запросов. То есть, все поля в предложении WHERE запроса должны появляться в многопольном ключе.
Поскольку MySQL использует B-Tree не нужно объявлять ключи, которые являются префиксами других ключей. Оптимизатор найдет любой пригодный для использования префикс ключа и использует его, чтобы выполнить поиск. Например, если Вы объявляете следующий ключ:
INDEX (first, second, third, fourth)
Вы также неявно создали следующие ключи:
(first, second, third) (first, second) (first)
Объявление ненужных ключей только займет дополнительное место и замедлит ваши запросы. Ключи должны быть созданы во время создания таблицы или изменения таблицы с использованием команды .
Ключи и все о них.
Ниже дается некоторая информацию низкого уровня относительно того, как ключи хранятся и используются в MySQL.
Текущий размер блока для B-tree равен 1024 и и всех блоков (за исключением root) - по крайней мере 2/3 от полного. Для типичного идентификатора (id = 4 байта) это означает 1024/(4+4)*2/3=85 ключей в соответствии с записью, и таким образом можно находить позицию реальной записи в 5 позиционированиях.
Если Вы желаете, чтобы ваши индексы B-tree были 100% полными, выполните isamchk с опцией -rq над вашими файлами таблицы.
Только первая часть ключа может быть префиксно сжата. Если два ключа имеют тот же самый префикс, другая часть ключа будет занимать 1 байт. Все строковые части длиннее 4 символов имеют удаленные хвостовые пробелы.
Если ключ фиксированного размера, то nisam использует двоичный поиск в каждом блоке, иначе используется последовательный поиск.
Все блоки ключей читаются/пишутся через key_buffer (по умолчанию 1M) так что блок root буферизуется всегда.
Чтение следующего оптимизировано, так что библиотека не должна консультироваться с любым другим блоком при чтении из списка блоков. Это дает очень хорошую эффективность, когда Вы должны читать группу записей с тем же самым ключом.
Коротко о главном
СУБД MySQL поставляется приходит со следующими основными программами и скриптами.
mysql mysqlaccess mysqladmin mysqld mysqldump mysqlshow isamchk isamlog safe_mysqld
Еще есть несколько утилит. Они не жизненно важны для MySQL, но обеспечивают полезные дополнительные функциональные возможности.
comp_err msql2mysql mysqlbug perror replace which1 zap
API поддерживает богатый ассортимент функций, которые обеспечивают доступ к СУБД MySQL из программы пользователя, независимо от того, запущена ли она в локальной или на удаленной системе.
Есть два способа обращения из программы на perl к базе данных MySQL. Дело в том, что два разных человека написали в общем-то одинаково хорошие, хотя и разные библиотеки для такого доступа. Решено включить в поставку оба варианта perl API.
Наличие perl API дает огромные возможности по доступу к базам данных MySQL из скриптов на этом языке. Учитывая, что perl очень часто используется в интернете (для написания CGI-скриптов), этот интерфейс позволяет создавать web-ориентированные базы данных.
DBD::mysql является драйвером для работы с базой данных, управляемой СУБД MySQL. Он портирован Michael 'Monty' Widenius of Alligator Descartes' DBD::msql. Вы должны установить DBI-модуль перед использованием DBD::mysql.
$host может быть просто именем сервера (``up.botik.ru'') или именем сервера с указанием порта (``up.botik.ru:3333'').
$database задает имя базы данных с которой надо связаться.
$user задает имя пользователя для доступа к базе данных. (если не указано, используется идентификатор пользователя текущего процесса).
$password является опциональным и нужно только для аккаунтов, которые имеют не пустые пароли.
Системные переменные, которые использует DBD::mysql:
hostname database username password port
Значения в системных переменных отменяют значения, переданные раньше. TCP номер порта, отменяет TCP номер порта, переданный в hostname.
Можно разрешить отладку, установив переменную MYSQL_DEBUG 'd:t:O,filename' (где filename является именем файла для записи протокола). Протокол будет записан в файл только если libmysql откомпилирована с поддержкой отладки (опция DBUG).
Поддерживаются следующие тэги:
TABLE TYPE IS_PRI_KEY IS_NOT_NULL LENGTH MAXLENGTH IS_KEY IS_BLOB IS_NUM
Для получения значения поля AUTO_INCREMENT INSERT, надо:
$id = $dbh->func("_InsertID");
Очень большие числа
Ограничения на работу с ОЧЕНЬ БОЛЬШИМИ числами специфичны для языка perl вообще, а не для какого-либо API в частности. Так что все, что об этом сказано выше, справедливо и в данном случае.
Вставка двоичных строк
В случае вставки двоичных данных в базу данных Вы должны обойти некоторые символы. Вы можете использовать следующий метод:
$mystring = $dbh->quote($rawstring);
Лицензия на использование MySQL
Во избежание искажения смысла лицензии, являющейся юридическим докуметом, привожу ее в оригинальном виде (скопирована из оригинальной документации).
MYSQL FREE PUBLIC LICENSE (Version 4, March 5, 1995) Copyright (C) 1995, 1996 TcX AB & Monty Program KB & Detron HB Stockholm SWEDEN, Helsingfors FINLAND and Uppsala SWEDEN, All rights reserved. NOTE: This license is not the same as any of the GNU Licenses published by the Free Software Foundation. Its terms are substantially different from those of the GNU Licenses. If you are familiar with the GNU Licenses, please read this license with extra care. This License applies to the computer program known as "mysql". The "Program", below, refers to such program, and a "work based on the Program" means either the Program or any derivative work of the Program, as defined in the United States Copyright Act of 1976, such as a translation or a modification. The Program is a copyrighted work whose copyright is held by TcX Datakonsult AB and Monty Program KB and Detron HB. BY MODIFYING OR DISTRIBUTING THE PROGRAM (OR ANY WORK BASED ON THE PROGRAM), YOU INDICATE YOUR ACCEPTANCE OF THIS LICENSE TO DO SO, AND ALL ITS TERMS AND CONDITIONS FOR COPYING, DISTRIBUTING OR MODIFYING THE PROGRAM OR WORKS BASED ON IT. NOTHING OTHER THAN THIS LICENSE GRANTS YOU PERMISSION TO MODIFY OR DISTRIBUTE THE PROGRAM OR ITS DERIVATIVE WORKS. THESE ACTIONS ARE PROHIBITED BY LAW. IF YOU DO NOT ACCEPT THESE TERMS AND CONDITIONS, DO NOT MODIFY OR DISTRIBUTE THE PROGRAM. 1. Licenses. Licensor hereby grants you the following rights, provided that you comply with all of the restrictions set forth in this License and provided, further, that you distribute an unmodified copy of this License with the Program: (a) You may copy and distribute literal (i.e., verbatim) copies of the Program's source code as you receive it throughout the world, in any medium. (b) You may modify the Program, create works based on the Program and distribute copies of such throughout the world, in any medium. 2. Restrictions. This license is subject to the following restrictions: (a) Distribution of the Program or any work based on the Program by a commercial organization to any third party is prohibited if any payment is made in connection with such distribution, whether directly (as in payment for a copy of the Program) or indirectly (as in payment for some service related to the Program, or payment for some product or service that includes a copy of the Program "without charge"; these are only examples, and not an exhaustive enumeration of prohibited activities). However, the following methods of distribution involving payment shall not in and of themselves be a violation of this restriction: (i) Posting the Program on a public access information storage and retrieval service for which a fee is received for retrieving information (such as an on-line service), provided that the fee is not content-dependent (i.e., the fee would be the same for retrieving the same volume of information consisting of random data). (ii) Distributing the Program on a CD-ROM, provided that the files containing the Program are reproduced entirely and verbatim on such CD-ROM, and provided further that all information on such CD-ROM be redistributed for non-commercial purposes without charge. (b) Activities other than copying, distribution and modification of the Program are not subject to this License and they are outside its scope. Functional use (running) of the Program is not restricted, and any output produced through the use of the Program is subject to this license only if its contents constitute a work based on the Program (independent of having been made by running the Program). (c) You must meet all of the following conditions with respect to the distribution of any work based on the Program: (i) If you have modified the Program, you must cause your work to carry prominent notices stating that you have modified the Program's files and the date of any change; (ii) You must cause any work that you distribute or publish, that in whole or in part contains or is derived from the Program or any part thereof, to be licensed as a whole and at no charge to all third parties under the terms of this License; (iii) If the modified program normally reads commands interactively when run, you must cause it, at each time the modified program commences operation, to print or display an announcement including an appropriate copyright notice and a notice that there is no warranty (or else, saying that you provide a warranty). Such notice must also state that users may redistribute the Program only under the conditions of this License and tell the user how to view the copy of this License included with the Program. (Exception: if the Program itself is interactive but does not normally print such an announcement, your work based on the Program is not required to print an announcement.); (iv) You must accompany any such work based on the Program with the complete corresponding machine-readable source code, delivered on a medium customarily used for software interchange. The source code for a work means the preferred form of the work for making modifications to it. For an executable work, complete source code means all the source code for all modules it contains, plus any associated interface definition files, plus the scripts used to control compilation and installation of the executable code. However, the source code distributed need not include anything that is normally distributed (in either source or binary form) with the major components (compiler, kernel, and so on) of the operating system on which the executable runs, unless that component itself accompanies the executable code; (v) If you distribute any written or printed material at all with the Program or any work based on the Program, such material must include either a written copy of this License, or a prominent written indication that the Program or the work based on the Program is covered by this License and written instructions for printing and/or displaying the copy of the License on the distribution medium; (vi) You may not impose any further restrictions on the recipient's exercise of the rights granted herein. If distribution of executable or object code is made by offering the equivalent ability to copy from a designated place, then offering equivalent ability to copy the source code from the same place counts as distribution of the source code, even though third parties are not compelled to copy the source code along with the object code. 3. Reservation of Rights. No rights are granted to the Program except as expressly set forth herein. You may not copy, modify, sub-license, or distribute the Program except as expressly provided under this License. Any attempt otherwise to copy, modify, sub-license or distribute the Program is void, and will automatically terminate your rights under this License. However, parties who have received copies, or rights, from you under this License will not have their licenses terminated so long as such parties remain in full compliance. 4. Other Restrictions. If the distribution and/or use of the Program is restricted in certain countries for any reason, Licensor may add an explicit geographical distribution limitation excluding those countries, so that distribution is permitted only in or among countries not thus excluded. In such case, this License incorporates the limitation as if written in the body of this License. 5. Limitations. THE PROGRAM IS PROVIDED TO YOU "AS IS," WITHOUT WARRANTY. THERE IS NO WARRANTY FOR THE PROGRAM, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE AND NON INFRINGEMENT OF THIRD PARTY RIGHTS. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING WILL LICENSOR, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
|
ListDBs
Список доступных баз данных.
СИНТАКСИС:
arr = $dbh->ListDBs;
ОПИСАНИЕ:
ListDBs возвращает массив, который содержит один элемент для имени каждой базы данных, управляемой MySQL.
ПРИМЕР:
@dbs = $dbh->ListDBs; # Возвращает массив имен баз данных. $count = $#dbs; # Вычисляет сколько элементов. for ($i=0;$i<=$count;$i++) { print(" ".$dbs[$i]."\n"); }
ListFields
Список полей в таблице.
СИНТАКСИС:
$sth = ListFields $dbh $table;
ОПИСАНИЕ:
ListFields возвращает операторный дескриптор, который может использоваться, чтобы выяснить, что именно сервер должен Вам передать. В случае ошибки возвращаемое значение не определено.
MySQL ListFields не работает так же как mSQL ListFields. В MySQL Вы используете следующие команды, чтобы получить информацию после вызова ListFields.
Перед использованием следующих функций, Вы должны выполнить успешное обращение к ListFields.
@arr = @{$sth->name}; | Возвращает массив имен столбцов |
@arr = @{$sth->length}; | Возвращает массив длин столбцов |
$value = $sth->numfields; | Возвращает количество столбцов в таблице |
@arr = @{$sth->type}; | Массив MySQL типов |
@arr = @{$sth->is_num}; | Массив 0 и 1, где 1 указывает что столбец числовой |
@arr = @{$sth->is_blob}; | Массив 0 и 1, где 1 указывает что столбец - blob |
@arr = @{$sth->is_not_null}; | Массив 0 и 1, где 1 указывает что столбец - не NULL |
ListParse
Анализ списка параметров в строке контроля отладки.
СИНТАКСИС:
static struct link *ListParse (ctlp) char *ctlp;
ОПИСАНИЕ:
Принимает указатель на список строк в "ctlp", разделенный запятыми, анализирует список, формируя список и возвращая указатель на него. Первоначальный список разрушается в процессе формирования связанного списка, таким образом, лучше иметь его дубликат, если он важен.
Обратите внимание что, так как каждая связь добавляется в начало списка, конечный список будет в обратном порядке", который не значителен для нашего использования здесь.
ListTables
Список таблиц, доступных в базе данных.
СИНТАКСИС:
@arr = $dbh->ListTables;
ОПИСАНИЕ:
Возвращает массив с одним элементом для каждого имени таблицы в базе данных. Вы должны были, определить базу данных при вызове Connect или SelectDB.
ПРИМЕР:
@tables = $dbh->ListTables; # Assumes that $dbh points # to a valid database $count = $#tables; # Figure out how many elements. for ($i=0;$i<=$count;$i++) { # Print out the table names. print(" ".$tables[$i]."\n"); }
LOAD DATA INFILE
СИНТАКСИС:
LOAD DATA INFILE syntax
ОПИСАНИЕ:
Команды, для чтения данных из текстового файла.
ПРИМЕР:
LOAD DATA INFILE 'customer.tab' [REPLACE | IGNORE] INTO TABLE Customer [fields [terminated by ',' [optionally] enclosed by '"' escaped by '\\' ]] [lines terminated by '\n'] [(field list)]
Для записи в текстовый файл используйте:
SELECT ... INTO OUTFILE 'customer.tab' fields terminated by ',' enclosed by '"' escaped by '\\' lines terminated by '\n' .
"fields terminated by" | Имеет значение по умолчанию \t. |
"fields [optionally] enclosed by" | Имеет значение по умолчанию ". |
"fields escaped by" | Имеет значение по умолчанию '\\'. |
"lines terminated by" | Имеет значение по умолчанию '\n'. |
"fields terminated by" и "lines terminated by" могут быть больше, чем 1 символом.
Если "fields terminated by" и "fields enclosed by" являются пустыми строками, то размер строки будет фиксированным. То есть, будет производиться чтение полей одной длины.
С фиксированными значениями NULL для размера строки будут выводиться пустые строки.
Если указаны "optionally" в "enclosed by" и Вы не используете фиксированный размер строк, только строки с этим символом будут включены в команду SELECT ... INTO.
Если "escaped by" не пусто, то следующие символы будут снабжены префиксом: "escaped by", ASCII 0, и первый символ из "fields terminated by", "fields enclosed by" и "lines terminated by".
Если использован REPLACE, новая строка заменит все строки, которые имеют тот же самый уникальный ключ. Если использован IGNORE, строки будут пропущен, если там уже существует запись с идентичным уникальным ключом. Если ни один из вышеупомянутых параметров не используется, будет выдана ошибка, и остальная часть textfile будет игнорироваться, если найден дублирующий ключ.
Некоторые ситуации, которые не поддерживаются LOAD DATA INFILE:
Фиксированные размеры строк ("FIELDS TERMINATED BY" и "FIELDS ENCLOSED BY" являются пустыми) и поля BLOB. Разделитель, являющийся префиксом другого разделителя. "FIELDS ESCAPED BY" пустое и данные содержат один или несколько разделителей.
Все строки читаются в таблицу. Если строка имеет слишком мало полей, остальная часть полей в таблице устанавливается в значения по умолчанию.
По соображениям безопасности textfile должен находиться в каталоге баз данных или быть читаемым всеми.
Если "FIELDS ENCLOSED BY" не пустое, то NULL читается как значение NULL. Если "FIELDS ESCAPED" не пустое, то \N тоже читается как значение NULL. Note Обратите внимание, что это БОЛЬШАЯ N, верхний регистр!
Когда запрос LOAD DATA выполнен, Вы можете получить следующую строку информации, используя функцию C API mysql_info().
@result{Records: 1 Deleted: 0 Skiped: 0 Warnings: 0}
Переменная Warnings увеличивается с каждым столбцом, который не может быть сохранен без потери точности, для каждого столбца, который не получал значение из строки текста при чтении (это случается, если строка слишком короткая) и для каждой строки, которая имеет большее количество данных чем может вписываться в данные столбцы.
Вы должны иметь права доступа select и insert таблице user для использования этой команды.
Метаданные
Теперь пересмотрим вышеупомянутые методы в отношении метаданных.
Дескриптор базы данных
Как упомянуто выше, Вы получаете дескриптор базы данных с помощью:
$dbh = Connect Mysql $host, $database;
Дескриптор базы данных хранит сведения о хост-имени сервера, его порте и имени базы данных, с которой установлена связь. Эти три значения можно получить так:
$scalar = $dbh->sock; $scalar = $dbh->host; $scalar = $dbh->database;
База данных не определена, если связь установлена без аргументов или только с одним аргументом.
Операторный дескриптор
Два конструктора возвращают операторный дескриптор:
$sth = ListFields $dbh $table; $sth = Query $dbh $sql_statement;
$sth хранит все метаданные, предоставляемые API:
$scalar = $sth->affected_rows; | Сколько записей вставлено или изменено. |
$scalar = $sth->info; | Статистика о предыдущих запросах ALTER TABLE или LOAD DATA FROM INFILE. |
$arrref = $sth->is_blob; | Массив битов, специфицирующих является ли данное поле BLOB. |
$arrref = $sth->is_not_null; | Массив битов, специфицирующих является ли данное поле NULL. |
$arrref = $sth->is_pri_key; | Массив битов, специфицирующих является ли данное поле первичным ключом. |
$arrref = $sth->is_num; | Массив битов, специфицирующих является ли данное поле числом. |
$scalar = $sth->insert_id; | Значение, присвоенное столбцу с помощью AUTO_INCREMENT последним INSERT. |
$arrref = $sth->length; | Массив длин всех полей в байтах. |
$arrref = $sth->name; | Имена всех столбцов. |
$scalar = $sth->numrows; | Количество возвращаемых записей. |
$scalar = $sth->numfields; | Количество возвращаемых полей. |
$arrref = $sth->table; | Имена каждого столбца в таблице. |
$arrref = $sth->type; | Тип каждого столбца, определен в mysql.h. Доступен с помощью &Mysql::CHAR_TYPE, &Mysql::INT_TYPE, &Mysql::REAL_TYPE |
Опция -w
Опция -w может быть очень полезной в случае проблем с отладкой. Если Вы вызываете программу на perl с опцией -w, то предупреждения, обычно хранимые в $Mysql::db_errstr будут выводиться в STDERR (стандартный поток ошибок). Таким образом, Вы получите сообщения об ошибках сервера MySQL без обработки их в Вашей программе.
Если надо использовать опцию -w, но не надо, чтобы сообщения об ошибках увидел демон MySQL, можно установить переменную $Mysql::QUIET в любое ненулевое значение.
Msql2mysql
Выполняет начальное преобразование mSQL скрипта в MySQL.
СИНТАКСИС:
msql2mysql [filename]
ОПИСАНИЕ:
Скрипт msql2mysql используется как первый шаг при портировании msql скриптов в MySQL. Просто введите:
msql2mysql something.c >something.mysql.c'
Вам придется, конечно, многое исправить, но это хорошее начало. Подробнее о портировании mSQL-кода в MySQL рассказано .
Программа msql2mysql - фактически довольно простой скрипт, который использует команду replace, которая поставляется с СУБД MySQL, чтобы заменить mSQL обращения к функции на их MySQL эквиваленты. Меняются только имена, дополнительные параметры не добавляются.
MySQL
Клиентская программа MySQL.
Запуск:
mysql [OPTIONS] database
ОПИСАНИЕ:
Клиентская часть СУБД MySQL названа MySQL. Она обеспечивает интерфейс командной строки с СУБД MySQL, и возможность неинтерактивной пакетной обработки.
Программой mysql поддерживаются следующие опции. Вы можете использовать или "короткий" одиночный символ или более подробную версию.
-\?, --help | Справка. |
-d, --debug=[options] | Вывести в протокол отладочную информацию. В общем виде 'd:t:o,filename`. Подробности в главе о . |
-d, --debug-info | Вывести отладочную информацию при выходе из программы. |
-e, --exec | Выполнить команду и выйти, неявная форма опции --batch. |
-f, --force | Продолжить, даже если мы сталкиваемся с SQL ошибкой. |
-h, --hostname=[hostname] | Задает имя сервера, с которым Вы желаете соединиться. |
-P, --port=[port] | Порт, для соединения с сервером MySQL. |
-p, --password=[password] | Пароль пользователя, для соединения с сервером MySQL. Обратите внимание, что не должно быть пробела между -p и паролем. |
-q, --quick | Быстрый (небуферизованный вывод), может замедлить сервер, если вывод приостановлен. |
-s, --silent | Работать молча (подавить вывод). |
-u, --user=[user] | Имя пользователя для соединения с сервером MySQL. Необязательно, если имя пользователя такое же, как ваш логин. По умолчанию именно ваш логин используется в качестве имени пользователя, что облегчает настройку. |
-v, --verbose | Подробный вывод. -v опция может быть удвоена или утроена для более подробного вывода. В программах русских авторов обычно именуется "уровнем болтливости программы". |
-w, --wait | Если подключение терпит неудачу, то подождать и повторить попытку. |
-B, --batch | Выполнить в пакетном режиме. Никаких запросов и никаких ошибок в STDOUT. Устанавливается автоматически при чтении из/записи в канал (пайп). Результаты будут выведены в формате с разделением табуляцией. Одна строка результата соответствует одной строке вывода. |
-I, --help | Справка, эквивалент -\?. |
-V, --version В | ывести информацию о версии пакета. |
В интерактивном режиме mysql будет печатать результаты в таблице подобно примеру, приведенному ниже. Если не задан пароль или имя пользователя mysql попробует зайти в систему на сервере базы данных с использованием вашего логина и НУЛЕВОГО (ПУСТОГО) пароля. Если ваш mysql логин отличается от вашего логина в unix, или если вы имеете пароль, то это провалится.
ПРИМЕР:
$ mysql mysql Welcome to the mysql monitor. Commands ends with ; or \g. Type 'help' for help. mysql> select * from host; 1 rows in set (0.25 sec) +-----------+----+--------+--------+--------+--------+--------+------+ | host | db | select | insert | update | delete | create | drop | +-----------+----+--------+--------+--------+--------+--------+------+ | localhost | % | Y | Y | Y | Y | Y | Y | +-----------+----+--------+--------+--------+--------+--------+------+ mysql>
Переведу этот пример на русский: $ mysql mysql Добро пожаловать в монитор mysql. Команды кончаются на ; или \g. Наберите 'help' для получения справки. mysql> select * from host; 1 строка в наборе (0.25 секунды) +-----------+----+--------+--------+--------+--------+--------+------+ | host | db | select | insert | update | delete | create | drop | +-----------+----+--------+--------+--------+--------+--------+------+ | localhost | % | Y | Y | Y | Y | Y | Y | +-----------+----+--------+--------+--------+--------+--------+------+ mysql>
В режиме командной строки Вы должны иметь возможность работать с историей ввода и редактировать предыдущие команды. Это сильно облегчит работу.
В пакетном режиме результаты выводятся в виде полей, разделенных символами табуляции.
ПРИМЕР:
Создайте файл /tmp/test, который содержит следующую строку: select * from host
В командной строке введите: $ mysql mysql </tmp/test
Вы получите что-то вроде: host db select insert update delete create drop localhost % Y Y Y Y Y Y
Вы можете писать довольно сложные SQL программы, используя этот метод.
Mysql_affected_rows
СИНТАКСИС:
int mysql_affected_rows(MYSQL *mysql)
ОПИСАНИЕ:
Возвращает число строк, на которые воздействует последний UPDATE, DELETE или INSERT.
ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ:
Целое число > 0 показывает число измененных строк. Ноль, если никакие записи не соответствовали предложению WHERE в UPDATE или DELETE. -1, если запрос возвратил ошибку, например, была сделана попытка добавить двойной первичный ключ в течение одного INSERT.
ПРИМЕР:
mysql_query(&mysql,"INSERT INTO gl_transact(acctnbr, amount) VALUES(12345, 651.30)"); if (mysql_affected_rows(&mysql) < 0) fprintf(stderr, "Attempted to add duplicate primary key\n");
MySQL оптимизирован для случая удаления всех записей в таблице. Побочный эффект этой оптимизации - то, что MySQL возвратится, ноль для числа строк, на которые воздействовал в этой ситуации. Выполнение 'select count(*) from the_table' перед удалением всех записей даст Вам значение = на сколько строк воздействовала система, хотя это значение может изменяться между SELECT и DELETE. MySQL 3.20.X не поддерживает блокировку таблицы. Это исправлено в версии 3.21.X
Mysql_close
СИНТАКСИС:
void mysql_close(MYSQL *mysql);
ОПИСАНИЕ:
Закрывает открытое соединение подключение. mysql_close должен быть вызван после завершения всех операций, выполняемых через соединение с MySQL. Если это не сделать, поток, созданный mysql_connect, зависнет до окончания тайм-аута сервера. На сервере, работающем с сильной нагрузкой, это может быстро израсходовать много памяти, хотя нужно очень немного времени центрального процессора.
Если подключение закрыто до того, как запущенный запрос завершился, запрос будет продолжаться, пока не попытается вернуть результат пользователю. При этом он завершится аварийно, узнав, что соединение не активно.
По умолчанию тайм-аут = 30 секундам для активного запроса и 8 часам для открытого подключения.
ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ:
Нет.
Mysql_connect
СИНТАКСИС:
MYSQL *mysql_connect(MYSQL *mysql, const char *host, const char *user, const char *passwd)
ОПИСАНИЕ:
Пытается установить соединение с сервером MySQL, работающем на компьютере host. Значение host может быть сетевым именем или IP адресом. Параметр user задает логин пользователя MySQL, параметр passwd задает пароль для user. ОБРАТИТЕ ВНИМАНИЕ: Не пытайтесь шифровать passwd перед вызовом mysql_connect. Шифрование выполняется автоматически клиентским API.
Если host не задан, то подразумевается 'localhost'. Если user не задан, то подразумевается 'current user'. Под Windows ODBC, текущий пользователь должен быть определен явно. Под Unix подразумевается текущий логин. Если password не задан, то будут проверены только те записи в таблице пользователей, которые не имеют пароля. Это позволяет db-администратору настроить систему привилегий MySQL так, чтобы пользователь получал различные привилегии в зависимости от того, определен пароль или нет. Иногда полезно.
mysql_connect должен успешно завершиться до каких-либо действий с базой данных.
Вы можете опционально задать первый аргумент mysql_connect как (MYSQL*) 0. Это вынудит C API к автоматическому распределению памяти для структуры подключения и освобождению ее при завершении. Расплатой за это служит то, что Вы не сможете получать сообщения об ошибках из mysql_connect, когда используете эту опцию.
ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ:
mysql, если соединение выполнено успешно. NULL в случае, если связаться не удалось.
ПРИМЕР:
MYSQL *mysql; if ((mysql = malloc(sizeof(MYSQL))) != NULL) { if (!(mysql_connect(mysql, "pr_server", "jqpublic", "mypasswd"))) { free(mysql); exit(1); } } free(mysql);
Mysql_create_db
СИНТАКСИС:
int mysql_create_db(MYSQL *mysql, const char *db);
ОПИСАНИЕ:
Создает базу данных, именованную как db на машине, указанной в mysql. MySQL подключение должно быть выполнено с правами пользователя, который имеет право создавать базы данных. Обратитесь к главе за подробностями о правах доступа.
ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ:
0, если база данных создана успешно. Не 0, если произошла ошибка. Сообщение об ошибке можно получить с помощью функции .
Mysql_data_seek
СИНТАКСИС:
void mysql_data_seek(MYSQL_RES *res, uint offset);
ОПИСАНИЕ:
Переходит на указанную строку в наборе результатов запросов. Не может использоваться вместе с mysql_use_result.
ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ:
Нет.
Mysql_drop_db
СИНТАКСИС:
int mysql_drop_db(MYSQL *mysql, const char *db);
ОПИСАНИЕ:
Удаляет базу данных с именем, указанным в db на сервере, указанном в mysql. Подключение должно быть выполнено с правами пользователя, который имеет на это право. Обратитесь к главе за подробностями о правах доступа.
ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ:
0, если база данных удалена успешно. Не 0, если произошла ошибка. Сообщение об ошибке можно получить с помощью функции .
Mysql_eof
СИНТАКСИС:
int mysql_eof(MYSQL_RES *)
ОПИСАНИЕ:
Возвращает значение != 0, если последний вызов mysql_fetch_row не вернул ничего потому, что достигнут конец набора результатов.
Mysql_error
СИНТАКСИС:
char *mysql_error(MYSQL *mysql)
ОПИСАНИЕ:
Выводит сообщение об ошибке, если ошибку вернула последняя вызванная функция MySQL. В противном случае возвращает пустую строку.
Mysql_fetch_field
СИНТАКСИС:
MYSQL_FIELD *mysql_fetch_field(MYSQL_RES *handle);
ОПИСАНИЕ:
Находит тип поля таблицы.
Mysql_fetch_lengths
СИНТАКСИС:
unsigned int *mysql_fetch_lengths(MYSQL_RES *mysql)
ОПИСАНИЕ:
Возвращает длину всех столбцов в наборе результатов запросов. Если Вы планируете получение данных, содержащих \0, Вы должны использовать эту функцию, чтобы получить фактическую длину значения поля.
Mysql_fetch_row
СИНТАКСИС:
MYSQL_ROW mysql_fetch_row(MYSQL_RES *mysql);
ОПИСАНИЕ:
Выбирает следующую строку в результате запроса. Возвратит пустой указатель, когда все строки были получены.
Mysql_field_seek
СИНТАКСИС:
void mysql_field_seek(MYSQL_RES *result, int field)
ОПИСАНИЕ:
Помещает курсор столбца в поле номер field, который должен быть в диапазоне от 0 до mysql_num_fields(MYSQL_RES*)-1.
Mysql_free_result
СИНТАКСИС:
void mysql_free_result(MYSQL_RES *result);
ОПИСАНИЕ:
Освобождает память, использованную, чтобы сохранить результат запроса. Должна быть вызвана всякий раз, когда Вы закончили использовать результаты вызова mysql_store_result().
Mysql_get_client_info
СИНТАКСИС:
char *mysql_get_client_info(void);
ОПИСАНИЕ:
Эта функция просто возвращает строку с информацией о версии используемой в настоящее время клиентской библиотеки. Иногда полезно.
Mysql_get_host_info
СИНТАКСИС:
char *mysql_get_host_info(MYSQL *mysql);
ОПИСАНИЕ:
Возвращает имя сервера (заданное в аргументе "host" при вызове mysql_connect).
Mysql_get_proto_info
СИНТАКСИС:
int mysql_get_proto_info(MYSQL *mysql);
ОПИСАНИЕ:
Получает версию протокола, используемую подключением. MySQL поддерживает динамические протоколы, основанные на возможностях клиента. В версии 3.20.X это не делает ничего, но в будущих версиях, эта возможность позволит, например, одному пользователю подключать использование текущего протокола, в то время как другой использует шифрование и сжатие.
Mysql_get_server_info
СИНТАКСИС:
char *mysql_get_server_info(MYSQL *mysql);
ОПИСАНИЕ:
Возвращает версию сервера.
Mysql_insert_id
СИНТАКСИС:
int mysql_insert_id(MYSQL *mysql)
ОПИСАНИЕ:
Возвращает ID, сгенерированный для поля AUTO_INCREMENT переменной результата 'res'.
Mysql_list_dbs
СИНТАКСИС:
MYSQL_RES *mysql_list_dbs(MYSQL *mysql, const char *wild);
ОПИСАНИЕ:
Предоставляет простой способ переноса mSQL прикладных программ. Подобно выполнению 'SHOW databases [ LIKE wild-card ]', как запроса.
Mysql_list_fields
СИНТАКСИС:
MYSQL_RES *mysql_list_fields(MYSQL *mysql, const char *table, const char *wild);
ОПИСАНИЕ:
Предоставляет простой способ переноса mSQL прикладных программ. Подобно выполнению 'SHOW fields [FROM table] [FROM database] [LIKE wild-card]', как запроса.
Mysql_list_processes
СИНТАКСИС:
MYSQL_RES *mysql_list_processes(MYSQL *mysql);
ОПИСАНИЕ:
Получает список потоков, в настоящее время запущенных на сервере MySQL. Вы должны иметь привилегии process.
Mysql_list_tables
СИНТАКСИС:
MYSQL_RES *mysql_list_tables(MYSQL *mysql, const char *wild);
ОПИСАНИЕ:
Предоставляет простой способ переноса mSQL прикладных программ.
Вызывает как запрос 'SHOW tables [FROM database]'.
Mysql_num_fields
СИНТАКСИС:
int mysql_num_fields(MYSQL_RES *result);
ОПИСАНИЕ:
Возвращает количество столбцов (полей) в результате запроса.
ПРИМЕР:
MYSQL mysql; MYSQL_RES *result; int fields; if (mysql_query(&mysql, "SELECT * FROM emp_master") == 0) { result = mysql_store_result( &mysql ); if (result != NULL ) { fields = mysql_num_fields( result ); printf( "Retrieved %u fields\n", fields ); } else printf( "Query failed\n" ); } else abort();
См. также:
, , , , ,
Mysql_num_rows
СИНТАКСИС:
int mysql_num_rows(MYSQL_RES *result);
ОПИСАНИЕ:
Возвращает количество строк, возвращенных последним вызовом , , , ,
ПРИМЕР:
MYSQL mysql; MYSQL_RES *result; int rows; if (mysql_query(&mysql, "SELECT * FROM emp_master") == 0) { result = mysql_store_result(&mysql ); if (result != NULL) { rows = mysql_num_rows(result); printf("Retrieved %u rows\n", rows); } else printf("Query failed\n"); } else abort();
См. также:
, , , , ,
MySQL: планы на будущее
Ниже приводятся планы по дальнейшему развитию и совершенствованию пакета MySQL и его будущих версиях.
В версии 3.21.0 все типы поля будут написаны как классы, и будет сделан новый оптимизатор для WHERE. В версии 3.21.0 будет добавлен метод блокировки таблицы. В версии 3.22.0 будет добавлен простой язык модификаций. Он будет включать поддержку циклов и подпрограмм. Добавление встроенного языка модификаций в 3.22.0 сделает возможным определять свои процедуры для модификации таблиц. Все возможности, требовательные к ресурсам, могут сильно понизить производительность. Поэтому предполагается сделать так, чтобы на этапе компиляции пакета их можно было отключить в случае отсутствия в них необходимости и в целях повышения производительности.
Включение блокировки таблицы и сохраненных процедур должно пройти длинный путь к предоставлению людям функциональных возможностей, в которых они нуждаются без серьезного воздействия на эффективность MySQL.
Такие свойства как views, rollback и triggers будут добавлены на каком-то этапе опционально. Они требуют основательной переработки пакета.
Внутренние и внешние объединения, возможно, будут добавлены в версии 3.21.0
Mysql_query
СИНТАКСИС:
int mysql_query(MYSQL *mysql, const char *query);
ОПИСАНИЕ:
Выполняет SQL запрос указанный query к базе данных, указанной в mysql. Эта функция возвращает 0, если запрос выполнен успешно. Результат, отличный от нуля, указывает на ошибку. Обращение к mysql_error выведет текстовое сообщение об ошибке.
Вызов mysql_num_rows даст Вам число строк, возвращенных запросом.
Если Вы имеете поле AUTO_INCREMENT в модифицируемой таблице, и выполняете оператор INSERT, Вы можете получить последнее назначенное значение поля, проверяя mysql_insert_id.
Mysql_real_query
СИНТАКСИС:
int mysql_real_query(MYSQL *mysql, const char *query, uint length);
ОПИСАНИЕ:
Эта функция вызывается mysql_query после того, как она выполнила обращение к функции strlen чтобы вычислить длину строки запроса. Это можно использовать, если Ваша программа распределяет фиксированный буфер для строки запроса.
Вы будете должны использовать эту функцию, если Вы имеете данные, в которые значение \0 входит не как последнее.
Mysql_reload
СИНТАКСИС:
int mysql_reload(MYSQL *mysql);
ОПИСАНИЕ:
Перезагружают таблицу доступа пользователей, очищает все кэши и закрывает все открытые неиспользуемые таблицы. Должна быть вызвана перед запуском isamchk на любой таблице. Требует, чтобы пользователь имел право на перезагрузку (reload).
Mysql_select_db
СИНТАКСИС:
int mysql_select_db(MYSQL *mysql, const char *db);
ОПИСАНИЕ:
Пытается соединиться с базой данных, указанной в db, на сервере, указанном в mysql. Сервер СУБД MySQL использует логин и пароль, содержащиеся в mysql, чтобы опознать подключение. Перед использованием mysql_select_db необходимо успешно вызвать mysql_connect.
mysql_select_db должен быть вызван успешно перед попыткой сделать запрос к базе данных. Исключительные ситуации - запросы типа:
SHOW DATABASES like 'A%'; SELECT 1+1; # SELECT без использования таблиц(ы).
Mysql_shutdown
СИНТАКСИС:
int mysql_shutdown(MYSQL *mysql);
ОПИСАНИЕ:
Останавливает сервер СУБД MySQL. Пользователь должен иметь право shutdown.
Mysql_stat
СИНТАКСИС:
char *mysql_stat(MYSQL *mysql);
ОПИСАНИЕ:
Возвращает информацию, которую выдает команда 'mysqladmin version' в виде строки символов. Эквивалентно опции stat программы mysqladmin. В строку включается информация о простое в секундах, запущенных потоках, запросах, перезагрузках и открытых таблицах.
Mysql_store_result
СИНТАКСИС:
MYSQL_RES *mysql_store_result(MYSQL *mysql);
ОПИСАНИЕ:
Передает результат клиенту. Вы должны использовать эту функцию или mysql_use_result() чтобы получить результат с сервера. Вы обязательно должны использовать mysql_store_result() или mysql_use_result() после того, как выполнили успешный запрос.
mysql_store_result() вернет NULL при ошибке или если инструкция не вернула никаких данных. Вы можете обрабатывать ошибки так:
if (!(result=mysql_store_result(&mysql)) && mysql_num_fields(&mysql)) fputs(mysql_error(&mysql),stderr);
Вызов mysql_free_result() должен быть выполнен, чтобы освободить память.
Mysql_use_result
СИНТАКСИС:
MYSQL_RES *mysql_use_result(MYSQL *mysql);
ОПИСАНИЕ:
То же, что и mysql_store_result(), за исключением того, что результат выдается сервером динамически для каждого вызова mysql_fetch_row(). Эта функция не должна использоваться в интерактивных прикладных программах, так как она связывает сервер. Зато она помогает уменьшить использование памяти на стороне клиента.
Mysqlaccess
Проверка прав доступа пользователя.
СИНТАКСИС:
mysqlaccess [host] [user] [db] OPTIONS
ОПИСАНИЕ:
Скрипт mysqlaccess используется, чтобы внести в список привилегии пользователя для конкретной базы данных. Это дает информацию, которая может быть полезна при диагностировании проблем с доступом пользователей к данной базе данных. Не забудьте, что всегда надо скомандовать: $ 'mysqladmin reload'
после внесения изменений в таблицы базы данных MySQL.
Скрипт mysqlaccess поддерживает следующие параметры (Вы можете использовать "короткий" одиночный символ или более подробную версию):
-?, --help | Справка. |
-v, --version | Информация о версии |
-u, --user=... | Имя пользователя для доступа к базе данных. |
-p, --password=... | Пароль пользователя, для соединения с сервером MySQL. Обратите внимание, что не должно быть пробела между -p и паролем. |
-h, --host=... | Имя сервера, используется для проверки прав доступа. |
-d, --db=... | Имя базы данных, используется для проверки прав доступа. |
-U, --superuser=... | Логин администратора. |
-P, --spassword=... | Пароль администратора. |
-b, --brief | Вывести краткие сведения о таблице. |
--relnotes | Вывести заметки по реализации. |
--plan | Вывести идеи для будущих реализаций. |
--howto | Вывести примеры использования `mysqlaccess' |
--debug=N | Уровень отладки N (0..3) |
Вы должны указать по крайней мере имя пользователя и имя базы данных, которые Вы желаете проверить. Если имя сервера не задано, то подразумевается имя 'localhost'.
"Групповые символы" (*,?, %, _) могут применяться при указании сервера, пользователя и db (базы данных). Убедитесь, что они не будут перехвачены вашей командной оболочкой unix.
Mysqladmin
Выполняет административные функции.
СИНТАКСИС:
mysqladmin [OPTIONS] command command...
ОПИСАНИЕ:
Программа mysqladmin используется, для управления различными аспектами функционирования СУБД MySQL. Допустимы следующие опции (Вы можете использовать "короткий" одиночный символ или более подробную версию):
-\?, --help | Справка. |
-d, --debug=[options] | Вывести в протокол отладочную информацию. В общем виде 'd:t:o,filename`. Подробности в главе о . |
-f, --force | Не спрашивать подтверждения при пропуске таблицы. |
-h, --host=[hostname] | Имя сервера, если не localhost. |
-i, --sleep=[seconds] | Выполнить команды несколько раз с паузой в [секунд] между ними. |
-p, --password[password] | Пароль пользователя, для соединения с сервером MySQL. Обратите внимание, что не должно быть пробела между -p и паролем. |
-u, --user=[user] | Имя пользователя. Если не указано, используется текущий логин. |
-P, --port=[port] | Порт, для соединения с сервером MySQL. |
-V, --version | Вывести информацию о версии. |
Кроме этого программа mysqladmin поддерживает следующие команды:
create [имя базы данных] | Создать базу данных. |
drop [имя базы данных] | Удалить базу данных (вместе со всеми таблицами). |
processlist | Вывести сведения о работающих потоках MySQL. |
reload | Перечитать настройки и очистить все кэши. |
shutdown | Завершить работу СУБД MySQL. Все запущенные MySQL-сессии помечаются как 'killed'. Это означает, что все потоки, которые простаивают в настоящее время, будут закрыты немедленно, а управление потоками будет закрыто, когда они достигнут точек завершения, определенных сервером. Клиенты получат сообщение об ошибке 'mysql server has gone away'. |
status | Вывести короткое сообщение о статусе сервера. |
version | Вывести информацию о версии. |
Обратите внимание: mysqladmin понимает сокращения. Например, Вы могли бы написать следующее: $ mysqladmin v p
Это вывело бы версию mysqld и список всех активных в настоящее время потоков.
Вы можете использовать опцию -i=[секунд] для повтора команды каждые [секунд]. Это наиболее полезно с командой processlist.
Обратите внимание, что Вы можете использовать вышеупомянутые команды, только если Вы имеете соответствующие права доступа.
Mysqlbug
Генерирует отчет об ошибках.
СИНТАКСИС:
mysqlbug [address]
ОПИСАНИЕ:
Пожалуйста используйте этот скрипт при сообщении об ошибках в MySQL. Он генерирует форму для Вас, которую для заполнения помещает в любой текстовый редактор, указанный в переменной $VISUAL (Vi по умолчанию). Форма будет содержать автоматически сгенерированную информацию относительно вашей системы, включая версии OS и MySQL и архитектуру. Когда Вы закончите, форма будет отправлена по почте в список рассылки MySQL. Вы можете факультативно определять альтернативный адрес на который следует послать сообщение об ошибке, определяя [адрес].