Современный MySQL 8

Эрик Вайниер, Бирджу Шах, Теджасви Мэйлирэйти

 

Первая редакция на английском языке:   Январь  2019

Ссылка на продукт: 1310119

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

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

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

Опубликовано Packt Publishing Ltd.

Livery Place

35 Livery Street

Birmingham B3 2PB, UK

ISBN 978-1-78883-444-5

www.packtpub.com

2019-02-23

 Состав исполнителей

издания на английском языке
Авторы
Эрик Вайниер
Бирджу Шах
Теджасви Мэйлирэйти
Редактор выпуска
Правин Дхандре
Редактор приобретения
Намрэйта Пэтил
Редактор разработки содержания
Крис Де-круз
Технический редактор
Найлиш Сэйвакхади
Литературный редактор
Safis Editing
Координатор проекта
Намрэйта Свита
Корректор
Safis Editing
Составитель указателя
Марьяммал Четьяр
Графика
Джиша Чирайил
Координатор производства
Найлиш Моухайт

 Об авторах

Эрик Вайниер один из немногих администраторов баз данных в мире, специализирующийся на производительности MySQL и являющийся экспертом по крупным архитектурам, таким как Air Miles, Cogeco, McGill University, Bombardier Aerospace и многим иным. Будучи старшим администратором баз данных и инструктором на протяжении 18 лет он имеет опыт в области производительности и устранения неполадок в десятках систем MySQL наивысшего уровня, включая сложные кластерные системы.

Я бы хотел поблагодарить свою жену, Сию, которая помогала в редактировании данной книги, а также за её поддержку.

Бирджу Шах является главным архитектором Endurance International Group. Он получил степень бакалавра по вычислительной технике в университете Гуджаратаю Он обладает опытом и знаниями относительно создания масштабируемых продуктов размещения доменов. Он увлечён новейшими архитектурными шаблонами, инструментами и технологиями и помогает организациям придерживаться наилучших практических приёмов. Он также увлекается техническим обучением и сеансами.

Я бы хотел выразить благодарность своему отцу, Бхупедре Шаху, матери, Шиле Шах и своей жене, Чираги Щах, а также своему милому пирожочку, Дхане Шах, за их помощь и постоянную поддержку. Я также хотел бы поблагодарить своих друзей Джинеша Равала, Гоупала Роухару, Раджива Сэйху и Арнава Чаудхри за их поддержку и руководство. Особая благодарность Али и Крису за их постоянное сопровождение и всю команду Packt за предоставленную мне возможность внести вклад в несколько глав моей самой первой книги.

Теджасви Мэйлирэйти является ведущим техническим специалистом Cassandra для Target. Он сыграл важную роль в разработке и создании индивидуальных интеграций Cassandra, включая веб- интерфейс платформы проверки данных между Oracle и Cassandra. Теджасви получил степень магистра информатики университета Нью- Мексико и степень бакалавра в области электроники и связи в Технологичеком университете имени Джавахарлала Неру в Индии. Он увлечён выявлением и анализом шаблонов данных в наборах данных с приминением R, Python, Spark, Cassandra и MySQL.

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

 Рецензент

Картхик П.Р. является основателем/ генеральным директором Mydbops. Он консультант по базам данных MySQL с большим опытом работы с MySQL. Он и его команда представляют консультации по MySQL некоторым крупнейшим интернет- компаниям. До создания Mydbops он работал в Yahoo! в качестве ведущего администратора MySQL. Картхик активный спикер и блоггер в сообществе MySQL.

Он также выступал рецензентом MariaDB High Performance Пьера Мавро и Getting Started with MariaDB Дэниэла Бартоламью, которые обе были изданы в Packt Publishing.

 www.PacktPub.com

 Содержание

