Руководство по Mysql оглавление




Скачать 12.23 Mb.
НазваниеРуководство по Mysql оглавление
страница1/130
Дата26.11.2012
Размер12.23 Mb.
ТипРуководство
  1   2   3   4   5   6   7   8   9   ...   130


Справочное руководство по MySQL

Оглавление

1. Общая информация 18

1.1. Об этом руководстве 19

1.2. Соглашения, используемые в данном руководстве 19

1.3. О русском переводе руководства 20

1.3.1. Список терминов, принятых в русском переводе 21

1.4. Что представляет собой MySQL? 23

1.4.1. История MySQL 25

1.4.2. Основные возможности MySQL 25

1.4.3. Насколько стабильным является MySQL? 27

1.4.4. Насколько большими могут быть таблицы в MySQL? 28

1.4.5. Вопросы, связанные с Проблемой-2000 29

1.5. Что представляет собой компания MySQL AB? 31

1.5.1. Бизнес-модель и услуги, оказываемые компанией MySQL AB 31

1.5.1.1. Поддержка 32

1.5.1.2. Обучение и сертификация 32

1.5.1.3. Консультации 32

1.5.1.4. Коммерческие лицензии 33

1.5.1.5. О нашей программе партнерства 33

1.5.1.6. О рекламе 34

1.5.2. Как с нами связаться 34

1.6. Лицензии и поддержка MySQL 35

1.6.1. Поддержка, предлагаемая компанией MySQL AB 35

1.6.2. Авторские права и лицензии на MySQL 36

1.6.3. Лицензии на ПО MySQL 36

1.6.3.1. Использование ПО MySQL под коммерческой лицензией 37

1.6.3.2. Бесплатное использование ПО MySQL по лицензии GPL 37

1.6.4. Логотипы и торговые марки MySQL AB 38

1.6.4.1. Оригинальный логотип MySQL 38

1.6.4.2. Логотипы MySQL, которые могут использоваться без письменного разрешения 39

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

1.6.4.4. Партнерские логотипы MySQL AB 39

1.6.4.5. Использование слова MySQL в текстовых документах и презентациях 40

1.6.4.6. Использование слова MySQL в названиях компаний и продуктов 40

1.7. Кратко о MySQL 4.x 40

1.7.1. Поэтапный выпуск 40

1.7.2. Можно использовать уже прямо сейчас 40

1.7.3. Встроенный MySQL 40

1.7.4. Другие функции, доступные в MySQL 4.0 41

1.7.5. Функции MySQL 4.x, которые будут добавлены в будущем 41

1.7.6. MySQL 4.1, следующая ветка в разработке 42

1.8. Источники информации по MySQL 42

1.8.1. Списки рассылки MySQL 42

1.8.1.1. Списки рассылки MySQL 42

1.8.1.2. Как задавать вопросы и направлять сообщения об ошибках 45

1.8.1.3. Как отправлять отчеты об ошибках или проблемах 45

1.8.1.4. Рекомендации по ответам на вопросы, направляемые в список рассылки 49

1.8.2. Пользователи MySQL на IRC 50

1.9. Насколько MySQL соответствует стандартам? 50

1.9.1. Каким стандартам соответствует MySQL ? 51

1.9.2. Запуск MySQL в режиме ANSI 51

1.9.3. Расширения MySQL к ANSI SQL92 51

1.9.4. Отличия MySQL от ANSI SQL92 54

1.9.4.1. Вложенные SELECTы 54

1.9.4.2. Оператор SELECT INTO TABLE 55

1.9.4.3. Транзакции и атомарные операции 55

1.9.4.4. Хранимые процедуры и триггеры 58

1.9.4.5. Внешние ключи 58

1.9.4.6. Представления 59

1.9.4.7. Символы `--' как начало комментария 59

1.9.5. Известные ошибки и недостатки проектирования в MySQL 60

1.10. MySQL и будущее (что предстоит сделать) 64

1.10.1. Что планируется реализовать в версии в 4.0 64

1.10.2. Things That Should be in 4.1 64

1.10.3. Что планируется реализовать в версии 5.0 64

1.10.4. Что должно быть сделано в ближайшем будущем 65

1.10.5. То, что надо сделать когда-нибудь 68

1.10.6. То, чего не планируется делать 70

1.11. Сравнение MySQL с другими СУБД 70

1.11.1. Сравнение MySQL и mSQL 70

1.11.1.1. Как конвертировать инструментальные средства mSQL в MySQL 73

1.11.1.2. Различия в клиент-серверных коммуникационных протоколах mSQL и MySQL 73

1.11.1.3. Различия в синтаксисе SQL между mSQL 2.0 и MySQL 74

1.11.2. Сравнение MySQL c PostgreSQL 76

1.11.2.1. Стратегии развития MySQL и PostgreSQL 76

1.11.2.2. Сравнение возможностей MySQL и PostgreSQL 77

1.11.2.3. Тестирование скорости работы MySQL и PostgreSQL 80

2. Установка MySQL 85

2.1. Быстрая стандартная установка MySQL 85

2.1.1. Установка MySQL на Linux 85

2.1.2. Установка MySQL на Windows 86

2.1.2.1. Установка бинарного кода 87

2.1.2.2. Подготовка конфигурации MySQL для Windows 87

2.1.2.3. Первый запуск сервера 89

2.2. Общие вопросы инсталляции 89

2.2.1. Как получить MySQL 89

2.2.2 Проверка целостности пакетов с помощью MD5 Checksums или GnuPG 89

2.2.3 Проверка контрольной суммы MD5 90

2.2.4. Проверка подписи с использованием GnuPG 90

2.2.5. Операционные системы, поддерживаемые MySQL 92

2.2.6. Какую версию MySQL использовать 94

2.2.7. Схемы установки 96

2.2.8. Как и когда выпускаются обновления 97

2.2.9. Бинарные коды MySQL, скомпилированные в MySQL AB 98

2.2.10. Установка бинарного дистрибутива MySQL 101

2.3. Установка исходного дистрибутива MySQL 103

2.3.1. Обзор быстрой установки 104

2.3.2. Применение патчей 106

2.3.3. Типичные опции configure 106

2.3.4. Установка из экспериментального набора исходных кодов 109

2.3.5. Проблемы с компиляцией? 111

2.3.6. Замечания по потокам MIT-pthreads 113

2.3.7. Дистрибутив исходного кода для Windows 114

1. Создайте рабочий каталог (т.е. workdir). 115

2. Распакуйте дистрибутив исходного кода в вышеупомянутом каталоге. 115

3. Запустите компилятор VC++ 6.0. 115

4. В меню File выберите Open Workspace. 115

5. Откройте рабочую область mysql.dsw, находящуюся в рабочем каталоге. 115

6. В меню Build выберите подменю Set Active Configuration. 115

7. Выберите в появившемся окне mysqld - Win32 Debug и нажмите OK. 115

8. Нажмите клавишу F7, чтобы начать процесс построения отладочных версий сервера, библиотек и некоторых клиентских приложений. 115

9. По окончании компиляции скопируйте библиотеки и исполняемые файлы в отдельный каталог. 115

10. Тем же способом скомпилируйте рабочие версии (релизы), которые вам нужны. 115

11. Создайте каталог для всего, что нужно MySQL, т.е. `c:\mysql' 115

