Справочное руководство по MySQL версии 4.1.1-alpha

       

Справочное руководство по MySQL версии 4.1.1-alpha

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

О русском переводе руководства
Список терминов, принятых в русском переводе
Что представляет собой MySQL?
История MySQL
Основные возможности MySQL

Насколько стабильным является MySQL?
Насколько большими могут быть таблицы в MySQL?
Вопросы, связанные с Проблемой-2000
Что представляет собой компания MySQL AB?
Бизнес-модель и услуги, оказываемые компанией MySQL AB
Поддержка
Обучение и сертификация

Консультации
Коммерческие лицензии
О нашей программе партнерства
О рекламе
Как с нами связаться
Лицензии и поддержка MySQL
Поддержка, предлагаемая компанией MySQL AB
Авторские права и лицензии на MySQL
Лицензии на ПО MySQL

Использование ПО MySQL под коммерческой лицензией
Бесплатное использование ПО MySQL по лицензии GPL
Логотипы и торговые марки MySQL AB
Оригинальный логотип MySQL
Логотипы MySQL, которые могут использоваться без письменного разрешения
В каком случае для использования логотипов необходимо письменное разрешение?
Партнерские логотипы MySQL AB
Использование слова MySQL в текстовых документах и презентациях
Использование слова MySQL в названиях компаний и продуктов
Кратко о MySQL 4.x

Поэтапный выпуск
Можно использовать уже прямо сейчас
Встроенный MySQL
Другие функции, доступные в MySQL 4.0
Функции MySQL 4.x, которые будут добавлены в будущем
MySQL 4.1, следующая ветка в разработке
Списки рассылки MySQL
Списки рассылки MySQL

Как задавать вопросы и направлять сообщения об ошибках
Как отправлять отчеты об ошибках или проблемах
Рекомендации по ответам на вопросы, направляемые в список рассылки

Пользователи MySQL на IRC
Насколько MySQL соответствует стандартам?
Каким стандартам соответствует MySQL ?
Запуск MySQL в режиме ANSI
Расширения MySQL к ANSI SQL92
Отличия MySQL от ANSI SQL92
Вложенные SELECTы
Оператор SELECT INTO TABLE

