MySQL

от Уикипедия, свободната енциклопедия
MySQL
Информация
РазработчикMySQL AB
Последна версия8.0.26
20 юли 2021
Операционна системамногоплатформена
ЛицензGPL или комерсиален лиценз
MySQL в Общомедия

MySQL е многопоточна, многопотребителска, SQL система за управление на бази данни (СУБД) с повече от шест милиона инсталации.[1]

MySQL AB разпространява MySQL като свободен софтуер под GNU General Public License (GPL), но също така под традиционните за комерсиален софтуер лицензи за случаи, когато използването е несъвместимо с GPL. Подобно разпространение е известно като двойно лицензиране.

MySQL се разработва, разпространява и поддържа от Шведската компания MySQL AB, която държи авторските права за голяма част от програмния код. Подобен е моделът на JBoss, а също и начинът, по който Free Software Foundation работи с авторските права по нейните проекти в отличие от Apache проекта, където софтуерът е обществено разработван, а авторските права за програмния код принадлежат на индивидуалните автори.

Компанията разработва и поддържа системата, продава поддръжка и сервизни договори, както и комерсиални лицензи за MySQL, и наема хора от целия свят, които работят съвместно с помощта на интернет. MySQL AB е основана от Давид Аксмарк, Алан Ларсон, и Михаел „Монти“ Видениус през 2001.

MySQL продава също и друга DBMS, MaxDB, която е с напълно различен код.

Достъпни са програмни интерфейси, позволяващи програми, написани на различни програмни езици да имат достъп до MySQL бази данни. Такива са: C, C++, C#, Delphi (чрез dbExpress), Eiffel, Smalltalk, Java (с директна поддръжка), Lisp, Perl, PHP, Python, Ruby, REALbasic (Mac), FreeBasic, и Tcl, като всеки от тях има специфичен програмен интерфейс. Интерфейс тип ODBC наречен MyODBC позволява на други програмни езици, които поддържат ODBC интерфейс да комуникират с MySQL база данни, например: ASP или Coldfusion. MySQL е написан основно на ANSI C.

Приложение[редактиране | редактиране на кода]

MySQL е популярна за интернет приложения като MediaWiki или Drupal и е база данни в LAMP, MAMP и WAMP платформи (Linux/Mac/Windows-Apache-MySQL-PHP/Perl/Python), и за софтуера с отворен код Bugzilla – приложение за проследяване на грешки. Нейната популярност като Интернет приложение е тясно свързана с популярността на PHP, като често, комбинирани с MySQL, са наречени Динамичното дуо. Лесно е да се намерят много източници, които ги комбинират в интернет статии или книги (PHP and MySQL for Dummies, PHP and MySQL Bible, Beginning PHP and MySQL, и други). В тези книги се твърди, че MySQL е по-лесен за изучаване от други бази данни. В пример от книгата за глупаци се посочва, че от MySQL може да се излезе с командите exit или quit, но това е вярно и за много други бази данни.

Администриране[редактиране | редактиране на кода]

За администриране на MySQL може да се използва включеното приложение работещо от Командна линия (командите: mysql и mysqladmin). Също достъпни за сваляне от интернет сайта на MySQL са GUI приложения за администриране: MySQL Administrator и MySQL Query Browser.

Широко разпространена и популярна алтернатива, написана на PHP, е софтуерът с отворен код phpMyAdmin.

Спецификация[редактиране | редактиране на кода]

Платформа[редактиране | редактиране на кода]

MySQL работи на много различни Платформи—включващи AIX, BSDi, FreeBSD, HP-UX, GNU/Linux, Mac OS X, NetBSD, Novell NetWare, OpenBSD, OS/2 Warp, QNX, SGI IRIX, Solaris, SunOS, SCO OpenServer, SCO UnixWare, Tru64, Windows 95, Windows 98, Windows ME, Windows NT, Windows 2000, Windows XP и други версии на Windows. MySQL е прехвърлена и на OpenVMS, достъпна от www.pi-net.dyndns.org.

Последна версия на продукта[редактиране | редактиране на кода]