12. Из каталога workdir скопируйте в каталог `c:\mysql' следующие подкаталоги: 115

13. Создайте каталог `c:\mysql\bin' и скопируйте в него все скомпилированные перед этим серверы и клиенты. 115

14. При желании можете также создать каталог `lib' и скопировать в него скомпилированные ранее библиотеки. 115

15. Произведите очистку, используя Visual Studio. Установите и запустите сервер тем же способом, что и для бинарного дистрибутива для Windows (См. главу 2.1.2.2. Подготовка конфигурации MySQL для Windows). 115

2.4. Послеустановочные настройка и тестирование 115

2.4.1. Проблемы при запуске mysql_install_db 118

2.4.2. Проблемы при запуске сервера MySQL 120

2.4.3. Автоматический запуск и остановка MySQL 122

2.5. Апгрейд/даунгрейд MySQL 123

2.5.1. Модернизация с версии 4.0 123

2.5.2. Модернизация с версии 3.23 до версии 4.0 124

2.5.3. Модернизация с версии 3.22 до версии 3.23 127

2.5.4. Модернизация с версии 3.21 до версии 3.22 128

2.5.5. Модернизация с версии 3.20 до версии 3.21 129

2.5.6. Модернизация к иной архитектуре 129

2.6. Заметки по операционным системам 131

2.6.1. Примечания к Linux (Все версии Linux) 131

2.6.1.1. Примечания к бинарным дистрибутивам Linux 134

2.6.1.2. Заметки по поводу Linux x86 136

2.6.1.3. Примечания к Linux SPARC 136

2.6.1.4. Примечания к Linux Alpha 137

2.6.1.5. Примечания к Linux PowerPC 137

2.6.1.6. Примечания к Linux MIPS 138

2.6.1.7. Примечания к Linux IA64 138

2.6.2. Примечания к Windows 138

2.6.2.1. Запуск MySQL на Windows 95, 98 или Me 138

2.6.2.2. Запуск MySQL на Windows NT, 2000 или XP 139

2.6.2.3. Работа MySQL в среде Windows 140

2.6.2.4. Соединение с MySQL на удаленной машине под Windows с использованием SSH 141

2.6.2.5. Распределение данных в Windows между несколькими различными дисками 142

2.6.2.6. Компиляция MySQL-клиентов в среде Windows 142

2.6.2.7. Сравнительные характеристики MySQL под Windows и под Unix 143

2.6.3. Примечания к Solaris 145

2.6.3.1. Примечания к Solaris 2.7/2.8 147

2.6.3.2. Примечания к Solaris x86 148

2.6.4. Примечания к BSD 148

2.6.4.1. Примечания к FreeBSD 149

2.6.4.2. Примечания к NetBSD 150

2.6.4.3. Примечания к OpenBSD 2.5 150

2.6.4.4. Примечания к OpenBSD 2.8 150

2.6.4.5. Примечания к BSD/OS версий 2.x 150

2.6.4.6. Примечания к BSD/OS версий 3.x 151

2.6.4.7. Примечания к BSD/OS версий 4.x 151

2.6.5. Примечания к Mac OS X 151

2.6.5.1. Общедоступная бета-версия Mac OS X 151

2.6.5.2. Сервер Mac OS X 152

2.6.6. Примечания к другим Unix-системам 152

2.6.6.1. Примечания к бинарному дистрибутиву HP-UX 152

2.6.6.2. Примечания к HP-UX версии 10.20 153

2.6.6.3. Примечания к HP-UX версий 11.x 153

2.6.6.4. Примечания к IBM-AIX 154

2.6.6.5. Примечания к SunOS 4 156

2.6.6.6. Примечания к Alpha-DEC-UNIX (Tru64) 156

2.6.6.7. Примечания к Alpha-DEC-OSF/1 157

2.6.6.8. Примечания к SGI Irix 158

2.6.6.9. Примечания к Caldera (SCO) 159

6. Не забудьте использовать GNU make при сборке MySQL. 160

7. При запуске safe_mysqld не с правами пользователя root вы получите разрешение открывать одновременно только 110 файлов на процесс (это значение установлено по умолчанию). mysqld сообщит об этом в файле протокола. 160

8. На SCO 3.2V5.0.5 вы должны использовать FSU Pthreads версии 3.5c или выше, а также gcc 2.95.2 или более новую версию! Приведенная ниже команда configure должна выполняться корректно: 160

2.6.6.10. Примечания к Caldera (SCO) Unixware Version 7.0 161

2.6.7. Примечания к OS/2 161

2.6.8. Примечания к BeOS 162

2.6.9. Примечания к Novell NetWare 162

2.7. Замечания по установке Perl 162

2.7.1. Установка Perl на Unix 162

2.7.2. Установка ActiveState Perl на Windows 163

2.7.3. Установка дистрибутива Perl для MySQL на Windows 164

2.7.4. Проблемы использования интерфейса Perl DBI/DBD 164

3. Учебное пособие по MySQL 166

3.1. Подсоединение к серверу и отсоединение от него 166

3.2. Ввод запросов 167

3.3. Создание и использование базы данных 168

3.3.1. Создание и выбор базы данных 169

3.3.2. Создание таблицы 170

3.3.3. Загрузка данных в таблицу 171

3.3.4. Выборка информации из таблицы 172

3.3.4.1. Выборка всех данных 172

3.3.4.2. Выборка определенных строк 173

3.3.4.3. Выборка определенных столбцов 174

3.3.4.4. Сортировка строк 175

3.3.4.5. Вычисление дат 176

3.3.4.6. Работа с значениями NULL 178

3.3.4.7. Сравнение по шаблонам 179

3.3.4.8. Подсчет строк 181

3.3.4.9. Использование нескольких таблиц 183

3.4. Получение информации о базах данных и таблицах 184

3.5. Примеры стандартных запросов 185

3.5.1. Максимальное значение столбца 186

3.5.2. Строка, содержащая максимальное значение некоторого столбца 186

3.5.3. Максимальное значение столбца для группы 186

3.5.4. Строка, содержащая максимальное значение некоторого столбца 186

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

3.5.6. Использование внешних ключей 188

3.5.7. Поиск по двум ключам 189

3.5.8. Подсчет посещений за день 189

3.5.9. Использование атрибута AUTO_INCREMENT 189

3.6. Использование mysql в пакетном режиме 190

3.7. Запросы проекта "Близнецы" (Twin Project) 192

3.7.1. Поиск нераспределенных близнецов 192

3.7.2. Вывод таблицы состояний пар близнецов 194

3.8. Использование MySQL совместно с Apache 194

4. Администрирование баз данных 196

4.1. Конфигурирование MySQL 196

4.1.1 Параметры командной строки mysqld 196

4.1.2. Файлы параметров my.cnf 200

4.1.3. Установка нескольких серверов на один компьютер 203

4.1.4. Запуск нескольких серверов MySQL на одном компьютере 204

4.2. Общие проблемы безопасности и система привилегий доступа MySQL 205

4.2.1. Общие принципы обеспечения безопасности 205

4.2.2. Как обезопасить MySQL от хакеров 208

4.2.3. Опции запуска mysqld, относящиеся к безопасности 210

4.2.4. Вопросы безопасности, относящиеся к команде LOAD DATA LOCAL 210

4.2.5. Функции, выполняемые системой привилегий 211

4.2.6. Как работает система привилегий 211

4.2.7. Привилегии, предоставляемые MySQL 214

4.2.8 Соединение с сервером MySQL 216

4.2.9. Управление доступом, этап 1: верификация подсоединения 217

4.2.10. Управление доступом, этап 2: верификация запросов 220

4.2.11. Причины появления ошибок Access denied ("в доступе отказано") 223

4.3. Управление учетными записями пользователей MySQL 227

4.3.1. Синтаксис команд GRANT и REVOKE 227

4.3.2. Имена пользователей MySQL и пароли 231

4.3.3. Когда изменения в привилегиях вступают в силу 232

4.3.4. Задание изначальных привилегий MySQL 232

4.3.5. Добавление новых пользователей в MySQL 234

4.3.6. Ограничение ресурсов пользователя 236

4.3.7. Задание паролей 237

4.3.8. Обеспечение безопасности своего пароля 238

4.3.9. Использование безопасных соединений 239

4.3.9.1. Основные сведения 239

4.3.9.2. Требования 240

4.3.9.3. Параметры команды GRANT 240

4.4. Предотвращение катастроф и восстановление 241

4.4.1. Резервное копирование баз данных 241

4.4.2. Синтаксис BACKUP TABLE 242

4.4.3. Синтаксис RESTORE TABLE 243

4.4.4. Синтаксис CHECK TABLE 243

4.4.5. Синтаксис REPAIR TABLE 244

4.4.6. Использование myisamchk для профилактики таблиц и послеаварийного восстановления 245

4.4.6.1. Синтаксис запуска myisamchk 246

4.4.6.2. Общие опции для myisamchk 247

4.4.6.3. Проверочные опции для myisamchk 248

4.4.6.4. Опции исправления для myisamchk 248

4.4.6.5. Другие опции для myisamchk 250

4.4.6.6. Использование памяти утилитой myisamchk 250

4.4.6.7. Использование myisamchk для послеаварийного восстановления 251

4.4.6.8. Как проверять таблицы на ошибки 252

4.4.6.9. Как ремонтировать таблицы 252

16. Восстановите файл описания из резервной копии и перейдите к стадии 3. Можно также восстановить индексный файл и вернуться к стадии 2. Во втором случае начинать надо с myisamchk -r. 254

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

4.4.6.10. Оптимизация таблиц 255

4.4.7. Настройка режима профилактики таблиц 255

4.4.8. Получение информации о таблице 256

4.5. Справочник по языку администрирования баз данных 260

4.5.1 Синтаксис команды OPTIMIZE TABLE 260

4.5.2. Синтаксис команды ANALYZE TABLE 261

4.5.3. Синтаксис команды FLUSH 261

4.5.4. Синтаксис команды RESET 263

4.5.5. Синтаксис команды KILL 263

4.5.6. Синтаксис команды SHOW 264

4.5.6.1. Получение информации по базам данных, таблицам, столбцам и индексам 264

4.5.6.2. SHOW TABLE STATUS 265

4.5.6.3. SHOW STATUS 266

4.5.6.4. SHOW VARIABLES 269

4.5.6.5. SHOW LOGS 278

4.5.6.6. SHOW PROCESSLIST 278

4.5.6.7. SHOW GRANTS 280

4.5.6.8. SHOW CREATE TABLE 280

4.6. Локализация MySQL и использование национальных алфавитов 280

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

4.6.1.1. Набор символов немецкого алфавита 281

4.6.2. Сообщения об ошибках на языках, отличных от английского 282

4.6.3. Добавление набора символов 282

18. Вставьте имя MYSET в конец файла `sql/share/charsets/Index' и присвойте этому набору символов уникальный номер. 282