Транзакции и атомарные операции
Хранимые процедуры и триггеры
Внешние ключи
Представления
Символы `--' как начало комментария
Ошибки, известные в 3.23 и исправленные в более поздних версиях MySQL

Открытые ошибки / особенности строения MySQL
MySQL и будущее (что предстоит сделать)
Что планируется реализовать в версии в 4.0
Что планируется реализовать в версии 4.1
Что планируется реализовать в версии 5.0
Что должно быть сделано в ближайшем будущем

То, что надо сделать когда-нибудь
То, чего не планируется делать
Сравнение MySQL с другими СУБД
Сравнение MySQL и mSQL

Как конвертировать инструментальные средства mSQL в MySQL
Различия в клиент-серверных коммуникационных протоколах mSQL и MySQL
Различия в синтаксисе SQL между mSQL 2.0 и MySQL
Сравнение MySQL c PostgreSQL
Стратегии развития MySQL и PostgreSQL
Сравнение возможностей MySQL и PostgreSQL
Тестирование скорости работы MySQL и PostgreSQL

Установка MySQL на Linux
Установка MySQL на Windows
Установка бинарного кода
Подготовка конфигурации MySQL для Windows

Первый запуск сервера
Установка MySQL на MacOS X
Как получить MySQL
Проверка целостности пакетов с помощью MD5 Checksums или GnuPG
Проверка контрольной суммы MD5
Проверка подписи с использованием GnuPG
Проверка подписи с использованием GnuPG - 2
Операционные системы, поддерживаемые MySQL

Какую версию MySQL использовать
Схемы установки
Как и когда выпускаются обновления
Бинарные коды MySQL, скомпилированные в MySQL AB

Установка бинарного дистрибутива MySQL
Установка исходного дистрибутива MySQL
Обзор быстрой установки
Применение патчей

Типичные опции configure
Установка из экспериментального набора исходных кодов
Проблемы с компиляцией?

Замечания по потокам MIT-pthreads
Дистрибутив исходного кода для Windows
Послеустановочные настройка и тестирование
Проблемы при запуске mysql_install_db
Проблемы при запуске mysql_install_db - 2
Проблемы при запуске сервера MySQL

Автоматический запуск и остановка MySQL
Апгрейд/даунгрейд MySQL
Модернизация с версии 4.0
Модернизация с версии 3.23 до версии 4.0

Модернизация с версии 3.22 до версии 3.23
Модернизация с версии 3.21 до версии 3.22
Модернизация с версии 3.20 до версии 3.21
Модернизация к иной архитектуре
Примечания к Linux (Все версии Linux)

Примечания к бинарным дистрибутивам Linux
Заметки по поводу Linux x86
Примечания к Linux SPARC
Примечания к Linux Alpha
Примечания к Linux PowerPC
Примечания к Linux MIPS
Примечания к Linux IA64

Примечания к Windows
Запуск MySQL на Windows 95, 98 или Me
Запуск MySQL на Windows NT, 2000 или XP
Работа MySQL в среде Windows
Соединение с MySQL на удаленной машине под Windows с использованием SSH
Распределение данных в Windows между несколькими различными дисками
Компиляция MySQL-клиентов в среде Windows
Сравнительные характеристики MySQL под Windows и под Unix

Примечания к Solaris
Примечания к Solaris 2.7/2.8
Примечания к Solaris x86
Примечания к BSD
Примечания к FreeBSD

Примечания к NetBSD
Примечания к OpenBSD 2.5
Примечания к OpenBSD 2.8
Примечания к BSD/OS версий 2.x
Примечания к BSD/OS версий 3.x
Примечания к BSD/OS версий 4.x
Mac OS X 10.x
Mac OS X Server 1.2 (Rhapsody)
Примечания к бинарному дистрибутиву HP-UX
Примечания к HP-UX версии 10.20

Примечания к HP-UX версий 11.x
Примечания к IBM-AIX
Примечания к SunOS 4
Примечания к Alpha-DEC-UNIX (Tru64)
Примечания к Alpha-DEC-OSF/1
Примечания к SGI Irix
Примечания к Caldera (SCO)

Примечания к Caldera (SCO) Unixware Version 7.0
Примечания к BeOS
Примечания к Novell NetWare
Установка Perl на Unix
Установка ActiveState Perl на Windows
Установка дистрибутива Perl для MySQL на Windows
Проблемы использования интерфейса Perl DBI/DBD

Справочное руководство по MySQL версии 4.1.1-alpha

Эта глава представляет собой обучающий курс по MySQL: в ней демонстрируется использование клиентской программы mysql для создания несложной базы данных и работы с ней. Утилита mysql (иногда называемая также ``терминальным монитором'' или просто ``монитором'') представляет собой интерактивную программу, позволяющую подсоединяться к MySQL-серверу, запускать запросы, и просматривать результаты. Программа mysql может работать и в пакетном режиме: для этого необходимо записать все запросы в файл, а затем передать его содержимое на исполнение mysql. Ниже описаны оба способа использования mysql.

Увидеть список команд программы mysql можно, запустив ее с параметром --help:

shell mysql --help

Текст главы построен с расчетом на то, что на вашем компьютере установлен mysql и существует связь с сервером MySQL. Если это не так, свяжитесь со своим администратором MySQL (если вы и есть администратор, обратитесь к другим разделам настоящего руководства).


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

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

Подсоединение к серверу и отсоединение от него
Ввод запросов
Создание и использование базы данных
Создание и выбор базы данных
Создание таблицы

Загрузка данных в таблицу
Выборка информации из таблицы
Выборка всех данных
Выборка определенных строк
Выборка определенных столбцов
Сортировка строк
Вычисление дат

Работа с значениями NULL
Сравнение по шаблонам
Подсчет строк
Использование нескольких таблиц
Получение информации о базах данных и таблицах
Примеры стандартных запросов

Максимальное значение столбца
Строка, содержащая максимальное значение некоторого столбца
Максимальное значение столбца для группы
Строка, содержащая максимальное значение некоторого столбца
Использование пользовательских переменных
Использование внешних ключей
Поиск по двум ключам
Подсчет посещений за день
Использование атрибута AUTO_INCREMENT
Использование mysql в пакетном режиме

Запросы проекта "Близнецы" (Twin Project)
Поиск нераспределенных близнецов
Поиск нераспределенных близнецов - 2
Вывод таблицы состояний пар близнецов
Использование MySQL совместно с Apache

Справочное руководство по MySQL версии 4.1.1-alpha

Параметры командной строки mysqld
Файлы параметров `my.cnf'

