Опубликовано

Встречайте: “MySQL. Сборник рецептов. 4-е издание”

MySQL. Сборник рецептов. 4-е издание

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

Для программистов, разработчиков и администраторов баз данных

Решения для разработчиков и администраторов

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

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

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

Вы научитесь:

  • Соединяться с сервером, выполнять запросы и обрабатывать результаты
  • Получать данные с сервера MySQL
  • Сохранять, извлекать и изменять строки
  • Работать с датами и временем
  • Сортировать результаты запросов и создавать сводки
  • Оценивать характеристики набора данных
  • Создавать хранимые функции и процедуры
  • Использовать хранимые подпрограммы, триггеры и запланированные события
  • Выполнять основные задачи по администрированию MySQL
  • Понимать основы мониторинга MySQL

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

Книгу “MySQL. Сборник рецептов. 4-е издание” можно купить со скидкой в интернет-магазине издательства “БХВ“.

Отзывы………………………………………………………………………………………………….. 14

Вступительное слово………………………………………………………………………………. 15

Предисловие…………………………………………………………………………………………… 16

Для кого эта книга……………………………………………………………………………………………………………………… 18

Как построена эта книга…………………………………………………………………………………………………………… 18

Программные интерфейсы для MySQL, используемые в данной книге………………………………… 22

Примечания по версиям и платформам……………………………………………………………………………………. 22

Соглашения, принятые в этой книге…………………………………………………………………………………………. 23

Репозиторий GitHub…………………………………………………………………………………………………………………… 25

Получение MySQL и сопутствующего программного обеспечения……………………………………… 26

Использование примеров кода…………………………………………………………………………………………………. 28

Онлайн-обучение от издательской компании O’Reilly……………………………………………………………. 29

Как с нами связаться………………………………………………………………………………………………………………….. 29

Благодарности…………………………………………………………………………………………………………………………… 30

Глава 1. Работа с клиентской программой mysql……………………………………. 32

1.0. Введение………………………………………………………………………………………………………………………………. 32

1.1. Создание учетной записи пользователя MySQL……………………………………………………………… 33

1.2. Создание базы данных и тестовой таблицы…………………………………………………………………….. 36

1.3. Как найти клиент MySQL…………………………………………………………………………………………………… 37

1.4. Задание параметров команды для mysql………………………………………………………………………….. 39

1.5. Выполнение инструкций SQL в интерактивном режиме…………………………………………………. 44

1.6. Чтение запросов из файла или из программы…………………………………………………………………… 46

1.7. Управление направлением и форматом вывода mysql…………………………………………………….. 48

1.8. Использование в SQL-запросах переменных, определяемых пользователем……………….. 53

1.9. Настройка приглашения на ввод в mysql………………………………………………………………………….. 56

1.10. Использование внешних программ…………………………………………………………………………………. 58

1.11. Фильтрация и обработка вывода…………………………………………………………………………………….. 59

Глава 2. Работа с MySQL Shell……………………………………………………………….. 63

2.0. Введение………………………………………………………………………………………………………………………………. 63

2.1. Соединение с сервером MySQL при помощи MySQL Shell……………………………………………… 64

2.2. Выбор протокола………………………………………………………………………………………………………………… 67

2.3. Выбор режимов SQL, JavaScript или Python…………………………………………………………………….. 70

2.4. Выполнение сессий SQL…………………………………………………………………………………………………….. 70

2.5. Выполнение запросов SQL в режиме JavaScript………………………………………………………………. 71

2.6. Выполнение запросов SQL в режиме Python……………………………………………………………………. 74

2.7. Работа с таблицами в режиме JavaScript………………………………………………………………………….. 76

2.8. Работа с таблицами в режиме Python……………………………………………………………………………….. 78

2.9. Работа с коллекциями в режиме JavaScript………………………………………………………………………. 81

2.10. Работа с коллекциями в режиме Python………………………………………………………………………….. 84

2.11. Управление форматом вывода………………………………………………………………………………………… 86

2.12. Формирование отчетов с помощью MySQL Shell…………………………………………………………… 90

2.13. Работа с утилитами MySQL Shell……………………………………………………………………………………. 93

2.14. Использование Admin API для автоматизации управления репликацией…………………… 96

2.15. Работа с объектами JavaScript…………………………………………………………………………………………. 98

2.16. Заполнение базы данных тестовыми данными с помощью модулей Python
для Data Science………………………………………………………………………………………………………………. 102

2.17. Повторное использование сценариев для MySQL Shell………………………………………………. 112

Глава 3. Репликация MySQL………………………………………………………………… 115

3.0. Введение…………………………………………………………………………………………………………………………….. 115

3.1. Настройка базовой репликации между одним источником и одной репликой…………… 117

3.2. Репликация на основе позиции в новой среде………………………………………………………………… 118

3.3. Настройка репликации на основе позиции в активной среде………………………………………. 119

3.4. Настройка репликации на основе GTID…………………………………………………………………………. 121

3.5. Настройка формата бинарного журнала……………………………………………………………………….. 125

3.6. Использование фильтров репликации…………………………………………………………………………….. 126

3.7. Перезапись базы данных на реплике………………………………………………………………………………. 132

3.8. Параллельное выполнение событий (многопоточная реплика)…………………………………… 133

3.9. Настройка кольцевой репликации………………………………………………………………………………….. 135

3.10. Репликация из нескольких источников…………………………………………………………………………. 137

3.11. Использование подключаемого модуля полусинхронной репликации…………………….. 141

3.12. Использование групповой репликации…………………………………………………………………………. 144

3.13. Безопасное хранение учетных данных репликации……………………………………………………. 149

3.14. Использование TLS (SSL) для репликации…………………………………………………………………… 150

3.15. Устранение неполадок при репликации……………………………………………………………………….. 152

3.16. Использование списка процессов для понимания производительности
репликации………………………………………………………………………………………………………………………. 166

3.17. Настройка автоматической репликации………………………………………………………………………. 171

Глава 4. Создание программ для MySQL……………………………………………… 178

4.0. Введение…………………………………………………………………………………………………………………………….. 178

4.1. Соединение с сервером MySQL, выбор базы данных и отключение…………………………… 182

4.2. Обработка ошибок……………………………………………………………………………………………………………. 196

4.3. Создание библиотечных файлов…………………………………………………………………………………….. 205

4.4. Выполнение запросов и извлечение результатов………………………………………………………….. 219

4.5. Использование в запросах специальных символов и значений NULL…………………………. 234

4.6. Обработка специальных символов в идентификаторах……………………………………………….. 242

4.7. Обработка значений NULL в результирующих множествах………………………………………… 244

4.8. Способы получения параметров соединения………………………………………………………………… 250

4.9. Возвращение таблицы profile в исходное состояние…………………………………………………….. 259

Глава 5. Выбор записей………………………………………………………………………… 261

5.0. Введение…………………………………………………………………………………………………………………………….. 261

5.1. Задание столбцов и строк вывода…………………………………………………………………………………… 262

5.2. Присваивание имен столбцам вывода…………………………………………………………………………….. 264

5.3. Упорядочивание результирующего множества…………………………………………………………….. 268

5.4. Удаление повторяющихся строк……………………………………………………………………………………… 269

5.5. Обработка значений NULL………………………………………………………………………………………………. 270

5.6. Использование в программах операций сравнения с участием NULL…………………………. 273

5.7. Использование представлений для упрощения доступа к таблицам…………………………… 274

5.8. Выбор данных из нескольких таблиц……………………………………………………………………………… 275

5.9. Выбор строк из начала, конца или середины результирующего множества……………… 277

5.10. Что делать, если для LIMIT нужен “неправильный” порядок сортировки…………………. 280

5.11. Получение значений LIMIT из выражений……………………………………………………………………. 281

5.12. Объединение двух или более результатов SELECT…………………………………………………….. 282

5.13. Получение результатов подзапросов……………………………………………………………………………. 284

Глава 6. Управление таблицами…………………………………………………………… 286

6.0. Введение…………………………………………………………………………………………………………………………….. 286

6.1. Клонирование таблицы……………………………………………………………………………………………………. 286

6.2. Выбор результирующего множества в существующую таблицу………………………………… 287

6.3. Создание временных таблиц……………………………………………………………………………………………. 290

6.4. Формирование уникальных имен таблиц……………………………………………………………………….. 292

6.5. Проверка или изменение механизма хранения данных для таблиц…………………………….. 293

6.6. Копирование таблиц с использованием утилиты mysqldump……………………………………….. 294

6.7. Копирование таблицы InnoDB с использованием переносимых
табличных пространств……………………………………………………………………………………………………. 297

6.8. Копирование таблицы MyISAM с помощью файла sdi…………………………………………………. 299

Глава 7. Работа со строками…………………………………………………………………. 301

7.0. Введение…………………………………………………………………………………………………………………………….. 301

7.1. Свойства строк………………………………………………………………………………………………………………….. 301

7.2. Выбор типа строковых данных……………………………………………………………………………………….. 306

7.3. Настройка набора символов для обмена данными с клиентской программой…………… 308

7.4. Создание строковых литералов………………………………………………………………………………………. 311

7.5. Проверка или изменение набора символов или порядка расстановки символов для строки         314

7.6. Преобразование регистра букв строки…………………………………………………………………………… 316

7.7. Сравнение строковых значений………………………………………………………………………………………. 318

7.8. Преобразование между десятичным, восьмеричным и шестнадцатеричным форматами 321

7.9. Преобразование между ASCII, BIT и шестнадцатеричным форматами……………………… 322

7.10. Поиск по образцу с помощью шаблонов SQL………………………………………………………………. 325

7.11. Поиск по образцу с помощью регулярных выражений……………………………………………….. 328

7.12. Инвертирование строк……………………………………………………………………………………………………. 333

7.13. Проверка вхождения подстроки в строку…………………………………………………………………….. 334

7.14. Разбиение и объединение строк…………………………………………………………………………………….. 335

7.15. Поиск с помощью индекса FULLTEXT…………………………………………………………………………… 338

7.16. FULLTEXT-поиск и короткие слова……………………………………………………………………………….. 344

7.17. Включение и исключение слов из FULLTEXT-поиска………………………………………………….. 346

7.18. Поиск фразы при помощи индекса FULLTEXT……………………………………………………………… 347

Глава 8. Работа с датами и временем……………………………………………………. 349

8.0. Введение…………………………………………………………………………………………………………………………….. 349

8.1. Выбор временных типов данных…………………………………………………………………………………….. 350

8.2. Представление секунд в виде дроби……………………………………………………………………………….. 352

8.3. Изменение формата даты MySQL……………………………………………………………………………………. 355

8.4. Установка часового пояса клиента…………………………………………………………………………………. 358

8.5. Установка часового пояса сервера…………………………………………………………………………………. 360

8.6. Смещение временных значений при изменении часового пояса………………………………….. 362

8.7. Определение текущей даты или времени……………………………………………………………………….. 363

8.8. Использование TIMESTAMP или DATETIME для отслеживания времени изменения записей        364

8.9. Разбиение дат и времени на части…………………………………………………………………………………… 367

8.10. Синтез дат и времени с помощью функций извлечения составляющих…………………….. 372

8.11. Преобразование времени в более простые единицы и обратно…………………………………. 374

8.12. Вычисление интервалов между датами или значениями времени…………………………….. 378

8.13. Добавление значений даты или времени……………………………………………………………………… 382

8.14. Вычисление возраста……………………………………………………………………………………………………… 388

8.15. Нахождение первого и последнего дней месяца или длительности месяца……………… 389

8.16. Определение дня недели для даты………………………………………………………………………………… 392

8.17. Определение дат для дней текущей недели………………………………………………………………….. 392

8.18. Стандартизация не-совсем-ISO-строк…………………………………………………………………………… 395

8.19. Выбор записей по временным характеристикам…………………………………………………………. 397

Глава 9. Сортировка результатов запроса…………………………………………….. 401

9.0. Введение…………………………………………………………………………………………………………………………….. 401

9.1. Использование ORDER BY для сортировки результатов запроса………………………………… 402

9.2. Сортировка результатов выражения………………………………………………………………………………. 405

9.3. Сортировка одного набора значений и вывод другого…………………………………………………. 407

9.4. Сортировка и чувствительность к регистру…………………………………………………………………… 411

9.5. Сортировка в хронологическом порядке………………………………………………………………………… 414

9.6. Сортировка по подстрокам значений столбцов…………………………………………………………….. 418

9.7. Сортировка по подстрокам фиксированной длины………………………………………………………. 419

9.8. Сортировка по подстрокам переменной длины…………………………………………………………….. 422

9.9. Сортировка имен хостов по доменам……………………………………………………………………………… 426

9.10. Сортировка IP-адресов в числовом порядке………………………………………………………………… 429

9.11. Размещение некоторых значений в начале или в конце упорядоченного списка…….. 431

9.12. Сортировка в порядке, определенном пользователем………………………………………………… 434

9.13. Сортировка значений ENUM…………………………………………………………………………………………. 435

Глава 10. Формирование итогов…………………………………………………………… 439

10.0. Введение………………………………………………………………………………………………………………………….. 439

10.1. Суммирование с помощью функции COUNT()……………………………………………………………… 441

10.2. Суммирование при помощи функций MIN() и MAX()…………………………………………………… 443

10.3. Суммирование при помощи функций SUM() и AVG()…………………………………………………… 444

10.4. Использование ключевого слова DISTINCT для удаления дубликатов…………………….. 446

10.5. Создание представления для упрощения работы с итоговыми данными…………………. 448

10.6. Поиск значений, связанных с минимальным и максимальным значениями………………. 449

10.7. Управление чувствительностью к регистру функций MIN() и MAX()…………………………. 451

10.8. Разбиение итогов на подгруппы……………………………………………………………………………………. 453

10.9. Обработка значений NULL с помощью агрегирующих функций……………………………….. 457

10.10. Выбор групп только с определенными характеристиками………………………………………. 460

10.11. Устанавливаем уникальность значения……………………………………………………………………… 461

10.12. Группировка по результатам выражения…………………………………………………………………… 462

10.13. Классификация некатегориальных данных……………………………………………………………….. 463

10.14. Нахождение наибольшего и наименьшего из итоговых значений…………………………… 466

10.15. Итоги по датам……………………………………………………………………………………………………………… 468

10.16. Одновременная работа с итогами по группам и общим итогом………………………………. 470

10.17. Формирование отчета, содержащего итоговую информацию и список………………….. 473

10.18. Формирование итогов из временных результирующих множеств…………………………… 476

Глава 11. Использование хранимых подпрограмм, триггеров и запланированных событий      478

11.0. Введение………………………………………………………………………………………………………………………….. 478

11.1. Создание объектов с составными инструкциями…………………………………………………………. 480

11.2. Использование хранимых функций для упрощения вычислений………………………………. 482

11.3. Использование хранимых процедур для получения нескольких значений………………. 484

11.4. Использование триггеров для регистрации изменений в таблице……………………………… 486

11.5. Планирование действий в базе данных с помощью событий…………………………………….. 489

11.6. Разработка вспомогательных подпрограмм для выполнения
динамических запросов………………………………………………………………………………………………….. 491

11.7. Обнаружение ситуаций “no more rows” с помощью обработчиков
особых ситуаций…………………………………………………………………………………………………………….. 493

11.8. Перехват и игнорирование ошибок с помощью обработчиков особых ситуаций……. 494

11.9. Генерация ошибок и предупреждений………………………………………………………………………….. 495