От началото на 2009 г. MySQL предлага официална версия 5.1.32. Тя има следните възможности:

  • ANSI SQL 99 – частично, както и разширения
  • Междуплатформена поддръжка
  • Съхранени процедури
  • Тригери (triggers)
  • Указатели (Cursors)
  • Обновяеми изгледи (Views)
  • Пълна поддръжка на VARCHAR
  • INFORMATION_SCHEMA
  • Стриктен режим (Strict mode)
  • Поддържа X/Open XA разпределена обработка на трансакции (DTP); запазване в две стъпки (two phase commit) като част от това използвайки InnoDB на Oracle
  • Независими хранилища (storage engines) (MyISAM оптимизирано за висока скорост, InnoDB за трансакции и запазване на връзките (referential integrity), Archive за архивиране на данни в по-малко пространство и други)
  • Трансакции с InnoDB, BDB и Cluster хранилища; възстановителни точки (savepoints) използвайки InnoDB
  • Поддръжка на SSL
  • Кеширане на запитвания (Query caching)
  • Вложени заявки (sub selects)
  • Репликация от тип „Главен“ – „Подчинен“ (master/slave), много „подчинени“ и един „главен“, не поддържа автоматично много „главни“ за един „подчинен“ (multiple masters per slave).
  • Пълнотекстово индексиране и търсене с MyISAM
  • „Вграден“ вариант (embedded library)
  • Пълна поддръжка на Unicode
  • Съвместима с ACID при използване на InnoDB, BDB и Cluster хранилища
  • Клъстър – разпределена обработка от тип „без споделен ресурс“ Shared Nothing чрез MySQL Cluster

Бъдещи версии[редактиране | редактиране на кода]

На MySQL 5.1 roadmap може да види, че се очаква:

  • логическо разделяне(Partitioning)
  • Възможност за архивиране на всички типове хранилища по време на работа
  • Репликация в режим защита от грешки (Fail-safe replication)
  • Ограничения на ниво колона (Column-level constraints)
  • Планиране на събития (Event Scheduling)
  • XML функции

Foreign key поддръжка за всички хранилища най-вероятно ще има в MySQL 5.2 (присъстваща от версия 3.23 за InnoDB).

Текущата развойна версия на MySQL 5.1 е 5.1.11 beta.

По какво се отличава[редактиране | редактиране на кода]

Следните възможности са само на MySQL, но не и на други РСУБД:

  • Множество хранилища (MyISAM, Merge, InnoDB, BDB, Memory/heap, Cluster, Federated, Archive, CSV, Blackhole and Example in 5.x), давайки възможност да се избере най-ефектовното за всяка таблица в приложението.

Различни подборки[редактиране | редактиране на кода]

Има 3 типа подборки на MySQL сървър:

  • Стандарна: MySQL-стандартна е препоръчителна за повечето от потребителите и включва InnoDB хранилище.
  • Максимална (Max): (това не е MaxDB, която е разработвана в сътрудничество със SAP) mysqld-max Extended MySQL Server. MySQL-максимална включва допълнителни възможности, които могат да не бъдат достатъчно тествани и не са необходими обикновено.
  • MySQL-Debug е компилирана по начин по който се улеснява трасировката на грешки, но не е предназначена за повседневно използване, защото наличието на допънителни инструкции може да намали производителността.

Започвайки с MySQL 5.1, MySQL AB вече не предлага тези 3 версии. Ще има само една подборка „MySQL server package“, която включва mysqld с цялостна функционалст и всички хранилища. Вместо да се предлага допънителна подборка за трасиране на грешки, тя ще се включва в предлагания пакет и ще се нарича mysqld-debug. [2]

Какво е специфично за изходния код[редактиране | редактиране на кода]

MySQL е написана на C. SQL анализатора(parser) използва yacc и „домашен“ lexer.

Поддръжка[редактиране | редактиране на кода]

MySQL AB предлага поддръжка чрез MySQL Network, включително 24/7 30-минути време за реакция, като екипа за поддръжка има директен достъп до програмисти при нужда за решаване на възникнали проблеми. Като допълнение там могат да се намерят форуми и пощенски списъци а други потребители и работещи във фирмата често могат да бъдат видени на няколко IRC канала за помощ.

Членовете на MySQL Network имат достъп до програми, сертифицирани за техните операционни системи и обновления с много по-малка честота от общодостъпната версия (Community Edition) на MySQL. MySQL Network поддържа няколко нива на членство базирани въз основа на важността и неотложността на проблема както и времето за реакция.

Лицензиране[редактиране | редактиране на кода]

Продуктът MySQL сървър и клиентските библиотеки са разпространявани под двоен лиценз. Потребителите могат да изберат GNU General Public License, който MySQL разшири с FLOSS изключение от лиценза(License Exception). То позволява програма лицензирана под друг OSI-съвместим лиценз с отворен код, несъвместими с GPL, да се свържат с клиентските библиотеки на MySQL.

Клиенти, които не желаят да бъдат ограничавани от GPL могат да закупят комерсиален лиценз.

Някои потребители индивидуално продължават разработката върху по-ранни версии на клиентските библиотеки, които бяха разпространявани под по-малко рестриктивния Lesser General Public License.

Произношение[редактиране | редактиране на кода]

„MySQL“ официално се произнася като „Май Есс Кю Елл“ („My Ess Queue Ell“) [maɪ ɛs kjuː ɛl], а не „Май секуел“ („My sequel“) [maɪ siːkwəl]. Но компанията няма нищо напротив ако другите използват варианта „Май секуел“ („My sequel“) или други локални вариации.

