Mariadb versus mysql: compatibility

Введение в типы данных MariaDB

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

Самыми распространёнными типами данных в MariaDB являются следующие

Число:

  • BOOLEAN значение считается false (т.е. ложь), а любые другие данные расцениваются как true (т.е. истина).
  • TINYINT (tiny integer, т.е. буквально крошечное целое число), можно использовать как SIGNED (т.е. со знаком), тогда этим типом охватываются числа от -128 до 127, также можно использовать как UNSIGNED (т.е. без знака), тогда в охватываемый диапазон входят целые числа от 0 до 255.
  • SMALLINT (small integer, т.е. буквально маленькие целые числа), опять же, если используется с SIGNED, то этим типом охватывается диапазон от -32768 до 32767. Диапазон UNSIGNED от 0 до 65535.
  • MEDIUMINT (medium integer, т.е. буквально средние целые числа, с SIGNED это от -8388608 до 8388607. Без знака это диапазон от 0 до 16777215.
  • INT (integer, буквально целое число), если используется с SIGNED, охватывает диапазон от -2147483648 до 2147483647, и от 0 до 4294967295 в противном случае.
  • BIGINT (big integer, т.е. буквально большое целое число), со знаком это диапазон от -9223372036854775808 до 9223372036854775807. Без знака от 0 до 18446744073709551615.

Помните: В TINYINT, SMALLINT, MEDIUMINT, INT и BIGINT, SIGNED предполагается по умолчанию.

DOUBLE(M, D), где M – это общее количество цифр, а D – это количество цифр после десятичной точки, представляет собой числа с двойной точностью с плавающей запятой. Если указана UNSIGNED, отрицательные значения не разрешены.

Строка:

  • VARCHAR(M) представляет строку переменной длины, где M – это максимально разрешённая длина колонки в байтах (65,535 в теории). В большинстве случае количество байтов идентично количеству символов, кроме символов, которым может потребоваться до 3 байтов (utf8). Например, испанская буква ñ представляет собой один символ, но использует 2 байта.
  • TINYTEXT – это текстовые значения, с максимальной длиной 255 символов. Эффективная максимальная длина меньше, если значение содержит многобайтную кодировку.
  • TEXT(M) представляет колонку с максимальной длиной в 65,535 символов. Тем не менее, как и с VARCHAR(M), реальная максимальная длина уменьшается при сохранении многобайтных символов. Если M указана, создаётся самая маленькая колонка типа TEXT, которая достаточно большая для хранения значения длиной в M символов.
  • MEDIUMTEXT(M) и LONGTEXT(M) похожи на TEXT(M), разница только в максимально разрешённой длине значения, которая составляет, соответственно 16,777,215 и 4,294,967,295.

Дата и время:

  • DATE представляет дату в формате YYYY-MM-DD.
  • TIME представляет время в формате HH:MM:SS.sss (чисы, минуты, секунды и милисекунды).
  • DATETIME является комбинацией DATE и TIME в формате YYYY-MM-DD HH:MM:SS.
  • TIMESTAMP используется для определения момента, когда строка была добавлена или обновлена.

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

Например, имя человека может легко поместиться в VARCHAR(50), в то время как сообщение в блоге потребует тип TEXT (можно указать M под специфические нужды).

биография

Ранние года

Видениус учился в школе совместного обучения Бробан , которая сначала была объединена с Минервасколаном, а затем с Лённбекской гимназией. После окончания Хельсинкского технологического университета , Видениус начал работать в Tapio Laakso Oy в 1981 году. В 1985 году вместе с Алланом Ларссоном он основал TCX DataKonsult AB (шведскую компанию по хранению данных) . В 1995 году он начал писать первую версию базы данных MySQL с Дэвидом Аксмарком , выпущенную в 1996 году. Он является соавтором Справочного руководства MySQL , опубликованного O’Reilly в июне 2002 года; а в 2003 году он был удостоен награды «Финский предприниматель года в области программного обеспечения» .

До продажи MySQL AB компании Sun Microsystems в 2008 году он был главным техническим директором MySQL AB. После приобретения он оставался одной из главных сил, стоящих за продолжающейся разработкой MySQL.

MySQL продан Sun

Видениус продал MySQL компании Sun в январе 2008 года, заработав в 2008 году около 16,6 миллиона евро прироста капитала (16,8 миллиона евро совокупного дохода), что сделало его одним из 10 самых высокооплачиваемых сотрудников в Финляндии в том году.

После солнца

В 2008 году Видениус основал венчурную компанию OpenOcean с соучредителем MySQL Патриком Бэкманом и первыми советниками Томом Хенрикссоном и Ральфом Вальстеном.

5 февраля 2009 года он объявил, что покидает Sun, чтобы создать свою собственную компанию.

12 декабря 2009 г. Widenius попросил заказчиков MySQL лоббировать в Европейской комиссии (ЕК) вопрос о приобретении Oracle компанией Sun, сославшись на опасения по поводу потенциального контроля Oracle над MySQL; это привело к онлайн-кампании петиций под названием «Спасите MySQL».

После ухода из Sun он основал Monty Program AB и переделал MySQL в MariaDB , названную в честь своей младшей дочери Марии. Он включает в себя несколько патчей и плагинов, разработанных самой компанией или сообществом. Одним из этих плагинов является механизм хранения Aria, который был переименован из Maria, чтобы избежать путаницы с MariaDB . Monty Program AB объединилась с SkySQL , которая позже переименовала себя в MariaDB Corporation . Он также является техническим директором MariaDB Foundation , некоммерческой организации, отвечающей за продвижение, защиту и продвижение кодовой базы, сообщества и экосистемы MariaDB.

Альянс Open Database Alliance, также известный как ODBA, был основан в 2009 году программами Monty Program и Percona . Согласно первому объявлению, «Open Database Alliance будет включать в себя группу компаний, работающих вместе, чтобы предоставить программное обеспечение, поддержку и услуги для MariaDB, ответвления MySQL корпоративного уровня, разрабатываемого сообществом».

Соединение через SSH туннель

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

Подключение в Windows

В данной ОС соединение по SSH протоколу можно осуществить с помощью специальных программ для управления базами данных. Например, PuTTY (бесплатная программа) или SecureCRT (платное ПО, но с пробной версией на 30 дней).

Мы для работы выбрали PuTTY. Скачиваем установщик с официального сайта и устанавливаем приложение. Запускаем программу, затем переходим в раздел «Session». В поле «Host Name» вводим свой домен или указываем его IP-адрес.

Далее переходим в категорию «Connection», открываем вкладку «SSH», затем «Tunnels». В поле «Source Port» указываем значение 3306, в «Destination» вбиваем localhost:3306, потом жмем на кнопку «Add» для добавления порта в список. И только потом жмем кнопку «Open» для установления соединения с хостом.

Логин и пароль те же самые, которые используются для входа в панель управления. При подключении используем имя пользователя и пароль, выданные при создании базы данных. Адрес сервера — 127.0.0.1, порт для подключения 3306.

Предупреждаем, что если вы уже устанавливали сервер баз данных MySQL на своем компьютере, то соединение через порт 3306 будет недоступно. Надо будет указать другое значение, например 3307.

Подключение в Linux

В ОС Linux никакого дополнительного ПО устанавливать не придется, можно все провести через командную строку «Терминал». Перед тем как подключиться к MySQL удаленно, нужно создать SSH-туннель. Вводим вот такую команду:

ssh -L3306:localhost:3306 -n логин@site.com

Потом в конфигурационном файле MySQL потребуется изменить параметр, отвечающий за удаленное подключение. Открываем в «Терминале» файл, дав вот такую команду:

sudo nano /etc/mysql/my.cnf

Далее комментируем нужную нам строку. В итоге она должна выглядеть вот таким образом:

# bind-address = 127.0.0.1

Сохраняем изменения, потом перезапускаем MySQL вот такой командой:

sudo service mysql restart

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

GRANT ALL ON *.* TO имя_пользователя@127.0.0.1 IDENTIFIED BY 'пароль'

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

mysql -u имя_пользователя –h 127.0.0.1 –p

mysql -h наименование_хоста -u dbUser -p dbName

Как проверить соединение с базой данных MySQL

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

telnet 127.0.0.1 3306

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

Выбор, вставка, обновление и удаление рядов

Начнём с заполнения таблица AuthorsTBL. Почему? Нам нужно иметь значения AuthorID перед вставкой записей в BooksTBL.

Выполните следующий запрос к MariaDB:

INSERT INTO AuthorsTBL (AuthorName) VALUES ('Agatha Christie'), ('Stephen King'), ('Paulo Coelho');

Команда вставки строк в таблицу называется INSERT и имеет общий вид:

INSERT INTO имя_таблицы (имя_поля1, имя_поля2) VALUES ('значение_первого_поля', 'значение_второго_поля');

В результате этой команды была бы вставлена одна новая строка. За один раз можно вставить сразу несколько строк. Команда вставки нескольких строк имеет вид:

INSERT INTO имя_таблицы (имя_поля1, имя_поля2) VALUES ('значение первого поля в первой строке', 'значение второго поля в первой строке'), ('значение первого поля во второй строке', 'значение второго поля во второй строке');

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

INSERT INTO AuthorsTBL (AuthorID, AuthorName) VALUES ('1', 'Agatha Christie'), ('2', 'Stephen King'), ('3', 'Paulo Coelho');

Но поскольку в таблице AuthorsTBL при характеристике типа AuthorID был установлен флаг AUTO_INCREMENT, который означает автоматическую установку уникального номера, то мы смогли из нашей команды убрать информацию, относящуюся к AuthorID. СУБД всё сделала сама: сама заполнила эти поля значениями 1, 2, 3.

Чтобы в этом убедиться, давайте посмотрим на нашу таблицу командой SELECT:

SELECT * FROM AuthorsTBL;

Команда SELECT используется для получения (выбора) записей из таблицы.

Общий синтаксис команды:

SELECT поле1, поле2 FROM таблица WHERE условие;

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

SELECT AuthorID, AuthorName FROM AuthorsTBL;

Символ звёздочки (*) означает сразу все поля, т.е. вывод последней команды полностью идентичен  SELECT * FROM AuthorsTBL;

Можно указать (через запятую) любой набор полей по желанию:

SELECT AuthorName FROM AuthorsTBL;

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

SELECT * FROM AuthorsTBL WHERE AuthorName='Agatha Christie';

Теперь сделаем вставку (INSERT) записей в таблицу BooksTBL, мы будем использовать соответствующий AuthorID автора для каждой книги. Значение 1 в BookIsAvailable говорит о наличии книги, а 0 – об её отсутствии:

INSERT INTO BooksTBL (BookName, AuthorID, BookPrice, BookIsAvailable)
VALUES ('And Then There Were None', 1, 14.95, 1),
('The Man in the Brown Suit', 1, 23.99, 1),
('The Stand', 2, 35.99, 1),
('Pet Sematary', 2, 17.95, 0),
('The Green Mile', 2, 29.99, 1),
('The Alchemist', 3, 25, 1),
('By the River Piedra I Sat Down and Wept', 3, 18.95, 0);

Посмотрим содержимое таблицы BooksTBL:

SELECT * FROM BooksTBL;

Мы допустили ошибку, у книги The Alchemist должна быть цена 22.75. Для изменения данных в таблице используется команда UPDATE. Её общий синтаксис:

UPDATE таблица SET столбец=новое значение WHERE условие;

Для того, чтобы книги, у которой BookID равен 6 присвоить столбцу BookPrice новое значение 22.75 выполним следующую команду:

UPDATE BooksTBL SET BookPrice=22.75 WHERE BookID=6;

Проверим:

SELECT * FROM BooksTBL WHERE BookID=6;

Как можно убедиться, данные изменились:

При желании удалить запись (строку), можно воспользоваться командой DELETE. Синтаксис этой команды:

DELETE FROM таблица WHERE условие

Например, команда для удаления из таблицы BooksTBL строки, у которой значение поля столбца равно 6:

DELETE FROM BooksTBL WHERE BookID=6;

Не забывайте с командами UPDATE и DELETE использовать условие WHERE, поскольку без него можно удалить все строки в таблице или изменить значение столбца сразу для всех записей.

Conclusion

Percona sees healthy competition in the MySQL ecosystem. We support all databases in the ecosystem: MySQL, MariaDB Server and Percona Server for MySQL. Our focus is to provide alternatives to proprietary parts of open source software. Percona has a strong operations focus on compatibility, application scalability, high availability security, and observability. We also support many additional tools within the ecosystem and love integrating and contributing to open source code.

For example, Percona Monitoring and Management (PMM) includes many open source tools like Prometheus, Consul, Grafana, Orchestrator and more. We have made the de facto open source hot backup solution for MySQL, MariaDB Server and Percona Server for MySQL (called Percona XtraBackup). We continue to maintain and extend useful tools for database engineers and administrators in Percona Toolkit. We make Percona XtraDB Cluster safe for deployment out of the box. We have invested in a write-optimized storage engine, TokuDB, and now continue to work with making MyRocks better.

We look forward to supporting your deployments of MySQL or MariaDB Server, whichever option is right for you! If you need assistance on migrations between servers, or further information, don’t hesitate to contact your friendly Percona sales associate.

Storage engines

MariaDB supports more storage engines than MySQL. Said that, it’s not a matter of which database supports more storage engines, but rather which database supports the right storage engine for your requirements.

  • Supported storage engines on MariaDB: XtraDB, InnoDB, MariaDB ColumnStore, Aria, Archive, Blackhole, Cassandra Storage Engine, Connect, CSV, FederatedX, Memory storage engine, Merge, Mroonga, MyISAM, MyRocks, QQGraph, Sequence Storage Engine, SphinxSE, Spider, TokuDB.
  • Supported storage engines on MySQL — InnoDB, MyISAM, Memory, CSV, Archive, Blackhole, Merge, Federated, Example.

What’s different about MySQL & MariaDB

While MariaDB and MySQL are pretty similar, there are some key differences to keep in mind when choosing between them, including licensing, performance, and support.

Licensing model

Both tools are available as open source, though they have some differences when it comes to their licensing models: MariaDB uses the GPL License version 2, whereas MySQL uses a more nuanced licensing scheme. 

What this means in practice is that, if you have the need and skills, it’s easier to change the internals of MariaDB and to deploy it wherever you need. When it comes to MySQL, even though the product is also open source, you have to be more careful to avoid legal trouble if you decide to make modifications to the code to deploy or distribute it.

Performance

When MariaDB started as a project, its developers had two main goals in mind:

  1. To perfectly replace MySQL with a GPL license
  2. To offer better performance than MySQL

And they did a pretty good job achieving both.

Generally speaking, MariaDB shows improved speed when compared to MySQL. In particular, MariaDB offers better performance when it comes to views and handling flash storage through its RocksDB engine.

MariaDB also outperforms MySQL when it comes to replication.

Thread pool handling

MariaDB comes with a thread pool mechanism that allows it to handle up to 200,000 simultaneous connections. MySQL can only replicate this number in its enterprise edition.

Storage engines

One of the most celebrated features of MySQL is its ability to work with different data storage engines that can be chosen per table. Since this is a core feature of MySQL, MariaDB also has it, though it goes a couple of steps further by offering a wider array of options out of the box, which include the following:

  • Aria
  • XtraDB
  • MariaDB ColumnStore
  • RocksDB

You can see the full list of supported engines here.

Although these engines can be added to a standard MySQL installation, it can be a cumbersome procedure.

System versioned tables

System versioned tables are a feature unique to MariaDB that allows the storage and querying of historical data right in the database. This makes it really easy to compare current and old data.

Support

Last but not least, there’s the issue of support. While MySQL has a big corporation behind it, MariaDB has to rely on the community for growth and support. This means that MySQL has far more resources at its disposal, so new features and improvements can be released in shorter time frames. And if you need professional support, it will be easier to get it in a timely fashion if you base your applications on MySQL rather than MariaDB.

Since MariaDB and MySQL are compatible at a binary level, the same clients that work with one will do fine with the other. These include drivers such as, PDO, etc., so if you already have an application using MySQL, the migration to MariaDB should not be an issue.

2. Частота релизов

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

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

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

Возможности и функциональность

В целом MariaDB развивается быстрее и имеет больше возможностей. Эти возможности касаются оптимизации, улучшения работы с памятью, и много другого. Обычно, со временем, эти возможности переносятся в MySQL. Например, та же поддержка GIS появилась в MariaDB раньше, чем в MySQL. Среди прочего MariaDB имеет множество улучшений производительности Inodb, MyISAM и движка обработки запросов, поддерживает GIS, ликвидацию таблиц, виртуальные и динамические колонки, репликацию с несколькими источниками, роли и многое другое.

Но у MariaDB есть и свои минусы, она не поддерживает некоторые возможности, которые есть в MySQL. А именно, MariaDB несовместима с синтаксисом JSON MySQL, не поддерживаются плагины ngram, MeCab, MySQL X, а также пространства таблиц, которые позволяют присваивать данные нескольким таблицам одновременно. Но разработчики активно работают над исправлением недостатков.

Для тех, кого интересуют кластеры MySQL будет интересно то, что в MariaDB используется новая система репликации Galera, прием ее работа отличается от стандартного master-salve. Galera разрабатывается с 2007 года, но она никогда не включалась в официальную версию MySQL.

Performance & Benchmarking

Over the years, many performance benchmark tests were executed on both MySQL and MariaDB engines. We don’t believe there is one answer to the question «which is faster, MySQL or MariaDB?». It very much depends on the use case, the queries, the number of users and connections, and many other factors which should be considered.

These are the most recent benchmark tests we found online, which might provide some indication to which one performs better. Please make sure you read the details of each of the benchmark tests (how the benchmark was done, on which environment, which hardware, what was tested, what wasn’t tested, etc.).

  • MySQL 8.0 (InnoDB) and MariaDB 10.3.7 (MyRocks) benchmark test
  • MariaDB 10.1 and MySQL 5.7 performance on commodity hardware
  • MySQL 8.0 and MariaDB 10.3.5 performance and the UTF8 impact

Whichever major change you’re planning: migrating from one database type (or engine) to another, from one OS to another, from on-premise servers to the cloud, I believe you should make sure you run your own tests, plan your own database benchmark process and perform the relevant stress testing. These are a few books we found on Amazon that may help you plan your next benchmark process:

  • Database Benchmarking and Stress Testing: An Evidence-Based Approach to Decisions on Architecture and Technology — by Bert Scalzo
  • High Performance MySQL: Optimization, Backups, and Replication — Chapter 2 — by Baron Schwartz, Peter Zaitsev, Vadim Tkachenko

Факты о MySQL для начинающих

MySQL написан на языках программирования C и C++ и может использоваться более чем на 20 платформах, включая Mac, Windows, Linux и Unix.

MYSQL поддерживает большие базы данных с миллионами записей и целыми числами со знаком или без знака длиной 1, 2, 3, 4 и 8 байтов; Такие как FLOAT, DOUBLE, CHAR, VARCHAR, BINARY, VARBINARY, TEXT (STRING), BLOB, DATE, TIME, DATETIME, TIMESTAMP, YEAR, ENUM и пространственные типы OpenGIS. Также поддерживаются типы массивов фиксированной и переменной длины.

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

MySQL использует систему доступа, которая обеспечивает аутентификацию через хостинг-провайдера, и систему зашифрованных паролей для безопасности. Клиенты MySQL могут подключаться к серверу MySQL, используя различные протоколы, включая порты TCP/IP на любой платформе. MySQL также поддерживает несколько клиентов и утилит, программы командной строки и административные инструменты, такие как MySQL Workbench.

Расширения MySQL, также известные как разные версии, включают:

  • Drizzle  – это облегченная система управления базами данных с открытым исходным кодом, которая разрабатывается на основе MySQL 6.0; Однако он больше не используется.
  • MariaDB  – это популярная замена MySQL, разработанная сообществом с использованием API и команд MySQL. Percona Server с XtraDB – это расширенная версия MySQL, известная своей функцией горизонтальной масштабируемости.

Скачать MariaDB для Windows

MariaDB является бесплатной, настоятельно рекомендуется её скачивать с официального сайта. Страница для скачивания MariaDB: https://downloads.mariadb.org/

Вы увидите несколько серий – несколько мажорных версий программы. Если вам не нужна какая-то специфическая совместимость с MySQL, то просто выберите самую последнюю версию и нажмите кнопку с «Download»

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

Файлы Windows x86_64 – это 64-битные версии, а Windows x86 – 32-битные.

.zip – это портативные версии, которые нужно устанавливать самостоятельно, но которые дают полную свободу в тонкой подстройке. А .msi – это установщик для Windows.

В этой инструкции я покажу на примере работы с версией .zip.

На следующей странице достаточно нажать кнопку: «No thanks, just take me to the download»:

What is MariaDB

MariaDB had its first release in October 2009, with version 5.1.38 Beta, based on MySQL 5.1.38. It was a fork meant to “to ensure that the MySQL code base would be free forever”.

At the time of forking, the most common fear was that the acquisition was a hostile takeover with the goal of killing MySQL. That concern, at least partly, proved to be unfounded.

Again in 2009, Monty Program AB and Percona, a company providing premium MySQL services, established the Open Database Alliance. Their goal was “to unify all MySQL-related development and services, providing a solution to the fragmentation and uncertainty facing the communities, businesses and technical experts involved with MySQL.”

The idea was “to become the industry hub for the MySQL open source database, including MySQL and derivative code, binaries, training, support, and other enhancements for the MySQL community and partner ecosystem”

Looking back at it: it is possible that these steps have prevented a worse scenario for the famous database.

Рейтинг
( Пока оценок нет )
Понравилась статья? Поделиться с друзьями:
Ваша ОС
Добавить комментарий

;-) :| :x :twisted: :smile: :shock: :sad: :roll: :razz: :oops: :o :mrgreen: :lol: :idea: :grin: :evil: :cry: :cool: :arrow: :???: :?: :!: