Mysql — это просто!

Введение

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

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

  • драйвер JDBC для MySQL (MySQL Connector/J);
  • драйвер, используемый по умолчанию в PHP MySQL для master-slave (mysqlnd-ms).

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

Однако при использовании этих драйверов с кластером Galera для MySQL или MariaDB есть ряд проблем, так как они не обладают расширенной информацией о состоянии Galera. Например, узел-донор Galera может находиться в режиме «только для чтения» , когда помогает другому узлу повторно синхронизироваться (если для передачи снимка состояния (SST) используется mysqldump или rsync), или в случае split brain он может быть в состоянии Non-Primary. То есть, существуют случаи, когда даже драйверы с поддержкой пуллинга и балансировки не предоставляют необходимый уровень поддержки кластера.

Часто используемое альтернативное решение заключается в применении балансировщика нагрузки между клиентами и кластером базы данных. Из этой статьи вы узнаете, как с помощью ClusterControl развернуть, настроить и управлять балансировкой нагрузки MySQL с использованием HAProxy.

Выборка данных из таблицы

Чтобы увидеть все записи таблицы, создайте следующий запрос:

mysql> select * from employee;
+-----+--------+------------+--------+
| id  | name   | dept       | salary |
+-----+--------+------------+--------+
| 100 | Thomas | Sales      |   5000 |
| 200 | Jason  | Technology |   5500 |
| 300 | Mayla  | Technology |   7000 |
| 400 | Nisha  | Marketing  |   9500 |
| 500 | Randy  | Technology |   6000 |
| 501 | Ritu   | Accounting |   NULL |
+-----+--------+------------+--------+
6 rows in set (0.00 sec)

Чтобы выбрать данные только из некоторых столбцов, нужно указать их имена в select-запросе:

mysql> select name, dept from employee;

Следующий select-запрос выберет записи таблицы, в которых одновременно выполняется два условия: департамент “Technology”, и оклад не менее 6000.

mysql> select * from employee where dept = 'Technology' and salary >= 6000;
+-----+--------+------------+--------+
| id  | name   | dept       | salary |
+-----+--------+------------+--------+
| 300 | Mayla  | Technology |   7000 |
| 500 | Randy  | Technology |   6000 |
+-----+--------+------------+--------+
2 rows in set (0.00 sec)

Разумеется, чтобы узнать про MySQL получше, стоит почитать какую-нибудь хорошую книгу, например эту: High Performance MySQL by Baron Schwartz, Peter Zaitsev, Vadim Tkachenko.

Сводка

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

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

Большие объемы данных

Слишком много — это сколько? Мы проектировали (и управляли) — или помогали проектировать (и управлять) — множество баз данных размером от 3 до 5 Тбайт или даже больше, работавших с подсистемой InnoDB. И это на одном сервере, без сегментирования. Это вполне осуществимо, но нужно с умом подойти к выбору обо­рудования, а также запланировать для сервера возможность справляться с большим объемом операций ввода/вывода. При таких размерах крах MyISAM становится настоящей катастрофой.

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

Вас заинтересует / Intresting for you:

InnoDB: подсистема хранения ба…

935 просмотров

Ирина Светлова

Mon, 07 Jan 2019, 06:34:07

MyISAM: подсистема хранения ба…

434 просмотров

Ирина Светлова

Mon, 07 Jan 2019, 13:15:48

Модель развития базы данных My…

397 просмотров

Ирина Светлова

Thu, 10 Jan 2019, 12:29:03

Обзор версий MySQL — какой рел…

1290 просмотров

Ирина Светлова

Thu, 10 Jan 2019, 08:02:16

Author: Ирина Светлова

Другие статьи автора:

Основные понятия языка SQL

По словам Эндрю Тейлора (Andrew Taylor), разработавшего язык SQL, название этого языка не является сокращением от Structured Query Language (или от чего-то подобного), хотя многие считают, что так оно и есть. Язык SQL лежит в основе более строгого и более общего метода хранения данных по сравнению с предыдущим стандартом организации баз данных в стиле DBM, который основан на использовании плоских файлов.