Установка нескольких серверов на один компьютер
Запуск нескольких серверов MySQL на одном компьютере
Общие проблемы безопасности и система привилегий доступа MySQL
Общие принципы обеспечения безопасности

Как обезопасить MySQL от хакеров
Опции запуска mysqld, относящиеся к безопасности
Вопросы безопасности, относящиеся к команде LOAD DATA LOCAL
Функции, выполняемые системой привилегий
Как работает система привилегий

Привилегии, предоставляемые MySQL
Соединение с сервером MySQL
Управление доступом, этап 1: верификация подсоединения
Управление доступом, этап 2: верификация запросов

Причины появления ошибок Access denied ("в доступе отказано")
Синтаксис команд GRANT и REVOKE
Имена пользователей MySQL и пароли
Когда изменения в привилегиях вступают в силу
Задание изначальных привилегий MySQL
Добавление новых пользователей в MySQL

Добавление новых пользователей в MySQL - 2
Ограничение ресурсов пользователя
Задание паролей
Обеспечение безопасности своего пароля
Основные сведения
Требования
Создание SSL-сертификатов

Параметры команды GRANT
Резервное копирование баз данных
Синтаксис BACKUP TABLE
Синтаксис RESTORE TABLE
Синтаксис CHECK TABLE
Синтаксис REPAIR TABLE

Использование myisamchk для профилактики таблиц и послеаварийного
Синтаксис запуска myisamchk
Общие опции для myisamchk
Проверочные опции для myisamchk
Опции исправления для myisamchk
Другие опции для myisamchk
Использование памяти утилитой myisamchk
Использование myisamchk для послеаварийного восстановления
Как проверять таблицы на ошибки

Как ремонтировать таблицы
Оптимизация таблиц
Настройка режима профилактики таблиц
Получение информации о таблице

Синтаксис команды OPTIMIZE TABLE
Синтаксис команды ANALYZE TABLE
Синтаксис команды FLUSH
Синтаксис команды RESET
Синтаксис команды KILL
Синтаксис команды SHOW
Получение информации по базам данных, таблицам, столбцам и индексам
SHOW TABLE STATUS

SHOW STATUS
SHOW VARIABLES
SHOW LOGS
SHOW PROCESSLIST

SHOW GRANTS
SHOW CREATE TABLE
SHOW WARNINGS | ERRORS
SHOW TABLE TYPES
SHOW PRIVILEGES
Набор символов, применяющийся для записи данных и сортировки
Набор символов немецкого алфавита
Сообщения об ошибках на языках, отличных от английского
Добавление набора символов

Массивы определения символов
Поддержка упорядочивания строк
Поддержка многобайтовых символов
Проблемы с наборами символов
Обзор серверных сценариев и утилит
Safe_mysqld, оболочка mysqld
Mysqld_multi, программа для управления множеством серверов MySQL