Частта „My“ от името би трябвало да идва от името на първото дете на Монти,[3] пишещо се „My“, но произнасяно като „mü“ [my] (или приблизително като „ми“).

Частта „SQL“ използва стандартното произношение на S-Q-L (Structured Query Language), не това произнасящо се „sequel“, което се приближава до официалното ANSI произношение, но е в конфликт с името на по-ранна база данни на IBM.[4]

На шведски (MySQL AB е шведска компания) думата „Myskväll“ (приятна вечер или моята вечер „Mys kväll“) се произнася по подобен начин, но това може би е случайност. Въпреки това такова произнасяне е нормално за Швеция.

Критики за MySQL[редактиране | редактиране на кода]

Ранните версии на MySQL включват само няколко стандартни възможности на релационна СУБД (RDBMS). Дори и в текущата версия липсват доста стандартни възможности, присъстващи в други РСУБД. Това накара много експерти по бази данни да критикуват MySQL, че няма възможностите да бъде РСУБД. Теоретици на ралацинния модел като Крис Дайт, Фабиан Паскал, Е. Ф. Код, Хю Даруен и техни последователи го твърдят, защото тя не отговаря на няколко от 12-те правила на Код и като всяка друга SQL СУБД тя не трябва да се счита релационна.

Много от ранните критики бяха оправени в по-късни версии, включвайки липсата на трансакции и интегритет на връзките (relational integrity constraints). Тези възможности са необходими за поддръжка на „ACID“ за ралационни бази данни, който позволява на СУБД да изолира приложенията, така че те да не могат да поставят други или непълни данни.[5] Други критики включват отклоняването на MySQL от SQL стандарта по начина на обработка на „NULL“ значенията и тези по подразбиране. Нейния начин за обработка на дати позволява да има дни след последния ден на месеца ако той е с по-малко от 31 дена а артиметичните операции са уязвими на целочислено препълване или окастряне на числа с плаваща запетая.[6] Тези данни се обработват по стандартите на SQL в MySQL версия 5 чрез използването на специални SQL режими.

В предишните версии на упътването на MySQL се изяснява, че няколко от липсващите функционалности (предимно за съвместимост с SQL СУБД) са безполезни или дори вредни и потребителите биха били по-добре без тях. Една глава със заглавие „Причините да не се използват Foreign Keys ограничения“, съветва потребителите, че проверката на целостта на връзките (relational-integrity) е трудна за използване и усложнява приложението и единствената полза би била да позволи програми да изчертават връзките между таблиците в базата данни.[7] Друга глава твърди, че СУБД без поддръжка на трансакции може да осигури целостта на данните по същия начин, както и такава поддържаща ги, без да се има предвид разликата между интегритет на трансакциите и запазване на данни, когато токът спре.[8] Тъй като тези твърдения противоречат на основните принципи на дизайна на релационна база данни, MySQL е взета на подигравка от някои експерти по бази данни. Без значение дали те са прави или не, тези твърдения са „забравени“ в по-новите версии на упътването. MySQL сега поддържа преди „ненужните“ трансакции и цялост на връзките.

Когато тестовата версия на MySQL 5.0 е пусната през март 2005, Дейвид Аксмарк, съучредител на MySQL, казва: „Хората критикуваха MySQL, откакто започнахме, че нямаме съхранени процедури, тригери, и изгледи.“ и „Ние елиминираме 10 години критики в една версия.“.[9] MySQL 5.0 от 13 октомври – 5.0.15 е пусната официално на 24 октомври 2005, след повече от два милиона сваляния по време на тестовия период на 5.0.

Критиците смятат, че популярността на MySQL е учудваща при наличие на други проекти на бази данни с отворен код със сходна производителност и по-близко до SQL стандартите. Защитниците на MySQL отговарят, че програмата върши очакваното от потребителите, желаещи да приемат нейните ограничения (намаляващи с всяка следваща версия) в замяна на скорост, простота и бърза разработка.

Лицензни проблеми[редактиране | редактиране на кода]

Някои потребители критикуват позицията на MySQL AB относно лицензирането. Някой проекти с отворен код като Asterisk PBX, намалиха поддръжката на MySQL заради загриженост относно лицензирането. Освен това има спор относно разпространяването на библиотеки с отворен код на MySQL с други приложения с отворен код. Най-голямата полемика се появи с PHP – имащ лиценз несъвместим с GPL. Този проблем се разреши по-късно след като MySQL създаде изключение от лиценза изрично позволяващо включването на клиентската библиотека на MySQL в други проекти с отворен код отговарящи на лицензите с отворен код включително лиценза на PHP.