19. Создайте файл `sql/share/charsets/MYSET.conf'. (в качестве основы можно использовать файл `sql/share/charsets/latin1.conf'). Правила составления этого файла очень просты: 282

1. Добавьте имя набора символов в списки CHARSETS_AVAILABLE и COMPILED_CHARSETS файла `configure.in'. 283

2. Перенастройте, перекомпилируйте и протестируйте систему. 283

4.6.4. Массивы определения символов 283

4.6.5. Поддержка упорядочивания строк 284

4.6.6. Поддержка многобайтовых символов 284

4.6.7. Проблемы с наборами символов 284

4.7. Серверные сценарии и утилиты MySQL 285

4.7.1. Обзор серверных сценариев и утилит 285

4.7.2. safe_mysqld, оболочка mysqld 286

4.7.3. Mysqld_multi, программа для управления множеством серверов MySQL 288

4.7.4. myisampack, MySQL-генератор сжатых таблиц (только для чтения) 291

4.7.5. mysqld-max, расширенный сервер mysqld 296

4.8. Клиентские сценарии и утилиты MySQL 298

4.8.1 Обзор клиентских сценариев и утилит 298

4.8.2. mysql, Утилита командной строки 299

4.8.3. mysqladmin, Администрирование MySQL-сервера. 306

4.8.4. Использование mysqlcheck для сопровождения и аварийного восстановления таблиц. 307

4.8.5. mysqldump, Получение дампов данных и структуры таблицы 310

4.8.6. mysqlhotcopy, Копирование баз данных и таблиц MySQL 314

4.8.7. mysqlimport, импорт данных из текстовых файлов 315

4.8.8. Просмотр баз данных, таблиц и столбцов 317

4.8.9. perror, разъяснение кодов ошибок 317

4.8.10. Как запускать SQL-команды из текстового файла 318

4.9. Файлы журналов MySQL 318

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

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

4.9.3. Журнал обновлений (update) 319

4.9.4. Бинарный журнал обновлений 320

4.9.5. Журнал медленных запросов 321

4.9.6. Обслуживание файлов журналов 322

4.10. Репликация в MySQL 322

4.10.1. Введение 322

4.10.2. Как реализована репликация: обзор 323

4.10.3. Как настроить репликацию 324

1. Удостоверьтесь, что на головном и подчиненном(ых) серверах установлена свежая версия MySQL. Используйте версию 3.23.29 или выше. В предыдущих релизах применялся другой формат двоичного журнала и содержались ошибки, которые были исправлены в более новых релизах. Большая просьба: пожалуйста, не посылайте сообщения об ошибках, не проверив, присутствует ли эта ошибка в последнем релизе. 324

2. Установите на головном сервере отдельного пользователя для репликации с привилегией FILE (в версиях MySQL ниже 4.0.2) или REPLICATION SLAVE в более новых версиях MySQL. У этого пользователя должно быть также разрешение подсоединяться со всех подчиненных серверов. Если пользователь будет выполнять только репликацию (рекомендуется), то ему не нужно предоставлять какие-либо дополнительные привилегии. Например, чтобы создать пользователя с именем repl, который может иметь доступ к головному серверу с любого хоста, можно использовать такую команду: 324

3. Завершите работу MySQL на головном сервере. 324

4. Создайте образ всех данных на головном сервере. Легче всего сделать это (на Unix), создав при помощи tar архив всей своей директории данных. Точное местоположение директории данных зависит от вашей инсталляции. 324

Пользователи Windows для создания архива каталога данных могут использовать WinZIP или другую подобную программу. 324

5. В my.cnf на головном сервере добавьте записи к разделу [mysqld] записи log-bin и server-id=уникальный номер к разделу [mysqld] и перезапустите сервер. Очень важно, чтобы ID подчиненного сервера отличался от ID головного сервера. Можно считать, что server-id играет роль IP-адреса - он уникально идентифицирует сервер среди участников репликации. 325

6. Перезапустите MySQL на головном сервере. 325

7. Добавьте в my.cnf на подчиненном сервере(ах) следующий фрагмент: 325

заменяя значения в <> значениями, соответствующими вашей системе. Значения server-id должны быть различными на каждом сервере, участвующем в репликации. Если значение server-id не определено, оно будет установлено в 1, если также не определено значение master-host, оно будет установлено в 2. Обратите внимание, что если значение server-id опущено, то головной сервер будет отказывать в соединении всем подчиненным серверам, а подчиненный сервер - отказывать в соединении головному серверу. Таким образом, опускать установку значения server-id можно лишь в случае резервного копирования с использованием двоичного журнала. 325

8. Скопируйте данные снимка в директорию данных на подчиненном сервере (ах). Удостоверьтесь в правильности привилегий для файлов и каталогов. Пользователь, от имени которого запускается MySQL, должен иметь возможность читать и записывать данные в них так же, как и на головном сервере. 325

9. Перезапустите подчиненный(ые) сервер(ы). 325

4.10.4. Возможности репликации и известные проблемы 325

4.10.5. Опции репликации в файле `my.cnf' 328