Язык SQL определен стандартами ANSI (American National Standards Institute) и ECMA (European Computer Manufacturer’s Association); обе эти организации по стандартизации являются международно признанными. Но следует учитывать, что в общих рекомендациях стандартов SQL наблюдаются заметные различия, касающиеся программных продуктов коммерческих компаний, с одной стороны, и организаций, занимающихся разработкой баз данных с открытым исходным кодом, с другой. Например, за последние несколько лет наблюдалось стремительное развитие так называемых объектно-реляционных баз данных, а также программных продуктов SQL, специально предназначенных для рынка веб. Перечень баз данных, которые могут применяться в сочетании с системой PHP, чрезвычайно велик, поэтому при выборе наиболее подходящей базы данных необходимо руководствоваться определенными принципами.

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

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

По существу, база данных SQL имеет очень простую логическую структуру. Каждая конкретная инсталляция программного обеспечения SQL обычно может состоять из нескольких баз данных. Например, одна БД может применяться для хранения данных о заказчиках, а другая — содержать данные о товарах. (Возникает определенная сложность, связанная с тем, что сам сервер SQL и коллекции поддерживаемых этим сервером таблиц обычно принято обозначать общим термином база данных.) Каждая база данных содержит несколько таблиц, каждая таблица состоит из тщательно определенных столбцов, а каждая позиция в таблице может рассматриваться как внесенная в таблицу запись, или строка.

Любой сервер SQL поддерживает четыре так называемых оператора манипулирования данными, и в целом эти операторы лежат в основе подавляющего большинства операций, выполняемых с реляционной базой данных. Этими четырьмя основными операторами базы данных являются SELECT, INSERT, UPDATE и DELETE. Операторы SQL, называемые также командами — очень удобны и позволяют выполнять практически все необходимые действия в базе данных.

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

Для того чтобы добавить или удалить столбцы, уничтожить целую базу данных, не оставив и следа, или создать новую базу данных, необходимо применить другие команды, такие как DROP, ALTER и CREATE.

Все эти операторы мы подробно рассмотрим в следующей статье, посвященной командам MySQL.

Курс MySQL с нуля

8%

Следующий урок

2 ответа

9

Лучший ответ

1) Правильно. Все данные node не содержат полную копию данных кластера, но каждый бит данных хранится как минимум на двух узлах.

2) По существу правильно. MySQL Cluster поддерживает распределенные транзакции.

3) Когда вертикальное масштабирование больше невозможно, а репликация становится непрактичной:)

Как и было обещано, некоторые рекомендуемые показания:

  • Настройка многоканальной циклической репликации с помощью MySQL (простой учебник)
  • Циклическая репликация в MySQL (предупреждения более высокого уровня о конфликтах)

  • MySQL Cluster Multi-Computer How-To (пошаговое руководство, оно предполагает несколько физических машин, но вы может запустить ваш тест со всеми процессами, запущенными на одном компьютере, следуя этим инструкциям)

  • Блог эффективности MySQL является ссылкой в ​​этом поле

Ответ дал

03 авг. 2013, в 03:51
Поделиться

2

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

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

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

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

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

3- > RandomSeed является правильным. вы чувствуете потребность в кластере, когда ваша репликация становится непрактичной, означает, что если вы используете главный сервер для записи и ведомого для чтения, то в какое-то время, когда трафик становится огромным, так что сервер не сможет работать плавно, тогда вы будете почувствовать необходимость кластеризации. просто ускорить весь процесс.
это не единственный случай, это всего лишь один из сценариев, это всего лишь случай.

надеюсь, что это поможет вам!

Ответ дал

14 авг. 2013, в 10:54
Поделиться