11.10. Регистрация ошибок путем доступа к диагностической области……………………………. 497

11.11. Использование триггеров для предварительной обработки или отклонения данных 501

Глава 12. Работа с метаданными………………………………………………………….. 504

12.0. Введение………………………………………………………………………………………………………………………….. 504

12.1. Определение числа строк, обработанных запросом…………………………………………………… 505

12.2. Получение метаданных результирующего множества……………………………………………….. 509

12.3. Вывод списков таблиц и баз данных или проверка их существования…………………….. 519

12.4. Вывод списков представлений или проверка их существования……………………………….. 520

12.5. Получение определений столбцов таблицы………………………………………………………………… 521

12.6. Получение информации о столбцах ENUM и SET……………………………………………………….. 526

12.7. Получение метаданных сервера……………………………………………………………………………………. 528

12.8. Создание приложений, адаптирующихся к версии сервера MySQL…………………………. 529

12.9. Обнаружение дочерних таблиц, которые ссылаются на определенную таблицу через ограничения внешнего ключа………………………………………………………………………………………………………………………………………….. 531

12.10. Получение списка триггеров……………………………………………………………………………………….. 533

12.11. Получение списка хранимых подпрограмм и запланированных событий…………….. 534

12.12. Получение списка подключаемых модулей………………………………………………………………. 536

12.13. Получение списка наборов символов и порядков расстановки……………………………….. 537

12.14. Получение списка ограничений CHECK…………………………………………………………………….. 541

Глава 13. Импорт и экспорт данных…………………………………………………….. 542

13.0. Введение………………………………………………………………………………………………………………………….. 542

13.1. Импорт с помощью LOAD DATA и утилиты mysqlimport……………………………………………… 545

13.2. Указание разделителей полей и строк………………………………………………………………………….. 549

13.3. Использование кавычек и специальных символов………………………………………………………. 551

13.4. Обработка дубликатов индексированных записей……………………………………………………… 552

13.5. Диагностика при ошибках во входных данных…………………………………………………………… 553

13.6. Пропуск строк в файле данных……………………………………………………………………………………… 555

13.7. Определение порядка ввода столбцов………………………………………………………………………….. 555

13.8. Предварительная обработка входных значений, помещаемых в базу данных………… 556

13.9. Пропуск столбцов файла данных………………………………………………………………………………….. 558

13.10. Импорт файлов в формате CSV……………………………………………………………………………………. 559

13.11. Экспорт результатов запроса из MySQL……………………………………………………………………. 560

13.12. Импорт и экспорт значений NULL……………………………………………………………………………….. 562

13.13. Экспорт данных в SQL-формат……………………………………………………………………………………. 564

13.14. Импорт данных SQL……………………………………………………………………………………………………… 565

13.15. Экспорт результатов запроса в XML………………………………………………………………………….. 566

13.16. Импорт XML в MySQL…………………………………………………………………………………………………. 568

13.17. Импорт данных в формате JSON…………………………………………………………………………………. 569

13.18. Импорт данных из MongoDB……………………………………………………………………………………….. 571

13.19. Экспорт данных в формате JSON………………………………………………………………………………… 572

13.20. Разработка структуры таблицы на основе файла данных……………………………………….. 573

Глава 14. Проверка и изменение формата данных……………………………….. 576

14.0. Введение………………………………………………………………………………………………………………………….. 576

14.1. Использование режима SQL для отклонения неверных входных значений……………… 577

14.2. Использование ограничений CHECK для отклонения недопустимых значений………. 579

14.3. Использование триггеров для отклонения входных значений……………………………………. 581

14.4. Создание цикла обработки ввода…………………………………………………………………………………. 583

14.5. Размещение часто выполняемых проверок в библиотеке…………………………………………… 584

14.6. Проверка корректности. Сравнение с образцом………………………………………………………….. 586

14.7. Образцы для широкой классификации…………………………………………………………………………. 589

14.8. Образцы для числовых значений………………………………………………………………………………….. 589

14.9. Образцы для дат и времени……………………………………………………………………………………………. 591

14.10. Образцы для адресов электронной почты и URL………………………………………………………. 594

14.11. Проверка корректности при помощи метаданных таблицы…………………………………….. 595

14.12. Проверка корректности при помощи справочной таблицы……………………………………… 599

14.13. Преобразование двузначных значений года в четырехзначные……………………………… 601

14.14. Проверка корректности составляющих даты и времени…………………………………………… 603

14.15. Создание утилит для обработки дат…………………………………………………………………………… 605

14.16. Импорт не-ISO значений дат……………………………………………………………………………………….. 609

14.17. Экспорт не-ISO значений дат………………………………………………………………………………………. 611

14.18. Предварительная обработка и импорт файла……………………………………………………………. 612

Глава 15. Формирование и использование последовательностей…………. 614

15.0. Введение………………………………………………………………………………………………………………………….. 614

15.1. Создание последовательности со столбцами AUTO_INCREMENT……………………………. 615

15.2. Выбор типа для столбца последовательности…………………………………………………………….. 618

15.3. Удаление записей и формирование последовательности…………………………………………… 620

15.4. Извлечение значений последовательности………………………………………………………………….. 622

15.5. Перенумерация существующей последовательности…………………………………………………. 626

15.6. Расширение диапазона последовательности………………………………………………………………. 628

15.7. Повторное использование последних значений последовательности………………………. 629

15.8. Управление изменением нумерации строк…………………………………………………………………… 630

15.9. Добавление последовательности в существующую таблицу…………………………………….. 631

15.10. Управление несколькими столбцами AUTO_INCREMENT одновременно………………. 632

15.11. Использование значений AUTO_INCREMENT для связывания таблиц……………………. 633

15.12. Генераторы однострочных последовательностей……………………………………………………. 636

15.13. Формирование повторяющихся последовательностей…………………………………………….. 639

15.14. Использование произвольных значений приращения………………………………………………. 640

15.15. Использование оконных функций для нумерации строк в результирующем множестве……….. 643

15.16. Генерация последовательностей с помощью рекурсивных обобщенных табличных выражений          644

15.17. Создание и хранение нестандартных последовательностей…………………………………… 647

Глава 16. Использование соединений и подзапросов……………………………. 654

16.0. Введение………………………………………………………………………………………………………………………….. 654

16.1. Нахождение строк одной таблицы, соответствующих строкам другой……………………. 655

16.2. Нахождение строк, которым не соответствуют никакие строки другой таблицы……. 663

16.3. Выявление и удаление несвязанных записей……………………………………………………………….. 668

16.4. Сравнение таблицы с самой собой……………………………………………………………………………….. 671

16.5. Вывод списков для записей “главная-подчиненная” и итогов……………………………………. 675

16.6. Отношение “многие-ко-многим”…………………………………………………………………………………….. 679

16.7. Нахождение строк с минимальным и максимальным значением в группе……………….. 683

16.8. Заполнение или обнаружение пустых мест в списке с помощью соединений………….. 686

16.9. Управление порядком вывода запроса с помощью соединения………………………………… 689

16.10. Объединение результатов нескольких запросов……………………………………………………….. 691

16.11. Обращение в программах к именам столбцов вывода, полученных при соединении таблиц   693

Глава 17. Статистические методы………………………………………………………… 695

17.0. Введение………………………………………………………………………………………………………………………….. 695

17.1. Получение описательных статистических показателей…………………………………………….. 695

17.2. Групповые статистические показатели………………………………………………………………………… 699

17.3. Получение частотного распределения…………………………………………………………………………. 701

17.4. Подсчет отсутствующих значений……………………………………………………………………………….. 704

17.5. Вычисление линейной регрессии и коэффициентов корреляции……………………………….. 706

17.6. Генерация случайных чисел………………………………………………………………………………………….. 709

17.7. Рандомизация набора строк………………………………………………………………………………………….. 710

17.8. Случайный выбор из набора строк………………………………………………………………………………. 713

17.9. Вычисление разности между последовательными строками…………………………………….. 715

17.10. Нарастающий итог и скользящее среднее………………………………………………………………….. 717

17.11. Присваивание рангов……………………………………………………………………………………………………. 721

17.12. Вычисление рейтинга команд……………………………………………………………………………………… 725

Глава 18. Обработка повторяющихся записей……………………………………… 731

18.0. Введение………………………………………………………………………………………………………………………….. 731

18.1. Предотвращение появления дубликатов в таблице…………………………………………………….. 732

18.2. Несколько уникальных ключей в таблице……………………………………………………………………. 734

18.3. Обработка дубликатов на этапе создания записи………………………………………………………. 735

18.4. Подсчет и выявление дубликатов………………………………………………………………………………….. 740

18.5. Удаление дубликатов из таблицы…………………………………………………………………………………. 743

Глава 19. Работа с JSON………………………………………………………………………. 748

19.0. Введение………………………………………………………………………………………………………………………….. 748

19.1. Выбор правильного типа данных…………………………………………………………………………………. 749

19.2. Вставка значений JSON………………………………………………………………………………………………….. 749

19.3. Проверка соответствия стандарту JSON………………………………………………………………………. 750

19.4. Форматирование значений JSON…………………………………………………………………………………… 754

19.5. Извлечение значений из документа JSON…………………………………………………………………….. 755

19.6. Поиск в документах JSON………………………………………………………………………………………………. 757

19.7. Вставка новых элементов в документ JSON…………………………………………………………………. 758

19.8. Обновление значений JSON……………………………………………………………………………………………. 760

19.9. Удаление элементов из документа JSON………………………………………………………………………. 761

19.10. Объединение нескольких документов JSON в один…………………………………………………… 761

19.11. Преобразование реляционных данных в формат JSON…………………………………………….. 765

19.12. Преобразование формата JSON в реляционный формат…………………………………………… 768

19.13. Исследование структуры данных JSON……………………………………………………………………… 770

19.14. Работа с JSON в MySQL как с хранилищем документов…………………………………………… 772

Глава 20. Выполнение транзакций………………………………………………………. 780

20.0. Введение………………………………………………………………………………………………………………………….. 780

20.1. Выбор механизма хранения, который поддерживает транзакции…………………………….. 781

20.2. Выполнение транзакций средствами SQL……………………………………………………………………. 782

20.3. Выполнение транзакций в программах………………………………………………………………………… 784

20.4. Использование транзакций в программах на Perl………………………………………………………… 786

20.5. Использование транзакций в программах на Ruby…………………………………………………….. 787

20.6. Использование транзакций в программах на PHP………………………………………………………. 788

20.7. Использование транзакций в программах на Python………………………………………………….. 789

20.8. Использование транзакций в программах на Go…………………………………………………………. 790

20.9. Обработка транзакций в Go с помощью функций, использующих контекст…………….. 791

20.10. Использование транзакций в программах на Java……………………………………………………. 794

Глава 21. Производительность запросов………………………………………………. 796

21.0. Введение………………………………………………………………………………………………………………………….. 796

21.1. Создание индексов………………………………………………………………………………………………………….. 797

21.2. Суррогатный первичный ключ……………………………………………………………………………………… 799

21.3. Поддержание индексов…………………………………………………………………………………………………… 801

21.4. Как принять решение об использовании индекса в запросе……………………………………….. 803

21.5. Определение порядка для составных индексов…………………………………………………………… 804

21.6. Использование возрастающих и убывающих индексов……………………………………………… 806

21.7. Использование функциональных индексов………………………………………………………………….. 809

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

21.9. Поиск с помощью полнотекстового индекса………………………………………………………………… 814

21.10. Использование пространственных индексов и географических данных………………… 816

21.11. Создание и использование гистограмм………………………………………………………………………. 820

21.12. Написание высокопроизводительных запросов………………………………………………………… 827

Глава 22. Администрирование сервера…………………………………………………. 833

22.0. Введение………………………………………………………………………………………………………………………….. 833

22.1. Конфигурирование сервера…………………………………………………………………………………………… 833

22.2. Управление интерфейсом подключаемых модулей…………………………………………………….. 836

22.3. Управление журналированием сервера……………………………………………………………………….. 838

22.4. Ротация и установка срока действия файлов журналов……………………………………………… 841

22.5. Ротация таблиц журналов или строк таблицы журналов, у которых истекает
срок хранения………………………………………………………………………………………………………………….. 844

22.6. Конфигурирование механизмов хранения данных……………………………………………………… 845

Глава 23. Мониторинг сервера MySQL…………………………………………………. 848

23.0. Введение………………………………………………………………………………………………………………………….. 848

23.1. Зачем выполнять мониторинг сервера MySQL?………………………………………………………….. 849

23.2. Поиск источников информации для мониторинга MySQL………………………………………….. 855

23.3. Проверка времени доступности сервера………………………………………………………………………. 859

23.4. Устранение проблем с запуском сервера……………………………………………………………………… 860

23.5. Определение нагрзуки на систему ввода-вывода сервера MySQL…………………………….. 861

23.6. Определение загрузки процессора потоками MySQL…………………………………………………. 864

23.7. Лимиты соединений MySQL………………………………………………………………………………………….. 867

23.8. Проверка надлежащего размера буферного пула……………………………………………………….. 868

23.9. Поиск информации о механизме хранения данных…………………………………………………….. 871

23.10. Использование журнала ошибок для устранения сбоев в работе сервера MySQL.. 874

23.11. Журнал медленных запросов………………………………………………………………………………………. 876

23.12. Мониторинг с помощью общего журнала запросов…………………………………………………. 878

23.13. Использование бинарного журнала для выявления изменений……………………………….. 880

Глава 24. Безопасность………………………………………………………………………… 882

24.0. Введение………………………………………………………………………………………………………………………….. 882

24.1. Основные сведения о таблице mysql.user……………………………………………………………………… 882

24.2. Управление учетными записями пользователей………………………………………………………….. 883

24.3. Внедрение политики паролей………………………………………………………………………………………… 887

24.4. Проверка надежности пароля……………………………………………………………………………………….. 889

24.5. Истечение срока действия паролей………………………………………………………………………………. 889

24.6. Установка нового пароля для собственной учетной записи………………………………………. 891

24.7. Переустановка пароля при истечении срока его действия…………………………………………. 891

24.8. Обнаружение и удаление анонимных учетных записей…………………………………………….. 892

24.9. Изменение учетных записей “Any Host” и “Many Host”………………………………………………. 893

24.10. Использование TLS (SSL)…………………………………………………………………………………………….. 894

24.11. Использование ролей……………………………………………………………………………………………………. 898

24.12. Использование представлений для обеспечения безопасности при доступе к таблицам          899

24.13. Использование хранимых процедур для безопасной модификации данных………….. 902

Предметный указатель…………………………………………………………………………. 905

Об авторах……………………………………………………………………………………………. 910

Об изображении на обложке………………………………………………………………… 911

Cмирнова Cвета

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

 

 

Alkin Tezuysal

Алкин Тезуйсал — вице-президент по глобальным сервисам компании ChistaDATA. Имеет большой опыт работы с реляционными базами данных с открытым исходным кодом.

Опубликовано

Новинка: “Основы проектирования баз данных. 2-е издание”

Основы проектирования баз данных. 2-е издание

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

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

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

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

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

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

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

Книгу “Основы проектирования баз данных. 2-е издание” можно купить со скидкой в интернет-магазине издательства “БХВ“.

Краткое оглавление…………………………………………………………………………………. 5

Об авторе……………………………………………………………………………………………….. 27

О техническом редакторе английского издания…………………………………….. 28

Благодарности……………………………………………………………………………………….. 28