4.10.6. SQL-команды, относящиеся к репликации 334

4.10.7. Часто задаваемые вопросы по репликации 337

4.10.8, Поиск неисправностей репликации 342

5. Оптимизация в MySQL 345

5.1. Oбзор оптимизации 345

5.1.1. Конструктивные ограничения MySQL/компромиссы 345

5.1.2. Вопросы переносимости 346

5.1.3. Для чего мы использовали MySQL? 347

5.1.4. Набор тестов MySQL (The MySQL Benchmark Suite) 348

5.1.5. Использование собственных тестов 349

5.2. Оптимизация SELECT и других запросов 350

5.2.1. Синтаксис оператора EXPLAIN (получение информации о SELECT) 350

5.2.2. Оценка производительности запроса 355

5.2.3. Скорость выполнения запросов SELECT 356

5.2.4. Как MySQL оптимизирует выражения WHERE 356

5.2.5. Как MySQL оптимизирует DISTINCT 358

5.2.6. Как MySQL оптимизирует LEFT JOIN и RIGHT JOIN 358

5.2.7. Как MySQL оптимизирует ORDER BY 359

5.2.8. Как MySQL оптимизирует LIMIT 360

5.2.9. Скорость выполнения запросов INSERT 360

10. При необходимости создайте таблицу при помощи оператора CREATE TABLE (например, используя mysql или Perl-DBI). 361

11. Выполните оператор FLUSH TABLES или команду оболочки: mysqladmin flush-tables. 361

12. Используйте myisamchk --keys-used=0 -rq /path/to/db/tbl_name. После этого индексы не будут использоваться для данной таблицы. 361

13. Вставьте данные в таблицу при помощи LOAD DATA INFILE. При этом никакие индексы обновляться не будут и, следовательно, скорость будет высокой весьма. 361

14. Если вы собираетесь в будущем только лишь читать таблицу, выполните myisampack для этой таблицы, чтобы уменьшить ее размер. См. главу 4.7.4. myisampack, MySQL-генератор сжатых таблиц (только для чтения). 361

15. Воссоздайте индексы при помощи команды myisamchk -r -q /path/to/db/tbl_name. Эта процедура создает индексное дерево в памяти, перед тем как записать его на диск, что гораздо быстрее за счет исключения большого количества дисковых операций. Индексное дерево, получившееся в результате, к тому же отлично сбалансировано. 361

16. Выполните оператор FLUSH TABLES или команду оболочки: mysqladmin flush-tables. 361

5.2.10. Скорость выполнения запросов UPDATE 362

