Различия

Показаны различия между двумя версиями страницы.


Предыдущая версия
mysql [2025/07/06 12:39] (текущий) – внешнее изменение 127.0.0.1
Строка 1: Строка 1:
 +====== FAQ MySQL ======
 +~~Title: Движок БД MySQL ~~
 +{{htmlmetatags>
 +metatag-description=(Использование MySQL. Использование подготовленных запросов в MySQL.)
 +}}
  
 +{{ ::mysql-01.jpg?nolink&400 |}}
 +
 +Домашняя страница [[https://www.mysql.com|MySQL]]
 +
 +  * Параметры [[my.cnf|my.cnf]] - примеры конфигураций MySQL с учетом количества ядер и ОЗУ
 +  * [[mysql_error]]
 +
 +Читайте также:
 +  * [[mariadb_vs_mysql]]
 +  * [[nastrojka_replikacii_dlja_bd_mariadb]]
 +  * [[lamp]]
 +  * [[lemp]]
 +  * [[Установка MySQL server]]
 +  * [[Инсталляция MySQL на CentOS]]
 +  * [[Adminer]]
 +  * [[phpmyadmin]]
 +  * [[test_podkljuchenija_k_mysql_iz_php]]
 +
 +  * [[Как бэкапить данные в MySQL?]]
 +  * [[automysqlbackup]]
 +  * [[mysqldump]]
 +  * [[Хранимые процедуры, функции и триггеры]]
 +  * [[test_podkljuchenija_k_mysql_iz_php]]
 +  * [[mysqli_ili_mysql]]
 +  * [[hosting_control_panel_cpanel]]
 +  * [[Типы данных MySQL]]: DATETIME, DATE, TIMESTAMP.
 +===== Движок БД MySQL — что это такое? =====
 +**База данных** — это обертка вокруг движка хранения данных. Она занимается приемом запросов и управлением ими, кэшированием и прочими обслуживающими функциями, обеспечивая работу с низкоуровневым API движка. Последний, в свою очередь, собственно и хранит данные (на диске или в памяти), работает с операционной системой и обеспечивает выдачу нужных выборок по запросу от сервера. Если раньше СУБД (связка "сервер + движок") была монолитная, то теперь во всех системах используется структура с плагинами. Движок в такой организации является просто модулем, а сам сервер не зависит от системы хранения данных. В последних редакциях классического MySQL также используется плагинная архитектура. Поэтому встроенный движок InnoDB (правда, обычно устаревшей версии) можно легко заменить на модуль другого проекта, который часто будет лучше. В альтернативных мускулу разработках, в том числе [[MariaDB]] или Drizzle, все движки изначально выполнены как плагины.
 +
 +  * Вывести информацию о движках, которые поддерживает ваш сервер MySQL. Обратите внимание на столбец Support, если указано значение "NO" тип хранения данных не поддерживается (не включен).
 +<file>
 +# mysql -uroot -p
 +Server version: 5.5.29-0ubuntu0.12.04.2 (Ubuntu)
 +
 +mysql> SHOW ENGINES;
 ++--------------------+---------+----------------------------------------------------------------+--------------+------+------------+
 +| Engine             | Support | Comment                                                        | Transactions | XA   | Savepoints |
 ++--------------------+---------+----------------------------------------------------------------+--------------+------+------------+
 +| MyISAM             | YES     | MyISAM storage engine                                          | NO           | NO   | NO         |
 +| MRG_MYISAM         | YES     | Collection of identical MyISAM tables                          | NO           | NO   | NO         |
 +| MEMORY             | YES     | Hash based, stored in memory, useful for temporary tables      | NO           | NO   | NO         |
 +| BLACKHOLE          | YES     | /dev/null storage engine (anything you write to it disappears) | NO           | NO   | NO         |
 +| CSV                | YES     | CSV storage engine                                             | NO           | NO   | NO         |
 +| FEDERATED          | NO      | Federated MySQL storage engine                                 | NULL         | NULL | NULL       |
 +| ARCHIVE            | YES     | Archive storage engine                                         | NO           | NO   | NO         |
 +| InnoDB             | DEFAULT | Supports transactions, row-level locking, and foreign keys     | YES          | YES  | YES        |
 +| PERFORMANCE_SCHEMA | YES     | Performance Schema                                             | NO           | NO   | NO         |
 ++--------------------+---------+----------------------------------------------------------------+--------------+------+------------+
 +</file>
 +
 +==== Движки хранения данных в MySQL: InnoDB, MyISAM etc. ====
 +Краткое описание современных движков хранения данных в MySQL - совместимых [[СУБД|СУБД]].
 +  * [[InnoDB]] — основной движок для MySQL, который с версии 5.5 стал дефолтным. Поддерживает транзакции, репликацию, построчную блокировку. В отличие от таблиц MyISAM, где для каждой таблицы создается один файл данных, данные InnoDB в настройках по умолчанию хранятся в больших совместно используемых файлах. То есть данные **для всех таблиц и всех баз данных хранятся в одном файле**.
 +  * **MyISAM** — не поддерживает транзакции и внешние связи (foreign key), но зато может похвастаться полнотекстовыми индексами и быстротой вставки данных. На Select запросах MyISAM медленнее, чем InnoDB. Долгое время был стандартным для всех версий MySQL, а потому до сих пор является самым популярным.
 +  * **MERGE** — MyISAM движок для разнесения данных в одной таблице на несколько разных.
 +  * **CVS** — специализированный движок на случай, когда требуется хранить и обрабатывать большие массивы строковых данных, разделяемых запятой. Данные можно править обычным текстовым редактором.
 +  * **MEMORY** — движок, использующийся для хранения данных не на диске, а в памяти. Информация из базы доступна только во время работы сервера, но это дает колоссальный прирост в производительности.
 +  * **Federated/FederatedX** — этот движок специализируется на прозрачном разнесении данных по нескольким серверам (физическим) на уровне таблицы.
 +  * **PBXT** — призванный заменить InnoDB новый движок, в котором реализованы полная поддержка транзакций, многоверсионность, автоматическая обработка дедлоков. Движок оптимизирован для большого количества одновременных транзакций.
 +  * **Blackhole** — служебный движок, представляющий собой, по сути, /dev/null для СУБД и фактически не производящий никаких записей на диск. Используется для репликации.
 +  * **Archive** — используется в тех случаях, когда необходимо хранить большие массивы данных без изменений. Для эффективности хранения используется сжатие, что приводит к медлительности во время выборок. Движок хорошо подходит для долговременного хранения логов и другой служебной информации.
 +  * **XtraDB** — расширенная и исправленная в некоторых проблемных местах InnoDB от компании Percona.
 +  * **BlitzDB** — еще одна замена для MyISAM с хорошей производительностью за счет встроенного построчного кэширования и автоматического восстановления после сбоев. Движок не поддерживает транзакции.
 +  * **NDB** — движок для кластера, обладающий, впрочем, кучей проблем и удручающе плохой производительностью.
 +  * **Falcon** — легендарный движок от компании MySQL AB, разрабатываемый еще со времен Sun, когда было принято решение заменить оракловский InnoDB.
 +  * **SphinxSE** — полнотекстовый движок от создателя поискового сервера Sphinx. Лучший вариант для полнотекстового поиска и индексации по правилам русского языка. Легко оперирует терабайтами данных, обеспечивая при этом все возможности современной БД.
 +  * **Aria** — замена для MyISAM с поддержкой транзакций и улучшенной работой с памятью. Движок гарантирует целостность данных и при этом не уступает в скорости MyISAM.
 +  * **BDB**(BerkeleyDB) - для совместимости с BerkeleyDB.
 +===== Клиенты администрирования MySQL =====
 +  * [[https://dbeaver.io/|DBeaver Community Free Universal Database Tool]] - бесплатный многоплатформенный инструмент для работы с базами данных для разработчиков, администраторов баз данных, аналитиков и всех, кому необходимо работать с базами данных. Поддерживает все популярные базы данных: MySQL, [[PostgreSQL|PostgreSQL]], [[SQLite|SQLite]], Oracle, DB2, SQL Server, Sybase, MS Access, Teradata, Firebird, Apache Hive, Phoenix, Presto и др.
 +  * [[out>https://sourceforge.net/projects/mysqlnavigator/|MySQL Navigator]].
 +  * [[out>https://www.heidisql.com/download.php|HeidiSQL]] в Linux запускаем при помощи [[Wine|Wine]].
 +  * [[out>https://dev.mysql.com/downloads/workbench/|MySQL Workbench]] старое название MySQL GUI Tools - пакет утилит для администрирования баз данных MySQL.
 +  * [[out>https://github.com/webyog/sqlyog-community|SQLyog Community Edition]] мощный инструмент с графическим интерфейсом для управления серверами и базами данных MySQL и MariaDB в физических, виртуальных и облачных средах. В Linux запускается c помощью [[Wine|Wine]].
 +
 +==== Как подключиться к MySQL, MariaDB из консоли ====
 +
 +  * Подключиться к MySQL на localhost на нестандартном порту
 +<file bash>
 +mysql -u root -p -P 3308 -S /tmp/mysql5.sock
 +</file>
 +  * Удаленное подключение к mysql-серверу с помощью консоли 
 +<file bash>
 +mysql -h xxx.xxx.xxx.xxx -u root -p my_db  
 +</file>
 +===== Команды MySQL =====
 +Пример вывода значения переменных MySQL:
 +<file bash>
 +mysql -e "SHOW VARIABLES LIKE '%'\G;" | grep innodb_buffer_pool_size  -B 1 -A 1
 +</file>
 +==== SHOW ====
 +
 +  * SHOW DATABASES; - список баз данных
 +  * SHOW TABLES [FROM db_name]; -  список таблиц в базе
 +  * SHOW COLUMNS FROM таблица [FROM db_name]; - список столбцов в таблице
 +  * SHOW CREATE TABLE table_name; - показать структуру таблицы в формате "CREATE TABLE"
 +  * SHOW INDEX FROM tbl_name; - список индексов
 +  * SHOW GRANTS FOR user [FROM db_name]; - привилегии для пользователя.
 +  * SHOW VARIABLES; - значения системных переменных
 +  * SHOW FULL PROCESSLIST;
 +       * SHOW PROCESSLIST; - статистика по mysqld процессам. Удалить процесс: KILL thread_id
 +  * SHOW STATUS; - общая статистика
 +  * SHOW TABLE STATUS [FROM db_name]; - статистика по всем таблицам в базе
 +==== DESCRIBE ====
 +Команда DESCRIBE предоставляет информацию о столбцах таблицы.
 +  * DESCRIBE таблица; сокращенный вариант команды SHOW COLUMNS FROM
 +
 +
 +===== Транзакции и атомарные операции MySQL =====
 +
 +Поддержка **транзакций** в сервере MySQL реализуется при помощи обработчиков транзакционных таблиц типов InnoDB и BDB. Таблицы InnoDB обеспечивают соответствие требованиям ACID.
 +
 +Однако для таблиц нетранзакционных типов, таких как MyISAM, в MySQL используется иная парадигма обеспечения целостности данных, получившая название **атомарные операции**. Атомарные операции в сравнении с транзакциями часто обеспечивают такую же или даже лучшую целостность при более высокой производительности. Поскольку сервер MySQL поддерживает обе парадигмы, пользователь может выбирать между скоростью, которую обеспечивают атомарные операции, и транзакционными возможностями для своих приложений. Такой выбор может быть сделан для каждой таблицы отдельно.
 +
 +===== Использование подготовленных запросов =====
 +
 +Пример использования подготовленных запросов (Prepared Statements) для [[PHP]]
 +<file>
 +mysql_query("PREPARE myinsert FROM
 +'INSERT INTO
 +mytable (name, price)
 +VALUES (?, ?)'");
 +for ($i = 0; $i < 1000; $i++){
 +mysql_query("SET @name = 'Товар # $i'");
 +mysql_query("SET @price = " . ($i * 10));
 +mysql_query("EXECUTE myinsert USING @name, @price");
 +}
 +</file>
 +<panel type="primary" title="Читайте также">
 +  * [[mariadb]]
 +  * [[delete_all_tables_in_database]]
 +</panel>

📌 Удобный подбор VPS по параметрам доступен на DIEGfinder.com - официальном инструменте проекта DIEG. Это часть единой экосистемы, созданной для того, чтобы помочь быстро найти подходящий VPS/VDS сервер для любых задач хостинга.

📌 Для тестирования скриптов, установщиков VPN и Python-ботов рекомендуем использовать надежные VPS на короткий срок. Подробнее о быстрой аренде VPS для экспериментов - читайте здесь.

💥 Подпишись в Телеграм 💥 и задай вопрос по сайтам и хостингам бесплатно!