Предисловие…………………………………………………………………………………………… 29

Для кого эта книга?……………………………………………………………………………………………………………………. 30

О чем рассказывается в книге?…………………………………………………………………………………………………. 30

Что вам потребуется для работы с книгой?…………………………………………………………………………….. 31

Структура книги………………………………………………………………………………………………………………………… 31

Часть I. Введение в базы данных и их проектирование……………………………………………… 32

Часть II. Процесс и методы проектирования баз данных…………………………………………… 32

Часть III. Подробный анализ конкретного примера…………………………………………………… 34

Часть IV. Примеры программ………………………………………………………………………………………… 34

Часть V. Расширенные темы………………………………………………………………………………………….. 35

Приложения…………………………………………………………………………………………………………………….. 36

Как работать с книгой?……………………………………………………………………………………………………………… 36

Примечание для преподавателей…………………………………………………………………………………………….. 38

Примечание для студентов……………………………………………………………………………………………………….. 39

Условные обозначения……………………………………………………………………………………………………………… 39

Исходный код…………………………………………………………………………………………………………………………….. 40

Как связаться с автором?………………………………………………………………………………………………………….. 40

Пояснение…………………………………………………………………………………………………………………………………… 40

ЧАСТЬ I. Введение в базы данных и их проектирование….. 41

Глава 1. Цели проектирования баз данных……………………………………………. 43

Важность проектирования………………………………………………………………………………………………………… 44

Информационные контейнеры………………………………………………………………………………………………….. 46

Достоинства и недостатки информационных контейнеров…………………………………………………… 48

Желательные функции базы данных……………………………………………………………………………………….. 51

CRUD……………………………………………………………………………………………………………………………….. 51

Извлечение………………………………………………………………………………………………………………. 52

Согласованность……………………………………………………………………………………………………. 52

Валидность……………………………………………………………………………………………………………… 53

Простое исправление ошибок……………………………………………………………………………….. 54

Скорость………………………………………………………………………………………………………………….. 55

Атомарные транзакции………………………………………………………………………………………….. 55

ACID………………………………………………………………………………………………………………………………… 56

BASE………………………………………………………………………………………………………………………………… 58

NewSQL……………………………………………………………………………………………………………………………. 59

Постоянство и резервное копирование…………………………………………………………………………. 59

Низкая стоимость и расширяемость……………………………………………………………………………… 61

Простота использования……………………………………………………………………………………………….. 62

Переносимость………………………………………………………………………………………………………………… 62

Безопасность…………………………………………………………………………………………………………………… 63

Совместное использование……………………………………………………………………………………………. 64

Способность выполнять сложные расчеты………………………………………………………………….. 65

Теорема CAP…………………………………………………………………………………………………………………… 65

Несколько мыслей про облачные технологии…………………………………………………………….. 66

Правовые аспекты и вопросы безопасности………………………………………………………………… 67

Последствия качественного и некачественного проектирования………………………………. 69

Резюме…………………………………………………………………………………………………………………………………………. 71

Упражнения………………………………………………………………………………………………………………………….. 71

Глава 2. Обзор реляционных баз данных……………………………………………….. 73

Выбор базы данных…………………………………………………………………………………………………………………… 74

Точки зрения на реляционные базы данных…………………………………………………………………………… 75

Таблица, строки и столбцы………………………………………………………………………………………………………. 76

Отношения, атрибуты и кортежи……………………………………………………………………………………………… 78

Ключи…………………………………………………………………………………………………………………………………………. 79

Индексы………………………………………………………………………………………………………………………………………. 82

Ограничения……………………………………………………………………………………………………………………………….. 82

Доменные ограничения………………………………………………………………………………………………….. 82

Проверочные ограничения…………………………………………………………………………………………….. 83

Ограничения первичного ключа……………………………………………………………………………………. 83

Ограничение уникальности…………………………………………………………………………………………… 84

Ограничения внешних ключей………………………………………………………………………………………. 84

Операции с базами данных………………………………………………………………………………………………………. 86

Популярные реляционные базы данных…………………………………………………………………………………. 88

Электронные таблицы………………………………………………………………………………………………………………. 90

Резюме…………………………………………………………………………………………………………………………………………. 91

Упражнения………………………………………………………………………………………………………………………….. 91

Глава 3. Обзор NoSQL……………………………………………………………………………. 94

Облачная среда………………………………………………………………………………………………………………………….. 94

Выбор базы данных…………………………………………………………………………………………………………………… 97

Философия NoSQL………………………………………………………………………………………………………….. 97

Базы данных NoSQL………………………………………………………………………………………………………. 98

Документные базы данных……………………………………………………………………………………. 98

База данных ключей и значений………………………………………………………………………… 100

Столбцово-ориентированные базы данных………………………………………………………. 100

Графовые базы данных……………………………………………………………………………………….. 102

Уличные сети………………………………………………………………………………………………….. 102

Сети связи………………………………………………………………………………………………………… 103

Приложения для социальных сетей………………………………………………………………. 103

Программы электронной коммерции……………………………………………………………. 104

Алгоритмы………………………………………………………………………………………………………. 104

Иерархические базы данных………………………………………………………………………………. 104

Менее экзотические варианты……………………………………………………………………………………………….. 108

Неструктурированные файлы…………………………………………………………………………………….. 108

XML-файлы…………………………………………………………………………………………………………………… 109

Основы XML…………………………………………………………………………………………………………. 110

Практика работы с XML……………………………………………………………………………………… 114

Выводы об XML…………………………………………………………………………………………………… 116

JSON-файлы…………………………………………………………………………………………………………………… 117

Электронные таблицы…………………………………………………………………………………………………. 119

Более экзотические варианты………………………………………………………………………………………………… 120

Объектные……………………………………………………………………………………………………………………… 120

Дедуктивные…………………………………………………………………………………………………………………. 120

Размерные……………………………………………………………………………………………………………………… 121

Временне…………………………………………………………………………………………………………………….. 121

Плюсы и минусы баз данных………………………………………………………………………………………………….. 122

Реляционные…………………………………………………………………………………………………………………. 123

Общие свойства баз данных NoSQL…………………………………………………………………………… 124

Краткие рекомендации………………………………………………………………………………………………… 126

Резюме………………………………………………………………………………………………………………………………………. 128

Упражнения………………………………………………………………………………………………………………………… 129

ЧАСТЬ II. Процесс и методы проектирования баз данных 131

Глава 4. Понимание потребностей пользователей………………………………… 133

Составьте план………………………………………………………………………………………………………………………… 134

Возьмите с собой список вопросов………………………………………………………………………………………… 135

Функциональные возможности…………………………………………………………………………………… 135

Потребности в данных…………………………………………………………………………………………………. 136

Целостность данных…………………………………………………………………………………………………….. 136

Безопасность…………………………………………………………………………………………………………………. 137

Окружение…………………………………………………………………………………………………………………….. 138

Встретьтесь с клиентами…………………………………………………………………………………………………………. 139

Узнайте, кто есть кто……………………………………………………………………………………………………………….. 140

Определите участников……………………………………………………………………………………………….. 143

Как это сделать?…………………………………………………………………………………………………… 143

Постарайтесь понять, как мыслят клиенты…………………………………………………………………………… 144

Представьте себя на месте клиентов……………………………………………………………………………………… 144

Изучите текущие операции…………………………………………………………………………………………………….. 145

Устройте мозговой штурм………………………………………………………………………………………………………. 146

Думайте о будущем…………………………………………………………………………………………………………………. 147

Поймите логику клиентов……………………………………………………………………………………………………….. 147

Узнайте, что на самом деле нужно клиентам……………………………………………………………………….. 149

Расставьте приоритеты…………………………………………………………………………………………………………… 150

Проверьте свое понимание……………………………………………………………………………………………………… 151

Составьте техническое задание……………………………………………………………………………………………… 153

Подготовьте сценарии использования…………………………………………………………………………………… 154

Примите решение о целесообразности………………………………………………………………………………….. 158

Резюме………………………………………………………………………………………………………………………………………. 159

Упражнения………………………………………………………………………………………………………………………… 160

Глава 5. Перевод потребностей пользователей в модели данных………….. 163

Что такое модели данных?……………………………………………………………………………………………………… 164

Модели пользовательского интерфейса………………………………………………………………………………… 167

Построение модели пользовательского интерфейса…………………………………………………. 170

Как это сделать?…………………………………………………………………………………………………… 171

Семантические объектные модели…………………………………………………………………………………………. 172

Классы и объекты…………………………………………………………………………………………………………. 172

Кардинальность……………………………………………………………………………………………………………. 173

Идентификаторы…………………………………………………………………………………………………………… 174

Соберем все вместе………………………………………………………………………………………………………. 174

Построение семантической объектной модели…………………………………………………………. 176

Как это сделать?…………………………………………………………………………………………………… 176

Семантические представления……………………………………………………………………………………. 176

Типы классов………………………………………………………………………………………………………………… 178

Простые объекты………………………………………………………………………………………………….. 178

Композитные объекты…………………………………………………………………………………………. 178

Составные объекты……………………………………………………………………………………………… 179

Гибридный объект……………………………………………………………………………………………….. 179

Ассоциативные объекты……………………………………………………………………………………… 180

Хитроумные ассоциации…………………………………………………………………………………….. 182

Как это сделать?…………………………………………………………………………………………….. 182

Наследуемые объекты…………………………………………………………………………………………. 182

Комментарии и примечания………………………………………………………………………………………… 184

Модели «сущность-связь»……………………………………………………………………………………………………….. 185

Сущности, атрибуты и идентификаторы……………………………………………………………………. 185

Связи………………………………………………………………………………………………………………………………. 186

Кардинальность……………………………………………………………………………………………………………. 187

Наследование……………………………………………………………………………………………………………….. 189

Построение ER-диаграммы…………………………………………………………………………………………. 190

Как это сделать?…………………………………………………………………………………………………… 190

Дополнительные условные обозначения…………………………………………………………………… 191

Комментарии и примечания………………………………………………………………………………………… 192

Реляционные модели……………………………………………………………………………………………………………….. 193

Преобразование семантических объектных моделей……………………………………………….. 193

Преобразование ER-диаграмм……………………………………………………………………………………. 196

Резюме………………………………………………………………………………………………………………………………………. 197

Упражнения………………………………………………………………………………………………………………………… 198

Глава 6. Извлечение бизнес-правил……………………………………………………… 200

Что такое бизнес-правила?……………………………………………………………………………………………………… 200

Определение ключевых бизнес-правил…………………………………………………………………………………. 202

Поиск бизнес-правил……………………………………………………………………………………………………. 206

Как это сделать?…………………………………………………………………………………………………… 207

Извлечение ключевых бизнес-правил……………………………………………………………………………………. 209

Многоуровневые приложения………………………………………………………………………………………………… 211

Пример реализации многоуровневого приложения………………………………………………….. 214

Как это сделать?…………………………………………………………………………………………………… 214

Резюме………………………………………………………………………………………………………………………………………. 217

Упражнения………………………………………………………………………………………………………………………… 217

Глава 7. Нормализация данных……………………………………………………………. 221

Что такое нормализация?……………………………………………………………………………………………………….. 221

Первая нормальная форма (1НФ)…………………………………………………………………………………………… 223

Организация данных в первой нормальной форме……………………………………………………. 226

Как это сделать?…………………………………………………………………………………………………… 227

Вторая нормальная форма (2НФ)………………………………………………………………………………………….. 232

Организация данных во второй нормальной форме…………………………………………………. 235

Как это сделать?…………………………………………………………………………………………………… 235

Третья нормальная форма (3НФ)…………………………………………………………………………………………… 236

Организация данных в третьей нормальной форме………………………………………………….. 238

Как это сделать?…………………………………………………………………………………………………… 239

Остановка на третьей нормальной форме………………………………………………………………….. 240

Нормальная форма Бойса — Кодда (НФБК)………………………………………………………………………… 241

Организация данных в НФБК……………………………………………………………………………………… 244

Как это сделать?…………………………………………………………………………………………………… 244

Четвертая нормальная форма (4НФ)……………………………………………………………………………………… 245

Организация данных в четвертой нормальной форме………………………………………………. 248

Как это сделать?…………………………………………………………………………………………………… 248

Пятая нормальная форма (5НФ)…………………………………………………………………………………………….. 250

Работа с пятой нормальной формой…………………………………………………………………………… 252

Как это сделать?…………………………………………………………………………………………………… 252

Доменно-ключевая нормальная форма (ДКНФ)…………………………………………………………………… 253

Организация данных в доменно-ключевой нормальной форме……………………………….. 254

Как это сделать?…………………………………………………………………………………………………… 255

Ценная избыточность………………………………………………………………………………………………………………. 255

Оптимальный уровень нормализации……………………………………………………………………………………. 257

Нормализация NoSQL……………………………………………………………………………………………………………… 258

Резюме………………………………………………………………………………………………………………………………………. 259

Упражнения………………………………………………………………………………………………………………………… 260

Глава 8. Проектирование баз данных для поддержки
программного обеспечения…………………………………………………………………… 263

Планируйте наперед……………………………………………………………………………………………………………….. 264

Документируйте всё………………………………………………………………………………………………………………… 264

Учитывайте многоуровневую архитектуру………………………………………………………………………….. 265

Преобразуйте домены в таблицы…………………………………………………………………………………………… 265

Использование справочных таблиц……………………………………………………………………………. 266

Как это сделать?…………………………………………………………………………………………………… 267

Следите, чтобы таблицы оставались специализированными…………………………………………….. 267

Используйте три вида таблиц…………………………………………………………………………………………………. 267

Четко специализированные таблицы…………………………………………………………………………. 268

Как это сделать?…………………………………………………………………………………………………… 269

Придерживайтесь соглашений об именовании…………………………………………………………………….. 270

Допускайте определенную избыточность данных………………………………………………………………. 271

Не втискивайте всё подряд……………………………………………………………………………………………………… 272

Первая нормальная форма…………………………………………………………………………………………… 273

Как это сделать?…………………………………………………………………………………………………… 273

Резюме………………………………………………………………………………………………………………………………………. 273

Упражнения………………………………………………………………………………………………………………………… 274

Глава 9. Использование общих шаблонов проектирования…………………. 276

Ассоциации………………………………………………………………………………………………………………………………. 277

Ассоциации «многие ко многим»…………………………………………………………………………………. 277

Множественные ассоциации «многие ко многим»…………………………………………………….. 277

Построение связей «многие-ко-многим»…………………………………………………………….. 278

Как это сделать?…………………………………………………………………………………………….. 279

Многообъектные ассоциации……………………………………………………………………………………… 279

Построение многообъектных ассоциаций…………………………………………………………. 281

Как это сделать?…………………………………………………………………………………………….. 281

Повторяющиеся ассоциации атрибутов…………………………………………………………………….. 282

Рефлексивные ассоциации…………………………………………………………………………………………… 284

Рефлексивные ассоциации «один к одному»……………………………………………………… 284

Рефлексивные ассоциации «один ко многим»……………………………………………………. 285

Иерархические данные……………………………………………………………………………………………………………. 286

Работа с иерархическими данными……………………………………………………………………………. 287

Как это сделать?…………………………………………………………………………………………………… 288

Иерархические данные с NoSQL…………………………………………………………………………………. 289

Сетевые данные……………………………………………………………………………………………………………………….. 290

Сетевые данные с NoSQL…………………………………………………………………………………………….. 292

Временные данные………………………………………………………………………………………………………………….. 293