5.2.11. Скорость выполнения запросов DELETE 363

5.2.12. Другие советы по оптимизации 363

5.3. Вопросы блокировок 366

5.3.1. Как MySQL блокирует таблицы 366

5.3.2. Вопросы блокирования таблиц 367

5.4. Оптимизация структуры базы данных 368

5.4.1. Конструктивные особенности MySQL 368

5.4.2. Сделайте объем данных как можно меньше 369

5.4.3. Использование индексов в MySQL 370

5.4.4. Индексы столбцов 372

5.4.5. Многостолбцовые индексы 372

5.4.6. Почему так много открытых таблиц? 373

5.4.7. Открытие и закрытие таблиц в MySQL 373

5.4.8. Недостатки создания множества таблиц в одной базе данных 374

5.5. Оптимизация сервера MySQL 375

5.5.1. Настройка параметров системы, компляции и запуска 375

5.5.2. Настройка параметров сервера 375

5.5.3. Как компиляция и линкование влияет на скорость MySQL 377

5.5.4. Как MySQL использует память 378

5.5.5. Как MySQL использует DNS 380

5.5.6. Синтаксис команды SET 380

5.6. Вопросы, относящиеся к диску 383

5.6.1. Использование символических ссылок 384

5.6.1.1. Использование символических ссылок для баз данных 385

5.6.1.2. Использование символических ссылок для таблиц 385

6. Справочник по языку MySQL 387

6.1. Структура языка 387

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

6.1.1.1. Cтроки 387

6.1.1.2. Числа 389

6.1.1.3. Шестнадцатеричные величины 389

6.1.1.4. Значения NULL 389

6.1.2. Имена баз данных, таблиц, столбцов, индексы псевдонимы 390

6.1.3. Чувствительность имен к регистру 391

6.1.4. Переменные пользователя 391

6.1.5. Синтаксис комментариев 392

6.1.6. "Придирчив'' ли MySQL к зарезервированным словам? 393

6.2. Типы данных столбцов 394

6.2.1. Числовые типы данных 399

6.2.2. Типы данных даты и времени 401

6.2.2.1. Проблема 2000 года и типы данных 402

6.2.2.2. Типы данных DATETIME, DATE и TIMESTAMP 402

6.2.2.3. Тип данных TIME 406

6.2.2.4. Тип данных YEAR 407

6.2.3. Символьные типы данных 407

6.2.3.1. Типы данных CHAR и VARCHAR 407

6.2.3.2. Типы данных BLOB и TEXT 408

6.2.3.3. Тип перечисления ENUM 409

6.2.3.4. Тип множества SET 411

6.2.4. Выбор правильного типа данных в столбце 412

6.2.5. Использование типов столбцов из других баз данных 412

6.2.6. Требования к памяти для различных типов столбцов 412

6.3. Функции, используемые в операторах SELECT и WHERE 414

6.3.1. Операторы и функции общего назначения 414

6.3.1.1. Круглые скобки 414

6.3.1.2. Операторы сравнения 414

6.3.1.3. Логические операторы 417

6.3.1.4. Функции потока управления программой 418

6.3.2. Строковые функции 419

6.3.2.1. Функции сравнения строк 426

6.3.2.2. Чувствительность к регистру 428

6.3.3. Числовые функции 429

6.3.3.1. Арифметические операции 429

6.3.3.2. Математические функции 429

6.3.4. Функции даты и времени 434

6.3.5. Функции приведения типов 441

6.3.6. Другие функции 442

6.3.6.1. Битовые функции 442

6.3.6.2. Разные функции 443

6.3.7. Функции, используемые в операторах GROUP BY 449

6.4. Обработка данных: SELECT, INSERT, UPDATE, DELETE 450

6.4.1. Синтаксис оператора SELECT 450

6.4.1.1. Синтаксис оператора JOIN 454

6.4.1.2. Синтаксис оператора UNION 456

6.4.2. Синтаксис оператора HANDLER 456

6.4.3. Синтаксис оператора INSERT 457

6.4.3.1. Синтаксис оператора INSERT ... SELECT 459

6.4.4. Синтаксис оператора INSERT DELAYED 459

6.4.5. Синтаксис оператора UPDATE 461

6.4.6. Синтаксис оператора DELETE 462

6.4.7. Синтаксис оператора TRUNCATE 463

6.4.8. Синтаксис оператора REPLACE 463

6.4.9. Синтаксис оператора LOAD DATA INFILE 464

6.4.10. Синтаксис оператора DO 470

6.5. Определение данных: CREATE, DROP, ALTER 470

6.5.1. Синтаксис оператора CREATE DATABASE 470

6.5.2. Синтаксис оператора DROP DATABASE 471

6.5.3. Синтаксис оператора CREATE TABLE 471

6.5.3.1. Молчаливые изменения определений столбцов 478

6.5.4. Синтаксис оператора ALTER TABLE 478

6.5.5. Синтаксис оператора RENAME TABLE 482

6.5.5. Синтаксис оператора RENAME TABLE 482

6.5.7. Синтаксис оператора CREATE INDEX 483

6.5.8. Синтаксис оператора DROP INDEX 483

6.6. Основные команды пользовательских программ MySQL 484

6.6.1. Синтаксис команды USE 484

6.6.2. Синтаксис команды DESCRIBE (Получение информации о столбцах) 484

6.7. Команды управления транзакциями и блокировками в MySQL 484

6.7.1. Синтаксис команд BEGIN/COMMIT/ROLLBACK 484

6.7.2. Синтаксис команд LOCK TABLES/UNLOCK TABLES 485

6.7.3. Синтаксис команды SET TRANSACTION 487

6.8. Полнотекстовый поиск в MySQL 487

6.8.1. Ограничения для полнотекстового поиска 491

6.8.2. Тонкая настройка полнотекстового поиска в MySQL 491

6.8.3. Предстоящие доработки по полнотекстовому поиску 491

6.9. Кэш запросов в MySQL 492

6.9.1. Как работает кэширование запросов 492

6.9.2. Конфигурация кэша запросов 493

6.9.3. Параметры кэша запросов в запросе SELECT 494

6.9.4. Статус и поддержка кэша запросов 494

7. Типы таблиц MySQL 496

7.1. Таблицы MyISAM 496

7.1.1. Пространство, необходимое для ключей 499

7.1.2. Форматы таблиц MyISAM 500

7.1.2.1. Характеристики статической таблицы (с фиксированной длиной) 500

7.1.2.2. Характеристики динамических таблиц 500