Ещё вопросы

  • 272Примеры транзакций PHP + MySQL
  • 839SQL выбирает только столбцы с максимальным значением в столбце
  • 562Код ошибки MySQL: 1175 во время ОБНОВЛЕНИЯ в MySQL Workbench
  • 473MySQL Error 1093 — Не удается указать целевую таблицу для обновления в предложении FROM
  • 403Ошибка MySQL 1153 — Получен пакет, размер которого превышает байты max_allowed_packet
  • 334Удалить с Join в MySQL
  • 312Настройка внешних ключей в phpMyAdmin?
  • 292Как выбрать n-ую строку в таблице базы данных SQL?
  • 245MySQL — Как выбрать данные по длине строки
  • 235Получить текущее значение AUTO_INCREMENT для любой таблицы

Версии

не MySQL версии кластера номера больше не привязана к серверу MySQL — например, самая последняя версия MySQL Cluster 7.5, даже если она основана на / содержит серверный компонент с MySQL 5.7.

Более высокие версии MySQL Cluster включают все функции нижних версий, а также некоторые новые функции.

Более старые версии (уже не в разработке):

  • Ndb включены в MySQL 5.1.x исходного дерева
  • MySQL Cluster 6.2 на основе MySQL 5.1.A
Во-первых «телекоммуникационной» или «операторского класса издание» релиз. Поддержка 255 узлов, онлайн таблицы изменяющих, задержка репликации и улучшения пропускной способности и т.д.

MySQL Cluster 6.3 на основе MySQL 5.1

Включает в себя сжатую резервную копию + LCP, поддержка репликации круговое обнаружение конфликтов / разрешение, оптимизация таблицы и т.д.

MySQL Cluster 7.0 на основе MySQL 5.1.C

Включает в себя многопоточные узлах данных (ndbmtd), транзакционный DDL, поддержка Windows.

MySQL Cluster 7.1 на основе MySQL 5.1.D

Включает ClusterJ и ClusterJPA разъемы

В настоящее время доступны версии:

MySQL Cluster 7.2 на основе MySQL 5.5

Включает в себя адаптивный запросе Локализация (толчки РЕГИСТРИРУЙТЕСЬ операции вниз к узлам данных), Memcached API, упрощена активные / активные Географические репликации, мульти-сайт кластеризации, улучшение масштабируемости узла данных, консолидированные привилегии пользователя.

MySQL Cluster 7.3 на основе MySQL 5.6

Включает поддержку внешних ключей ограничений, Node.js / JavaScript API и авто-инсталлятора.

MySQL Cluster 7.4 на основе MySQL 5.6

Включает в себя усиленное Обнаружение и разрешение конфликтов, улучшение времени перезапуска узла, новый API событий.

MySQL Cluster 7.5 на основе MySQL 5.7

Включает поддержку для больших наборов данных (более чем 128TB на узел), улучшенная масштабируемость чтения через прочитанных оптимизированные таблицы, улучшена поддержка SQL.

MySQL Cluster 8.0 на основе MySQL 8.0

Доступ к MySQL из командной строки

Работать с MySQL можно тремя основными способами: используя командную строку, используя веб-интерфейс наподобие phpMyAdmin и используя такой язык программирования, как PHP. Третий из перечисленных способов будет рассмотрен в последующих статьях, а сейчас давайте рассмотрим первые два способа.

Если у вас в соответствии с инструкциями, изложенными в статье Установка и настройка OpenServer, установлен WAMP-сервер OpenServer, то доступ к исполняемой программе MySQL можно получить из следующего каталога:

Вместо MySQL-5.7-x64 нужно подставить версию, указанную в настройках OpenServer во вкладке «Модули».

Нужно открыть программу «Командная строка» и перейти в этот каталог. Делается это при помощи команды cd ПУТЬ_К_НУЖНОЙ_ПАПКЕ:

После этого нужно запустить программу mysql.exe в этом каталоге, передав её специальный параметр. Для этого в командной строке теперь нужно выполнить команду:

В результате запустится MySQL-клиент. Он подключён к MySQL-серверу, который был запущен при старте OpenServer-a.

Если это не приведет к желаемому результату и будет выдано сообщение об ошибке подключения к серверу MySQL «Can’t connect to MySQL server on ‘localhost’», убедитесь, что OpenServer запущен и в модулях указан MySQL.