Срок действия……………………………………………………………………………………………………………….. 293

Удаленные объекты……………………………………………………………………………………………………… 294

Решаем, какие данные сделать временными……………………………………………………………… 295

Протоколирование и блокировка…………………………………………………………………………………………… 297

Журналы контроля………………………………………………………………………………………………………. 297

Записи под ключ…………………………………………………………………………………………………………… 298

Резюме………………………………………………………………………………………………………………………………………. 299

Упражнения………………………………………………………………………………………………………………………… 300

Глава 10. Предотвращение распространенных ошибок проектирования 302

Низкий уровень подготовки……………………………………………………………………………………………………. 302

Некачественная документация………………………………………………………………………………………………. 303

Неудачные стандарты именования……………………………………………………………………………………….. 303

Недостаточно масштабное мышление………………………………………………………………………………….. 305

Неумение предусматривать изменения…………………………………………………………………………………. 307

Чрезмерная нормализация………………………………………………………………………………………………………. 310

Недостаточная нормализация……………………………………………………………………………………………….. 310

Недостаточно тщательное тестирование……………………………………………………………………………… 311

Тревога из-за производительности………………………………………………………………………………………… 312

Разносортные таблицы……………………………………………………………………………………………………………. 312

Несоблюдение ограничений…………………………………………………………………………………………………… 315

Одержимость идентификацией……………………………………………………………………………………………….. 315

Отмененные идентификаторы……………………………………………………………………………………… 316

Как это сделать?…………………………………………………………………………………………………… 317

Отсутствие заданных естественных ключей…………………………………………………………………………. 319

Резюме………………………………………………………………………………………………………………………………………. 320

Упражнения………………………………………………………………………………………………………………………… 320

ЧАСТЬ III. Подробный анализ конкретного примера………. 323

Глава 11. Определение потребностей и требований пользователей………. 325

Встретьтесь с клиентами…………………………………………………………………………………………………………. 325

Мыслите как заказчики…………………………………………………………………………………………………………… 327

Определите, что должна делать система…………………………………………………………………… 328

Определите, как должен выглядеть проект………………………………………………………………… 330

Выясните, какие данные необходимы для пользовательского интерфейса……………. 331

Определите источник данных……………………………………………………………………………………… 332

Определите взаимосвязи между частями данных……………………………………………………… 333

Где искать данные?……………………………………………………………………………………………… 334

Как это сделать?…………………………………………………………………………………………….. 334

Определите потребности в производительности………………………………………………………. 335

Определите потребности в безопасности…………………………………………………………………… 336

Определите потребности в целостности данных………………………………………………………. 336

Инвентаризация……………………………………………………………………………………………………. 338

Как это сделать?…………………………………………………………………………………………….. 338

Напишите сценарии использования………………………………………………………………………………………. 339

Пример описания для сценария использования………………………………………………… 341

Как это сделать?…………………………………………………………………………………………….. 342

Составьте техническое задание……………………………………………………………………………………………… 343

Затребуйте обратную связь……………………………………………………………………………………………………. 344

Резюме………………………………………………………………………………………………………………………………………. 345

Упражнения………………………………………………………………………………………………………………………… 346

Глава 12. Построение модели данных………………………………………………….. 347

Построение семантических объектных моделей………………………………………………………………….. 347

Построение исходной семантической объектной модели………………………………………… 348

Пример определения класса……………………………………………………………………………….. 349

Как это сделать?…………………………………………………………………………………………….. 349

Совершенствование семантической объектной модели…………………………………………… 350

Моделирование сущностей и связей……………………………………………………………………………………… 353

Построение ER-диаграммы…………………………………………………………………………………………. 353

Сущность Course имеет значение……………………………………………………………………….. 354

Как это сделать?…………………………………………………………………………………………….. 354

Построение комбинированной ER-диаграммы………………………………………………………….. 355

Усовершенствование диаграммы «сущность-связь»…………………………………………………. 356

Разрываем связи……………………………………………………………………………………………………. 357

Как это сделать?…………………………………………………………………………………………….. 358

Построение реляционной модели…………………………………………………………………………………………… 359

Идентификация идентификаторов………………………………………………………………………………. 361

Как это сделать?…………………………………………………………………………………………………… 361

Объединим все вместе……………………………………………………………………………………………………………… 362

Резюме………………………………………………………………………………………………………………………………………. 363

Упражнения………………………………………………………………………………………………………………………… 364

Глава 13. Извлечение бизнес-правил……………………………………………………. 366

Определение бизнес-правил……………………………………………………………………………………………………. 366

Таблица Courses……………………………………………………………………………………………………………. 367

Ограничения адресов…………………………………………………………………………………………… 369

Как это сделать?…………………………………………………………………………………………….. 369

Таблица CustomerCourses……………………………………………………………………………………………. 370

Таблица Customers……………………………………………………………………………………………………….. 370

Таблица Pets………………………………………………………………………………………………………………….. 370

Таблица Employees………………………………………………………………………………………………………. 371

Таблица Orders……………………………………………………………………………………………………………… 371

Таблица OrderItems………………………………………………………………………………………………………. 371

Таблица InventoryItems……………………………………………………………………………………………….. 372

Таблица TimeEntries…………………………………………………………………………………………………….. 372

Таблица Shifts……………………………………………………………………………………………………………….. 373

Таблица Persons……………………………………………………………………………………………………………. 373

Таблица Phones…………………………………………………………………………………………………………….. 373

Таблица Vendors…………………………………………………………………………………………………………… 374

Построение новой реляционной модели……………………………………………………………………………….. 374

Резюме………………………………………………………………………………………………………………………………………. 375

Упражнения………………………………………………………………………………………………………………………… 375

Глава 14. Нормализация и уточнение…………………………………………………… 377

Повышение гибкости……………………………………………………………………………………………………………….. 377

Проверка первой нормальной формы……………………………………………………………………………………. 379

Приведение к первой нормальной форме…………………………………………………………………… 381

Как это сделать?…………………………………………………………………………………………………… 382

Проверка второй нормальной формы……………………………………………………………………………………. 383

Таблица Pets………………………………………………………………………………………………………………….. 383

Таблица OrderItems………………………………………………………………………………………………………. 384

Как это сделать?…………………………………………………………………………………………………… 384

Таблица TimeEntries…………………………………………………………………………………………………….. 385

Проверка третьей нормальной формы…………………………………………………………………………………… 386

Резюме………………………………………………………………………………………………………………………………………. 388

Упражнения………………………………………………………………………………………………………………………… 389

ЧАСТЬ IV. Примеры программ……………………………………………………. 391

Глава 15. Обзор примеров…………………………………………………………………….. 393

Выбор инструментов……………………………………………………………………………………………………………….. 393

Jupyter Notebook………………………………………………………………………………………………………………………. 395

Visual Studio……………………………………………………………………………………………………………………………… 397

Адаптеры баз данных……………………………………………………………………………………………………………… 398

Пакеты в Jupyter Notebook…………………………………………………………………………………………… 399

Пакеты в Visual Studio………………………………………………………………………………………………….. 401

Пароли программ…………………………………………………………………………………………………………………….. 403

Резюме………………………………………………………………………………………………………………………………………. 404

Упражнения………………………………………………………………………………………………………………………… 404

Глава 16. MariaDB на Python………………………………………………………………… 405

Установите MariaDB……………………………………………………………………………………………………………….. 406

Запустите HeidiSQL…………………………………………………………………………………………………………………. 407

Напишите программу……………………………………………………………………………………………………………… 410

Установите модуль pymysql………………………………………………………………………………………… 410

Создайте базу данных…………………………………………………………………………………………………. 410

Определите таблицы……………………………………………………………………………………………………. 413

Добавьте данные………………………………………………………………………………………………………….. 415

Получите данные………………………………………………………………………………………………………….. 417

Резюме………………………………………………………………………………………………………………………………………. 419

Упражнения………………………………………………………………………………………………………………………… 420

Глава 17. MariaDB на C#……………………………………………………………………… 421

Напишите программу……………………………………………………………………………………………………………… 421

Установите MySqlConnector……………………………………………………………………………………….. 422

Создайте базу данных…………………………………………………………………………………………………. 423

Определите таблицы……………………………………………………………………………………………………. 425

Создайте данные………………………………………………………………………………………………………….. 427

Получите данные………………………………………………………………………………………………………….. 431

Резюме………………………………………………………………………………………………………………………………………. 433

Упражнения………………………………………………………………………………………………………………………… 433

Глава 18. PostgreSQL на Python……………………………………………………………. 435

Установите PostgreSQL……………………………………………………………………………………………………………. 436

Запустите pgAdmin………………………………………………………………………………………………………………….. 437

Спроектируйте базу данных……………………………………………………………………………………….. 437

Создайте пользователя………………………………………………………………………………………………… 437

Создайте базу данных…………………………………………………………………………………………………. 439

Определите таблицы……………………………………………………………………………………………………. 440

Определите таблицу customers……………………………………………………………………………. 440

Определите таблицу orders…………………………………………………………………………………. 443

Определите таблицу order_items………………………………………………………………………… 444

Напишите программу……………………………………………………………………………………………………………… 445

Установите Psycopg……………………………………………………………………………………………………… 445

Подключитесь к базе данных………………………………………………………………………………………. 446

Удалите старые данные………………………………………………………………………………………………. 446

Создайте данные о клиентах………………………………………………………………………………………. 447

Создайте данные заказа………………………………………………………………………………………………. 448

Создайте данные элементов заказа……………………………………………………………………………. 450

Закройте соединение……………………………………………………………………………………………………. 451

Выполните запросы……………………………………………………………………………………………………… 451

Резюме………………………………………………………………………………………………………………………………………. 453

Упражнения………………………………………………………………………………………………………………………… 454

Глава 19. PostgreSQL на C#………………………………………………………………….. 456

Напишите программу……………………………………………………………………………………………………………… 456

Установите Npgsql………………………………………………………………………………………………………… 456

Подключитесь к базе данных………………………………………………………………………………………. 457

Удалите старые данные………………………………………………………………………………………………. 458

Создайте данные о клиентах………………………………………………………………………………………. 459

Создайте данные заказа………………………………………………………………………………………………. 460

Создайте данные позиций заказа……………………………………………………………………………….. 462

Отобразите заказы……………………………………………………………………………………………………….. 464

Резюме………………………………………………………………………………………………………………………………………. 467

Упражнения………………………………………………………………………………………………………………………… 467

Глава 20. Neo4j auraDB на Python………………………………………………………… 470

Установите neo4j auraDB……………………………………………………………………………………………………….. 471

Узлы и связи……………………………………………………………………………………………………………………………… 473

Cypher……………………………………………………………………………………………………………………………………….. 473

Напишите программу……………………………………………………………………………………………………………… 474

Установите адаптер базы данных Neo4j……………………………………………………………………. 474

Методы действий………………………………………………………………………………………………………….. 475

Метод delete_all_nodes……………………………………………………………………………………….. 475

Метод make_node…………………………………………………………………………………………………. 476

Метод make_link…………………………………………………………………………………………………… 477

Метод execute_node_query………………………………………………………………………………….. 477

Метод find_path……………………………………………………………………………………………………. 478

Методы схемы организации………………………………………………………………………………………… 479

Метод build_org_chart………………………………………………………………………………………… 479

Метод query_org_chart………………………………………………………………………………………… 480

Основная программа……………………………………………………………………………………………………. 481

Резюме………………………………………………………………………………………………………………………………………. 483

Упражнения………………………………………………………………………………………………………………………… 484

Глава 21. Neo4j auraDB на C#………………………………………………………………. 486

Напишите программу……………………………………………………………………………………………………………… 487

Установите драйвер Neo4j…………………………………………………………………………………………… 487

Методы действий………………………………………………………………………………………………………….. 488

Метод DeleteAllNodes………………………………………………………………………………………….. 489

Метод MakeNode………………………………………………………………………………………………….. 489

Метод MakeLink……………………………………………………………………………………………………. 490

Метод ExecuteNodeQuery…………………………………………………………………………………….. 491

Метод FindPath……………………………………………………………………………………………………. 492

Методы схемы организации………………………………………………………………………………………… 493

Метод BuildOrgChart…………………………………………………………………………………………… 493

Метод QueryOrgChart………………………………………………………………………………………….. 494

Основная программа……………………………………………………………………………………………………. 495

Резюме………………………………………………………………………………………………………………………………………. 497

Упражнения………………………………………………………………………………………………………………………… 498

Глава 22. MongoDB Atlas на Python………………………………………………………. 499

Не нормальная, но и не аномальная………………………………………………………………………………………. 499

XML, JSON и BSON………………………………………………………………………………………………………………….. 500

Установите MongoDB Atlas…………………………………………………………………………………………………….. 502

Найдите код подключения……………………………………………………………………………………………………… 504

Напишите программу……………………………………………………………………………………………………………… 507

Установите адаптер базы данных PyMongo……………………………………………………………… 507

Вспомогательные методы……………………………………………………………………………………………. 508

Метод person_string…………………………………………………………………………………………….. 508

Метод connect_to_db…………………………………………………………………………………………… 509

Метод delete_old_data…………………………………………………………………………………………. 510

Метод create_data………………………………………………………………………………………………… 510

Метод query_data…………………………………………………………………………………………………. 512

Основная программа……………………………………………………………………………………………………. 518

Резюме………………………………………………………………………………………………………………………………………. 518

Упражнения………………………………………………………………………………………………………………………… 519

Глава 23. MongoDB Atlas на C#…………………………………………………………….. 521

Напишите программу……………………………………………………………………………………………………………… 522

Установите адаптер базы данных MongoDB…………………………………………………………….. 522

Вспомогательные методы……………………………………………………………………………………………. 522

Метод PersonString………………………………………………………………………………………………. 523

Метод DeleteOldData…………………………………………………………………………………………… 524

Метод CreateData………………………………………………………………………………………………… 525

Метод QueryData………………………………………………………………………………………………….. 527

Основная программа……………………………………………………………………………………………………. 531

Резюме………………………………………………………………………………………………………………………………………. 534

Упражнения………………………………………………………………………………………………………………………… 534

Глава 24. Apache Ignite на Python…………………………………………………………. 536

Установите Apache Ignite………………………………………………………………………………………………………… 537

Запустите узел…………………………………………………………………………………………………………………………. 537

Без сохранения……………………………………………………………………………………………………………… 538

С сохранением………………………………………………………………………………………………………………. 539

Напишите программу……………………………………………………………………………………………………………… 540

Установите адаптер базы данных pyignite………………………………………………………………… 540

Определите класс Building………………………………………………………………………………………….. 540

Сохраните данные……………………………………………………………………………………………………….. 541

Считайте данные………………………………………………………………………………………………………….. 542

Продемонстрируйте энергозависимые данные…………………………………………………………. 543

Продемонстрируйте энергонезависмые данные……………………………………………………….. 543

Резюме………………………………………………………………………………………………………………………………………. 544

Упражнения………………………………………………………………………………………………………………………… 544

Глава 25. Apache Ignite на C#……………………………………………………………….. 546

Напишите программу……………………………………………………………………………………………………………… 547

Установите адаптер базы данных Ignite……………………………………………………………………. 547

Метод main программы……………………………………………………………………………………………….. 548

Класс Building………………………………………………………………………………………………………………. 549

Метод WriteData…………………………………………………………………………………………………………… 549

Метод ReadData……………………………………………………………………………………………………………. 551