През септември 2005, MySQL AB и SCO създадоха „партньорство“ за „съвместна сертификация, пласиране, продажби, търговия и разработка за комерсиалната версия на базата данни за новата версия на Unix OpenServer 6 на SCO“. От началото на 2003 SCO атакува линукс с поредица от патентни дела свързани с операционната система Linux срещу големи компании. Някои от работниците на MySQL изказаха мнение, че компанията е загрижена за крайните си потребители, независимо от избора им на операционна система и че компанията ще остави на съда да реши и че и други бази данни с отворен код са пренесени и поддържат SCO OpenServer.

През октомври 2005, Oracle Corporation придоби Innobase Oy, финдландска компания разработваща хранилището InnoDB позволяващо на MySQL да работи с трансакции и „foreign keys“.

В комюнике на Oracle издадено след придобиването се споменава че договора, позволяващ на MySQL AB да използва кода на хранилището трябва да бъде подновен (и може би предоговорен) през 2006. По време на Конференция на потребителите на MySQL през април 2006, MySQL издаде комюнике в което потвърди, че MySQL и Innobase Oy са се разбрали за многогодишно подновяване на техния договор.

През февруари 2006, Oracle Corporation придоби Sleepycat Software,[10] производителя на Berkeley DB, друго от хранилищата, използвани от MySQL.

История[редактиране | редактиране на кода]

  • Първата версия на MySQL е пусната вътрешно на 23 май, 1995
  • Версия за Windows пусната на 8 януари, 1998 за Windows 95 и NT

Известни потребители[редактиране | редактиране на кода]

  • Amazon.com – за много вътрешни проекти
  • Cox Communications – четвъртия по големина доставчик на кабелна телевизия в САЩ, има повече от 3600 таблици и 2 милиарда реда данни в техните бази данни и около два милиона вмъквания(inserts) на час.
  • Craigslist
  • Digg – Популярен новинарски сайт.
  • Google – за търсачката на „AdWords“ програмата
  • Gumtree – най-големия британски сайт за обяви
  • LiveJournal – около 300 милиона страници, посетени за ден
  • NASA – прехвърли системата за закупки от Oracle към MySQL
  • Omniture
  • RightNow
  • Sabre, и системата за резервации Travelocity
  • Slashdot – с около 50 милиона страници, посетени за ден.
  • Yahoo! – за много критични приложения
  • 2006 MySQL Application of the Year winners
    • Nokia, използва MySQL клъстър за информация в реално време относно потребителите на мобилната мрежа.
    • flickr, използва MySQL за управление на милиони фотографии и потербители.
    • NetQOS, включва MySQL за управление на най-големите мрежи на Chevron, American Express и Boeing.
  • 2005 MySQL Application of the Year winners
    • CNET Networks
    • Friendster, повече от 85 милиона динамични страници на ден, и 1,5 милиарда MySQL запитвания за ден
    • Wikipedia, повече от 200 запитвания и 1,2 милиона обновявания за ден с максимум от 11 000 запитвания на секунда

Документация[редактиране | редактиране на кода]

Статии и ръководства[редактиране | редактиране на кода]

Вижте също[редактиране | редактиране на кода]

Източници[редактиране | редактиране на кода]

  1. dev.mysql.com, архив на оригинала от 6 юни 2011, https://web.archive.org/web/20110606013619/http://dev.mysql.com/tech-resources/articles/dispelling-the-myths.html, посетен на 5 октомври 2006 
  2. www.planetmysql.org, архив на оригинала от 12 октомври 2006, https://web.archive.org/web/20061012195634/http://www.planetmysql.org/kaj/?p=58, посетен на 5 октомври 2006 
  3. MySQL :: MySQL 8.0 Reference Manual :: 1.2.3 History of MySQL // dev.mysql.com. Посетен на 28 януари 2022.
  4. Understanding SQL // faqs.org. Посетен на 28 януари 2022.
  5. www.service-architecture.com, архив на оригинала от 16 октомври 2006, https://web.archive.org/web/20061016181535/http://www.service-architecture.com/database/articles/acid_properties.html, посетен на 5 октомври 2006 
  6. sql-info.de
  7. sunsite.univie.ac.at, архив на оригинала от 10 август 2007, https://web.archive.org/web/20070810151106/http://sunsite.univie.ac.at/textbooks/mysql/manual.html#Broken_Foreign_KEY, посетен на 5 октомври 2006 
  8. sunsite.univie.ac.at, архив на оригинала от 10 август 2007, https://web.archive.org/web/20070810151106/http://sunsite.univie.ac.at/textbooks/mysql/manual.html#IDX340, посетен на 5 октомври 2006 
  9. news.zdnet.co.uk, архив на оригинала от 13 октомври 2006, https://web.archive.org/web/20061013220124/http://news.zdnet.co.uk/software/applications/0,39020384,39192964,00.htm, посетен на 5 октомври 2006 
  10. www.informationweek.com // Архивиран от оригинала на 2011-05-15. Посетен на 2006-10-05.

Външни препратки[редактиране | редактиране на кода]