Параметр -u расшифровывается как user. То есть это флажок для указания пользователя, под которым нужно подключиться к серверу. root — это самый главный пользователь в MySQL. Он создаётся при установке сервера и по умолчанию у него нет пароля.

Но вернёмся к нашему терминалу. Через этот консольный клиент мы можем отправлять различные команды серверу. Давайте выполним команду, которая выводит все базы данных, созданные на этом сервере.

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

Вставка записей в таблицу

Чтобы вставить данные в таблицу, нужно воспользоваться командами insert. При вставке данных вам не нужно указывать имена столбцов таблицы. Просто введите необходимые значения соответствующих полей в той же последовательности, в которой указаны эти поля при создании таблицы:

insert into employee values(100,'Thomas','Sales',5000);
insert into employee values(200,'Jason','Technology',5500);
insert into employee values(300,'Mayla','Technology',7000);
insert into employee values(400,'Nisha','Marketing',9500);
insert into employee values(500,'Randy','Technology',6000);

Чтобы вставить значения в какие-то определенные столбцы, нужно указывать имена этих столбцов, например вот так:

mysql> insert into employee(name,dept) values('Ritu', 'Accounting');
Query OK, 1 row affected (0.01 sec)

Заметка: Теперь вы можете загружать данные в базу MySQL из текстового файла, с помощью команды mysqlimport.

Первичные ключи

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

Первичный ключ определяется с помощью оператора PRIMARY KEY во время создания таблицы. Если используется несколько столбцов, они разделяются запятой:

PRIMARY KEY (имя_столбца, имя_столбца ... )

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

CREATE TABLE product 
( 
prod_code INT NOT NULL AUTO_INCREMENT, 
prod_name char(30) NOT NULL, 
prod_desc char(60) NULL, 
  PRIMARY KEY (prod_code, prod_name) 
) ENGINE=InnoDB;

Таблицы только для чтения или преимущественно для чтения

Таблицы с данными, которые используются для создания каталога или списка (вакансии, аукционы, недвижимость и т. п.), обычно характеризуются тем, что считывание из них происходит значительно чаще, чем запись в них. С такими таблицами хорошо применять MyISAM — если не думать о том, что происходит при ее сбое

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

(MyISAM просто записывает данные в память и пред­полагает, что операционная система сбросит их на диск позже.)

Не стоит слепо доверять народной мудрости сообщества, которая гласит: «MyISAM быстрее, чем InnoDB». Категоричность этого утверждения спорна. Мы можем пере­числить десятки ситуаций, когда InnoDB на голову опережает MyISAM, особенно в приложениях, где применяются кластерные индексы или данные целиком разме­щаются в памяти. По мере дальнейшего чтения вы начнете понимать, какие факторы влияют на производительность подсистемы хранения (размер данных, требуемое количество операций ввода/вывода, первичные ключи и вторичные индексы и т. п.) и какие из них более значимы в вашем приложении.

Проектируя подобные системы, мы используем InnoDB. Сначала MyISAM может произвести впечатление хорошо работающей подсистемы, но при большой нагруз­ке она просто рухнет. Все будет заблокировано, и при сбое сервера вы потеряете данные.

Немного истории

Percona XtraDB — это ответвление (fork) изначального MySQL, созданного Монти Видениусом. В какой-то момент Видениус продал свой проект, и это сильно затормозило развитие проекта. Так, как проект обладал спорным качеством когда и был (с другой стороны) очень популярен — появилось огромное количество патчей, которые расширяли, углубляли и ускоряли кодовую базу. Самыми известным были набор патчей от google и набор патчей от Петра Зайцева. Последний создал компанию Percona, в рамках которой оптимизирует MySQL и консультирует пользователей этой системы. Он же выпускает свой форк MySQL, в котором собирает удачно работающие патчи. Как следствие — percona sql server с одной стороны надежнее, с другой — функциональнее, да и просто быстрее. В определенный момент был выпущен специальный дистрибутив XtraDB Cluster с набором библиотек Gallera Cluster — очень удачного и производительного решения для кластеризации MySQL