Продемонстрируйте энергозависимые данные…………………………………………………………. 552

Продемонстрируйте энергонезависимые данные……………………………………………………… 553

Резюме………………………………………………………………………………………………………………………………………. 553

Упражнения………………………………………………………………………………………………………………………… 554

ЧАСТЬ V. Темы для углубленного изучения………………………. 555

Глава 26. Введение в SQL…………………………………………………………………….. 557

История…………………………………………………………………………………………………………………………………….. 559

Поиск дополнительной информации……………………………………………………………………………………… 559

Стандарты………………………………………………………………………………………………………………………………… 560

Составные команды………………………………………………………………………………………………………………… 561

Базовый синтаксис…………………………………………………………………………………………………………………… 563

Обзор команд……………………………………………………………………………………………………………………………. 564

Оператор CREATE TABLE……………………………………………………………………………………………………….. 567

Постройте таблицу………………………………………………………………………………………………………. 569

Как это сделать?…………………………………………………………………………………………………… 570

Оператор CREATE INDEX……………………………………………………………………………………………………….. 572

Оператор DROP……………………………………………………………………………………………………………………….. 573

Оператор INSERT…………………………………………………………………………………………………………………….. 573

Оператор SELECT……………………………………………………………………………………………………………………. 575

Выражение SELECT……………………………………………………………………………………………………… 575

Выражение FROM………………………………………………………………………………………………………… 576

Выражение WHERE………………………………………………………………………………………………………. 580

Выражение GROUP BY…………………………………………………………………………………………………. 580

Выражение ORDER BY…………………………………………………………………………………………………. 580

Сделайте свой выбор…………………………………………………………………………………………… 581

Как это сделать?…………………………………………………………………………………………….. 581

Оператор UPDATE…………………………………………………………………………………………………………………… 582

Пробуем обновления на вкус………………………………………………………………………………………. 583

Как это сделать?…………………………………………………………………………………………………… 583

Оператор DELETE……………………………………………………………………………………………………………………. 584

Резюме………………………………………………………………………………………………………………………………………. 584

Упражнения………………………………………………………………………………………………………………………… 584

Глава 27. Создание баз данных с помощью сценариев SQL…………………. 588

Зачем тратить время на сценарии?………………………………………………………………………………………… 588

Категории сценариев………………………………………………………………………………………………………………. 589

Сценарии создания базы данных……………………………………………………………………………….. 589

Основные сценарии инициализации…………………………………………………………………………… 589

Сценарии инициализации данных……………………………………………………………………………… 589

Сценарии очистки………………………………………………………………………………………………………… 590

Сохраняйте сценарии……………………………………………………………………………………………………………… 590

Упорядочивание команд SQL…………………………………………………………………………………………………. 591

Упорядочьте таблицы………………………………………………………………………………………………….. 594

Как это сделать?…………………………………………………………………………………………………… 594

Резюме………………………………………………………………………………………………………………………………………. 600

Упражнения………………………………………………………………………………………………………………………… 601

Глава 28. Обслуживание базы данных…………………………………………………. 602

Резервное копирование……………………………………………………………………………………………………………. 603

Составьте план резервного копирования…………………………………………………………………… 605

Как это сделать?…………………………………………………………………………………………………… 605

Хранение данных…………………………………………………………………………………………………………………….. 607

Восстановление базы данных………………………………………………………………………………………………… 607

Уплотнение базы данных……………………………………………………………………………………………………….. 608

Управление производительностью………………………………………………………………………………………… 608

Ключи к успеху…………………………………………………………………………………………………………….. 610

Как это сделать?…………………………………………………………………………………………………… 610

Резюме………………………………………………………………………………………………………………………………………. 612

Упражнения………………………………………………………………………………………………………………………… 613

Глава 29. Безопасность баз данных……………………………………………………… 614

Необходимый уровень безопасности…………………………………………………………………………………….. 614

Пароли………………………………………………………………………………………………………………………………………. 615

Базы данных с единым паролем…………………………………………………………………………………. 615

Индивидуальные пароли……………………………………………………………………………………………… 616

Пароли операционной системы………………………………………………………………………………….. 616

Надежные пароли………………………………………………………………………………………………………… 616

Привилегии……………………………………………………………………………………………………………………………….. 618

Минимум привилегированных……………………………………………………………………………………. 622

Как это сделать?…………………………………………………………………………………………………… 623

Исходная конфигурация и привилегии………………………………………………………………………………….. 623

Чрезмерная безопасность……………………………………………………………………………………………………….. 624

Физическая безопасность……………………………………………………………………………………………………….. 625

Резюме………………………………………………………………………………………………………………………………………. 627

Упражнения………………………………………………………………………………………………………………………… 627

ПРИЛОЖЕНИЯ…………………………………………………………………………………… 629

Приложение 1. Ответы к упражнениям………………………………………………… 631

Глава 1. Цели проектирования баз данных…………………………………………………………………………… 631

Упражнение 1……………………………………………………………………………………………………………….. 631

Упражнение 2……………………………………………………………………………………………………………….. 633

Упражнение 3……………………………………………………………………………………………………………….. 633

Упражнение 4……………………………………………………………………………………………………………….. 633

Упражнение 5……………………………………………………………………………………………………………….. 635

Упражнение 6……………………………………………………………………………………………………………….. 636

Упражнение 7……………………………………………………………………………………………………………….. 636

Упражнение 8……………………………………………………………………………………………………………….. 637

Упражнение 9……………………………………………………………………………………………………………….. 637

Упражнение 10……………………………………………………………………………………………………………… 638

Глава 2. Обзор реляционных баз данных……………………………………………………………………………… 638

Упражнение 1……………………………………………………………………………………………………………….. 638

Упражнение 2……………………………………………………………………………………………………………….. 638

Упражнение 3……………………………………………………………………………………………………………….. 638

Упражнение 4……………………………………………………………………………………………………………….. 639

Упражнение 5……………………………………………………………………………………………………………….. 639

Упражнение 6……………………………………………………………………………………………………………….. 639

Упражнение 7……………………………………………………………………………………………………………….. 639

Упражнение 8……………………………………………………………………………………………………………….. 640

Упражнение 9……………………………………………………………………………………………………………….. 640

Упражнение 10……………………………………………………………………………………………………………… 640

Глава 3. Обзор NOSQL…………………………………………………………………………………………………………….. 640

Упражнение 1……………………………………………………………………………………………………………….. 640

Упражнение 2……………………………………………………………………………………………………………….. 641

Упражнение 3……………………………………………………………………………………………………………….. 641

Упражнение 4……………………………………………………………………………………………………………….. 642

Упражнение 5……………………………………………………………………………………………………………….. 642

Упражнение 6……………………………………………………………………………………………………………….. 642

Упражнение 7……………………………………………………………………………………………………………….. 642

Упражнение 8……………………………………………………………………………………………………………….. 642

Упражнение 9……………………………………………………………………………………………………………….. 642

Упражнение 10……………………………………………………………………………………………………………… 643

Упражнение 11……………………………………………………………………………………………………………… 643

Упражнение 12……………………………………………………………………………………………………………… 643

Упражнение 13……………………………………………………………………………………………………………… 644

Упражнение 14……………………………………………………………………………………………………………… 644

Глава 4. Понимание потребностей пользователей………………………………………………………………. 645

Упражнение 1……………………………………………………………………………………………………………….. 645

Упражнение 2……………………………………………………………………………………………………………….. 645

Упражнение 3……………………………………………………………………………………………………………….. 646

Упражнение 4……………………………………………………………………………………………………………….. 646

Упражнение 5……………………………………………………………………………………………………………….. 646

Упражнение 6……………………………………………………………………………………………………………….. 646

Упражнение 7……………………………………………………………………………………………………………….. 647

Упражнение 8……………………………………………………………………………………………………………….. 647

Упражнение 9……………………………………………………………………………………………………………….. 648

Упражнение 10……………………………………………………………………………………………………………… 648

Упражнение 11……………………………………………………………………………………………………………… 650

Глава 5. Перевод потребностей пользователей в модели данных……………………………………… 650

Упражнение 1……………………………………………………………………………………………………………….. 650

Упражнение 2……………………………………………………………………………………………………………….. 650

Упражнение 3……………………………………………………………………………………………………………….. 653

Упражнение 4……………………………………………………………………………………………………………….. 654

Упражнение 5……………………………………………………………………………………………………………….. 655

Упражнение 6……………………………………………………………………………………………………………….. 656

Упражнение 7……………………………………………………………………………………………………………….. 657

Упражнение 8……………………………………………………………………………………………………………….. 657

Глава 6. Извлечение бизнес-правил……………………………………………………………………………………….. 658

Упражнение 1……………………………………………………………………………………………………………….. 658

Упражнение 2……………………………………………………………………………………………………………….. 661

Упражнение 3……………………………………………………………………………………………………………….. 663

Упражнение 4……………………………………………………………………………………………………………….. 664

Глава 7. Нормализация данных…………………………………………………………………………………………….. 665

Упражнение 1……………………………………………………………………………………………………………….. 665

Упражнение 2……………………………………………………………………………………………………………….. 667

Упражнение 3……………………………………………………………………………………………………………….. 667

Упражнение 4……………………………………………………………………………………………………………….. 668

Упражнение 5……………………………………………………………………………………………………………….. 669

Упражнение 6……………………………………………………………………………………………………………….. 669

Глава 8. Проектирование баз данных для поддержки программного обеспечения………….. 670

Упражнение 1……………………………………………………………………………………………………………….. 670

Упражнение 2……………………………………………………………………………………………………………….. 671

Упражнение 3……………………………………………………………………………………………………………….. 671

Упражнение 4……………………………………………………………………………………………………………….. 671

Глава 9. Использование общих шаблонов проектирования……………………………………………….. 672

Упражнение 1……………………………………………………………………………………………………………….. 672

Упражнение 2……………………………………………………………………………………………………………….. 672

Упражнение 3……………………………………………………………………………………………………………….. 672

Упражнение 4……………………………………………………………………………………………………………….. 673

Упражнение 5……………………………………………………………………………………………………………….. 673

Упражнение 6……………………………………………………………………………………………………………….. 674

Упражнение 7……………………………………………………………………………………………………………….. 675

Упражнение 8……………………………………………………………………………………………………………….. 675

Упражнение 9……………………………………………………………………………………………………………….. 676

Глава 10. Предотвращение распространенных ошибок проектирования…………………………. 676

Упражнение 1……………………………………………………………………………………………………………….. 676

Упражнение 2……………………………………………………………………………………………………………….. 677

Упражнение 3……………………………………………………………………………………………………………….. 677

Упражнение 4……………………………………………………………………………………………………………….. 678

Глава 11. Определение потребностей и требований пользователей………………………………….. 679

Упражнение 1……………………………………………………………………………………………………………….. 679

Упражнение 2……………………………………………………………………………………………………………….. 680

Упражнение 3……………………………………………………………………………………………………………….. 680

Упражнение 4……………………………………………………………………………………………………………….. 681

Упражнение 5……………………………………………………………………………………………………………….. 682

Упражнение 6……………………………………………………………………………………………………………….. 682

Глава 12. Построение модели данных…………………………………………………………………………………… 683

Упражнение 1……………………………………………………………………………………………………………….. 683

Упражнение 2……………………………………………………………………………………………………………….. 683

Упражнение 3……………………………………………………………………………………………………………….. 683

Упражнение 4……………………………………………………………………………………………………………….. 684

Упражнение 5……………………………………………………………………………………………………………….. 684

Упражнение 6……………………………………………………………………………………………………………….. 684

Упражнение 7……………………………………………………………………………………………………………….. 684

Упражнение 8……………………………………………………………………………………………………………….. 685

Упражнение 9……………………………………………………………………………………………………………….. 685

Упражнение 10……………………………………………………………………………………………………………… 685

Упражнение 11……………………………………………………………………………………………………………… 685

Упражнение 12……………………………………………………………………………………………………………… 686

Глава 13. Извлечение бизнес-правил…………………………………………………………………………………….. 686

Упражнение 1……………………………………………………………………………………………………………….. 686

Упражнение 2……………………………………………………………………………………………………………….. 687

Упражнение 3……………………………………………………………………………………………………………….. 687

Упражнение 4……………………………………………………………………………………………………………….. 688

Упражнение 5……………………………………………………………………………………………………………….. 689

Глава 14. Нормализация и уточнение…………………………………………………………………………………… 689

Упражнение 1……………………………………………………………………………………………………………….. 689

Упражнение 2……………………………………………………………………………………………………………….. 690

Упражнение 3……………………………………………………………………………………………………………….. 691

Упражнение 4……………………………………………………………………………………………………………….. 691

Глава 15. Обзор примеров………………………………………………………………………………………………………. 692

Упражнение 1……………………………………………………………………………………………………………….. 692

Упражнение 2……………………………………………………………………………………………………………….. 692

Упражнение 3……………………………………………………………………………………………………………….. 693

Упражнение 4……………………………………………………………………………………………………………….. 693

Упражнение 5……………………………………………………………………………………………………………….. 693

Упражнение 6……………………………………………………………………………………………………………….. 694

Глава 16. MariaDB на Python…………………………………………………………………………………………………. 694

Упражнение 1……………………………………………………………………………………………………………….. 694

Упражнение 2……………………………………………………………………………………………………………….. 694

Упражнение 3……………………………………………………………………………………………………………….. 694

Упражнение 4……………………………………………………………………………………………………………….. 694

Упражнение 5……………………………………………………………………………………………………………….. 695

Упражнение 6……………………………………………………………………………………………………………….. 696

Глава 17. MariaDB на C#………………………………………………………………………………………………………… 696

Упражнение 1……………………………………………………………………………………………………………….. 696

Упражнение 2……………………………………………………………………………………………………………….. 696

Упражнение 3……………………………………………………………………………………………………………….. 697

Упражнение 4……………………………………………………………………………………………………………….. 697

Упражнение 5……………………………………………………………………………………………………………….. 697

Упражнение 6……………………………………………………………………………………………………………….. 699

Глава 18. PostgreSQL на Python……………………………………………………………………………………………… 699

Упражнение 1……………………………………………………………………………………………………………….. 699

Упражнение 2……………………………………………………………………………………………………………….. 699

Упражнение 3……………………………………………………………………………………………………………….. 700

Упражнение 4……………………………………………………………………………………………………………….. 700

Упражнение 5……………………………………………………………………………………………………………….. 701

Упражнение 6……………………………………………………………………………………………………………….. 701

Упражнение 7……………………………………………………………………………………………………………….. 702

Глава 19. PostgreSQL на C#…………………………………………………………………………………………………….. 702

Упражнение 1……………………………………………………………………………………………………………….. 702

Упражнение 2……………………………………………………………………………………………………………….. 702

Упражнение 3……………………………………………………………………………………………………………….. 705

Упражнение 4……………………………………………………………………………………………………………….. 705

Упражнение 5……………………………………………………………………………………………………………….. 705

Упражнение 6……………………………………………………………………………………………………………….. 706

Упражнение 7……………………………………………………………………………………………………………….. 706

Глава 20. Neo4J AuraDB на Python………………………………………………………………………………………… 707

Упражнение 1……………………………………………………………………………………………………………….. 707

Упражнение 2……………………………………………………………………………………………………………….. 707

Упражнение 3……………………………………………………………………………………………………………….. 707

Упражнение 4……………………………………………………………………………………………………………….. 707

Упражнение 5……………………………………………………………………………………………………………….. 707

