
Книга знакомит с 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
- Скачать дистрибутив, который вы хотите инсталлировать……………………………………… 26
- Установить дистрибутив………………………………………………………………………………………………. 26
- Выполнить все необходимые постинсталляционные настройки……………………………… 27
- Выполнить контрольные нагрузочные тесты……………………………………………………………… 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. 2-е издание
1750 ₽
1487 ₽