Myisampack, MySQL-генератор сжатых таблиц (только для чтения)
Mysqld-max, расширенный сервер mysqld
Mysqld-max, расширенный сервер mysqld - 2
Обзор клиентских сценариев и утилит
Mysql, Утилита командной строки

Справочное руководство по MySQL версии 4.1.1-alpha

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


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

Oбзор оптимизации
Конструктивные ограничения MySQL/компромиссы
Вопросы переносимости
Для чего мы использовали MySQL?
Набор тестов MySQL (The MySQL Benchmark Suite)
Использование собственных тестов
Оптимизация SELECT и других запросов

Синтаксис оператора EXPLAIN (получение информации о SELECT)
Оценка производительности запроса
Скорость выполнения запросов SELECT
Как MySQL оптимизирует выражения WHERE

Как MySQL оптимизирует DISTINCT
Как MySQL оптимизирует LEFT JOIN и RIGHT JOIN
Как MySQL оптимизирует ORDER BY
Как MySQL оптимизирует LIMIT
Скорость выполнения запросов INSERT
Скорость выполнения запросов UPDATE

Скорость выполнения запросов DELETE
Другие советы по оптимизации
Как MySQL блокирует таблицы
Вопросы блокирования таблиц
Конструктивные особенности MySQL
Сделайте объем данных как можно меньше

Использование индексов в MySQL
Индексы столбцов
Многостолбцовые индексы
Почему так много открытых таблиц?
Открытие и закрытие таблиц в MySQL
Недостатки создания множества таблиц в одной базе данных
Настройка параметров системы, компляции и запуска

Настройка параметров сервера
Как компиляция и линкование влияет на скорость MySQL
Как MySQL использует память
Как MySQL использует DNS
Синтаксис команды SET

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

Справочное руководство по MySQL версии 4.1.1-alpha

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

Литералы: представление строк и чисел
Cтроки

Числа
Шестнадцатеричные величины
Значения NULL
Имена баз данных, таблиц, столбцов, индексы псевдонимы
Чувствительность имен к регистру
Переменные пользователя
Системные переменные

Синтаксис комментариев
Придирчив'' ли MySQL к зарезервированным словам?
Типы данных столбцов

Числовые типы данных
Типы данных даты и времени
Проблема 2000 года и типы данных
Типы данных DATETIME, DATE и TIMESTAMP

Тип данных TIME
Тип данных YEAR
Символьные типы данных
Типы данных CHAR и VARCHAR
Типы данных BLOB и TEXT
Тип перечисления ENUM

Тип множества SET
Выбор правильного типа данных в столбце
Использование типов столбцов из других баз данных
Требования к памяти для различных типов столбцов
Функции, используемые в операторах SELECT и WHERE
Круглые скобки
Операторы сравнения

Логические операторы
Функции потока управления программой
Строковые функции

Функции сравнения строк
Чувствительность к регистру
Арифметические операции
Математические функции

Функции даты и времени
Функции приведения типов

Битовые функции
Разные функции
Функции, используемые в операторах GROUP BY

Синтаксис оператора SELECT
Синтаксис оператора JOIN

Синтаксис оператора UNION
Синтаксис оператора HANDLER
Синтаксис оператора INSERT
Синтаксис оператора INSERT ... SELECT
Синтаксис оператора INSERT DELAYED

Синтаксис оператора UPDATE
Синтаксис оператора DELETE
Синтаксис оператора TRUNCATE
Синтаксис оператора REPLACE
Синтаксис оператора LOAD DATA INFILE

Синтаксис оператора DO
Синтаксис оператора CREATE DATABASE
Синтаксис оператора DROP DATABASE
Синтаксис оператора CREATE TABLE

Молчаливые изменения определений столбцов
Синтаксис оператора ALTER TABLE

Синтаксис оператора RENAME TABLE
Синтаксис оператора DROP TABLE
Синтаксис оператора CREATE INDEX
Синтаксис оператора DROP INDEX
Синтаксис команды USE
Синтаксис команды DESCRIBE (Получение информации о столбцах)