Глава 21. Neo4J AuraDB на С#……………………………………………………………………………………………….. 708

Упражнение 1……………………………………………………………………………………………………………….. 708

Упражнение 2……………………………………………………………………………………………………………….. 708

Упражнение 3……………………………………………………………………………………………………………….. 708

Упражнение 4……………………………………………………………………………………………………………….. 708

Упражнение 5……………………………………………………………………………………………………………….. 708

Упражнение 6……………………………………………………………………………………………………………….. 708

Упражнение 7……………………………………………………………………………………………………………….. 708

Глава 22. MongoDB Atlas на Python………………………………………………………………………………………. 709

Упражнение 1……………………………………………………………………………………………………………….. 709

Упражнение 2……………………………………………………………………………………………………………….. 709

Упражнение 3……………………………………………………………………………………………………………….. 709

Упражнение 4……………………………………………………………………………………………………………….. 710

Глава 23. MongoDB Atlas на C#……………………………………………………………………………………………… 710

Упражнение 1……………………………………………………………………………………………………………….. 710

Упражнение 2……………………………………………………………………………………………………………….. 710

Упражнение 3……………………………………………………………………………………………………………….. 710

Упражнение 4……………………………………………………………………………………………………………….. 711

Глава 24. Apache Ignite на Python………………………………………………………………………………………….. 711

Упражнение 1……………………………………………………………………………………………………………….. 711

Упражнение 2……………………………………………………………………………………………………………….. 711

Упражнение 3……………………………………………………………………………………………………………….. 712

Упражнение 4……………………………………………………………………………………………………………….. 712

Глава 25. Apache Ignite на C#…………………………………………………………………………………………………. 713

Упражнение 1……………………………………………………………………………………………………………….. 713

Упражнение 2……………………………………………………………………………………………………………….. 714

Упражнение 3……………………………………………………………………………………………………………….. 714

Упражнение 4……………………………………………………………………………………………………………….. 715

Глава 26. Введение в SQL……………………………………………………………………………………………………….. 715

Упражнение 1……………………………………………………………………………………………………………….. 715

Упражнение 2……………………………………………………………………………………………………………….. 716

Упражнение 3……………………………………………………………………………………………………………….. 717

Упражнение 4……………………………………………………………………………………………………………….. 717

Упражнение 5……………………………………………………………………………………………………………….. 718

Глава 27. Создание баз данных с помощью сценариев SQL……………………………………………….. 718

Упражнение 1……………………………………………………………………………………………………………….. 718

Упражнение 2……………………………………………………………………………………………………………….. 718

Глава 28. Обслуживание базы данных………………………………………………………………………………….. 721

Упражнение 1……………………………………………………………………………………………………………….. 721

Упражнение 2……………………………………………………………………………………………………………….. 721

Упражнение 3……………………………………………………………………………………………………………….. 722

Глава 29. Безопасность баз данных………………………………………………………………………………………. 722

Упражнение 1……………………………………………………………………………………………………………….. 722

Упражнение 2……………………………………………………………………………………………………………….. 724

Упражнение 3……………………………………………………………………………………………………………….. 725

Приложение 2. Примеры реляционных проектных решений……………….. 727

Книги…………………………………………………………………………………………………………………………………………. 729

Фильмы……………………………………………………………………………………………………………………………………… 731

Музыка……………………………………………………………………………………………………………………………………… 732

Управление документами……………………………………………………………………………………………………….. 734

Заказы клиентов………………………………………………………………………………………………………………………. 735

Смены и табели учета рабочего времени……………………………………………………………………………… 735

Сотрудники, проекты и отделы………………………………………………………………………………………………. 736

Навыки и квалификация сотрудников……………………………………………………………………………………. 737

Аренда одинаковых объектов………………………………………………………………………………………………… 738

Аренда уникальных объектов………………………………………………………………………………………………… 739

Студенты, учебные курсы и оценки……………………………………………………………………………………….. 740

Команды…………………………………………………………………………………………………………………………………… 742

Индивидуальные виды спорта……………………………………………………………………………………………….. 743

Автопарки…………………………………………………………………………………………………………………………………. 743

Контакты………………………………………………………………………………………………………………………………….. 746

Пассажиры……………………………………………………………………………………………………………………………….. 747

Рецепты…………………………………………………………………………………………………………………………………….. 749

Приложение 3. Описание файлового архива………………………………………… 751

Глоссарий…………………………………………………………………………………………….. 752

Предметный указатель…………………………………………………………………………. 766

Род Стивенс

Род Стивенс (Rod Stephens)— программист и преподаватель, широко известный автор 37 технических книг и более 250 статей о языках программирования C#, Java и других. Его читательская аудитория насчитывает миллионы человек, постоянно пользующихся предложенными им решениями, приёмами и образцами кода.

Опубликовано

Новая книга: “Изучаем MySQL. 2-е издание”

Изучаем MySQL. 2-е издание

Книга знакомит с MySQL — самой популярной системой управления базами данных с открытым исходным кодом. Изложены основы MySQL: установка, моделирование и конструирование баз данных, команды SQL и создание новой базы данных. Рассмотрены практически вопросы работы с MySQL: расширенные запросы, транзакции и замковый механизм, проверка эффективности запросов, управление пользователями и привилегиями, использование файлов опций, резервное копирование и восстановление, конфигурирование и настройка сервераОтдельное внимание уделено мониторингу серверов MySQL, асинхронной и синхронной репликации, кластерным решениям, работе в облаке, балансировке нагрузки и другим продвинутым методам и инструментам.

Электронный архив на сайте издательства содержит цветные иллюстрации к книге.

Для программистов баз данных

Возьмите свои данные под контроль

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

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

Вы узнаете, как:

  • Начинать работу с реляционной СУБД MySQL и управлять данными
  • Развертывать базы данных MySQL на “голом железе”, на виртуальных машинах и в облаке
  • Конструировать инфраструктуры базы данных
  • Кодировать высокоэффективные запросы
  • Обеспечивать мониторинг и устранять неполадки баз данных MySQL
  • Выполнять эффективные операции резервного копирования и восстановления
  • Оптимизировать издержки баз данных в облаке
  • Понимать концепции баз данных, в особенности те, которые относятся к MySQL

Книгу “Изучаем MySQL. 2-е издание” можно купить со скидкой в интернет-магазине издательства “БХВ“.

Отзывы………………………………………………………………………………………………….. 13

Об авторах……………………………………………………………………………………………… 14

Благодарности……………………………………………………………………………………….. 15

Предисловие…………………………………………………………………………………………… 17

Для кого эта книга предназначена…………………………………………………………………………………………… 17

Как эта книга организована……………………………………………………………………………………………………… 18

Начало работы с MySQL………………………………………………………………………………………………….. 18

Использование MySQL……………………………………………………………………………………………………… 18

MySQL в производстве……………………………………………………………………………………………………… 19

Прочие темы………………………………………………………………………………………………………………………. 20

Исходный код и иллюстрации………………………………………………………………………………………………….. 20

Условные обозначения в книге…………………………………………………………………………………………………. 20

Глава 1. Установка MySQL……………………………………………………………………. 23

Развилки MySQL………………………………………………………………………………………………………………………… 24

Редакция MySQL для сообщества……………………………………………………………………………………. 24

Сервер Percona для MySQL………………………………………………………………………………………………. 24

Сервер MariaDB…………………………………………………………………………………………………………………. 24

Редакция MySQL для предприятий………………………………………………………………………………….. 25

Варианты инсталляции и платформы……………………………………………………………………………………… 25

  1. Скачать дистрибутив, который вы хотите инсталлировать……………………………………… 26
  2. Установить дистрибутив………………………………………………………………………………………………. 26
  3. Выполнить все необходимые постинсталляционные настройки……………………………… 27
  4. Выполнить контрольные нагрузочные тесты……………………………………………………………… 27

Установка MySQL в Linux………………………………………………………………………………………………………… 27

Инсталлирование MySQL в CentOS 7……………………………………………………………………………… 27

Инсталлирование MySQL 8.0………………………………………………………………………………….. 28

Инсталлирование MariaDB 10.5……………………………………………………………………………… 31

Инсталлирование сервера Percona Server 8.0…………………………………………………………. 32

Инсталлирование MySQL 5.7………………………………………………………………………………….. 33

Инсталлирование Percona Server 5.7……………………………………………………………………….. 34

Инсталлирование MySQL в CentOS 8……………………………………………………………………………… 35

Инсталлирование MySQL 8.0………………………………………………………………………………….. 35

Инсталлирование сервера Percona Server 8.0…………………………………………………………. 36

Инсталлирование MySQL 5.7………………………………………………………………………………….. 39

Инсталлирование MySQL в Ubuntu 20.04 LTS (Focal Fossa)…………………………………………. 41

Инсталлирование MySQL 8.0………………………………………………………………………………….. 41

Инсталлирование сервера Percona Server 8……………………………………………………………. 44

Инсталлирование MariaDB 10.5……………………………………………………………………………… 45

Инсталлирование MySQL 5.7………………………………………………………………………………….. 46

Установка MySQL в macOS Big Sur………………………………………………………………………………………….. 49

Инсталлирование MySQL 8……………………………………………………………………………………………… 49

Установка MySQL в Windows 10………………………………………………………………………………………………. 55

Содержимое каталога MySQL………………………………………………………………………………………………….. 62

Файлы MySQL 5.7, используемые по умолчанию………………………………………………………….. 63

Файлы MySQL 8.0, используемые по умолчанию………………………………………………………….. 66

Использование интерфейса командной строки………………………………………………………………………. 66

Использование Docker……………………………………………………………………………………………………………….. 67

Установка Docker………………………………………………………………………………………………………………. 67

Инсталлирование Docker в CentOS 7………………………………………………………………………. 68

Инсталлирование Docker в Ubuntu 20.04 (Focal Fossa)…………………………………………. 68

Развертывание контейнера MySQL…………………………………………………………………………. 69

Развертывание контейнеров MariaDB и Percona Server…………………………………………. 71

Использование симулированных производственных сред……………………………………………………. 72

Инсталлирование DBdeployer………………………………………………………………………………………….. 73

Использование DBdeployer……………………………………………………………………………………………….. 73

Модернизация сервера MySQL………………………………………………………………………………………………… 77

Глава 2. Моделирование и конструирование баз данных………………………. 81

Как не надо разрабатывать базу данных……………………………………………………………………………….. 81

Процесс конструирования базы данных…………………………………………………………………………………. 83

Модель взаимосвязей сущностей……………………………………………………………………………………………… 84

Представление сущностей………………………………………………………………………………………………… 84

Представление взаимосвязей……………………………………………………………………………………………. 87

Частичное и полное участие…………………………………………………………………………………………….. 89

Сущность или атрибут?……………………………………………………………………………………………………. 89

Сущность или взаимосвязь?……………………………………………………………………………………………… 91

Промежуточные сущности……………………………………………………………………………………………….. 91

Слабые и сильные сущности……………………………………………………………………………………………. 92

Нормализация базы данных…………………………………………………………………………………………………….. 94

Нормализация таблицы образцов……………………………………………………………………………………………. 96

Первая нормальная форма: никаких повторяющихся групп…………………………………………. 96

Вторая нормальная форма: устранить избыточные данные………………………………………… 97

Третья нормальная форма: исключить данные, не зависящие от ключа……………………… 97

Примеры моделирования взаимосвязей сущностей……………………………………………………………….. 98

Использование модели взаимосвязей сущностей…………………………………………………………………. 102

Соотнесение сущностей и взаимосвязей с таблицами базы данных………………………….. 103

Соотнести сущности с таблицами базы данных…………………………………………………. 104

Соотнесите взаимосвязи с таблицами базы данных……………………………………………. 104

Создание модели взаимосвязей сущностей банковской базы данных……………………….. 104

Взаимосвязь “многие ко многим” (N:M)…………………………………………………………………. 105

Взаимосвязь “один ко многим” (1:N)……………………………………………………………………… 105

Конвертирование EER в базу данных MySQL с помощью
инструмента Workbench…………………………………………………………………………………………………. 106

Глава 3. Базовый SQL………………………………………………………………………….. 111

Использование базы данных sakila……………………………………………………………………………………….. 112

Инструкция SELECT и базовые приемы выполнения запросов…………………………………………… 114

Однотабличные инструкции SELECT……………………………………………………………………………. 115

Выбор столбцов………………………………………………………………………………………………………………. 116

Отбор строк с помощью компонента WHERE……………………………………………………………….. 118

Основы WHERE……………………………………………………………………………………………………….. 118

Комбинирование условий с AND, OR, NOT и XOR……………………………………………….. 122

Компонент ORDER BY……………………………………………………………………………………………………… 127

Компонент LIMIT……………………………………………………………………………………………………………… 129

Соединение двух таблиц………………………………………………………………………………………… 131

Инструкция INSERT…………………………………………………………………………………………………………………. 133

Основы INSERT………………………………………………………………………………………………………………… 133

Альтернативные синтаксические конструкции…………………………………………………………….. 136

Инструкция DELETE………………………………………………………………………………………………………………… 139

Основы DELETE……………………………………………………………………………………………………………….. 139

Использование WHERE, ORDER BY и LIMIT………………………………………………………………….. 140

Удаление всех строк с помощью TRUNCATE……………………………………………………………….. 141

Инструкция UPDATE……………………………………………………………………………………………………………….. 142

Примеры…………………………………………………………………………………………………………………………… 142

Использование WHERE, ORDER BY и LIMIT………………………………………………………………….. 143

Разведывательный анализ баз данных и таблиц с помощью SHOW и mysqlshow……………… 144

Глава 4. Работа со структурами базы данных………………………………………. 149

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

Создание таблиц……………………………………………………………………………………………………………………… 152

Основы……………………………………………………………………………………………………………………………… 152

Порядок расстановки и наборы символов…………………………………………………………………….. 155

Другие функциональные возможности………………………………………………………………………….. 158

Типы столбцов…………………………………………………………………………………………………………………. 160

Целочисленные типы……………………………………………………………………………………………… 161

Типы с фиксированной точкой………………………………………………………………………………. 163

Типы с плавающей точкой…………………………………………………………………………………….. 164

Строковые типы………………………………………………………………………………………………………. 167

Типы даты и времени……………………………………………………………………………………………… 177

Другие типы…………………………………………………………………………………………………………….. 183

Ключи и индексы…………………………………………………………………………………………………………….. 183

Функциональность AUTO_INCREMENT………………………………………………………………………… 190

Изменение структур…………………………………………………………………………………………………………………. 193

Добавление, удаление и изменение столбцов………………………………………………………………. 193

Добавление, удаление и изменение индексов……………………………………………………………….. 197

Переименование таблиц и изменение других структур……………………………………………….. 199

Удаление структур………………………………………………………………………………………………………………….. 200

Удаление баз данных……………………………………………………………………………………………………… 200

Удаление таблиц……………………………………………………………………………………………………………… 201

Глава 5. Расширенные запросы……………………………………………………………. 203

Псевдонимы……………………………………………………………………………………………………………………………… 203

Псевдонимы столбцов…………………………………………………………………………………………………….. 204

Псевдонимы таблиц………………………………………………………………………………………………………… 206

Агрегирование данных……………………………………………………………………………………………………………. 209

Компонент DISTINCT………………………………………………………………………………………………………. 209

Компонент GROUP BY…………………………………………………………………………………………………….. 211

Агрегатные функции……………………………………………………………………………………………….. 218