7.1.2.3. Характеристики сжатых таблиц 501

7.1.3. Проблемы с таблицами MyISAM. 502

7.1.3.1. Повреждения таблиц MyISAM 502

7.1.3.2. Clients is using or hasn't closed the table properly 503

7.2. Таблицы MERGE 503

7.2.1. Проблемы при работе с таблицами MERGE 506

7.3. Таблицы ISAM 506

7.4. Таблицы HEAP 507

7.5. Таблицы InnoDB 508

7.5.1. Обзор таблиц InnoDB 508

7.5.2. Параметры запуска InnoDB 509

7.5.3. Создание табличной области InnoDB 515

7.5.3.1. Если во время создания базы данных что-то происходит не так 515

7.5.4. Создание таблиц InnoDB 516

7.5.4.1. Преобразование таблиц MyISAM в формат InnoDB 516

7.5.4.2. Ограничения внешнего ключа 517

7.5.5. Добавление и удаление файлов данных и журналов InnoDB 518

7.5.6. Создание резервных копий и восстановление баз данных InnoDB 519

7.5.6.1. Контрольные точки 520

7.5.7. Перенесение базы данных InnoDB на другой компьютер 521

7.5.8. Транзакционная модель InnoDB 521

7.5.8.1. Согласованное чтение 521

7.5.8.2. Чтение с блокировкой 522

7.5.8.3. Блокировка следующего ключа: устранение проблемы с фантомом 522

7.5.8.4. Блокировка, осуществляемая различными операторами SQL в InnoDB 523

7.5.8.5. Обнаружение и откат взаимоблокировки (deadlock) 524

7.5.8.6. Пример работы согласованного чтения в InnoDB 524

7.5.9. Рекомендации по увеличению производительности 525

7.5.9.1. InnoDB Monitor 526

7.5.10. Реализация многовариантности 528

7.5.11. Структуры таблиц и индексов 529

7.5.11.1. Физическая структура индекса 529

7.5.11.2. Буферизация вставок 530

7.5.11.3. Адаптивный хешированный индекс 530

7.5.11.4. Физическая структура записи 530

7.5.11.5. Как работают автоинкрементные столбцы в InnoDB 531

7.5.12. Управление файловым пространством и дисковый ввод/вывод 531

7.5.12.1. Дисковый ввод/вывод 531

7.5.12.2. Управление файловым пространством 532

7.5.12.3. Дефрагментация таблицы 533

7.5.13. Обработка ошибок 533

7.5.14. Ограничения для таблиц InnoDB 533

7.5.15. Контактная информация для получения данных по InnoDB 534

7.6. Таблицы BDB или Berkeley_DB 535

7.6.1. Обзор таблиц BDB 535

7.6.2. Установка BDB 535

7.6.3. Параметры запуска BDB 535

7.6.4 Характеристики таблиц BDB 536

7.6.5. Что нам нужно исправить в BDB в ближайшем будущем: 537

7.6.6. Операционные системы, поддерживаемые BDB 538

7.6.7. Ограничения таблиц BDB 538

7.6.8. Ошибки, которые могут возникнуть при использовании таблиц BDB 538

8. Интерфейсы для MySQL 540

8.1. Интерфейс PHP API для MySQL 540

8.1.1 Общие проблемы MySQL и PHP 540

8.2. Интерфейс Perl API для MySQL 540

8.2.1. DBI с помощью DBD::mysql 540

8.2.2. Интерфейс DBI 541

8.2.3. Больше информации по DBI/DBD 546

8.3. Поддержка ODBC в MySQL 546

8.3.1. Как установить MyODBC 546

8.3.2. Как заполнять различные поля в Администраторе ODBC 547

8.3.3. Параметры подключения для MyODBC 548

8.3.4. Как сообщать о проблемах с MyODBC 549

8.3.5. Программы, работающие с MyODBC 549

8.3.6. Как получить значение столбца AUTO_INCREMENT в ODBC 554

8.3.7. Составление отчетов о проблемах с MyODBC 554

8.4. Интерфейс C для MySQL 555

8.4.1. Типы данных C API 556

8.4.2. Обзор функций интерфейса C 558

8.4.3. Описание функций интерфейса C 562

8.4.3.1. mysql_affected_rows() 562

8.4.3.2. mysql_change_user() 563

8.4.3.3. mysql_character_set_name() 563

8.4.3.4. mysql_close() 564

8.4.3.5. mysql_connect() 564

8.4.3.6. mysql_create_db() 564

8.4.3.7. mysql_data_seek() 565

8.4.3.8. mysql_debug() 565

8.4.3.9. mysql_drop_db() 566

8.4.3.10. mysql_dump_debug_info() 566

8.4.3.11. mysql_eof() 567

8.4.3.12. mysql_errno() 568

8.4.3.13. mysql_error() 568

8.4.3.14. mysql_escape_string() 568

8.4.3.15. mysql_fetch_field() 569

8.4.3.16. mysql_fetch_field_direct() 569

8.4.3.17. mysql_fetch_fields() 570

8.4.3.18. mysql_fetch_lengths() 570

8.4.3.19. mysql_fetch_row() 571

8.4.3.20. mysql_field_count() 572

8.4.3.21. mysql_field_seek() 573

8.4.3.22. mysql_field_tell() 573

8.4.3.23. mysql_free_result() 573

8.4.3.24. mysql_get_client_info() 573

8.4.3.25. mysql_get_host_info() 574

8.4.3.26. mysql_get_proto_info() 574

8.4.3.27. mysql_get_server_info() 574

8.4.3.28. mysql_info() 574

8.4.3.29. mysql_init() 575

8.4.3.30. mysql_insert_id() 575

8.4.3.31. mysql_kill() 576

8.4.3.32. mysql_list_dbs() 576

8.4.3.33. mysql_list_fields() 577

8.4.3.34. mysql_list_processes() 577

8.4.3.35. mysql_list_tables() 578

8.4.3.36. mysql_num_fields() 578

8.4.3.37. mysql_num_rows() 579

8.4.3.38. mysql_options() 580

8.4.3.39. mysql_ping() 581

8.4.3.40. mysql_query() 582

8.4.3.41. mysql_real_connect() 582

8.4.3.42. mysql_real_escape_string() 585

8.4.3.43. mysql_real_query() 586

8.4.3.44. mysql_reload() 586

8.4.3.45. mysql_row_seek() 587

8.4.3.46. mysql_row_tell() 587

8.4.3.47. mysql_select_db() 587