Синтаксис команд BEGIN/COMMIT/ROLLBACK
Синтаксис команд LOCK TABLES/UNLOCK TABLES
Синтаксис команды SET TRANSACTION
Полнотекстовый поиск в MySQL

Таблицы MyISAM
Пространство, необходимое для ключей
Форматы таблиц MyISAM
Характеристики статических таблиц (с фиксированной длиной)
Характеристики динамических таблиц
Характеристики сжатых таблиц
Проблемы с таблицами MyISAM.

Повреждения таблиц MyISAM
Clients is using or hasn't closed the table properly
Таблицы MERGE
Проблемы при работе с таблицами MERGE
Таблицы ISAM
Таблицы HEAP
Обзор таблиц InnoDB

Параметры запуска InnoDB
Создание табличной области InnoDB
Если во время создания базы данных что-то происходит не так

Создание таблиц InnoDB
Преобразование таблиц MyISAM в формат InnoDB
Ограничения внешнего ключа
Добавление и удаление файлов данных и журналов InnoDB
Создание резервных копий и восстановление баз данных InnoDB
Контрольные точки
Перенесение базы данных InnoDB на другой компьютер

Транзакционная модель InnoDB
Согласованное чтение
Чтение с блокировкой
Блокировка следующего ключа: устранение проблемы с фантомом
Блокировка, осуществляемая различными операторами SQL в InnoDB
Обнаружение и откат взаимоблокировки (deadlock)
Пример работы согласованного чтения в InnoDB
Каким образом избежать взаимоблокировок (deadlock)?

Рекомендации по увеличению производительности
InnoDB Monitor
Реализация многовариантности
Структуры таблиц и индексов
Физическая структура индекса
Буферизация вставок
Адаптивный хешированный индекс

Физическая структура записи
Как работают автоинкрементные столбцы в InnoDB
Дисковый ввод/вывод
Управление файловым пространством
Дефрагментация таблицы
Обработка ошибок
Ограничения для таблиц InnoDB
Контактная информация для получения данных по InnoDB
Обзор таблиц BDB

Установка BDB
Параметры запуска BDB
Характеристики таблиц BDB
Что нам нужно исправить в BDB в ближайшем будущем:
Операционные системы, поддерживаемые BDB
Ограничения таблиц BDB
Ошибки, которые могут возникнуть при использовании таблиц BDB

Справочное руководство по MySQL версии 4.1.1-alpha

Эта глава описывает доступные для MySQL интерфейсы, а также разъясняет, где их можно получить и как их использовать. Интерфейс C API охвачен наиболее широко, так как он был разработан командой MySQL и является базой для большинства других интерфейсов.

Интерфейс PHP API для MySQL
Общие проблемы MySQL и PHP

Интерфейс Perl API для MySQL
DBI с помощью DBD::mysql
Интерфейс DBI
Больше информации по DBI/DBD
Поддержка ODBC в MySQL

Как установить MyODBC
Как заполнять различные поля в Администраторе ODBC
Параметры подключения для MyODBC
Как сообщать о проблемах с MyODBC
Программы, работающие с MyODBC

Как получить значение столбца AUTO_INCREMENT в ODBC
Составление отчетов о проблемах с MyODBC
Интерфейс C для MySQL
Типы данных C API
Обзор функций интерфейса C

Описание функций интерфейса C
Описание
Возвращаемые значения
Пример
Mysql_change_user()
Описание
Ошибки

Mysql_character_set_name()
Mysql_connect()

Mysql_data_seek()
Mysql_escape_string()
Mysql_fetch_field_direct()
Mysql_fetch_fields()
Mysql_fetch_lengths()

Mysql_field_count()
Mysql_field_seek()
Mysql_field_tell()
Mysql_get_server_version()

Mysql_list_dbs()
Mysql_list_fields()
Mysql_list_tables()