Предисловие
Для кого эта книга
Что охватывает эта книга
Как получить максимальную отдачу от этой книги
Загрузка примеров кода этой книги
Загрузка цветных изображений этой книги
Принятые соглашения
Будьте на связи
Отзывы
Опечатки
Незаконное тиражирование
Вопросы
Глава 1. Введение
Почему MySQL 8?
Почему MySQL 8 выступает следующим поколением?
Зачем так важно иметь хорошую архитектуру MySQL?
Выводы
Глава 2. Новые свойства MySQL 8
Глобальный словарь данных
Поддержка ролей и истории MySQL 8
MySQL 8 поддерживает создание и управление группами ресурсов и полномочиями
Расширения InnoDB
JSON улучшает функциональность
Невидимые индексы оптимизатора MySQL
Устаревшие свойства в MySQL 8.0
Быстро просмотрим свойства, удалённые из MySQL 8.0
Выводы
Глава 3. Индексация ваших данных для Высокой производительности
Как размышляет оптимизатор MySQL в MySQL 8.0?
Планирование элемента
Какой вид данных мне следует рассматривать подлежащими индексации в первую очередь и почему?
Зачем мне требуется хорошая стратегия индексации?
Какое воздействие оказывает индексация на производительность MySQL?
Как отображать и анализировать структуру таблицы?
Как действенно считывать планы исполнения запроса MySQL?
Как эффективно считывать имеющиеся результаты EXPLAIN
id (имя JSON: select_id)
select_type (имя JSON: отсутствует)
table (имя JSON: table_name)
partitions (имя JSON: partitions)
type (имя JSON: access_type)
Дополнительные сведения EXPLAIN
Как понять что нужно создать некий индекс
Сопоставление индекса множества столбцов и множества индексов
Как организовывать ваши стобцы при индексации для хорошей производительности
Пример 1: как использовать инструмент планирования EXPLAIN в MySQL 8.0
Параметры EXPLAIN
Пример 2: как отображать и анализировать структуру таблицы в противоположность инструменту планирования EXPLAIN
Пример 3: как действенно организовывать ваши столбцы в некоем индексе
Создание отсутствующего индекса
Хитрости и технические приёмы
Пять основных правил индексации
Совет 2 - пять общих правил оптимизации ваших запросов
Совет 3 - осознавайте свои материальные ресурсы
Совет 4 - настройка не единственное что следует принимать во внимание
Совет 5 - рекомендации по производительности имеющейся архитектуры MySQL
Технический пример
Выводы
Глава 4. Современные технологии данных для Больших запросов
Наиболее важными переменными являются указатели полномасштабного сканирования
Секционирование таблиц
Обзор секционирования в MySQL 8.0
Доступные типы разбиения на разделы
Горизонтальное секционирование данных
Управление разделами
Секционирование RANGE
Секционирование LIST
Секционирование HASH
Секционирование KEY
Применение разделов
Обрезка разделов
Избавление от неиспользуемых и дублирующих индексов
Неиспользуемые индексы
Дублируемые индексы
Подарок - потенциально отсутствующие индексы
Наиболее важные оптимизации запроса
Оптимизация запроса с помощью предложения WHERE
Оптимизация запроса с помощью предложения GROUP BY
Оптимизация запроса с помощью предложения ORDER BY
Временные таблицы
Пример 1 - некий образец того как оптимизировать сложный запрос
Пример 2 - как оптимизировать индексы сортировки
Хитрости и технические приёмы
Разделы
Оптимизация
Технические приёмы
Типичный образец: временные последовательности данных
Пример массового DELETE
Выводы
Глава 5. Словарь данных MySQL в MySQL 8.0
Структура словаря данных MySQL в MySQL 8.0
Кэширование объекта словаря
Хранение транзакций имеющегося словаря данных
Приложения словаря данных
Удаление метаданных хранилища на основе файлов
Упорядоченная словарная информация (SDI)
Ограничения словарей данных
Хитрости и технические приёмы
Выводы
Глава 6. Установки сервера MySQL
Начинаем с наиболее значимых переменных
Оптимизация сервера MySQL
Управление имеющимися типами данных изменяет операции
Включение функции индексации адаптивного хэширования
Установка предела на общее число одновременных потоков
Управление количеством предварительных загрузок InnoDB
Увеличение имеющегося числа потоков фонового режима
Управление производительностью ввода/ вывода InnoDB в фоновом режиме
Получение преимуществ от ЦПУ с множеством ядер
Предотвращение пунктуальных операций
Настройка общего числа и размера экземпляров
Буферный пул InnoDB
Кэширование потока
Пример 1 - когда MySQL использует более 100% ЦПУ
Как выявлять высокую загрузку процессора MySQL
Исправление загруженности ЦПУ
Как предотвращать загруженность ЦПУ со стороны MySQL
Пример 2 - когда MySQL выполняет дисковую подкачку
Хитрости и технические приёмы
Выводы
Глава 7. Групповые репликации в MySQL 8.0
Высокая доступность и её требования
Масштабирование
Репликация
Групповая репликация
Примеры групповой репликации
Эластичная репликация
Черепки высокой доступности
Альтернатива хозяину - подчинённые репликации
Автономные системы
Обзор репликации базы данных MySQL
Асинхронные репликации
Полу- асинхронные репликации
Отложенные репликации
Репликации на основе идентификатора глобальной транзакции
Репликации со множеством источников
Архитектура групповой репликации MySQL
Группа
Записываемый набор
Как работает взаимодействие групп
Процесс сертификации
Запрашиваемый для доставки объём
Выявление отказа
Расчленение сетевой среды
Сопоставление обычной блокировки и оптимистичной блокировки
Правило выигрыша распределённой первой фиксации
Тёмная сторона оптимистичной блокировки
Режимы групповой репликации
Режим единственного ведущего
Множество ведущих
Требования групповой репликации
Настройка самого сервера
Настройка групповой репликации
Мониторинг групповой репликации
Replication_group_members
replication_group_member_stats
Replication_connection_status
Replication_applier_status
Состояние сервера
Ограничения групповой репликации
Безопасность групповой репликации
Белый список IP адресов
SSL
VPN
Операции в группе реального времени
Изменение имеющегося режима группы
Регулировка восстановления
Сочетание версий групп репликаций
Регулировка производительности
Сжатие сообщения
Управление потоком
Выводы
Глава 8. Кластер InnoDB в MySQL 8.0
Что из себя представляет кластер InnoDB?
Требования кластера InnoDB
Установка оболочки MySQL
Как применять оболочку MySQL
Установка кластера InnoDB
Кластер InnoDB MySQL для среды песочницы
Кластер InnoDB в промышленной среде
Настройка установок маршрутизатора
Управление кластерами
Получение сведений о кластере
Удаление экземпляров из кластера
Добавление экземпляров в кластер
Восстановление кластера после утраты кворума
Перезагрузка кластера после существенного выхода из строя
Повторное сканирование кластера
Проверка состояний экземпляра
Разложение кластера InnoDB
Ограничения кластера InnoDB
Механизмы хранения
Настройка механизма хранения
Механизм хранения MyISAM
Механизм хранения MEMORY
Механизм хранения CSV
Механизм хранения ARCHIVE
Механизм хранения BLACKHOLE
Механизм хранения MERGE
Механизм хранения FEDERATED
Механизм InnoDB
Миграция с репликации хозяин - подчинённый к кластеру InnoDD MySQL
Выводы
Глава 9. Мониторинг ваших больших распределённых баз данных
MONyog
За
Против
Следствие
Datadog
За
Против
Следствие
Navicat
За
Против
Следствие
Сопоставление инструментов мониторинга
Общая стоимость
За
Против
Топовые клиенты
Хитрости и технические приёмы
Выводы
Глава 10. Аутентификация и управление безопасностью в MySQL 8.0
Функциональность безопасности MySQL 8.0
Предоставляемые MySQL 8.0 права
Где хранятся права в MySQL 8.0?
Отличия между динамическими и статическими правами
Создание ролей и пользователей в MySQL 8.0
Отображение назначенных ролей при помощи SHOW GRANTS
Устранение проблем со связью
Хитрости и технические приёмы
Ограничение или запрещение удалённого доступа к основному серверу
Запрет применения LOCAL INFILE
Изменение имени пользователя и пароля для root
Выводы
Глава 11. Продвинутые хитрости и технические приёмы производительности MySQL
Хитрости/ наилучшая практика
Оптимизация ваших запросов для имеющегося кэширования запроса
EXPLAIN ваших запросов SELECT
LIMIT 1 при получении уникальной строки
Индексация полей поиска
Индексация стратегий для Joins
Избегаем SELECT * и COUNT *
Почти всегда иметь поле некого идентификатора
Применение ENUM над VARCHAR
Использование предварительно подготовленных операторов когда и если это возможно
Расщепление больших запросов DELETE или INSERT
Избегаем триггера удаления
Технические приёмы
Может ли мой MySQL выполнять запросы на миллиардах строк?
Является ли InnoDB правильным выбором для многих миллиардов строк?
Насколько большой может быть некая база данных MySQL прежде чем наступит деградация производительности?
Почему MySQL может быть медленной с большими таблицами?
Является ли MySQL наилучшим решением для обработки blob?
Выводы
Указатель

 Предисловие