8.4.3.48. mysql_shutdown() 588

8.4.3.49. mysql_stat() 588

8.4.3.50. mysql_store_result() 589

8.4.3.51. mysql_thread_id() 590

8.4.3.52. mysql_use_result() 590

8.4.4. Описания функций C, связанных с потоками 591

8.4.4.1. my_init() 591

8.4.4.2. mysql_thread_init() 591

8.4.4.3. mysql_thread_end() 592

8.4.4.4. mysql_thread_safe() 592

8.4.5. Описания функций C, доступных во встраиваемом сервере 592

8.4.5.1. mysql_server_init() 592

8.4.5.2. mysql_server_end() 593

8.4.6. Основные вопросы и проблемы в использовании интерфейса C 593

8.4.6.1. Почему после успешных возвратов функции mysql_query() функция mysql_store_result() иногда возвращает NULL? 593

8.4.6.2. Какие результаты можно получить из запроса? 593

8.4.6.3. Как получить уникальный идентификатор для последней внесенной строки? 594

8.4.6.4. Проблемы линкования с интерфейсом C 594

8.4.7. Сборка клиентских программ 595

8.4.8. Как создать клиентскую программу с потоками 595

8.4.9. libmysqld, встраиваемая библиотека сервера MySQL 597

8.4.9.1. Обзор библиотеки встраиваемого сервера MySQL 597

8.4.9.2. Компиляция программ с libmysqld 597

8.4.9.3. Ограничения при использовании встраиваемого сервера MySQL 597

8.4.9.4. Использование файлов опций с встраиваемым сервером 598

8.4.9.5. Что осталось сделать по встраиваемому серверу (TODO) 598

8.4.9.6. Пример простого встраиваемого сервера 598

8.4.9.7. Лицензирование встраиваемого сервера 601

8.5. Интерфейсы C++ 601

8.5.1. Интерфейс Borland C++ 601

8.6. Взаимодействие MySQL и Java (JDBC) 601

8.7. Интерфейсы Python API для MySQL 602

8.8. Интерфейсы Tcl API для MySQL 602

8.9. Оболочка Eiffel для MySQL 602

9. Расширение MySQL 603

9.1. Внутреннее устройство MySQL 603

9.1.1. Потоки MySQL 603

9.1.2. Пакет тестирования MySQL 603

9.1.2.1. Выполнение тестового пакета MySQL 604

9.1.2.2. Расширение тестового пакета MySQL 604

9.1.2.3. Отчет об ошибках в тестовом пакете MySQL 605

9.2. Добавление новых функций в MySQL 606

9.2.1. Синтаксис CREATE FUNCTION/DROP FUNCTION 607

DROP 9.2.2. Добавление новой определяемой пользователем функции 607

9.2.2.1. Последовательность вызова UDF для простых функций 609

9.2.2.2. Последовательность вызова UDF для агрегатных функций 610

9.2.2.3. Обработка аргументов 610

9.2.2.4. Возвращаемые значения и обработка ошибок 611

9.2.2.5. Компиляция и установка определяемых пользователем функций 612

9.2.3. Добавление новых родных функции 613

9.3. Добавление новой процедуры в MySQL 615

9.3.1. Процедура Analyse 615

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

A. Проблемы и распространенные ошибки 616

A.1. Как определить, чем вызваны проблемы 616

A.2. Распространенные ошибки при использовании MySQL 617

A.2.1. Ошибка Access denied 617

A.2.2. Ошибка MySQL server has gone away 617

A.2.3. Ошибка Can't connect to [local] MySQL server 618

A.2.4. Ошибка Host '...' is blocked 620

A.2.5. Ошибка Too many connections 620

A.2.6. Ошибка Some non-transactional changed tables couldn't be rolled back 621

A.2.7. Ошибка Out of memory 621

A.2.8. Ошибка Packet too large 621

A.2.9. Коммуникационные ошибки / Оборванные соединения 622

A.2.10. Ошибка The table is full 623

A.2.11. Ошибка Can't create/write to file 623

A.2.12. Ошибка в клиенте Commands out of sync 624

A.2.13. Ошибка Ignoring user 624

A.2.14. Ошибка Table 'xxx' doesn't exist 624

A.2.15. Ошибка Can't initialize character set xxx 624

A.2.16. Не найден файл (File not found) 625

A.3. Вопросы, связанные с инсталляцией 626

A.3.1. Проблемы при линковании с клиентской библиотекой MySQL 626

A.3.2. Запуск MySQL от обычного пользователем 627

A.3.3. Проблемы с правами доступа к файлам 627

A.4. Вопросы, связанные с администрированием 628

A.4.1. Что делать, если работа MySQL сопровождается постоянными сбоями 628

A.4.2. Как переустановить забытый пароль пользователя root 630

A.4.3. Как MySQL реагирует на переполнение диска 631

A.4.4. Где MySQL хранит временные файлы 632