Mysql_num_fields()
Mysql_options()
Mysql_real_connect()

Mysql_real_escape_string()
Mysql_real_query()

Справочное руководство по MySQL версии 4.1.1-alpha

Внутреннее устройство MySQL
Потоки MySQL

Пакет тестирования MySQL
Выполнение тестового пакета MySQL
Расширение тестового пакета MySQL
Отчет об ошибках в тестовом пакете MySQL
Добавление новых функций в MySQL
Синтаксис CREATE FUNCTION/DROP FUNCTION
Добавление новой определяемой пользователем функции
Последовательность вызова UDF для простых функций

Последовательность вызова UDF для агрегатных функций
Обработка аргументов
Возвращаемые значения и обработка ошибок
Компиляция и установка определяемых пользователем функций
Добавление новых родных функции
Добавление новой процедуры в MySQL
Процедура Analyse

Написание процедуры

Справочное руководство по MySQL версии 4.1.1-alpha

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

A.1 Как определить, чем вызваны проблемы
A.2 Распространенные ошибки при использовании MySQL
A.2.1 Ошибка Access denied
A.2.2 Ошибка MySQL server has gone away
A.2.3 Ошибка Can't connect to [local] MySQL server
A.2.4 Ошибка Host '...' is blocked

A.2.5 Ошибка Too many connections
A.2.6 Ошибка Some non-transactional changed tables couldn't be rolled back
A.2.7 Ошибка Out of memory
A.2.8 Ошибка Packet too large
A.2.9 Коммуникационные ошибки / Оборванные соединения
A.2.10 Ошибка The table is full
A.2.11 Ошибка Can't create/write to file
A.2.12 Ошибка в клиенте Commands out of sync
A.2.13 Ошибка Ignoring user
A.2.14 Ошибка Table 'xxx' doesn't exist

A.2.15 Ошибка Can't initialize character set xxx
A.2.16 Не найден файл (File not found)
A.3.1 Проблемы при линковании с клиентской библиотекой MySQL
A.3.2 Запуск MySQL от обычного пользователя
A.3.3 Проблемы с правами доступа к файлам
A.4.1 Что делать, если работа MySQL сопровождается постоянными сбоями
A.4.2 Как переустановить забытый пароль пользователя root

A.4.3 Как MySQL реагирует на переполнение диска
A.4.4 Где MySQL хранит временные файлы
A.4.5 Как защитить или изменить сокет-файл MySQL `/tmp/mysql.sock'
A.4.6 Проблемы с часовыми поясами
A.5.1 Чувствительность к регистру при поиске
A.5.2 Проблемы с использованием столбцов типа DATE
A.5.2 Проблемы с использованием столбцов типа DATE - 2
A.5.3 Проблемы со значением NULL
A.5.4 Проблемы с alias
A.5.5 Удаление строк из взаимосвязанных таблиц

A.5.6 Решение проблем с отсутствием строк, удовлетворяющих условиям поиска
A.5.7 Проблемы со сравнением чисел с плавающей точкой
A.5.7 Проблемы со сравнением чисел с плавающей точкой - 2
A.6.1 Проблемы с ALTER TABLE
A.6.2 Как изменить порядок столбцов в таблице
A.6.3 Проблемы, относящиеся к временным (TEMPORARY) таблицам
B.1 Интерфейсы (API)
B.2 Конверторы
B.3 Утилиты
E.1 Отладка сервера MySQL
E.1.1 Компиляция MySQL для отладки
E.1.2 Создание трассировочных файлов
E.1.3 Отладка mysqld при помощи gdb
E.1.4 Использование трассировки стека

E.1.5 Использование журналов для определения причин ошибок в mysqld
E.1.6 Создание контрольного примера при повреждении таблиц
E.2 Отладка клиента MySQL
E.3 Пакет DBUG
E.4 Методы блокировки
E.5 Замечания по потокам RTS
E.6 Различия между разными потоковыми пакетами