MySQL применяют для доступа к своим корпоративным базам данных по всему миру как мелкие так и крупные компании. Advanced MySQL 8 станет вашим универсальным руководством по внедрению и управлению крупномасштабными распределёнными кластерами MySQL для работы с веб сайтами больших объёмов, системами корпоративного уровня и коробочного программного обеспечения.

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

Этак книга подойдёт администраторам баз данных, архитекторам данных и всем, кото хочет получить развитие в разработке приложений баз данных в среде MySQL.

 Что охватывает эта книга

Глава 1. Введение проводит по тем изменениям, которые имели место в MySQL 8 по сравнению с её предыдущими версиями. Мы также изучим что именно делает MySQL 8 базой данных следующего поколения, а также обсудим её проектирование на уровне архитектуры.

Глава 2. Новые свойства MySQL 8 не только рассматривает все новые, привлекательные свойства MySQL 8.0, но также рассматривает устаревшие и удалённые функциональности.

Глава 3. Индексация ваших данных для Высокой производительности, объясняет как оптимизировать производительность MySQL путём применения индексов и планов Исполнения запросов на примерах. Оптимизация вовлекает хорошее понимание Оптимизатора MySQL, стратегии индексации и основательные знания того как индексация и запросы работают сообща.

Глава 4. Современные технологии данных для Больших запросов, объясняет как анализировать и оптимизировать большие запросы MySQL, а также охватывает различные советы и технические приёмы. Мы также рассмотрим основное понятие секционирования ваших данных и глубже погрузимся в него.