Как создавать (вставлять) и обновлять записи

В предыдущих разделах мы обсудили, как настроить соединение с MySQL и выбрать базу данных для работы. Теперь мы рассмотрим, как выполнять различные типы запросов по выбранной базе данных. Во-первых, давайте посмотрим, как вставлять и обновлять записи.

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

Выполнение вышеуказанной команды в вашей базе данных MySQL должно создать таблицу .

Как создавать записи

Чтобы все было просто, мы инициализируем значения, которые необходимо вставить в таблицу employee в начале скрипта. Тем не менее, в большинстве случаев это происходит от ввода пользователем переменных , представленных с использованием формы.

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

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

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

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

Как обновить записи

В предыдущем разделе мы обсудили, как вы можете вставлять новые записи в таблицу MySQL. В этом разделе мы увидим, как вы можете обновить запись, которая уже существует в таблице.

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

Как вы можете видеть в приведенном выше примере, мы хотим обновить столбец таблицы , где равен 1. Это очень похоже на запрос вставки, за исключением того, что мы используем вместо .

Простой пример использования MySQL++

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

#include 
#include 
#include 

using namespace std;

int main( int argc, char *argv[] )
{
  // установление соединения с тестовой базой данных
  mysqlpp::Connection con( false );
  if( con.connect( "test_db", "localhost", "tdb_user", "tdb_password" ) )
  {
    // выполнение запроса и вывод полученных результатов
    mysqlpp::Query query = con.query( "select name from dvd" );
    if( mysqlpp::StoreQueryResult res = query.store() )
    {
      cout 

Для обеспечения работы примера необходимо создать базу данных MySQL с именем test_db, содержащую таблицу с именем dvd. Эта таблица может иметь, например, следующую структуру:

name   VARCHAR(50)
genre  TEXT(70)
price  REAL
bought DATE

После того как тестовая база данных test_db создана, администратор MySQL должен создать пользователя с правами работы в ней. Имя и пароль для этого пользователя уже были указаны в приведённом выше исходном коде примера.

CREATE USER tdb_user@localhost IDENTIFIEDBY 'tdb_password';
GRANT ALL PRIVILEGES ON test_db.* TO tdb_user@localhost;

После этого пользователь tdb_user, подключившийся к базе данных test_db на локальном хосте, может создать в ней ранее описанную таблицу dvd и любые другие таблицы для тестирования, вносить изменения в эти таблицы, удалять их и производить прочие операции.

Что касается самой программы, то она запрашивает только поле имён (name) из таблицы dvd, и из полученного набора результатов res последовательно выводит все строки (названия DVD). Пример очень простой, но в нём проиллюстрированы три из четырёх этапов, упомянутых в начале данной статьи. О четвёртом этапе — обработке исключений — речь пойдёт в одной из следующих статей цикла.

Что такое MySQL++

MySQL++ — это специализированная библиотека так называемых «обёрточных» (wrapper) методов для прикладного программного интерфейса C API для СУБД MySQL. Главная цель этой библиотеки — сделать работу с SQL-запросами такой же простой, как работа с STL-контейнерами.

Самую последнюю версию библиотеки MySQL++ можно найти на официальном Web-сайте. Тем не менее, чтобы избежать дополнительных сложностей, лучше обратиться к репозиторию пакетов для вашего дистрибутива.

1.1. Немного истории

В 1998 г. Кевин Аткинсон начал разработку библиотеки, которая по его первоначальному замыслу обеспечивала бы выполнение SQL-запросов и обработку их результатов без привязки к какой-либо конкретной СУБД. Это было отражено даже в оригинальном названии — SQL++. Все версии, предшествующие 1.0, являются плодом индивидуальной работы Кевина.

В 1999 г. библиотекой занялась компания MySQL AB. Сначала некоторую работу проделал Майкл «Монти» Видениус , затем он передал полномочия другому сотруднику MySQL AB Синише Миливоевичу . Были выпущены версии 1.0 и 1.1, после чего Аткинсон официально передал все функции сопровождения библиотеки в руки Миливоевича и полностью устранился от какого бы то ни было участия в данном проекте. Миливоевич довёл библиотеку до версии 1.7.9, которая была выпущена в середине 2001 г. К этому моменту стала очевидной невозможность реализации универсальной библиотеки SQL-запросов, независимой от конкретных реализаций СУБД. Ориентация на MySQL стала неизбежной.

После выпуска версии 1.7.9 в работе над MySQL наступил период некоторого застоя, который продолжался три года, до августа 2004 г., когда ситуацию под контроль взял Уоррен Янг . Уоррен сразу же выпустил версию 1.7.10, устранил все проблемы с компиляцией при использовании GCC, исправил большое количество ошибок, добавил новые возможности. В общем, как говорится, «процесс пошёл»…

В данной статье я рассматриваю версию 3.0.9 библиотеки MySQL++. На официальном Web-сайте эта версия объявлена как «последняя стабильная».

Репликация и балансировка нагрузки

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

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

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

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

послесловие

Не смотря на то, что данное решение кажется “идеальным решением”, у него есть и слабые стороны. На всякий случай, опишу их:

  • Ведение кластеризации требует накладных расходов. Они очень незначительны (по моим замерам не получалось более 2% от базовой производительности сервера). Частично это нивелируется тем, что Percona быстрее, чем штатный MySQL, частично — тем, что мы используем балансировку нагрузки. Однако не упомянуть об этом было бы нечестно. Накладные расходы растут с увеличением количества узлов в кластере.
  • Percona Xtradb cluster крайне плохо поддерживает таблицы типа MyISAM. Об этом даже пишут в официальной документации. Если вам нужен MyISAM — я очень не рекомендую использовать xtradb cluster
  • Данная конфигурация отвечает исключительно за репликацию, шардирование (разделение данных между серверами в зависимости от содержимого, например — пользователи с четным ID — на правый сервер, с нечетным — на левый) — тут отсутствует.

в случае аварии

Если что-то из описанного в статье работает не так, как описано (или не работает вовсе) — попробуйте проверить ваши последние шаги. Самые частые проблемы, с которыми сталкивался я, это:

Работа с MySQL через phpMyAdmin

Для управления базами данных и таблицами будет намного проще и быстрее использовать программу phpMyAdmin. Перед тем как вводить в адресную строку браузера следующую строку, нужно убедиться в том, что программа OpenServer уже запущена и, значит, база данных MySQL готова к работе:

Тут нас встретит вот такое красивое окошечко для входа в систему.

Также как и в случае с консольным приложением указываем пользователя root и оставляем пустым пароль. Жмём «войти».

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

А сейчас давайте нажмём на вкладку SQL и перейдём в окно, где можно напрямую писать запросы к СУБД MySQL, как это было бы в консоли:

В открывшемся окне введите всё тот же запрос:

Нажимаем кнопку «вперёд» и видим тот же результат, что и в случае с консольным приложением.

Заключение

MySQL без сомнений одна из самых важных и влиятельных программ, которые когда-либо появлялись в истории компьютеров. Мы выделили всего 20 советов, которые должен знать каждый. Но, чем больше вы будете использовать MySQL, тем больше будете находить своих «фишек» и, через какое-то время, создадите свой список из 20 самых полезных трюков .

MySQL настолько разнообразен и универсален, что даже когда кажется, что все возможное уже открыто и все трюки известны, появляется кто-нибудь и привносит что-то новое и полезное.

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

На официальном сайте MySQL запущены уроки, которые идут сразу после секции документации. Можете ознакомиться с уроками по MySQL 5.0. Вы можете заметить, что сайдбар слева содержит документацию и для предыдущих версий СУБД.

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

Данная публикация представляет собой перевод статьи «20 Tips and Tricks Any MySQL Database Developer Should Consider» , подготовленной дружной командой проекта Интернет-технологии.ру

Ссылка на основную публикацию