Компонент HAVING…………………………………………………………………………………………………………. 219

Расширенные соединения……………………………………………………………………………………………………….. 221

Внутреннее соединение………………………………………………………………………………………………….. 221

Объединение…………………………………………………………………………………………………………………….. 224

Левое и правое соединения…………………………………………………………………………………………….. 231

Естественное соединение……………………………………………………………………………………………….. 235

Постоянные выражения в соединениях…………………………………………………………………………. 237

Вложенные запросы………………………………………………………………………………………………………………… 239

Основы вложенных запросов…………………………………………………………………………………………. 240

Компоненты ANY, SOME, ALL, IN и NOT IN…………………………………………………………………… 243

Использование ANY и IN…………………………………………………………………………………………. 244

Использование ALL…………………………………………………………………………………………………. 247

Написание строковых подзапросов……………………………………………………………………… 249

Компоненты EXISTS и NOT EXISTS………………………………………………………………………………… 250

Основы EXISTS и NOT EXISTS………………………………………………………………………………… 251

Коррелированные подзапросы……………………………………………………………………………… 252

Вложенные запросы в компоненте FROM…………………………………………………………………….. 256

Вложенные запросы в соединениях………………………………………………………………………………. 258

Пользовательские переменные……………………………………………………………………………………………….. 260

Глава 6. Транзакции и замковый механизм…………………………………………. 265

Уровни изоляции……………………………………………………………………………………………………………………… 266

REPEATABLE READ…………………………………………………………………………………………………………. 268

READ COMMITTED………………………………………………………………………………………………………….. 269

READ UNCOMMITTED…………………………………………………………………………………………………….. 270

SERIALIZABLE………………………………………………………………………………………………………………….. 271

Применение замков………………………………………………………………………………………………………………….. 274

Замки на основе метаданных…………………………………………………………………………………………. 275

Строковые замки……………………………………………………………………………………………………………… 280

Тупики………………………………………………………………………………………………………………………………. 283

Параметры MySQL, связанные с изоляцией и замками……………………………………………………….. 285

Глава 7. Достижение большего с MySQL……………………………………………… 287

Вставка данных с помощью запросов…………………………………………………………………………………… 287

Загрузка данных из файлов c разделителями-запятыми……………………………………………………… 293

Выгрузка данных в файлы с разделителями-запятыми……………………………………………………….. 301

Создание таблиц с помощью запросов………………………………………………………………………………….. 303

Выполнение многотабличных обновлений и удалений………………………………………………………. 308

Удаление………………………………………………………………………………………………………………………….. 308

Обновления………………………………………………………………………………………………………………………. 313

Замена данных…………………………………………………………………………………………………………………………. 314

Инструкция EXPLAIN………………………………………………………………………………………………………………. 318

Альтернативные механизмы хранения данных……………………………………………………………………. 324

InnoDB……………………………………………………………………………………………………………………………… 326

MyISAM и Aria…………………………………………………………………………………………………………………. 328

MyRocks и TokuDB…………………………………………………………………………………………………………. 329

Другие табличные типы………………………………………………………………………………………………….. 331

Глава 8. Управление пользователями и привилегиями………………………… 333

Пользователи и привилегии……………………………………………………………………………………………………. 333

Корневой пользователь…………………………………………………………………………………………………………… 335

Создание и использование новых пользователей………………………………………………………………… 336

Таблицы привилегий……………………………………………………………………………………………………………….. 343

Команды управления пользователями и журналирование…………………………………………………. 345

Модифицирование и удаление пользователей……………………………………………………………………… 347

Модифицирование пользователя…………………………………………………………………………………… 347

Удаление пользователя…………………………………………………………………………………………………… 351

Привилегии……………………………………………………………………………………………………………………………….. 355

Статические и динамические привилегии…………………………………………………………………….. 357

SUPER-привилегия…………………………………………………………………………………………………………… 358

Команды управления привилегиями……………………………………………………………………………… 359

GRANT………………………………………………………………………………………………………………………. 359

REVOKE……………………………………………………………………………………………………………………. 361

Проверка привилегий………………………………………………………………………………………………………. 362

Привилегия GRANT OPTION……………………………………………………………………………………………. 365

Роли…………………………………………………………………………………………………………………………………………… 368

Изменение пароля пользователя root и небезопасный запуск…………………………………………….. 375

Несколько идей в отношении безопасной настройки…………………………………………………………… 376

Глава 9. Использование файлов опций………………………………………………… 379

Структура файла опций………………………………………………………………………………………………………….. 379

Диапазон опций……………………………………………………………………………………………………………………….. 384

Порядок поиска файлов опций……………………………………………………………………………………………….. 387

Специальные файлы опций…………………………………………………………………………………………………….. 388

Конфигурационный файл путей для входа…………………………………………………………………… 388

Конфигурационный файл хранимых на диске системных переменных…………………….. 391

Определение действующих опций…………………………………………………………………………………………. 393

Глава 10. Резервное копирование и восстановление…………………………….. 399

Физические и логические резервные копии…………………………………………………………………………… 399

Логические резервные копии………………………………………………………………………………………….. 400

Физические резервные копии………………………………………………………………………………………….. 402

Обзор логических и физических резервных копий……………………………………………………….. 404

Репликация как инструмент резервного копирования………………………………………………………….. 405

Отказ инфраструктуры……………………………………………………………………………………………………. 405

Дефект развертывания…………………………………………………………………………………………………….. 406

Программа mysqldump…………………………………………………………………………………………………………….. 406

Самогенерация репликации с помощью mysqldump…………………………………………………….. 412

Загрузка данных из файла дампа SQL…………………………………………………………………………………… 413

mysqlpump…………………………………………………………………………………………………………………………………. 414

mydumper и myloader……………………………………………………………………………………………………………….. 416

Холодное резервное копирование и моментальные снимки файловой системы……………….. 418

Percona XtraBackup…………………………………………………………………………………………………………………. 419

Резервное копирование и восстановление…………………………………………………………………….. 421

Продвинутые функциональные возможности………………………………………………………………. 424

Инкрементное резервное копирование с помощью XtraBackup…………………………………. 425

Другие средства физического резервного копирования………………………………………………………. 427

MySQL Enterprise Backup……………………………………………………………………………………………….. 428

mariabackup……………………………………………………………………………………………………………………… 428

Восстановление на определенный момент времени…………………………………………………………….. 429

Техническая информация о двоичных журналах………………………………………………………… 430

Поддержка двоичных журналов……………………………………………………………………………………. 431

Идентификация цели восстановления на определенный момент времени…………………. 432

Пример восстановления на определенный момент времени: XtraBackup…………………. 433

Пример восстановления на определенный момент времени: mysqldump…………………… 434

Экспортирование и импортирование табличных пространств InnoDB…………………………….. 435

Технические предпосылки……………………………………………………………………………………………… 436

Экспортирование табличного пространства……………………………………………………………….. 436

Импортирование табличного пространства…………………………………………………………………. 437

Однотабличная реконструкция с помощью XtraBackup……………………………………………… 439

Тестирование и верифицирование резервных копий……………………………………………………………. 440

Вводное пособие по стратегии резервного копирования баз данных………………………………… 442

Глава 11. Конфигурирование и настройка сервера………………………………. 445

Демон сервера MySQL…………………………………………………………………………………………………………….. 445

Переменные сервера MySQL………………………………………………………………………………………………….. 446

Проверка настроек сервера……………………………………………………………………………………………. 446

Лучшие образцы практики……………………………………………………………………………………………… 447

Лучшие образцы практики в работе с операционной системой………………………… 447

Лучшие образцы практики в работе с MySQL…………………………………………………….. 455

Глава 12. Мониторинг серверов MySQL……………………………………………….. 463

Метрики операционной системы……………………………………………………………………………………………. 464

Центральный процессор…………………………………………………………………………………………………. 464

Диск…………………………………………………………………………………………………………………………………… 473

Память………………………………………………………………………………………………………………………………. 478

Сеть…………………………………………………………………………………………………………………………………… 483

Наблюдаемость сервера MySQL……………………………………………………………………………………………. 488

Переменные состояния……………………………………………………………………………………………………. 488

Базовые рецепты мониторинга………………………………………………………………………………………. 491

Доступность сервера MySQL………………………………………………………………………………… 491

Клиентские подключения………………………………………………………………………………………. 492

Счетчики запросов………………………………………………………………………………………………….. 495

Типы и качество запросов……………………………………………………………………………………… 496

Метрики операций ввода-вывода и транзакций InnoDB…………………………………….. 501

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

Отчет о состоянии механизма InnoDB………………………………………………………………………….. 510

Методы исследования…………………………………………………………………………………………………………….. 513

Метод USE……………………………………………………………………………………………………………………….. 513

Метод RED……………………………………………………………………………………………………………………….. 515

Мониторинговые инструменты MySQL………………………………………………………………………………… 516

Инцидентно-диагностический и ручной сбор данных…………………………………………………………. 523

Периодический сбор значений переменных состояния системы………………………………… 523

Использование pt-stalk для сбора метрик MySQL и операционной системы…………….. 525

Расширенный ручной сбор данных……………………………………………………………………………….. 526

Глава 13. Высокая доступность……………………………………………………………. 529

Асинхронная репликация……………………………………………………………………………………………………….. 529

Базовые параметры, устанавливаемые на источнике и реплике………………………………… 532

Создание реплики с помощью Percona XtraBackup……………………………………………………… 533

Создание реплики с помощью плагина клонирования………………………………………………… 535

Создание реплики с помощью mysqldump…………………………………………………………………….. 537

Создание реплики с помощью mydumper и myloader……………………………………………………. 539

Настройка утилит mydumper и myloader………………………………………………………………. 539

Извлечение данных из источника………………………………………………………………………….. 539

Реконструирование данных на сервере-реплике…………………………………………………. 540

Установление репликации……………………………………………………………………………………… 540

Групповая репликация……………………………………………………………………………………………………. 541

Инсталлирование групповой репликации……………………………………………………………. 541

Настройка групповой репликации в MySQL……………………………………………………….. 544

Синхронная репликация…………………………………………………………………………………………………………. 547

Кластер Galera/PXC………………………………………………………………………………………………………… 548

Глава 14. MySQL в облаке……………………………………………………………………. 553

База данных как служба (DBaaS)………………………………………………………………………………………….. 553

Amazon RDS для MySQL/MariaDB………………………………………………………………………………… 554

Google Cloud SQL для MySQL………………………………………………………………………………………… 558

Azure SQL…………………………………………………………………………………………………………………………. 561

Amazon Aurora…………………………………………………………………………………………………………………………. 563

Облачные экземпляры MySQL……………………………………………………………………………………………….. 564

MySQL в Kubernetes…………………………………………………………………………………………………………………. 564

Развертывание кластера Percona XtraDB в Kubernetes………………………………………………… 565

Глава 15. Балансировка нагрузки в MySQL…………………………………………. 571

Балансировка нагрузки с помощью драйверов приложений………………………………………………. 571

Балансировщик нагрузки ProxySQL………………………………………………………………………………………. 572

Инсталлирование и конфигурирование ProxySQL……………………………………………………….. 574

Балансировщик нагрузки HAProxy………………………………………………………………………………………… 578

Инсталлирование и конфигурирование HAProxy………………………………………………………… 579

Маршрутизатор MySQL…………………………………………………………………………………………………………. 584

Глава 16. Прочие темы…………………………………………………………………………. 591

Оболочка MySQL…………………………………………………………………………………………………………………….. 591

Установка оболочки MySQL………………………………………………………………………………………….. 591

Установка оболочки MySQL в Ubuntu 20.04 Focal Fossa…………………………………………….. 591

Установка оболочки MySQL на CentOS 8…………………………………………………………………….. 592

Развертывание симулированного кластера InnoDB с помощью оболочки MySQL…. 593

Утилиты оболочки MySQL…………………………………………………………………………………………….. 597

util.dumpInstance()…………………………………………………………………………………………………… 597

util.dumpSchemas()…………………………………………………………………………………………………… 600

util.dumpTables()……………………………………………………………………………………………………… 600

util.loadDump(url[, опции])…………………………………………………………………………………….. 600

Графики пламени…………………………………………………………………………………………………………………….. 601

Сборка MySQL из исходного кода…………………………………………………………………………………………. 604

Сборка MySQL для Ubuntu Focus Fossa и процессоров ARM…………………………………….. 604

Анализ аварий MySQL……………………………………………………………………………………………………………. 608

Предметный указатель…………………………………………………………………………. 615

Гриппа-Винисиус

Винисиус Гриппа — старший инженер службы поддержки компаний Percona и ACE Oracle. Помог клиентам Percona разобраться в сотнях раз-личных случаев использо-вания MySQL.

 

 

Кузьмичев-Сергей

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

Опубликовано

Новинка: “Настройка производительности MySQL”

Настройка производительности MySQL

Описание

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

Для администраторов баз данных и специалистов по серверной разработке

Примеры из книги можно скачать по ссылке https://github.com/efficient-mysql-performance

Птица на обложке данной книги — хохлатый барбет (Trachyphonus vaillantii), получивший прозвище «фруктовый салат» за свое красочное оперение и фруктовую диету. В основном обитающие на юге Африки, они обычно встречаются в лесных массивах, пригородных садах и огородах, а также вдоль русел рек и не мигрируют.

Секреты и приёмы

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

В этой книге:

  • Начинать работу с реляционной СУБД MySQL и управлять данными
  • Подробный разбор запросов MySQL и скорости их выполнения
  • Агрегация и анализ метрик, формирование отчётов по ним
  • Изучение транзакций и блокировок
  • Масштабирование, шардирование, репликация MySQL
  • Переход в облако

Дэниэл проделал отличную работу – эта книга поможет вам максимально быстро достичь цели, не петляя и не гадая. Особенно хорошо и доходчиво рассмотрена блокировка строк в InnoDB.
Вадим Ткаченко, совтор книги «MySQL по максимуму»

Книгу “Настройка производительности MySQL” можно купить со скидкой в интернет-магазине издательства “БХВ“.

Предисловие…………………………………………………………………………………………… 11

Условные обозначения, используемые в этой книге………………………………………………………………. 12

Благодарности…………………………………………………………………………………………………………………………… 12

Глава 1. Время отклика на запрос………………………………………………………….. 13

Правдивая история ложной производительности…………………………………………………………………… 14

Краеугольный камень……………………………………………………………………………………………………………….. 14

Отчет о запросе………………………………………………………………………………………………………………………….. 15

Источники……………………………………………………………………………………………………………………….. 16

Агрегация………………………………………………………………………………………………………………………… 18

Отчетность………………………………………………………………………………………………………………………. 20

Профиль запроса……………………………………………………………………………………………………. 21

Отчет о запросе………………………………………………………………………………………………………. 23

Анализ запросов………………………………………………………………………………………………………………………… 23

Метрики запросов…………………………………………………………………………………………………………… 24

Время запроса………………………………………………………………………………………………………… 24

Время блокировки………………………………………………………………………………………………….. 26

Проверенные строки………………………………………………………………………………………………. 30

Отправленные строки…………………………………………………………………………………………….. 31

Затронутые строки…………………………………………………………………………………………………. 32

Полное сканирование таблицы…………………………………………………………………………….. 33

Полное сканирование присоединенной таблицы……………………………………………….. 33

Число временных таблиц на диске……………………………………………………………………….. 35

Количество запросов……………………………………………………………………………………………… 36