Глава 5. Словарь данных MySQL в MySQL 8.0, поясняет как получать оптимальные настройки сервера MySQL 8.0 и как работать со словарём данных MySQL, а также охватывает имеющиеся ограничения словаря данных.

Глава 6. Установки сервера MySQL, поясняет как достигать оптимальной настройки сервера MySQL 8.0. Мы также поработаем в двумя примерами, которые сосредоточены на тех сценариях, когда MySQL потребляет более 100% ЦПУ и когда MySQL пользуется дисковой подкачкой.

Глава 7. Групповые репликации в MySQL 8.0 сосредотачивается на важной теме: высокой доступности. С помощью данной функциональности мы обладаем возможностью создавать очень мощную, надёжную и обладающую высокой доступностью инфраструктуру репликаций.

Глава 8. Кластер InnoDB в MySQL 8.0 объясняет чем является кластер InnoDB и его требования. Мы изучим как его создавать и как им управлять. Мы изучим ограничения InnoDB и ознакомимся с их механизмами хранения.

Глава 9. Мониторинг ваших больших распределённых баз данных объясняет и сопоставляет три топовых инструментария мониторинга для больших распределённых баз данных, которыми являются MONYOG, Datadog и Navicat.

Глава 10. Аутентификация и управление безопасностью в MySQL 8.0 ознакомит с различиями между динамическими и статическими полномочиями, а также с неким обзором таблицы предоставления полномочий. Мы увидим как выявлять и устранять проблемы соединений и поделимся некоторыми хитростями и техническими приёмами.