A.4.5. Как защитить или изменить сокет-файл MySQL `/tmp/mysql.sock' 632

A.4.6. Проблемы с часовыми поясами 633

A.5. Проблемы, относящиеся к запросам 633

A.5.1. Чувствительность к регистру при поиске 633

A.5.2. Проблемы с использованием столбцов типа DATE 633

A.5.3. Проблемы со значением NULL 634

A.5.4. Проблемы с alias 635

A.5.5. Удаление строк из взаимосвязанных таблиц 635

A.5.6. Решение проблем с отсутствием строк, удовлетворяющих условиям поиска 636

A.5.7. Проблемы со сравнением чисел с плавающей точкой 636

A.6. Вопросы, связанные с определением таблиц 638

A.6.1. Проблемы с ALTER TABLE 638

A.6.2. Как изменить порядок столбцов в таблице 638

A.6.3. Проблемы, относящиеся к временным (TEMPORARY) таблицам 639

B. Привнесенные программы 640

B.1. Интерфейсы (API) 640

B.2. Клиенты 644

B.3. Веб-инструменты 648

B.4. Средства тестирования производительности 649

B.5. Средства аутентификации 649

B.6. Конверторы 650

B.7. Использование MySQL с другими программными продуктами 651

B.8. Утилиты 652

B.9. RPM общих инструментальных программ (преимущественно для RedHat 6.1) 653

B.10. Полезные функции 653

B.11. Программы для Windows 653

B.12. Не вошедшие в категории 653

C. Благодарности 655

C.1. Разработчики MySQL AB 655

C.2. Наши помощники, которые сделали вклад в развитие MySQL 657

C.3. Спонсоры MySQL 663

D. История изменений и обновлений MySQL 664

E. Перенос на другие системы 667

E.1. Отладка сервера MySQL 668

E.1.1. Компиляция MySQL для отладки 668

E.1.2. Создание трассировочных файлов 669

E.1.3. Отладка mysqld при помощи gdb 670

E.1.4. Использование трассировки стека 671

E.1.5. Использование журналов для определения причин ошибок в mysqld 672

E.1.6. Создание контрольного примера при повреждении таблиц 672

E.2. Отладка клиента MySQL 673

E.3. Пакет DBUG 674

E.4. Методы блокировки 675

E.5. Замечания по потокам RTS 677

E.6. Различия между разными потоковыми пакетами 678

F. Переменные окружения 680

G. Регулярные выражения в MySQL 681

H. GNU General Public License 684

H.1. Preamble 684

H.2. TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION 684

17. Accompany it with the complete corresponding machine-readable source code, which must be distributed under the terms of Sections 1 and 2 above on a medium customarily used for software interchange; or, 685

18. Accompany it with a written offer, valid for at least three years, to give any third-party, for a charge no more than your cost of physically performing source distribution, a complete machine-readable copy of the corresponding source code, to be distributed under the terms of Sections 1 and 2 above on a medium customarily used for software interchange; or, 685

19. Accompany it with the information you received as to the offer to distribute corresponding source code. (This alternative is allowed only for noncommercial distribution and only if you received the program in object code or executable form with such an offer, in accord with Subsection b above.) 685

5. You may not copy, modify, sublicense, or distribute the Program except as expressly provided under this License. Any attempt otherwise to copy, modify, sublicense 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. 686

6. You are not required to accept this License, since you have not signed it. However, nothing else grants you permission to modify or distribute the Program or its derivative works. These actions are prohibited by law if you do not accept this License. Therefore, 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. 686

7. Each time you redistribute the Program (or any work based on the Program), the recipient automatically receives a license from the original licensor to copy, distribute or modify the Program subject to these terms and conditions. You may not impose any further restrictions on the recipients' exercise of the rights granted herein. You are not responsible for enforcing compliance by third parties to this License. 686

8. If, as a consequence of a court judgment or allegation of patent infringement or for any other reason (not limited to patent issues), conditions are imposed on you (whether by court order, agreement or otherwise) that contradict the conditions of this License, they do not excuse you from the conditions of this License. If you cannot distribute so as to satisfy simultaneously your obligations under this License and any other pertinent obligations, then as a consequence you may not distribute the Program at all. For example, if a patent license would not permit royalty-free redistribution of the Program by all those who receive copies directly or indirectly through you, then the only way you could satisfy both it and this License would be to refrain entirely from distribution of the Program. If any portion of this section is held invalid or unenforceable under any particular circumstance, the balance of the section is intended to apply and the section as a whole is intended to apply in other circumstances. It is not the purpose of this section to induce you to infringe any patents or other property right claims or to contest validity of any such claims; this section has the sole purpose of protecting the integrity of the free software distribution system, which is implemented by public license practices. Many people have made generous contributions to the wide range of software distributed through that system in reliance on consistent application of that system; it is up to the author/donor to decide if he or she is willing to distribute software through any other system and a licensee cannot impose that choice. This section is intended to make thoroughly clear what is believed to be a consequence of the rest of this License. 686

9. If the distribution and/or use of the Program is restricted in certain countries either by patents or by copyrighted interfaces, the original copyright holder who places the Program under this License 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. 686

10. The Free Software Foundation may publish revised and/or new versions of the General Public License from time to time. Such new versions will be similar in spirit to the present version, but may differ in detail to address new problems or concerns. Each version is given a distinguishing version number. If the Program specifies a version number of this License which applies to it and ``any later version'', you have the option of following the terms and conditions either of that version or of any later version published by the Free Software Foundation. If the Program does not specify a version number of this License, you may choose any version ever published by the Free Software Foundation. 687

11. If you wish to incorporate parts of the Program into other free programs whose distribution conditions are different, write to the author to ask for permission. For software which is copyrighted by the Free Software Foundation, write to the Free Software Foundation; we sometimes make exceptions for this. Our decision will be guided by the two goals of preserving the free status of all derivatives of our free software and of promoting the sharing and reuse of software generally. 687

H.3. How to Apply These Terms to Your New Programs 687

I. GNU Lesser General Public License 689

I.1. Preamble 689

I.2. TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION 690

I.3. How to Apply These Terms to Your New Libraries 694
  1   2   3   4   5   6   7   8   9   ...   130

Похожие:

Руководство по Mysql оглавление iconMysql connect() [function mysql-connect]: Lost connection to Mysql server at 'reading initial communication packet', system error: 61 in

Руководство по Mysql оглавление iconMysql connect() [function mysql-connect]: Lost connection to Mysql server at 'reading initial communication packet', system error: 61 in

Руководство по Mysql оглавление iconMysql connect() [function mysql-connect]: Lost connection to Mysql server at 'reading initial communication packet', system error: 61 in

Руководство по Mysql оглавление iconMysql connect() [function mysql-connect]: Lost connection to Mysql server at 'reading initial communication packet', system error: 61 in

Руководство по Mysql оглавление iconMysql connect() [function mysql-connect]: Lost connection to Mysql server at 'reading initial communication packet', system error: 61 in

Руководство по Mysql оглавление iconMysql connect() [function mysql-connect]: Lost connection to Mysql server at 'reading initial communication packet', system error: 61 in

Руководство по Mysql оглавление iconMysql connect() [function mysql-connect]: Lost connection to Mysql server at 'reading initial communication packet', system error: 61 in

Руководство по Mysql оглавление iconРуководство пользователя оглавление
В этом руководстве приведено описание по "amf 20/25", которое предназначено для автономных, резервных электростанций
Руководство по Mysql оглавление iconРуководство пользователя. Оглавление
Внимание! Плеер поставляется с незакрепленной крышкой корпуса для облегчения установки жесткого диска. Не поднимайте устройство из...
Руководство по Mysql оглавление iconРуководство по эксплуатации dpl800vd оглавление
Внимание! При вскрытии устройства и замыкании блокировок возможно попадание под лазерное излучение. Избегайте воздействия лазерного...
Разместите кнопку на своём сайте:
Библиотека


База данных защищена авторским правом ©lib.znate.ru 2014
обратиться к администрации
Библиотека
Главная страница