Метаданные и приложение……………………………………………………………………………………………. 36

Относительные значения……………………………………………………………………………………………….. 37

Среднее значение, процентиль и максимум…………………………………………………………………. 37

Улучшение времени отклика на запрос…………………………………………………………………………………… 40

Прямая оптимизация запросов………………………………………………………………………………………. 40

Косвенная оптимизация запросов…………………………………………………………………………………. 41

Когда оптимизировать запросы……………………………………………………………………………………………….. 42

Когда производительность влияет на клиентов…………………………………………………………… 42

До и после изменений кода……………………………………………………………………………………………. 42

Раз в месяц……………………………………………………………………………………………………………………….. 43

MySQL: быстрее………………………………………………………………………………………………………………………… 43

Итоги…………………………………………………………………………………………………………………………………………… 45

Практика: определение медленных запросов…………………………………………………………………………. 46

Глава 2. Индексы и индексация…………………………………………………………….. 49

Отвлекающие маневры в теме производительности………………………………………………………………. 51

Более быстрое и мощное оборудование!……………………………………………………………………… 51

Тонкая настройка (тюнинг) MySQL……………………………………………………………………………… 52

Индексы MySQL: наглядное введение……………………………………………………………………………………… 54

Таблицы InnoDB являются индексами…………………………………………………………………………. 55

Методы доступа к таблице……………………………………………………………………………………………. 59

Поиск по индексу……………………………………………………………………………………………………. 59

Сканирование индекса…………………………………………………………………………………………… 60

Сканирование таблицы…………………………………………………………………………………………. 61

Требование крайнего левого префикса………………………………………………………………………… 63

EXPLAIN: план выполнения запроса…………………………………………………………………………….. 65

WHERE…………………………………………………………………………………………………………………………….. 67

GROUP BY………………………………………………………………………………………………………………………… 73

ORDER BY………………………………………………………………………………………………………………………… 78

Покрывающие индексы………………………………………………………………………………………………….. 83

Соединение таблиц (join tables)…………………………………………………………………………………….. 84

Индексация: думать, как MySQL……………………………………………………………………………………………… 92

Узнайте запрос……………………………………………………………………………………………………………….. 92

Поймите с помощью EXPLAIN……………………………………………………………………………………….. 93

Оптимизируйте запрос…………………………………………………………………………………………………… 94

Развертывание и проверка…………………………………………………………………………………………….. 95

Это был хороший индекс, пока………………………………………………………………………………………………… 96

Изменение запросов……………………………………………………………………………………………………….. 96

Избыточные, повторяющиеся и неиспользуемые………………………………………………………… 97

Экстремальная селективность………………………………………………………………………………………. 98

Это ловушка! (Когда MySQL выбирает другой индекс)…………………………………………….. 99

Алгоритмы соединения таблиц………………………………………………………………………………………………. 100

Итоги…………………………………………………………………………………………………………………………………………. 101

Практика: поиск повторяющихся индексов…………………………………………………………………………… 102

Глава 3. Данные…………………………………………………………………………………… 105

Три секрета………………………………………………………………………………………………………………………………. 106

Индексы могут не помочь…………………………………………………………………………………………….. 106

Индексное сканирование…………………………………………………………………………………….. 107

Обнаружение строк……………………………………………………………………………………………… 107

Соединение таблиц………………………………………………………………………………………………. 108

Размер рабочего набора……………………………………………………………………………………… 109

Чем меньше данных, тем лучше………………………………………………………………………………….. 110

Чем меньше QPS, тем лучше………………………………………………………………………………………… 110

Принцип наименьшего количества данных…………………………………………………………………………… 111

Доступ к данным…………………………………………………………………………………………………………… 111

Возвращайте только необходимые столбцы…………………………………………………….. 112

Уменьшите сложность запросов…………………………………………………………………………. 112

Ограничьте доступ к строкам……………………………………………………………………………… 113

Ограничьте результирующий набор………………………………………………………………….. 116

Избегайте сортировки строк……………………………………………………………………………….. 118

Хранение данных…………………………………………………………………………………………………………. 118

Сохраняются только необходимые строки……………………………………………………….. 119

Используется каждый столбец……………………………………………………………………………. 119

Каждый столбец компактен и практичен…………………………………………………………… 119

Каждое значение компактно и практично…………………………………………………………. 121

Используется каждый вторичный индекс, а не дубликат…………………………………. 126

Хранятся только необходимые строки………………………………………………………………. 128

Удаление или архивирование данных…………………………………………………………………………………… 129

Инструменты…………………………………………………………………………………………………………………. 129

Размер пакета……………………………………………………………………………………………………………….. 129

Конфликт блокировки строк………………………………………………………………………………………… 132

Пространство и время………………………………………………………………………………………………….. 132

Парадокс бинарного лога……………………………………………………………………………………………. 133

Итоги…………………………………………………………………………………………………………………………………………. 134

Практика: аудит доступа к данным запросов………………………………………………………………………. 134

Глава 4. Паттерны доступа…………………………………………………………………… 137

MySQL ничего не делает…………………………………………………………………………………………………………. 138

Производительность дестабилизируется на пределе…………………………………………………………… 139

Toyota и Ferrari…………………………………………………………………………………………………………………………. 144

Паттерны доступа к данным…………………………………………………………………………………………………… 145

Чтение/запись……………………………………………………………………………………………………………….. 147

Пропускная способность……………………………………………………………………………………………… 147

Возраст данных……………………………………………………………………………………………………………. 148

Модель данных…………………………………………………………………………………………………………….. 150

Изоляция транзакций……………………………………………………………………………………………………. 150

Согласованность чтения……………………………………………………………………………………………… 151

Конкурентность……………………………………………………………………………………………………………. 152

Доступ к строкам………………………………………………………………………………………………………….. 153

Результирующий набор……………………………………………………………………………………………….. 153

Изменения в приложении………………………………………………………………………………………………………… 154

Аудит кода…………………………………………………………………………………………………………………….. 154

Разгрузка операций чтения………………………………………………………………………………………….. 156

Реплика MySQL……………………………………………………………………………………………………. 157

Кеш-сервер……………………………………………………………………………………………………………. 158

Очередь для операций записи……………………………………………………………………………………… 159

Секционирование данных……………………………………………………………………………………………. 161

Не используйте MySQL……………………………………………………………………………………………….. 162

Более быстрое и мощное оборудование?……………………………………………………………………………… 162

Итоги…………………………………………………………………………………………………………………………………………. 164

Практика: опишите паттерн доступа…………………………………………………………………………………….. 165

Глава 5. Шардирование……………………………………………………………………….. 167

Почему единая база данных не масштабируется…………………………………………………………………. 168

Рабочая нагрузка приложения……………………………………………………………………………………. 168

Тесты производительности синтетичны…………………………………………………………………….. 170

Операции записи…………………………………………………………………………………………………………… 171

Изменения схемы………………………………………………………………………………………………………….. 173

Операции……………………………………………………………………………………………………………………….. 173

Галька, а не валуны…………………………………………………………………………………………………………………. 174

Шардирование: краткое введение………………………………………………………………………………………….. 175

Ключ шардирования……………………………………………………………………………………………………. 176

Стратегии………………………………………………………………………………………………………………………. 177

Хеш………………………………………………………………………………………………………………………… 178

Диапазон……………………………………………………………………………………………………………….. 179

Поиск……………………………………………………………………………………………………………………… 181

Проблемы………………………………………………………………………………………………………………………. 182

Транзакции……………………………………………………………………………………………………………. 182

Объединения…………………………………………………………………………………………………………. 182

Кросс-шард запросы……………………………………………………………………………………………. 182

Решардирование…………………………………………………………………………………………………… 183

Ребалансировка……………………………………………………………………………………………………. 184

Онлайн-изменения схемы…………………………………………………………………………………….. 185

Альтернативы…………………………………………………………………………………………………………………………… 185

NewSQL………………………………………………………………………………………………………………………….. 185

Промежуточное программное обеспечение………………………………………………………………. 187

Микросервисы………………………………………………………………………………………………………………. 187

Не используйте MySQL……………………………………………………………………………………………….. 188

Итоги…………………………………………………………………………………………………………………………………………. 188

Практика: четырехлетняя пригодность…………………………………………………………………………………. 189

Глава 6. Метрики сервера…………………………………………………………………….. 191

Производительность запросов в сравнении с производительностью сервера…………………… 193

Нормальная и стабильная: лучшая база данных — это скучная база данных………………… 195

Ключевые показатели производительности…………………………………………………………………………. 196

Поле метрик……………………………………………………………………………………………………………………………… 197

Время отклика………………………………………………………………………………………………………………. 198

Скорость (англ. rate)……………………………………………………………………………………………………… 198

Объем использования (англ. utilization)………………………………………………………………………. 199

Ожидание………………………………………………………………………………………………………………………. 200

Ошибки………………………………………………………………………………………………………………………….. 201

Паттерны доступа………………………………………………………………………………………………………… 201

Внутренние метрики…………………………………………………………………………………………………….. 202

Спектры…………………………………………………………………………………………………………………………………….. 202

Время отклика на запрос……………………………………………………………………………………………… 204

Ошибки………………………………………………………………………………………………………………………….. 205

Запросы…………………………………………………………………………………………………………………………. 207

QPS…………………………………………………………………………………………………………………………. 207

TPS…………………………………………………………………………………………………………………………. 208

Чтение/запись……………………………………………………………………………………………………….. 210

Администрирование…………………………………………………………………………………………….. 210

Show………………………………………………………………………………………………………………………. 211

Потоки и соединения……………………………………………………………………………………………………. 211

Временные объекты……………………………………………………………………………………………………… 214

Подготовленные инструкции………………………………………………………………………………………. 215

Плохие SELECT…………………………………………………………………………………………………………….. 216

Пропускная способность сети…………………………………………………………………………………….. 217

Репликация……………………………………………………………………………………………………………………. 217

Объем данных……………………………………………………………………………………………………………….. 218

InnoDB…………………………………………………………………………………………………………………………… 220

Длина списка истории (метрика)………………………………………………………………………… 220

Взаимоблокировка……………………………………………………………………………………………….. 220

Блокировка строк…………………………………………………………………………………………………. 221

Пропускная способность данных……………………………………………………………………….. 222

IOPS……………………………………………………………………………………………………………………….. 223

Эффективность буферного пула…………………………………………………………………………. 225

Сброс страниц………………………………………………………………………………………………………. 227

Лог транзакций…………………………………………………………………………………………………….. 234

Мониторинг и оповещение……………………………………………………………………………………………………… 238

Разрешение……………………………………………………………………………………………………………………. 238

Охота на миражи (пороговые значения)…………………………………………………………………….. 240

Оповещения о пользовательском опыте и объективных ограничениях………………….. 241

Причина и следствие……………………………………………………………………………………………………. 243

Итоги…………………………………………………………………………………………………………………………………………. 245

Практика: анализ ключевых показателей производительности…………………………………………. 246

Практика: проверка оповещений и пороговых значений…………………………………………………….. 247

Глава 7. Запаздывание репликации……………………………………………………… 249

Основа………………………………………………………………………………………………………………………………………. 250

Источник — реплика……………………………………………………………………………………………………. 251

События бинарного лога……………………………………………………………………………………………… 253

Запаздывание репликации…………………………………………………………………………………………… 254

Причины……………………………………………………………………………………………………………………………………. 256

Пропускная способность транзакций…………………………………………………………………………. 256

Восстановление после сбоя…………………………………………………………………………………………. 257

Сетевые проблемы……………………………………………………………………………………………………….. 257

Риск: потеря данных………………………………………………………………………………………………………………… 258

Асинхронная репликация…………………………………………………………………………………………….. 258

Полусинхронная репликация………………………………………………………………………………………. 260

Уменьшение запаздывания: многопоточная репликация…………………………………………………….. 262

Мониторинг……………………………………………………………………………………………………………………………… 266

Время восстановления…………………………………………………………………………………………………………….. 268

Итоги…………………………………………………………………………………………………………………………………………. 270

Практика: мониторинг субсекундного запаздывания………………………………………………………….. 271

Глава 8. Транзакции…………………………………………………………………………….. 275

Блокировка строк…………………………………………………………………………………………………………………….. 276

Блокировки индексной записи и следующего ключа………………………………………………… 278

Блокировка интервала…………………………………………………………………………………………………. 282

Вторичные индексы……………………………………………………………………………………………………… 285

Блокировка намерения вставки…………………………………………………………………………………… 288

MVCC и логи отмены………………………………………………………………………………………………………………. 291

Длина списка истории…………………………………………………………………………………………………………….. 295

Распространенные проблемы…………………………………………………………………………………………………. 297

Большие транзакции (размер транзакции)…………………………………………………………………. 298

Длительные транзакции………………………………………………………………………………………………. 299

Зависшие транзакции…………………………………………………………………………………………………… 300

Заброшенные транзакции……………………………………………………………………………………………. 301

Отчетность……………………………………………………………………………………………………………………………….. 302

Активные транзакции: последние……………………………………………………………………………….. 302

Активные транзакции: итоги……………………………………………………………………………………….. 306

Активная транзакция: история……………………………………………………………………………………. 306

Зафиксированные транзакции: итоги…………………………………………………………………………. 307

Итоги…………………………………………………………………………………………………………………………………………. 309

Практика: оповещение о длине списка истории…………………………………………………………………… 310

Практика: изучение блокировки строк………………………………………………………………………………….. 311

Глава 9. Другие проблемы……………………………………………………………………. 313

Сплит-брейн — величайший риск………………………………………………………………………………………….. 313

Дрейф данных реален, но невидим………………………………………………………………………………………… 314

Не доверяйте ORM…………………………………………………………………………………………………………………… 315

Схемы постоянно меняются……………………………………………………………………………………………………. 316

MySQL расширяет стандартный SQL……………………………………………………………………………………. 316

«Шумные соседи»…………………………………………………………………………………………………………………….. 317

Приложения не завершаются корректно……………………………………………………………………………….. 317

Высокопроизводительная MySQL — это сложно………………………………………………………………… 318

Практика: определение барьеров для сплит-брейна……………………………………………………………. 319

Практика: проверка на дрейф данных…………………………………………………………………………………… 321

Практика: хаос…………………………………………………………………………………………………………………………. 321

Глава 10. MySQL в облаке……………………………………………………………………. 323

Совместимость…………………………………………………………………………………………………………………………. 324

Управление (администрирование базы данных)………………………………………………………………….. 325

Сеть и хранилище… и… задержка…………………………………………………………………………………………… 328

Производительность — это деньги………………………………………………………………………………………… 329

Итоги…………………………………………………………………………………………………………………………………………. 331

Практика: попробуйте MySQL в облаке……………………………………………………………………………….. 332

Предметный указатель…………………………………………………………………………. 333

Об авторе……………………………………………………………………………………………… 336

Об обложке…………………………………………………………………………………………… 336

Daniel Nichter

Дэниэл Нихтер – архитекор баз данных, более 15 лет работает с MySQL. Увлёкся оптимизацией производительности MySQL ещё в 2004 году, работая в дата-центре. Из его заметок сложился блог HackMySQL.com, в котором он делился подробностями устройства MySQL и её инструментария. Затем 8 лет работал в компании Percona, где продолжал разрабатывать инструменты для оптимизации баз данных. Сегодня его инструменты де-факто служат эталоном для компаний во всём мире. Обладатель премии MySQL Community Award, выступает на конференциях, активно участвует в движении Open Source.