Глава 11. Продвинутые хитрости и технические приёмы производительности MySQL охватывает примеры шаблонов и н их противоположности для MySQL и различные способы расширения и оптимизации имеющейся производительности некоей базы данных следуя решениям для наиболее часто задаваемых вопросов.

 Как получить максимальную отдачу от этой книги

Требуется искренний интерес к SQL, который поспособствует освоению MySQL 8. Если вы увлечены анализом, оптимизацией и изощрёнными запросами данных, вам станет намного проще перейти на следующий уровень!

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

 Загрузка цветных изображений этой книги

Мы дополнительно снабжаем вас файлом PDF, который содержит цветные изображения экранных снимков/ схем, использованных в данной книге. Цветные изображения помогут вам лучше понять изменения в выводе. Вы можете загрузить этот файл по адресу: http://www.packtpub.com/sites/default/files/downloads/9781788834445_ColorImages.pdf.

 Соглашения

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

CodeInText указывает кодовые слова в тексте, имена таблиц базы данных, имена папок, имена файлов, расширения файлов, имена путей, модели URL-адресов, ввод пользователя, и регулировки Twitter. Вот некий пример: "Смонтируйте или выгрузите файл образа диска WebStorm-10*.dmg как другой диск в вашей системе.".

Блок кода устанавливается следующим образом:


# server configuration
 datadir=C:/mysql-8.0.13/data/server1
 basedir=C:/mysql-8.0.13/
 	   

Любой ввод командной строки или её вывод записываются следующим образом:


mysql> select * from mysql.plugin;
 	   

Жирно: указывает новый термин, важное слово которые вы видите на экране, например, в меню или блоках диалогов появляются именно так. Вот пример: "Выберите System info из панели Administration.".

[Замечание]Замечание

Предостережения или важные замечания появляются в блоках подобных этому.

[Совет]Совет

Советы и ловкие приёмы возникают таким образом.

 Будьте на связи

Обращения наших читателей всегда приветствуются.

Обычная обратная связь: Пошлите электронное письмо на адрес feedback@packtpub.com с упоминанием заголовка книги в теме вашего сообщения. Если у вас имеются вопросы относительно любых сторон данной книги, обратитесь, пожалуйста, по адресу questions@packtpub.com.

Ошибки: Хотя мы и предприняли все меры чтобы гарантировать точность содержимого, ошибки могут иметь место. Если вы обнаружили ошибку в данной книге, мы будем вам признательны если вы сообщите нам о ней. Посетите, пожалуйста, www.packtpub.com/submit-errata, выбрав вашу книгу, кликнув на ссылку Errata Submission Form, и заполнив подробности найденной вами ошибки.

Пиратство: Если вы столкнётесь с какой-либо незаконной копией наших работ в любой форме в Интернете, пожалуйста, предоставьте нам сразу адрес местонахождения или имя веб-сайта, чтобы мы могли принять меры. Пожалуйста, обратитесь по адресу copyright@packtpub.com со ссылкой на материалы содержащие признаки нарушения авторских прав. {Прим. пер.: Согласно закону об авторском праве РФ, авторские права на перевод принадлежат авторам этого перевода. Данным переводом, по нашему мнению, мы служим популяризации основных стратегических направлений развития тем Packt. В случае наличия конструктивных предложений, готовы к тесному сотрудничеству.}.

Если вы желаете стать нашим автором: Если у вас существует тема, в которой у вас имеется опыт и вы заинтересованы либо в написании, либо во вкладе в книгу, обратитесь к руководству по адресу authors.packtpub.com.

 Отзывы

Оставляйте, пожалуйста, отзывы. Если вы прочли и воспользовались данной книгой, почему бы вам не оставить отзыв на том сайте, на котором вы её приобрели? Потенциальные читатели затем смогут увидеть и применить ваше беспристрастное суждение чтобы принять решение о приобретении, мы в Packt сможем понять что вы думаете о нашем продукте, а наши авторы увидят обратную связь относительно своей книги. Мы заранее благодарим вас!

Для получения дополнительной информации о Packt посетите, пожалуйста packtpub.com.