Рубрика: Mysql

Ubuntu server mysql: Как установить MySQL в Ubuntu 18.04

Ubuntu server mysql: Как установить MySQL в Ubuntu 18.04

Установка MySQL в Ubuntu

MySQL — это система управления базами данных, которая используется по всему миру. Чаще всего ее применяют в web-разработке. Если на вашем компьютере в качестве основной операционной системы (ОС) используется Ubuntu, то установка данного программного обеспечения может вызвать затруднения, так как придется работать в «Терминале», выполняя множество команд. Но ниже будет подробно рассказано, как выполнить инсталляцию MySQL в Ubuntu.

Читайте также: Как установить Linux с флешки

Устанавливаем MySQL в Ubuntu

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

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

Шаг 1: Обновление операционной системы

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

  1. Для начала обновим все репозитории, выполнив в «Терминале» следующую команду:

    sudo apt update

  2. Теперь проведем установку найденных обновлений:

    sudo apt upgrade

  3. Подождите пока закончится процесс загрузки и установки, после чего произведите перезагрузку системы. Сделать это можно не выходя из «Терминала»:

    sudo reboot

После запуска системы войдите снова в «Терминал» и перейдите к следующему шагу.

Читайте также: Часто используемые команды в «Терминале» Linux

Шаг 2: Установка

Теперь произведем установку сервера MySQL, выполнив следующую команду:

sudo apt install mysql-server

При появлении вопроса: «Хотите продолжить?» введите символ «Д» или «Y» (в зависимости от локализации ОС) и нажмите Enter.

В процессе установки появится псевдографический интерфейс, в котором вас попросят задать новый пароль суперпользователя для сервера MySQL — введите его и нажмите «ОК». После этого подтвердите только что введенный пароль и снова нажмите «ОК».

Примечание: в псевдографическом интерфейсе переключение между активными областями осуществляется нажатием клавиши TAB.

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

sudo apt install mysql-client

На данном этапе ничего подтверждать не нужно, поэтому после завершения процесса установку MySQL можно считать оконченной.

Заключение

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

Мы рады, что смогли помочь Вам в решении проблемы.
Опишите, что у вас не получилось. Наши специалисты постараются ответить максимально быстро.
Помогла ли вам эта статья?
ДА НЕТ

Как установить MySQL на Ubuntu 20.04

MySQL – самая популярная система управления реляционными базами данных с открытым исходным кодом. Это быстрый, простой в использовании, масштабируемый и неотъемлемая часть популярных стеков LAMP и LEMP.

В этой статье объясняется, как установить и защитить MySQL в Ubuntu 20.04.

 

Предпосылки

Убедитесь, что вы вошли в систему как пользователь с привилегиями sudo.

 

Установка MySQL в Ubuntu

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

sudo apt update
sudo apt install mysql-server

 

После завершения установки служба MySQL запустится автоматически. Чтобы убедиться, что сервер MySQL работает, введите:

sudo systemctl status mysql

 

Выходные данные должны показать, что служба включена и работает:

● mysql.service - MySQL Community Server
     Loaded: loaded (/lib/systemd/system/mysql.service; enabled; vendor preset: enabled)
     Active: active (running) since Tue 2020-04-28 20:59:52 UTC; 10min ago
   Main PID: 8617 (mysqld)
     Status: "Server is operational"
     ...

 

Обеспечение безопасности MySQL

Установка MySQL поставляется со скриптом имя которого mysql_secure_installation, который позволяет легко повысить безопасность сервера базы данных.

Вызвать скрипт без аргументов:

sudo mysql_secure_installation

 

Вам будет предложено настроить VALIDATE PASSWORD PLUGIN, который используется для проверки надежности паролей пользователей MySQL и повышения безопасности:

Securing the MySQL server deployment.

Connecting to MySQL using a blank password.

VALIDATE PASSWORD COMPONENT can be used to test passwords
and improve security. It checks the strength of password
and allows the users to set only those passwords which are
secure enough. Would you like to setup VALIDATE PASSWORD component?

Press y|Y for Yes, any other key for No: y


 

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

There are three levels of password validation policy:

LOW    Length >= 8
MEDIUM Length >= 8, numeric, mixed case, and special characters
STRONG Length >= 8, numeric, mixed case, special characters and dictionary                  file

Please enter 0 = LOW, 1 = MEDIUM and 2 = STRONG: 2

 

В следующем приглашении вам будет предложено установить пароль для пользователя root MySQL:

Please set the password for root here.


New password: 

Re-enter new password: 

 

Если вы установили плагин проверки пароля, скрипт покажет вам силу вашего нового пароля. Введите yдля подтверждения пароля:

Estimated strength of the password: 50 
Do you wish to continue with the password provided?(Press y|Y for Yes, any other key for No) : y

 

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

 

Войдите в систему как root

Для взаимодействия с сервером MySQL из командной строки используйте клиентскую утилиту MySQL, которая устанавливается как зависимость от пакета сервера MySQL.

На MySQL 8.0 пользователь root auth_socket, по умолчанию проверяется плагином.

Плагин auth_socket проверяет подлинность пользователей, которые подключаются из localhostчерез файл сокета Unix. Это означает, что вы не можете аутентифицироваться как root, предоставляя пароль.

Чтобы войти на сервер MySQL от имени пользователя root, введите:

sudo mysql

 

Вам будет представлена ​​оболочка MySQL, как показано ниже:

Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 12
Server version: 8.0.19-0ubuntu5 (Ubuntu)

Copyright (c) 2000, 2020, Oracle and/or its affiliates. All rights reserved.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql>

 

Если вы хотите войти на свой сервер MySQL от имени пользователя root с помощью внешней программы, такой как phpMyAdmin, у вас есть два варианта.

Первый – изменить метод аутентификации с auth_socket на mysql_native_password. Вы можете сделать это, выполнив следующую команду:

ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'very_strong_password';FLUSH PRIVILEGES;

 

Второй рекомендуемый вариант – создать нового выделенного административного пользователя с доступом ко всем базам данных:

GRANT ALL PRIVILEGES ON *.* TO 'administrator'@'localhost' IDENTIFIED BY 'very_strong_password';

 

Вывод

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

Если у вас есть какие-либо вопросы или отзывы, не стесняйтесь оставлять комментарии.

Если вы нашли ошибку, пожалуйста, выделите фрагмент текста и нажмите Ctrl+Enter.

Установка и первичная настройка MySQL на Ubuntu 16.04 – Vscale Community

Введение

MySQL — одна из самых распространённых и популярных СУБД с открытым исходным кодом. Установка на новую версию Ubuntu у опытных пользователей не вызывает сложностей, однако новичкам может потребоваться подробная инструкция по настройке.

Технические требования

  • Пользователь с sudo-правами
  • Ubuntu 16.04 

Шаг 1. Создание нового пользователя

Создание нового пользователя подробно описано в руководстве Начальная настройка сервера под управлением ОС Ubuntu.

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

usermod -aG sudo newuser

Закрепляющий флаг -aG добавляет пользователя в выбранную группу и закрепляет за ним права суперпользователя.

Команды прописываются без символа $, поскольку выполняются от имени root-пользователя. Для дальнейшей установки базы данных потребуется проставлять этот символ – он является указателем для системы, что действия поступают от аккаунта, наделенного правами администратора, но не являющегося им.

Шаг 2. Обновление индекса пакетов

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

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

Для обновления необходимо ввести команду:

$ sudo apt-get update

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

sudo apt-get upgrade

Просмотрев все пакеты, доступные для установки, вам нужно подтвердить обновление, нажав Y (yes – да) и клавишу Enter. Процедура займет некоторое время, но в результате неактуальные сведения будут удалены, а свежие версии займут их место на дисковом пространстве сервера.

Шаг 3. Установка MySQL

Установка базы данных на Ubuntu производится быстрее всего менеджером установки приложений apt (Advanced Packaging Tool – программа для установки). И главное преимущество менеджера в том, что он не требует отдельной инсталляция, поскольку входит в состав стандартного пакета программ. Apt позволяет без лишних команд установить то или иное приложение на сервер, к которому смогут в дальнейшем обращаться все пользователи определенной сетевой группы, которой вы дадите доступ.

База данных MySQL устанавливается с помощью менеджера быстрее и проще всего. Поэтому требуется последовательно прописать лишь несколько команд:

  1. $ sudo apt-get install mysql-server
  2. $ sudo mysql_secure_installation

После первой команды система попросит вас создать надежный пароль суперпользователя, который одновременно с этим будет являться и паролем от серверной (не клиентской) версии базы данных. Требования к паролю стандартные: не менее 8 символов, желательно добавить цифры и спецзнаки.

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

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

Шаг 4. Настройка сценариев

VALIDATE PASSWORD PLUGIN – это настройка, которая автоматически блокирует и отклоняет те пароли, которые считает небезопасными и простыми. Этот параметр можно отключить, но это не означает, что в программе можно будет устанавливать несложные пароли. Использование базы данных третьими лицами приведет к утечке информации, поэтому все ключевые слова должны быть тщател

Как установить MySQL на Ubuntu Linux?

MySQL по-праву считается самой популярной системой для управления базами данных в мире. Это база данных с открытым исходным кодом. Она чаще всего устанавливается как часть стека LAMP (Linux — Apache — MySQL — PHP). MySQL — это реляционная база данных, работающая с языком структурированных запросов (SQL). Рассмотрим последовательность дейстей для установки MySQL на сервер Ubuntu.

Требования

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

Приступим к установке

В последних версиях Ubuntu, MySQL по умолчанию доступен в репозитории пакетов APT. Для успешного процесса установки, обновление индекса пакета на сервере необходимо выполнить с помощью «apt».

sudo apt update

После этого завершите установку пакета по умолчанию.

sudo apt-get install mysql-server

Таким образом, MySQL будет установлен. Но установка пароля и изменение конфигурации не разрешены в целях безопасности.

Настройка MySQL

Во время установки можно выполнить скрипт для повышения безопасности MySQL. Этот скрипт проанализирует учетные записи пользователей MySQL с административными привелениями (root, admin и т.п.) и выключит все лишнее. В последних версиях MySQL этот скрипт  запускается автоматически, тогда как в более старых версиях требовалось запускать этот скрипт вручную.

sudo mysql_secure_installation

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

После, нажав « Y » и « Ввод », примутся значения по умолчанию. При этом анонимные пользователи и тестовая база данных будут удалены. Это также отключит удаленный вход в систему для root и активирует новые правила безопасности, установленные скриптом.

Для инициализации каталога данных MySQL применяйте команду « mysql_install_db » для предыдущих версий 5.7.6, а для версий после этого используйте « mysqld –initialize» . Если MySQL установлен из дистрибутива Debian, каталог данных инициализируется по умолчанию. Никаких дополнительных действий не требуется.

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

Настройка аутентификации пользователя и привилегий (необязательно)

Пароль не используется, но подключаемый модуль по умолчанию « auth_socket» используется для аутентификации пользователя root MySQL в системах Ubuntu, работающих под управлением последних версий MySQL (5.7 и более поздние). Хотя это допускает некоторую большую безопасность и простоту использования, в некоторых случаях, например, разрешение доступа внешней программы к пользователю, это может создать сложный сценарий.

Для использования пароля в качестве root для MySQL необходимо изменить метод аутентификации. Это изменение аутентификации имеет форму « auth_socket » на « mysql_native_password» . В терминале откройте приглашение MySQL для выполнения этого действия.

sudo mysql

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

mysql> SELECT user,authentication_string,plugin,host FROM mysql.user;
 

В примере, приведенном выше, видно, что используется плагин auth_socket ; пользователь root завершит процесс аутентификации. Чтобы настроить верно учетную запись root для аутентификации с использованием пароля, необходимо выполнить следующую команду « ALTER USER» . Выберите надежный пароль и учтите, что пароль root, настроенный на шаге 2, будет изменен с помощью этой команды.

mysql> ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'password';

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

mysql> FLUSH PRIVILEGES;

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

mysql> SELECT user,authentication_string,plugin,host FROM mysql.user;
 

На этом примере вы можете видеть, что аутентификация выполняется пользователем MySQL root с использованием пароля. После подтверждения на сервере вы можете выйти из оболочки.

mysql> exit

Теперь настало время протестировать установку MySQL.

Тестирование установки MySQL

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

sudo systemctl status mysql.service

Вы можете начать с:

sudo systemctl start mysql

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

sudo mysqladmin -p -u root version

Это указывает на то, что MySQL запущен и работает.

Подводя итог

Теперь MySQL установлен на вашем сервере Ubuntu. Для удобства использования вы можете изменить его. Кроме того, добавление мер также возможно для повышения безопасности.

Установка комплекта Linux, Nginx, MySQL, PHP (LEMP) в Ubuntu 20.04

Предварительные требования

Для выполнения этого руководства вам потребуется доступ к серверу Ubuntu 20.04 с пользователем с правами sudo.

Шаг 1 — Установка Nginx

Обновите кэш диспетчера пакетов и установите Nginx с помощью следующей команды:

  • sudo apt update
  • sudo apt install nginx

После завершения установки вам нужно будет изменить настройки брандмауэра, чтобы разрешить трафик HTTP на вашем сервере. Запустите следующую команду, чтобы разрешить внешний доступ к порту 80 (HTTP):

  • sudo ufw allow in «Nginx»

После добавления нового правила брандмауэра вы можете проверить, запущен ли сервер, запросив доступ к публичному IP-адресу или доменному имени сервера из вашего веб-браузера. Страница будет выглядеть следующим образом:

Установка комплекта Linux, Nginx, MySQL, PHP (LEMP) в Ubuntu 20.04

Шаг 2 — Установка MySQL

Теперь мы установим MySQL, популярную СУБД, используемую в средах PHP.

Используйте apt для получения и установки этого программного обеспечения:

  • sudo apt install mysql-server

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

  • sudo mysql_secure_installation

Скрипт запросит подтверждение настройки плагина VALIDATE PASSWORD PLUGIN. Выберите Y для активации или любой другой вариант, чтобы продолжить без активации этой функции. Если вы выберете ответ «yes» («Да»), вам будет предложено выбрать уровень подтверждения паролем.

Затем сервер попросит вас выбрать и подтвердить пароль для пользователя root СУБД MySQL. Хотя в MySQL метод аутентификации пользователя root по умолчанию не требует использования пароля даже при его наличии, задайте надежный пароль для обеспечения дополнительной безопасности.

Для всех остальных вопросов нужно выбирать Y и нажимать ENTER в каждом диалоге.

Примечание. На момент написания этого руководства родная библиотека MySQL PHP mysqlnd не поддерживает caching_sha2_authentication, метод аутентификации MySQL 8 по умолчанию. Поэтому при создании пользователей базы данных для приложений PHP на MySQL 8 вам нужно убедиться, что вместо этого пароля они настроены на использование mysql_native_password. Подробную информацию можно найти в описании шага 6 подробного руководства по LEMP в Ubuntu 20.04.

 

Шаг 3 — Установка PHP

Для установки пакетов php-fpm и php-mysql воспользуйтесь следующей командой:

  • sudo apt install php-fpm php-mysql

 

Шаг 4 — настройка Nginx для PHP

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

В Nginx на Ubuntu 20.04 по умолчанию включен один серверный блок, настроенный для вывода документов из директории /var/www/html. Хотя это хорошо работает для отдельного сайта, при размещении нескольких сайтов это может доставлять неудобства. Вместо изменения /var/www/html мы создадим внутри /var/www структуру директорий для нашего сайта your_domain, оставив /var/www/html​​​ в качестве директории по умолчанию для вывода в случае, если запросу клиента не соответствуют никакие другие сайты.

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

  • sudo mkdir /var/www/your_domain

Затем необходимо назначить права владения для директории с помощью переменной среды $USER, которая будет использоваться для текущего системного пользователя:

  • sudo chown -R $USER:$USER /var/www/your_domain

После этого откройте новый файл конфигурации в директории Nginx sites-available с помощью любого редактора командной строки. Мы будем использовать nano:

  • sudo nano /etc/nginx/sites-available/your_domain

В результате будет создан новый пустой файл. Вставьте следующую пустую конфигурацию:

/etc/nginx/sites-available/your_domain

server { listen 80; server_name <span>your_domain</span> www.<span>your_domain</span>; root /var/www/<span>your_domain</span>; index index.html index.htm index.php; location / { try_files $uri $uri/ =404; } location ~ \.php$ { include snippets/fastcgi-php.conf; fastcgi_pass unix:/var/run/php/php7.4-fpm.sock; } location ~ /\.ht { deny all; } }

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

server {

    listen 80;

    server_name <span>your_domain</span> www.<span>your_domain</span>;

    root /var/www/<span>your_domain</span>;

 

    index index.html index.htm index.php;

 

    location / {

        try_files $uri $uri/ =404;

    }

 

    location ~ \.php$ {

        include snippets/fastcgi-php.conf;

        fastcgi_pass unix:/var/run/php/php7.4-fpm.sock;

     }

 

    location ~ /\.ht {

        deny all;

    }

 

}

 

 

 

Когда вы закончите редактирование, сохраните и закройте файл. Если вы используете nano, можно ввести CTRL+X, а затем y и ENTER для подтверждения.

Активируйте вашу конфигурацию посредством привязки к файлу конфигурации из директории Nginx sites-enabled:

  • sudo ln -s /etc/nginx/sites-available/your_domain /etc/nginx/sites-enabled/

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

Если есть какие-либо ошибки, вернитесь в файл конфигурации и проверьте его содержание перед тем, как продолжить.

Когда будете готовы, перезагрузите Nginx для внесения необходимых изменений:

  • sudo systemctl reload nginx

Теперь ваш новый веб-сайт активен, но корневая веб-директория /var/www/your_domain все еще пуста. Создайте файл index.html в этом расположении, чтобы убедиться, что веб-сервер работает, как ожидалось:

  • nano /var/www/your_domain/index.html

Внесите в файл следующее:

/var/www/your_domain/index.html

&lt;html&gt; &lt;head&gt; &lt;title&gt;<span>your_domain</span> website&lt;/title&gt; &lt;/head&gt; &lt;body&gt; &lt;h2&gt;Hello World!&lt;/h2&gt; &lt;p&gt;This is the landing page of &lt;strong&gt;<span>your_domain</span>&lt;/strong&gt;.&lt;/p&gt; &lt;/body&gt; &lt;/html&gt;

&lt;html&gt;

  &lt;head&gt;

    &lt;title&gt;<span>your_domain</span> website&lt;/title&gt;

  &lt;/head&gt;

  &lt;body&gt;

    &lt;h2&gt;Hello World!&lt;/h2&gt;

 

    &lt;p&gt;This is the landing page of &lt;strong&gt;<span>your_domain</span>&lt;/strong&gt;.&lt;/p&gt;

  &lt;/body&gt;

&lt;/html&gt;

 

Теперь откройте браузер и получите доступ к доменному имени сервера или IP-адресу, как указано в директиве server_name в файле конфигурации вашего серверного блока:

http://<span>server_domain_or_IP</span>

http://<span>server_domain_or_IP</span>

 

Страница будет выглядеть следующим образом:

Шаг 5 — Тестирование PHP с помощью Nginx

Теперь мы создадим тестовый скрипт PHP для подтверждения возможности принимать и обрабатывать запросы файлов PHP в Nginx.

Создайте новый файл с именем info.php в корневой папке сайта:

  • nano /var/www/your_domain/info.php

В результате откроется пустой файл. Добавьте в файл следующее:

/var/www/your_domain/info.php

После завершения редактирования сохраните и закройте файл.

Теперь вы можете получить доступ к этой странице в веб-браузере, посетив доменное имя или публичный IP-адрес, настроенный в файле конфигурации Nginx, добавив /info.php в конце:

http://<span>server_domain_or_IP</span>/info.php

http://<span>server_domain_or_IP</span>/info.php

 

Вы увидите веб-страницу, содержащую подробную информацию о вашем сервере:

После проверки соответствующей информации о вашем сервере PHP с помощью данной страницы рекомендуется удалить созданный вами файл, поскольку он содержит конфиденциальную информацию о вашей среде PHP и о вашем сервере Ubuntu. Вы можете использовать rm для удаления этого файла:

  • sudo rm /var/www/your_domain/info.php

 

Другие обучающие руководства

 

Установка MySQL в Ubuntu

MySQL — это система управления базами данных, которая используется по всему миру. Чаще всего ее применяют в веб-разработке. Если на вашем компьютере в основной операционной системе (ОС) используется Ubuntu, то установка программного обеспечения может вызвать затруднения, так как придется работать в «Терминале» , выполняя множество команд. Но ниже будет подробно рассказано, как выполнить инсталляцию MySQL в Ubuntu.

Читайте также: Как установить Linux с флешки

Устанавливаем MySQL в Ubuntu

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

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

Шаг 1: Обновление операционной системы

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

  1. Для начала обновим все репозитории, выполнив в «Терминале» следующую команду:

    обновление sudo apt

  2. Теперь проведем установку найденных обновлений:

    sudo apt обновление

  3. После чего произведите перезагрузку системы, после чего закончится процесс загрузки и установки.Сделать это можно не выходя из «Терминала» :

    перезагрузка sudo

После запуска системы войдите снова в «Терминал» и следующем к следующему шагу.

Читайте также: Часто используемые команды в «Терле» Linux

Шаг 2: Установка

Теперь произведем установку сервера MySQL, выполнив следующую команду:

sudo apt установить mysql-server

При появлении вопроса: «Хотите продолжить?» введите символ «Д» или «Y» (в зависимости от локализации ОС) и нажмите Введите .

В процессе установки появится псевдографический интерфейс, в котором вас попросят настроить новый пароль суперпользователя для сервера MySQL — введите его и нажмите «ОК» . После этого подтвердите только что введенный пароль и снова нажмите «ОК» .

Примечание: в псевдографическом интерфейсе переключение между активными областями осуществляется нажатием клавиш TAB.

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

sudo apt установить mysql-client

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

Заключение

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

Мы рады, что смогли помочь Вам в решении проблемы.
Опишите, что у вас не получилось. Наши специалисты постараются максимально быстро.
Помогла ли вам эта статья?
ДА НЕТ .

Как установить MySQL на Ubuntu 20.04

MySQL — самая популярная система управления реляционными базами данных с открытым исходным кодом. Это быстрый, простой в использовании, масштабируемый и неотъемлемая часть популярных стеков LAMP и LEMP.

В этой статье объясняется, как установить и защитить MySQL в Ubuntu 20.04.

Предпосылки

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

Установка MySQL в Ubuntu

На момент написания этой последней версией MySQL, доступной в репозиториях Ubuntu, была MySQL версии 8.0. Для его установки следующие команды:

 sudo apt update
sudo apt установить mysql-server 

После завершения установки служба MySQL запустится автоматически. Чтобы убедиться, что сервер MySQL работает, введите:

 sudo systemctl статус mysql 

Выходные данные должны показать, что служба включена и работает:

 ● mysql.service - Сервер сообщества MySQL
     Загружен: загружен (/ lib / systemd / system / mysql.служба; включен; предустановка поставщика: включена)
     Активный: активен (работает) с Вт 2020-04-28 20:59:52 UTC; 10мин назад
   Основной PID: 8617 (mysqld)
     Статус: «Сервер в рабочем состоянии»
     ... 

Обеспечение безопасности MySQL

Установка MySQL поставляется со скриптом имени которого mysql_secure_installation, который позволяет легко повысить безопасность сервера базы данных.

Вызвать скрипт без аргументов:

 Судо mysql_secure_installation 

Вам будет предложено настроить ПЛАГИН VALIDATE PASSWORD, который используется для проверки надежности паролей пользователей MySQL и повышения безопасности:

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

КОМПОНЕНТ VALIDATE PASSWORD COMPONENT можно использовать для проверки паролей.
и повысить безопасность. Проверяет надежность пароля
и позволяет пользователям устанавливать только те пароли, которые
достаточно безопасно. Хотите настроить компонент ПРОВЕРКА ПАРОЛЯ?

Нажмите y | Y для Да, любую другую клавишу для Нет: y

 

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

 Существует три уровня политики проверки пароля:

НИЗКАЯ длина> = 8
СРЕДНЯЯ длина> = 8, числовые, смешанный регистр и специальные символы
СИЛЬНАЯ Длина> = 8, числа, смешанный регистр, специальные символы и файл словаря

Введите 0 = НИЗКИЙ, 1 = СРЕДНИЙ и 2 = СИЛЬНЫЙ: 2
 

В следующем приглашении вам будет предложено установить пароль для пользователя root MySQL:

 Пожалуйста, установите здесь пароль для root.Новый пароль:

Повторно введите новый пароль:
 

Если вы установили плагин проверки пароля, скрипт покажет вам силу вашего нового пароля. Введите yдля подтверждения пароля:

 Расчетная надежность пароля: 50
Вы хотите продолжить с введенным паролем? (Нажмите y | Y для Да, любую другую клавишу для Нет): y
 

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

Войдите в систему как root

Для взаимодействия с сервером MySQL из командной строки использует клиентскую утилиту MySQL, которая устанавливается как зависимость от пакета сервера MySQL.

На MySQL 8.0 пользователь root auth_socket, по умолчанию проверяется плагином.

Плагин auth_socket проверяет подлинность пользователей, которые подключаются из localhostчерез файла сокета Unix. Это означает, что вы не можете аутентифицироваться как root, предоставляя пароль.

Чтобы войти на сервер MySQL от имени пользователя root, введите:

 Судо MySQL 

Вам будет представлена ​​оболочка MySQL, как показано ниже:

 Добро пожаловать в монитор MySQL. Команды заканчиваются на; или \ g.
Ваш идентификатор подключения MySQL - 12
Версия сервера: 8.0.19-0ubuntu5 (Ubuntu)

Авторское право (c) 2000, 2020, Oracle и / или ее дочерние компании. Все права защищены.

Oracle является зарегистрированным товарным знаком Oracle Corporation и / или ее
филиалы.Другие названия могут быть товарными знаками соответствующих
владельцы.

Введите "помощь"; или '\ h' для помощи. Введите '\ c', чтобы очистить текущий оператор ввода.

mysql>
 

Если вы хотите войти на свой сервер MySQL от имени пользователя root с помощью внешней программы, такой как phpMyAdmin, у вас есть два варианта.

Первый — изменить метод аутентификации с auth_socket на mysql_native_password. Вы можете сделать это, выполнив следующую команду:

 ИЗМЕНЕНИЕ ПОЛЬЗОВАТЕЛЯ 'root' @ 'localhost' ИДЕНТИФИКАЦИЯ mysql_native_password ПО 'very_strong_password'; FLUSH PRIVILEGES; 

Второй рекомендуемый вариант — создать нового выделенного административного пользователя с доступом ко всем базам данных:

 ПРЕДОСТАВЛЯЙТЕ ВСЕ ПРИВИЛЕГИИ НА *.* ДЛЯ 'administrator' @ 'localhost' ИДЕНТИФИЦИРОВАНО 'very_strong_password'; 

Вывод

Мы показали вам, как установить MySQL на Ubuntu 20.04. Теперь, когда сервер баз данных запущен и работает следующим шагом может стать изучение управления учетными основными пользователями MySQL и базами данных.

Если у вас есть какие-либо вопросы или отзывы, не стесняйтесь оставлять комментарии.

Если вы нашли ошибку, пожалуйста, выделите фрагмент текста и нажмите Ctrl + Enter .

.

Установка и первичная настройка MySQL на Ubuntu 16.04 — Vscale Community

Введение

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

Технические требования

  • Пользователь с sudo-правами
  • Ubuntu 16.04

Шаг 1. Создание нового пользователя

Создание нового пользователя подробно описывается в игре Начальная настройка сервера под управлением ОС Ubuntu.

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

 usermod -aG sudo newuser 

Закрепляющий флаг -aG закрепляет за ним права суперпользователя.

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

Шаг 2. Обновление индекса пакетов

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

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

Для обновления необходимо ввести команду:

 $ sudo apt-get update 

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

 sudo apt-get upgrade 

наборрев все пакеты, доступные для установки, вам нужно подтверждение, устранение Y (да — да) и разрешено Enter. Процедура некоторое время, но в результате неактуальные сведения будут удалены, а свежие версии займут их место на дисковом тесте сервера.

Шаг 3. Установка MySQL

Установка базы данных на Ubuntu производится быстрее всего менеджером данных установки приложений apt (Advanced Packaging Tool — программа для установки). И главное преимущество менеджера в том, что он не требует отдельной инсталляции, поскольку входит в состав стандартного пакета программ. Apt позволяет без лишних команд установить этот сетевой сервер, к которому можно использовать все стандартные службы доступа.

База данных MySQL устанавливается с помощью менеджера быстрее и проще всего. Поэтому требуется последовательно прописать лишь несколько команд:

  1.  $ sudo apt-get установить mysql-server 
  2.  $ sudo mysql_secure_installation 

После первой команды система попросит вас создать надежный пароль суперпользователя, который одновременно с этим будет являться и паролем от серверной (не клиентской) версии базы данных.Требования к паролю Стандартные: не менее 8 символов, желательно добавить цифры и спецзнаки.

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

Все вопросы связаны

.

Как установить MySQL на Ubuntu Linux?

MySQL по-праву считается самой популярной системой для управления базами данных в мире. Это база данных с открытым исходным кодом. Она чаще всего устанавливается как часть стека LAMP (Linux — Apache — MySQL — PHP). MySQL — это реляционная база данных, работающая с языком структурированных запросов (SQL). Рассмотрим последовательность дейстей для установки MySQL на сервер Ubuntu.

Требования

Перед установкой MySQL рекомендуется выполнить обновление пакетов в системе.Это поможет избежать проблем с совместимостью в дальнейшем.

Приступим к установке

Последние версиих Ubuntu, MySQL по умолчанию Доступ в репозитории пакетов APT. Для успешной установки пакет обновления программного обеспечения на сервере выполнить с помощью «apt».

 sudo apt update 

После этого завершите установку пакета по умолчанию.

 sudo apt-get install mysql-server 

Таким образом, MySQL будет установлен.Но установка пароля и изменение конфигурации не разрешены в других целях безопасности.

Настройка MySQL

Во время установки можно выполнить скрипт для повышения безопасности MySQL. Этот скрипт анализирует учетные записи пользователей MySQL с административными привелениями (root, admin и т.п.) и выключит все лишнее. В более старых версиях MySQL этот скрипт запускается автоматически, тогда как в более старых версиях требовалось запускать этот скрипт вручную.

 sudo mysql_secure_installation 

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

После, разрушится «Y» и «Ввод», примутся значения по умолчанию. При этом анонимные пользователи и тестовая база данных будут удалены. Это также отключит удаленный вход в систему для root и активирует новые правила безопасности, установленные скриптом.

Для инициализации каталога данных MySQL применяйте команду « mysql_install_db » для предыдущих версий 5.7.6, а для версий после этого використовуйте « mysqld –initialize » . Если MySQL установлен из дистрибутива Debian, каталог данных инициализируется по умолчанию. Никаких дополнительных действий не требуется.

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

Настройка аутентификации пользователя и привилегий (необязательно)

Пароль не используется, но подключаемый модуль по умолчанию « auth_socket » используется для аутентификации пользователя root MySQL в системах Ubuntu, работающих под управлением последних версий MySQL (5.7 и более поздние). Хотя это допускает некоторую большую безопасность и простоту использования, в некоторых случаях, например, разрешение доступа к внешней программе к пользователю, это может создать сложный сценарий.

Для использования пароля в качестве root для MySQL необходимо изменить метод аутентификации. Это изменение аутентификации имеет формулу « auth_socket » на « mysql_native_password ». В терминале открытия приглашения MySQL для выполнения этого действия.

 sudo mysql 

После этого проверьте метод аутентификации пользователя вашей учетной записи MySQL.

 mysql> ВЫБРАТЬ пользователя, аутентификационная_строка, плагин, хост ОТ mysql.user; 
 

В примере выше видно, что используется плагин auth_socket ; пользователь root завершит процесс аутентификации. Чтобы выполнить учетную запись root для аутентификации с использованием пароля, выполните команду « ALTER USER ».Выберите надежный пароль и учтите, что пароль root, настроенный на шаге 2, будет изменен с помощью этой команды.

 mysql> ALTER USER 'root' @ 'localhost' ИДЕНТИФИКАЦИЯ mysql_native_password ПО 'паролю'; 

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

 mysql> ПРИВИЛЕГИИ ПРОМЫВКИ; 

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

 mysql> ВЫБРАТЬ пользователя, аутентификационная_строка, плагин, хост ОТ mysql.user; 
 

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

 mysql> exit 

Теперь настало время протестировать установку MySQL.

Тестирование установки MySQL

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

 sudo systemctl status mysql.service
 

Вы можете начать с:

 sudo systemctl start mysql 

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

 sudo mysqladmin -p -u root version 

Это указывает на то, что MySQL запущен и работает.

Подводя итог

Теперь MySQL установлен на вашем сервере Ubuntu. Для удобства использования вы можете изменить его. Кроме того, добавление мер также возможно для повышения безопасности.

.
Order by desc mysql: ORDER BY оператор — Oracle PL/SQL •MySQL •MariaDB •SQL Server •SQLite

Order by desc mysql: ORDER BY оператор — Oracle PL/SQL •MySQL •MariaDB •SQL Server •SQLite

ORDER BY оператор — Oracle PL/SQL •MySQL •MariaDB •SQL Server •SQLite

Этот SQL руководство объясняет, как использовать SQL ORDER BY с синтаксисом и примерами.

Описание

SQL предложение ORDER BY используется для сортировки записей для набора результатов SELECT запроса.

Синтаксис

SELECT expressions
FROM tables
[WHERE conditions]
ORDER BY expression [ ASC | DESC ];

Параметры или аргументы

expressions — столбцы или расчеты, которые вы хотите получить.

tables – таблицы из которых вы хотите выгрузить данные. После оператора FROM должна быть указана хотя бы одна таблица.

WHERE conditions. Необязательный. Условия, которые должны быть выполнены для записей, которые будут выбраны.

ASC — необязательный. ASC сортирует набор результатов expressions в порядке возрастания. Этот параметр по умолчанию.

DESC — необязательный. DESC сортирует набор результатов expressions в порядке убывания.

Примечание

Если параметры ASC или DESC не указаны в операторе ORDER BY, то результаты expression будут отсортированы в порядке возрастания. Это эквивалентно ORDER BY expression ASC.

Пример сортировки без использования ASC / DESC

SELECT supplier_city FROM suppliers WHERE supplier_name = ‘IBM’ ORDER BY supplier_city;

SELECT supplier_city

FROM suppliers

WHERE supplier_name = ‘IBM’

ORDER BY supplier_city;

Этот SQL пример ORDER BY будет возвращать все записи отсортированные по полю supplier_city в порядке возрастания и будет эквивалентно следующему SQL запросу ORDER BY:

SELECT supplier_city FROM suppliers WHERE supplier_name = ‘IBM’ ORDER BY supplier_city ASC;

SELECT supplier_city

FROM suppliers

WHERE supplier_name = ‘IBM’

ORDER BY supplier_city ASC;

Большинство программистов при сортировке в порядке возрастания не указывают параметр ASC.

Пример сортировки в порядке убывания

При сортировке результирующего набора данных в порядке убывания, вы используете DESC в вашем ORDER BY следующим образом:

SELECT supplier_city FROM suppliers WHERE supplier_name = ‘IBM’ ORDER BY supplier_city DESC;

SELECT supplier_city

FROM suppliers

WHERE supplier_name = ‘IBM’

ORDER BY supplier_city DESC;

Этот SQL пример ORDER BY будет возвращать все записи отсортированные по полю supplier_city в порядке убывания.

Пример сортировки по относительной позиции

Вы также можете использовать SQL ORDER BY для сортировки по относительной позиции в наборе результатов, где первое поле в наборе результатов 1, следующее поле 2, и так далее.

SELECT supplier_city FROM suppliers WHERE supplier_name = ‘IBM’ ORDER BY 1 DESC;

SELECT supplier_city

FROM suppliers

WHERE supplier_name = ‘IBM’

ORDER BY 1 DESC;

Этот SQL ORDER BY будет возвращать все записи отсортированные по полю supplier_city в порядке убывания, так как поле supplier_city находится в положении # 1, а набор результатов и будет эквивалентен следующему SQL предложения ORDER BY:

SELECT supplier_city FROM suppliers WHERE supplier_name = ‘IBM’ ORDER BY supplier_city DESC;

SELECT supplier_city

FROM suppliers

WHERE supplier_name = ‘IBM’

ORDER BY supplier_city DESC;

Пример — использования ASC и DESC

При сортировке набора результатов с помощью SQL ORDER BY, вы можете использовать ASC и DESC в одном SQL запросе SELECT.

SELECT supplier_city, supplier_state FROM suppliers WHERE supplier_name = ‘Intel’ ORDER BY supplier_city DESC, supplier_state ASC;

SELECT supplier_city, supplier_state

FROM suppliers

WHERE supplier_name = ‘Intel’

ORDER BY supplier_city DESC, supplier_state ASC;

Этот SQL пример ORDER BY будет возвращать все отсортированные записи по полю supplier_city в порядке убывания, а по полю supplier_state в порядке возрастания.

12) ЗАКАЗАТЬ, ASC, DESC — CoderLessons.com

Сортировка результатов

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

Что такое ORDER BY в MySQL?

MySQL ORDER BY используется вместе с запросом SELECT для упорядоченной сортировки данных. Предложение order by используется для сортировки наборов результатов запроса в порядке возрастания или убывания.

SELECT statement... [WHERE condition | GROUP BY `field_name(s)` HAVING condition] ORDER BY `field_name(s)` [ASC | DESC];

ВОТ

  • «Оператор SELECT …» — это обычный запрос выбора
  • «|»  представляет альтернативы
  • «[ГДЕ условие | ГРУППА BY» field_name (s) «HAVING условие» — это необязательное условие, используемое для фильтрации наборов результатов запроса.
  • «ORDER BY» выполняет сортировку набора результатов запроса
  • «[ASC | DESC]» — это ключевое слово, используемое для сортировки наборов результатов в порядке возрастания или убывания. Примечание ASC используется по умолчанию.

Что такое ключевые слова DESC и ASC?

ASC — это краткая форма для восхождения

DESC — это краткая форма для спуска

Используется для сортировки результатов запроса в стиле сверху вниз.

Используется для сортировки результатов запроса в стиле снизу вверх

При работе с типами данных date самая ранняя дата отображается в верхней части списка.

, При работе с типами дат самая последняя дата отображается в верхней части списка.

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

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

При работе со строковыми типами данных набор результатов запроса сортируется от тех, которые начинаются с буквы А и заканчиваются буквой Z.

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

 

Ключевые слова DESC и ASC используются вместе в сочетании с оператором SELECT и предложением ORDER BY.

DESC и ASC синтаксис

Ключевое слово сортировки DESC имеет следующий основной синтаксис.

SELECT {fieldName(s) | *} FROM tableName(s) [WHERE condition] ORDER BY fieldname(s) ASC /DESC [LIMIT N]

ВОТ

  • SELECT {fieldName (s) | *} FROM tableName (s) — это оператор, содержащий поля и таблицы, из которых можно получить результирующий набор.
  • [ГДЕ условие] является необязательным, но может использоваться для фильтрации данных в соответствии с заданным условием.
  • ORDER BY field (s) является обязательным и является полем, в котором должна быть выполнена сортировка. Ключевое слово DESC указывает, что сортировка должна быть в порядке убывания.
  • [LIMIT] является необязательным, но может использоваться для ограничения количества результатов, возвращаемых из набора результатов запроса.

Примеры:

Давайте теперь посмотрим на практический пример —

 

Выполнение вышеупомянутого сценария в MySQL Workbench против myflixdb дает нам следующие результаты, показанные ниже.

membership_numberfull_namesgenderdate_of_birthphysical_addresspostal_addresscontct_numberemail
1Janet JonesFemale21-07-1980First Street Plot No 4Private Bag0759 253 542[email protected]
2Janet Smith JonesFemale23-06-1980Melrose 123NULLNULL[email protected]
3Robert PhilMale12-07-19893rd Street 34NULL12345[email protected]
4Gloria WilliamsFemale14-02-19842nd Street 23NULLNULLNULL
5Leonard HofstadterMaleNULLWoodcrestNULL845738767NULL
6Sheldon CooperMaleNULLWoodcrestNULL976736763NULL
7Rajesh KoothrappaliMaleNULLWoodcrestNULL938867763NULL
8Leslie WinkleMale14-02-1984WoodcrestNULL987636553NULL
9Howard WolowitzMale24-08-1981SouthParkP.O. Box 4563987786553

Let’s suppose the marketing department wants the members details arranged in decreasing order of Date of Birth.  This will help them send birthday greetings in a timely fashion. We can get the said list by executing a query like below —

SELECT * FROM members ORDER BY date_of_birth DESC;

Executing the above script in MySQL workbench against the myflixdb gives us the following results shown below.

The same query in ascending order

SELECT * FROM members ORDER BY date_of_birth ASC

Note: NULL values means no values (not zero or empty string) . Observe the way they have been sorted.

More examples

Let’s consider the following script that lists all the member records.

Executing the above script gives the following results shown below.

membership_numberfull_namesgenderdate_of_birthphysical_addresspostal_addresscontct_numberemail
1Janet JonesFemale21-07-1980First Street Plot No 4Private Bag0759 253 542[email protected]
2Janet Smith JonesFemale23-06-1980Melrose 123NULLNULL[email protected]
3Robert PhilMale12-07-19893rd Street 34NULL12345[email protected]
4Gloria WilliamsFemale14-02-19842nd Street 23NULLNULLNULL
5Leonard HofstadterMaleNULLWoodcrestNULL845738767NULL
6Sheldon CooperMaleNULLWoodcrestNULL976736763NULL
7Rajesh KoothrappaliMaleNULLWoodcrestNULL938867763NULL
8Leslie WinkleMale14-02-1984WoodcrestNULL987636553NULL
9Howard WolowitzMale24-08-1981SouthParkP.O. Box 4563987786553NULL

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

SELECT * FROM `members` ORDER BY `gender`;
membership_numberfull_namesgenderdate_of_birthphysical_addresspostal_addresscontct_numberemail
1Janet JonesFemale21-07-1980First Street Plot No 4Private Bag0759 253 542[email protected]
2Janet Smith JonesFemale23-06-1980Melrose 123NULLNULL[email protected]
4Gloria WilliamsFemale14-02-19842nd Street 23NULLNULLNULL
3Robert PhilMale12-07-19893rd Street 34NULL12345[email protected]
5Leonard HofstadterMaleNULLWoodcrestNULL845738767NULL
6Sheldon CooperMaleNULLWoodcrestNULL976736763NULL
7Rajesh KoothrappaliMaleNULLWoodcrestNULL938867763NULL
8Leslie WinkleMale14-02-1984WoodcrestNULL987636553NULL
9Howard WolowitzMale24-08-1981SouthParkP.O. Box 4563987786553NULL

Сначала отображались «женские» элементы, а затем «мужские», так как при использовании предложения order by без указания ключевого слова ASC или DESC по умолчанию MySQL сортирует набор результатов запроса в порядке возрастания.

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

SELECT * FROM `members` ORDER BY `gender`,`date_of_birth` DESC;

Выполнение вышеупомянутого сценария в MySQL Workbench против myflixdb дает следующие результаты.

По умолчанию столбец пола был отсортирован в порядке возрастания, а столбец даты рождения — в порядке убывания

Почему мы можем использовать DESC и ASC?

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

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

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

Ключевое слово ASC пригодится в таких ситуациях; мы можем отсортировать список фильмов по названию категории и названию фильма в порядке возрастания.

Резюме

  • Сортировка результатов запроса — это реорганизация строк, возвращаемых из набора результатов запроса, в порядке возрастания или убывания.
  • Ключевое слово DESC используется для сортировки набора результатов запроса в порядке убывания.
  • Ключевое слово ASC используется для сортировки набора результатов запроса в порядке возрастания.
  • И DESC, и ASC работают в сочетании с ключевым словом ORDER BY. Их также можно использовать в сочетании с другими ключевыми словами, такими как предложение WHERE и LIMIT.
  • По умолчанию для ORDER BY, когда ничего явно не указано, является ASC.

 

 

Сортировка данных в MySQL — Записки web-программиста

Для сортировки данных используется выражение ORDER BY `field_name` [ASC | DESC] [, `field_name2` [ASC | DESC]]

Существует 2 направления сортировки данных в SQL-запросе. ASC – по возрастанию и DESC – по убыванию. По-умолчанию данные сортируются по возрастанию.

Пример:
[mysql]mysql> SELECT `id` FROM `table` ORDER BY `id`;
mysql> SELECT `id` FROM `table` ORDER BY `id` ASC;[/mysql]


+----+
| id |
+----+
| 1  |
| 2  |
| 3  |
| 4  |
| 5  |
+----+

mysql> SELECT `id` FROM `table` ORDER BY `id` DESC;


+----+
| id |
+----+
| 5  |
| 4  |
| 3  |
| 2  |
| 1  |
+----+

Сортировку можно производить по нескольким полям таблицы. Причем, если указано ключевое слово DESC, упорядочивание по убыванию будет произведено по полю, которое ближе всего расположено к ключевому слову DESC.
Пример:
[mysql]mysql> SELECT `id`, `lastname`, `name` FROM `table`;[/mysql]


+----+----------+-----------+
| id | lastname | name      |
+----+----------+-----------+
| 1  | Иванов   | Сергей    |
| 2  | Алексеев | Владимир  |
| 3  | Петров   | Вячеслав  |
| 4  | Ампилов  | Александр |
| 5  | Сидоров  | Тимофей   |
| 6  | Сидоров  | Михаил    |
+----+----------+-----------+

[mysql]mysql> SELECT `id`, `lastname`, `name` FROM `table` ORDER BY `lastname`, `name`;[/mysql]


+----+-----------+-----------+
| id | lastname  | name      |
+----+-----------+-----------+
| 2  | Алексеев  | Владимир  |
| 4  | Ампилов   | Александр |
| 1  | Иванов    | Сергей    |
| 3  | Петров    | Вячеслав  |
| 6  | Сидоров   | Михаил    |
| 5  | Сидоров   | Тимофей   |
+----+-----------+-----------+

[mysql]mysql> SELECT `id`, `lastname`, `name` FROM `table` ORDER BY `lastname`, `name` DESC;[/mysql]


+----+-----------+-----------+
| id | lastname  | name      |
+----+-----------+-----------+
| 2  | Алексеев  | Владимир  |
| 4  | Ампилов   | Александр |
| 1  | Иванов    | Сергей    |
| 3  | Петров    | Вячеслав  |
| 5  | Сидоров   | Тимофей   |
| 6  | Сидоров   | Михаил    |
+----+-----------+-----------+

Сортировка по определённому порядку в MySQL запросе

Если нужно отсортировать список по определённому порядку, например список чисел с начала 4,5,1 и далее по возрастающей, то можно создать правило сортировки например с параметром условия с дополнительными колонками для сортировки:


SELECT id,
-- дополнительные колонки для сортировки
IF(id=4, 1, 0) c1, IF(id=5, 1, 0) c2, IF(id=1, 1, 0) c3 
FROM test 
WHERE id IN(1,2,3,4,5,6,7,8,9,10)
-- теперь сортируем по дополнительным колонкам по убывающей и далее по возрастающей
ORDER BY c1 DESC, c2 DESC, c3 DESC, id ASC

Ответ запроса:


id	c1	c2	c3
4	1	0	0
5	0	1	0
1	0	0	1
6	0	0	0
7	0	0	0
8	0	0	0
9	0	0	0
10	0	0	0

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


SELECT id 
FROM test 
WHERE id IN(1,2,3,4,5,6,7,8,9,10)
-- сортируем по условиям
ORDER BY IF(id=4, 1, 0) DESC, IF(id=5, 1, 0) DESC, IF(id=1, 1, 0) DESC, id ASC

Ответ запроса:


id
4
5
1
6
7
8
9
10

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


SELECT id 
FROM test 
WHERE id IN(1,2,3,4,5,6,7,8,9,10)
-- сортируем по сравниваниям
ORDER BY id=4 DESC, id=5 DESC, id=1 DESC, id ASC

Ответ запроса такой же:


id
4
5
1
6
7
8
9
10

Вместо оператора условия можно использовать например CASE:


SELECT id
FROM test 
WHERE id IN(1,2,3,4,5,6,7,8,9,10)
ORDER BY 
-- сортируем по выбору
CASE id
    WHEN 4 THEN 1
    WHEN 5 THEN 2
    WHEN 1 THEN 3
    ELSE 4
END ASC

Ответ запроса такой же:


id
4
5
1
6
7
8
9
10

Команда SQL для выборки из базы данных часть 2 (ORDER BY, LIMIT, SELECT AS, COUNT)

При запросе к базе данных существует возможность ограничить выборку по количеству возвращаемых строк. А ещё можно запросить отсортированный по какому-либо параметру результат.

Сортировка (ORDER BY)

С помощью команды ORDER BY можно сделать сортировку результата, который будет выдан из базы данных. Результат можно сортировать по значению поля. Либо в прямом направлении «ASC», либо в обратном направлении «DESC». Приведём пример использования:
SELECT * FROM `USERS` WHERE `ID` > 2 ORDER BY `ID` DESC;
В конце этого запроса можно увидеть конструкцию «ORDER BY `ID` DESC», которая говорит о том, что выборка будет отсортирована по убыванию значения столбца ID. Если нужно сделать по возрастанию, то будет такой запрос:
SELECT * FROM `USERS` WHERE `ID` > 2 ORDER BY `ID` ASC;
Можно сделать две сортировки. Для этого после «ORDER BY» необходимо написать через запятую название столбца и направление сортировки. К примеру, отсортируем выборку по возрастанию ID но по убыванию даты (столбец DATE):
SELECT * FROM `USERS` ORDER BY `ID` ASC, `DATE` DESC;

Ограничение (LIMIT)

При работе с базой надо всегда помнить, что база данных — это довольно медленный инструмент. Поэтому необходимо минимизировать не только количество запросов к ней, но и количество выбранных из неё данных. Это можно сделать тремя способами. И лучше использовать их все одновременно:
  • Делать выборку определённых полей, а не всех полей таблицы. Для этого после команды SELECT необходимо ставить не *, а название выбираемых полей через запятую.
  • Использовать условия WHERE, которые ограничивают размер выборки.
  • Использовать LIMIT (лимит) на количество выбираемых строк.
О последнем способе поговорим отдельно. Лимит задаётся числом. К примеру, если написать «LIMIT 1;», то в результате SQL запроса будут возвращены не более 10 строк из таблицы. Чтобы установить лимит, напишите его в самом конце запроса:
SELECT * FROM `USERS` LIMIT 10;

Установка лимита на выборку может значительно ускорить некоторые запросы к базе. Не забывайте, что чем медленнее загружаются страницы Вашего сайта, тем меньше посетителей на нём будет. Потому что люди не любят ждать загрузки страницы. Загрузка длительностью более 2 секунд отталкивает от сайта более 60% его аудитории.

Переименовывание столбца при запросе (AS)

Бывают случаи, когда необходимо переименовать столбец в результатах выборки. Зачастую это делается для упрощения последующего программирования обработки выборки. Представьте, что у нас есть таблица со столбцом, который называется «SECTION_FULL_NUMBER»:
+---------------------+
| SECTION_FULL_NUMBER |
+---------------------+
| 6                   |
+---------------------+
| 118                 |
+---------------------+
| 21                  |
+---------------------+
Использовать такое длинное имя не хочется, поэтому попробуем его укоротить до слова «NAME». Сделать это нам поможет команда «AS», которую необходимо поставить после называния выбираемого поля, вот так:
SELECT `SECTION_FULL_NUMBER` AS 'SECTION' FROM `USERS`;
В результате выполнения такого SQL запроса мы получим таблицу, но название столбца будет заменено на ‘SECTION’:
+---------+
| SECTION |
+---------+
| 6       |
+---------+
| 118     |
+---------+
| 21      |
+---------+
При переименовании в SELECT нельзя указать новое название столбца, которое будет совпадать с названием другого столбца.

Количесво строк в выборке (COUNT)

Одной из самых частых необходимостей является подсчёт количества строк вы вборке. Но как было сказано ранее, получение большого количества строк и столбцов из базы происходит довольно долго, что замедляет сайт. Поэтому не стоит пытаться подсчитывать количество строк после получения выборки. Лучше получить количество строк непосредственно из запроса. Для этого исопльзуется команда «COUNT(*)» (по английски «count» переводится как «количество»). Попробуем использовать её в SQL запросе:
SELECT COUNT(*) FROM `USERS`;
В результате выполнения такого запроса будет получен один столбце с одной строкой:
+----------+
| COUNT(*) |
+----------+
| 3        |
+----------+
Цифра «3» в примере означает, что в таблице было всего 3 записи (3 строчки). Если попробовать обработать данные, возвращённые базой, то может возникнуть проблема с названием столбца (в нём есть скобки и звёздочка). Поэтому воспользуемся рекомендацией из предыдущего параграфа и переименуем столбец в «CNT»:
SELECT COUNT(*) AS 'CNT' FROM `USERS`;
Теперь результат будет легче обработать благодаря лаконичному названию столбца, содержащему только латинские буквы:
+-----+
| CNT |
+-----+
| 2   |
+-----+

Запрос SQL для сортировки результата выборки

Вы здесь: Главная — MySQL — SQL — Запрос SQL для сортировки результата выборки

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

Давайте не буду Вас мучать, а сразу дам SQL-запрос на сортировку результата выборки:

SELECT * FROM users ORDER BY date_registration

В результате мы получим result_set, в котором записи отсортированы по возрастанию поля «date_registration«. Чтобы данные сортировались по убыванию, нужно использовать параметр «DESC«:

SELECT * FROM users ORDER BY date_registration DESC

Результат тот же, что и в предыщем запросе, но данные расположены по убыванию относительно поля «date_registration«.

Разумеется, никто Вам не мешает использовать полноценный SQL-запрос на выборку записей с сортировкой:

SELECT login FROM users WHERE id > 20 AND id < 100 ORDER BY login LIMIT 10,30

После выполнения этого SQL-запроса у нас получится result_set, в котором содержатся записи из таблицы users (только поле «login«), причём id этих записей больше 20 и меньше 100, сортировка записей по возрастанию поля «login«, а берём мы записи, начиная с 10-ой включительно в количестве 30-ти штук.

Вновь ничего сложного. Единственная проблема: «Как это всё запомнить?«. Ответ прост: практика, практика и ещё раз практика! А если забудете всегда есть справочник или PHPMyAdmin, в котором можно легко узнать SQL-запрос на любое действие.

Полный курс по PHP и MySQL: http://srs.myrusakov.ru/php

  • Создано 19.01.2011 18:17:22
  • Михаил Русаков
Предыдущая статья Следующая статья

Копирование материалов разрешается только с указанием автора (Михаил Русаков) и индексируемой прямой ссылкой на сайт (http://myrusakov.ru)!

Добавляйтесь ко мне в друзья ВКонтакте: http://vk.com/myrusakov.
Если Вы хотите дать оценку мне и моей работе, то напишите её в моей группе: http://vk.com/rusakovmy.

Если Вы не хотите пропустить новые материалы на сайте,
то Вы можете подписаться на обновления: Подписаться на обновления

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

Порекомендуйте эту статью друзьям:

Если Вам понравился сайт, то разместите ссылку на него (у себя на сайте, на форуме, в контакте):

  1. Кнопка:
    <a href=»https://myrusakov.ru» target=»_blank»><img src=»https://myrusakov.ru/images/button.gif» alt=»Как создать свой сайт» /></a>

    Она выглядит вот так:

  2. Текстовая ссылка:
    <a href=»https://myrusakov.ru» target=»_blank»>Как создать свой сайт</a>

    Она выглядит вот так: Как создать свой сайт

  3. BB-код ссылки для форумов (например, можете поставить её в подписи):
    [URL=»https://myrusakov.ru»]Как создать свой сайт[/URL]

MySQL: пункт ORDER BY


Это учебное пособие по MySQL объясняет, как использовать предложение MySQL ORDER BY с синтаксисом и примерами.

Описание

Предложение MySQL ORDER BY используется для сортировки записей в наборе результатов.

Синтаксис

Синтаксис предложения ORDER BY в MySQL:

 выражения SELECT
ИЗ таблиц
[ГДЕ условия]
ORDER BY выражение [ASC | DESC]; 

Параметры или аргументы

выражений
Столбцы или вычисления, которые вы хотите получить.
столов
Таблицы, из которых вы хотите получить записи. В предложении FROM должна быть хотя бы одна таблица.
ГДЕ условия
Необязательно. Условия, которые должны быть выполнены для выбора записей.
ASC
Необязательно. Он сортирует набор результатов в порядке возрастания по выражению (по умолчанию, если модификатор не указан).
DESC
Необязательно. Он сортирует набор результатов в порядке убывания по и выражению .

Пример — сортировка без использования атрибута ASC / DESC

Предложение MySQL ORDER BY может использоваться без указания модификатора ASC или DESC. Когда этот атрибут не указан в предложении ORDER BY, по умолчанию используется порядок сортировки ASC или возрастающий порядок.

Например:

 ВЫБРАТЬ город
ОТ клиентов
ГДЕ customer_name = 'Apple'
ЗАКАЗАТЬ ПО городу; 

Этот пример MySQL ORDER BY вернет все записи, отсортированные по полю city в порядке возрастания, и будет эквивалентен следующему предложению ORDER BY:

 ВЫБРАТЬ город
ОТ клиентов
ГДЕ customer_name = 'Apple'
ЗАКАЗАТЬ ПО городам АСК; 

Большинство программистов опускают атрибут ASC при сортировке по возрастанию.

Пример — сортировка по убыванию

При сортировке набора результатов в порядке убывания вы используете атрибут DESC в предложении ORDER BY следующим образом:

 ВЫБЕРИТЕ last_name, first_name, city
ИЗ контактов
ГДЕ last_name = 'Джонсон'
ЗАКАЗАТЬ ПО городу DESC; 

Этот пример MySQL ORDER BY вернет все записи, отсортированные по полю city в порядке убывания.

Пример — сортировка по относительной позиции

Вы также можете использовать предложение MySQL ORDER BY для сортировки по относительной позиции в наборе результатов, где первое поле в наборе результатов равно 1.Следующее поле — 2 и так далее.

Например:

 ВЫБЕРИТЕ last_name, first_name, city
ИЗ контактов
ГДЕ last_name = 'Джонсон'
ЗАКАЗАТЬ ПО 3 DESC; 

Этот MySQL ORDER BY вернет все записи, отсортированные по полю city в порядке убывания, поскольку поле city находится в позиции № 3 в наборе результатов и будет эквивалентно следующему предложению ORDER BY:

 ВЫБЕРИТЕ last_name, first_name, city
ИЗ контактов
ГДЕ last_name = 'Джонсон'
ЗАКАЗАТЬ ПО городу DESC; 

Пример — использование атрибутов ASC и DESC

При сортировке набора результатов с помощью предложения MySQL ORDER BY вы можете использовать атрибуты ASC и DESC в одном операторе SELECT.

Например:

 ВЫБРАТЬ поставщик_город, состояние_ поставщика
ОТ поставщиков
ГДЕ имя_поставщика = 'Microsoft'
ЗАКАЗАТЬ: город_поставщика DESC, состояние_поставщика ASC; 

Этот MySQL ORDER BY вернет все записи, отсортированные по полю supplier_city в убывающем порядке, с вторичной сортировкой по supplier_state в возрастающем порядке.

MySQL — ORDER BY и LIMIT — MySQL — DYclassroom

ChartJS CodeMirror CSS ES6 Ворчание HTML JavaScript jQuery JWT TinyMCE Машинопись

Язык программирования

Программирование на C Ява PHP Python

Контроль версий

Git

База данных

MongoDB MySQL

Unix / Linux

Программирование оболочки Unix Vim

Тестирование

Мокко Мокко Чай PHPUnit

Код

Программирование Код JavaScript

Проект

Эскиз Фотошоп

Подробнее…

Apache ActiveMQ Зеркалка Деньги

Веб-разработчик

CSS HTML JavaScript jQuery

База данных

СУБД Redis SQL

Язык программирования

Программирование на C PHP Символы ASCII База данных Греческие буквы HTML-объекты JavaScript Linux Математические символы Римские цифры Сервер Интернет YouTube Больше… Mac Ubuntu VMware Веб-сайт WordPress

Интернет

Редактор начальной загрузки Смеситель цветов CSS Minifier HTML редактор HTML Entities Encoder Декодер Айпи адрес Минификатор JavaScript URL Encoder Decoder

Util

День Свидания Найдите Fileinfo Изображение в Base64 Генератор случайных паролей

Калькулятор

Калькулятор сложных процентов Калькулятор EMI FD — Калькулятор срочного депозита RD — Калькулятор периодических депозитов Калькулятор простых процентов Вопросы о способностях Столица страны Общий английский Пробный тест Умножить Картинная головоломка Плюс Минус Слайдер Пазл Судоку Крестики-нолики C # проект Проект обработки изображений Java

SQL | ЗАКАЗАТЬ — GeeksforGeeks

Оператор ORDER BY в sql используется для сортировки полученных данных по возрастанию или убыванию в соответствии с одним или несколькими столбцами.

  • По умолчанию ORDER BY сортирует данные в порядке возрастания .
  • Мы можем использовать ключевое слово DESC для сортировки данных в порядке убывания и ключевое слово ASC для сортировки в порядке возрастания.

Синтаксис всех способов использования ORDER BY показан ниже:

  • Сортировка по одному столбцу: Для сортировки в порядке возрастания или убывания мы можем использовать ключевые слова ASC или DESC соответственно.
    Синтаксис:
      ВЫБРАТЬ * ИЗ имя_таблицы ORDER BY имя_столбца ASC | DESC 
    
      table_name : имя таблицы. имя_столбца : имя столбца, в соответствии с которым необходимо расположить данные.
      ASC : для сортировки данных в порядке возрастания.
      DESC : для сортировки данных в порядке убывания.
      | : используйте ASC или DESC для сортировки по возрастанию или убыванию
     
  • Сортировка по нескольким столбцам: Для сортировки в порядке возрастания или убывания мы можем использовать ключевые слова ASC или DESC соответственно. Для сортировки по нескольким столбцам разделяйте имена столбцов оператором (,).
    Синтаксис:
      SELECT * FROM имя_таблицы ORDER BY column1 ASC | DESC, column2 ASC | DESC 
     


Запросы:

  • Сортировка по одному столбцу : В этом примере мы извлечем все данные из таблицы Student и отсортируем результат в порядке убывания согласно столбцу ROLL_NO .
     ВЫБРАТЬ * ИЗ УЧЕБНОГО ЗАКАЗА ПО ROLL_NO DESC;
     

    Выход:

    ROLL_NO НАИМЕНОВАНИЕ АДРЕС ТЕЛЕФОН Возраст
    8 НИРАДЖ АЛИПУР XXXXXXXXXX 19
    7 РОХИТ БАЛУРГАТ XXXXXXXXXX 18
    6 DHANRAJ BARABAJAR XXXXXXXXXX 20
    5 SAPTARHI КОЛКАТА XXXXXXXXXX 19
    4 ГЛУБИНА RAMNAGAR XXXXXXXXXX 18
    3 РИЯНКА СИЛИГУРИ XXXXXXXXXX 20
    2 ПРАТИК BIHAR XXXXXXXXXX 19
    1 HARSH ДЕЛИ XXXXXXXXXX 18

    Для сортировки в порядке возрастания мы должны использовать ASC вместо DESC.

  • Сортировка по нескольким столбцам : В этом примере мы извлечем все данные из таблицы Student , а затем отсортируем результат в порядке возрастания сначала в соответствии со столбцом Age . а затем в порядке убывания согласно столбцу ROLL_NO .
     SELECT * FROM Student ORDER BY Age ASC, ROLL_NO DESC;
     

    Выход:

    ROLL_NO НАИМЕНОВАНИЕ АДРЕС ТЕЛЕФОН Возраст
    7 РОХИТ БАЛУРГАТ XXXXXXXXXX 18
    4 ГЛУБИНА RAMNAGAR XXXXXXXXXX 18
    1 HARSH ДЕЛИ XXXXXXXXXX 18
    8 НИРАДЖ АЛИПУР XXXXXXXXXX 19
    5 SAPTARHI КОЛКАТА XXXXXXXXXX 19
    2 ПРАТИК BIHAR XXXXXXXXXX 19
    6 DHANRAJ BARABAJAR XXXXXXXXXX 20
    3 РИЯНКА СИЛИГУРИ XXXXXXXXXX 20

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

    Есть несколько строк с одинаковым возрастом. Теперь при дальнейшей сортировке этого набора результатов в соответствии с ROLL_NO строки с одинаковым возрастом будут сортироваться в соответствии с ROLL_NO в порядке убывания.

  • Обратите внимание, что: ASC является значением по умолчанию для предложения ORDER BY. Таким образом, если вы не укажете ничего после имени столбца в предложении ORDER BY, выходные данные по умолчанию будут отсортированы в порядке возрастания.

    Пример: Следующий запрос даст результат, аналогичный приведенному выше:

     SELECT * FROM Student ORDER BY Age, ROLL_NO DESC;
     

    Выход:

    ROLL_NO НАИМЕНОВАНИЕ АДРЕС ТЕЛЕФОН Возраст
    7 РОХИТ БАЛУРГАТ XXXXXXXXXX 18
    4 ГЛУБИНА RAMNAGAR XXXXXXXXXX 18
    1 HARSH ДЕЛИ XXXXXXXXXX 18
    8 НИРАДЖ АЛИПУР XXXXXXXXXX 19
    5 SAPTARHI КОЛКАТА XXXXXXXXXX 19
    2 ПРАТИК BIHAR XXXXXXXXXX 19
    6 DHANRAJ BARABAJAR XXXXXXXXXX 20
    3 РИЯНКА СИЛИГУРИ XXXXXXXXXX 20

Эта статья предоставлена ​​ Harsh Agarwal Если вам нравится GeeksforGeeks и вы хотите внести свой вклад, вы также можете написать статью, используя свой вклад.geeksforgeeks.org или отправьте свою статью по адресу [email protected] Смотрите, как ваша статья появляется на главной странице GeeksforGeeks, и помогайте другим гикам.

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

Вниманию читателя! Не прекращайте учиться сейчас. Получите все важные концепции теории CS для собеседований SDE с курсом теории CS по приемлемой для студентов цене и будьте готовы к отрасли.


Теги статей:

SQL ORDER BY — SQL

Команда ORDER BY позволяет проверять строки в результате запроса SQL.Il est possible de trier les données sur une ou plusieurs columns, par ordre ascendant or Потомок.

Синтаксис

Не требуется, чтобы фильтр сухого вещества в протоколе результатов результатов использовал команду ORDER BY de la sorte:

 SELECT columnsne1, columns2
ИЗ таблицы
ЗАКАЗАТЬ: Colonne1 

По умолчанию результаты поиска по восходящей, все это возможно с использованием суффикса DESC après le nom de la Colonne. Par ailleurs, il est possible de trier sur plusieurs columns en les séparant par une virgule.Не требуется дополнительное выполнение работ по запросу:

 ВЫБЕРИТЕ Colonne1, Colonne2, Colonne3
ИЗ таблицы
ЗАКАЗАТЬ: Colonne1 DESC, Colonne2 ASC 

A noter: il n’est pas обязательно d’utiliser le суффикс «ASC», который должен быть получен после того, как наши результаты будут классифицироваться по восходящей по умолчанию. Toutefois, c’est plus pratique pour mieux s’y retrouver, surtout si on a oublié l’ordre par défaut.

Exemple

Pour l’ensemble de nos examples, nous allons prendre une base «utilisateur» de test, qui contient les données suivantes:

906 tar prenom

04 04 9017 Dub10410 9017 -23
id nom
1 Durand Maurice 2012-02-05 145
2 Dupond Fabrice 2012-02-07 Fabienne 2012-02-13 90
4 Dubois Chloé 2012-02-16 98
5 27

Pour récupérer la liste de ces utilisateurs par ordre alphabétique du nom de famille, il est possible d’utiliser la req uête suivante:

 SELECT *
ОТ утилизатора
ЗАКАЗАТЬ nom 

Результат:

0 1 0
id nom prenom date_inscription tarif_total
Dubéis
5 Dubois Simon 2012-02-23 27
2 Dupond Fabrice 2012-02-07 65 65 Maurice 2012-02-05 145
3 Durand Fabienne 2012-02-13 90

En utilisant de triux mthodes retourner les utilisateurs par ordre alphabétique ET pour ceux qui ont le même nom de famille, les trier par ordre décroissant d’inscription.La Requête serait alors la suivante:

 SELECT *
ОТ утилизатора
ЗАКАЗАТЬ по номеру, дате_напись DESC 

Результат:

74

id nom prenom date_inscription tarif_total
27
4 Dubois Chloé 2012-02-16 98
2 Dupond Fabrice

-07 9017 3

Durand Fabienne 2012-02-13 90
1 Durand Maurice 2012-02-05 145
9000 de2 9000 recherche 9000 de2 9000 de2 поиск для получения дополнительной информации страница:

  • ЗАКАЗАТЬ ПО DESC
  • ЗАКАЗАТЬ ПО ASC

MySQL 排序 |菜鸟 教程

知道 从 MySQL 表 中 使用 SQL SELECT 语句 来 读取 数据。

我们 需要 对 读取 的 数据 进行 我们 MySQL ORDER BY 子句 来 设定 你 按 哪个 哪种 排序 , 再 返回 搜索 结果。

语法

以下 是 SQL SELECT 语句 使用 ORDER BY 子句 将 查询 数据 排序 后再 返回 数据 :

ВЫБРАТЬ поле1, поле2 ,...fieldN FROM имя_таблицы1, имя_таблицы2 ...
ORDER BY field1 [ASC [DESC] [默认 ASC]], [field2 ...] [ASC [DESC] [默认 ASC]]
 
  • 你 可以 使用 任何 字段 来 作为 排序 的 条件 , 从而 返回 排序 后 的 查询 结果。
  • 你 可以 设定 多个 字段 来 排序。
  • 你 可以 使用 ASC 或 DESC 关键字 来 设置 查询 是 按 升序 或 降序 排列。 下 , 它 是 按 升序 排列。
  • 你 可以 添加 ГДЕ … КАК 子句 来 设置 条件。

在 命令 提示符 中 使用 ЗАКАЗАТЬ В 子句

语句 SQL SELECT 语句 中 使用 ORDER BY 子句 来 读取 MySQL 数据 表 runoob_tbl 中 的 数据 :

实例

尝试 以下 实例 , 结果 将按 升序 及 降序 排列。

SQL

mysql> используйте RUNOOB; База данных изменена mysql> SELECT * из runoob_tbl ORDER BY submission_date ASC; + ———— + ————— + ————— + —— ———— + | runoob_id | runoob_title | runoob_author | submission_date | + ———— + ————— + ————— + —— ———— + | 3 |学习 Java | RUNOOB.COM | 2015-05-01 | | 4 |学习 Python | RUNOOB.COM | 2016-03-06 | | 1 |学习 PHP |菜鸟 教程 | 2017-04-12 | | 2 |学习 MySQL |菜鸟 教程 | 2017-04-12 | + ———— + ————— + ————— + —— ———— + 4 ряда в наборе (0,01 сек) mysql> SELECT * из runoob_tbl ORDER BY submission_date DESC; + ———— + ————— + ————— + —— ———— + | runoob_id | runoob_title | runoob_author | submission_date | + ———— + ————— + ————— + —— ———— + | 1 |学习 PHP |菜鸟 教程 | 2017-04-12 | | 2 |学习 MySQL |菜鸟 教程 | 2017-04-12 | | 4 |学习 Python | RUNOOB.COM | 2016-03-06 | | 3 |学习 Java | RUNOOB.COM | 2015-05-01 | + ———— + ————— + ————— + —— ———— + 4 ряда в наборе (0,01 сек)

runoob_tbl 表 中 所有 数据 并按 submission_date 字段 的 升序 排列。


在 PHP 脚本 中 使用 ЗАКАЗАТЬ В 子句

В PHP есть mysqli_query (), в SQL SELECT, ORDER BY,

函数 用于 SQL , 然后 通过 PHP 函数 mysqli_fetch_array () 来 输出 所有 查询 的 数据。

实例

以下 , 查询 后 的 数据 按 submission_date 字段 的 降序 排列 后 返回。

MySQL ЗАКАЗАТЬ 测试 :

菜鸟 教程 MySQL ORDER BY 测试

‘; echo ‘ ‘; в то время как ($ row = mysqli_fetch_array ($ retval, MYSQL_ASSOC)) { echo ««.»«. ««. ««. ««; } echo ‘
教程 ID 标题 作者 提交 日期
{$ row [‘runoob_id’]} {$ row [‘runoob_title’]} {$ row [‘runoob_author’]} {$ row [‘дата_подачи’]}
‘; mysqli_close ($ conn); ?>

输出 结果 如下 图 所示 :

ORDER BY en MySQL: DESC y ASC

Clasificación de resultados

Miramos cómo получает данные из таблиц с использованием команды SELECCIONAR. Los resultados se devolvieron en el mismo orden en que segotigaron los registros a la base de datos.Este es el orden de clasificación preterminado. En esta sección, veremos cómo podemos ordenar los resultados de nuestra consulta. La clasificación es simplemente reorganizar los resultados de nuestra consulta de una manera específica . La clasificación se puede realizar en una sola columna o en más de una columna. Se puede hacer en números, cadenas y tipos de datos de fecha.

Orden por cláusula

La cláusula order by se usa para ordenar los concuntos de resultados de la consulta en orden ascendente o descendente.С США хунто с советом SELECT. Tiene la siguiente sintaxis básica.

Instrucción SELECT … [condición WHERE | GROUP BY `field_name (s)` HAVING condition] ORDER BY `field_name (s)` [ASC | DESC];

Instrucción SELECT … [condición WHERE | GROUP BY `field_name (s)` HAVING condition] ORDER BY `field_name (s)` [ASC | DESC];

AQU

  • “Instrucción SELECT…” es la consulta de selección regular
  • «|» представляют альтернативы
  • “[ГДЕ условие | GROUP BY field_name (s) HAVING condition » es la condición opcional utilizada para filtrar los Concuntos de resultados de la consulta.
  • «ORDER BY» realiza la clasificación del concunto de resultados de la consulta
  • “[ASC | DESC] ” es la palabra clave utilizada para ordenar los concuntos de resultados en orden ascendente o descendente. Nota ASC se usa como el valor predterminado.

¿Cuáles son las palabras clave DESC y ASC?

ASC es la forma abreviada для зажима DESC es la forma abreviada para descender
Se utiliza para ordenar los resultados de la consulta en un estilo de arriba a abajo. Se usa para ordenar los resultados de la consulta en un estilo de abajo hacia arriba
Al trabajar en tipos de datos de fecha, la fecha más temprana se muestra en la parte superior de la lista. . Al trabajar en tipos de fecha, la última fecha se muestra en la parte superior de la lista.
Al trabajar con tipos de datos numéricos, los valores más bajos se muestran en la parte superior de la lista. Al trabajar con tipos de datos numéricos, los valores más altos se muestran en la parte superior del concunto de resultados de la consulta.
Al trabajar con tipos de datos de cadena, el concunto de resultados de la consulta se ordena desde aquellos que comienzan con la letra A hasta la letra Z. Cuando se trabaja con tipos de datos de cadena, el concunto de resultados de la consulta se ordena de aquellos que comienzan con la letra Z bajando a la letra A.

Las palabras clave DESC y ASC se usan juntas junto con la Instrucción SELECT y la cláusula ЗАКАЗАТЬ.

Sintaxis DESC y ASC

La palabra clave de clasificación DESC tiene la siguiente sintaxis básica.

SELECCIONAR {fieldName (s) | *} FROM tableName (s) [WHERE condition] ORDER BY nombre (s) de campo ASC / DESC [LIMIT N]

SELECCIONAR {fieldName (s) | *} FROM tableName (s) [WHERE condition] ORDER BY nombre (s) de campo ASC / DESC [LIMIT N]

AQU

  • SELECCIONAR {fieldName (s) | *} FROM tableName (s) es la declaración que contiene los campos y tablas de los que se obtiene el concunto de resultados.
  • [WHERE condition] es opcional pero se puede usar para filtrar los datos de acuerdo con la condición dada.
  • ЗАКАЗАТЬ fieldname (s) обязательное условие y es el campo en el que se realizará la clasificación. La palabra clave DESC especifica que la clasificación debe ser en orden descendente.
  • [LIMIT] es opcional, pero se puede usar para limitar el número de resultados devueltos desde el коньюнто де resultados de la consulta.

Ejemplos:

Veamos ahora un ejemplo practico:

Создайте предварительный сценарий в рабочей среде MySQL против myflixdb, если он не дает результатов, которые были получены в результате непрерывного действия.

número de soc полных номеров género fecha de nacimiento dirección física direct postal contct_number correo electrónico
1 Джанет Джонс Хембра 21-07-1980 Calle Primera Parcela № 4 Bolsa Privada 0759 253 542 janetjones @ yagoo.см
2 Джанет Смит Джонс Хембра 23-06-1980 Мелроуз 123 NULO NULO [email protected]
3 Роберт Фил Masculino 12-07-1989 3-я улица, 34, NULO 12345 [email protected]
4 Глория Уильямс Хембра 14-02-1984 2-я улица, 23, NULO NULO NULO
5 Леонард Хофштадтер Masculino NULO Вудкрест NULO 845738767 NULO
6 Шелдон Купер Masculino NULO Вудкрест NULO 976736763 NULO
7 Раджеш Кутраппали Masculino NULO Вудкрест NULO 938867763 NULO
8 Лесли Винкль Masculino 14-02-1984 Вудкрест NULO 987636553 NULO
9 Говард Воловиц Masculino 24-08-1981 Parque del Sur а / я 4563 987786553

Supongamos que el департамент маркетинга quiere que los detalles de los miembros se organicen en orden deciente de Fecha de nacimiento.Esto les ayudará enviar saludos de cumpleaños de manera oportuna. Podemos obtener dicha lista ejecutando una consulta como a continación —

SELECCIONAR * DE miembros ORDEN POR date_of_birth DESC;

SELECCIONAR * DE miembros ORDEN POR date_of_birth DESC;

Создайте предварительный сценарий в рабочей среде MySQL против myflixdb, если он не дает результатов, которые были получены в результате непрерывного действия.

La misma consulta en orden ascendente

SELECCIONAR * ОТ miembros PEDIR POR дата_рождения ASC

Nota: los valores NULL означает отсутствие сена (no cero o cadena vacía).Соблюдайте la forma en que se han ordenado.

Más ejemplos

Считайте siguiente secuencia de comandos que enumera todos los registros de miembros.

СЕЛЕКЦИОНАР * ОТ `miembros`;

СЕЛЕКЦИОНАР * ОТ `miembros`;

Ejecutar el script anterior proporciona los siguientes resultados que se muestran a continación.

número de soc полных номеров género fecha de nacimiento dirección física direct postal contct_number correo electrónico
1 Джанет Джонс Хембра 21-07-1980 Calle Primera Parcela № 4 Bolsa Privada 0759 253 542 janetjones @ yagoo.см
2 Джанет Смит Джонс Хембра 23-06-1980 Мелроуз 123 NULO NULO [email protected]
3 Роберт Фил Masculino 12-07-1989 3-я улица, 34, NULO 12345 [email protected]
4 Глория Уильямс Хембра 14-02-1984 2-я улица, 23, NULO NULO NULO
5 Леонард Хофштадтер Masculino NULO Вудкрест NULO 845738767 NULO
6 Шелдон Купер Masculino NULO Вудкрест NULO 976736763 NULO
7 Раджеш Кутраппали Masculino NULO Вудкрест NULO 938867763 NULO
8 Лесли Винкль Masculino 14-02-1984 Вудкрест NULO 987636553 NULO
9 Говард Воловиц Masculino 24-08-1981 Parque del Sur а / я 4563 987786553 NULO

Supongamos queremos obtener una lista que ordene el concunto de resultados de la consulta usando el campo de género, usaríamos la secuencia de comandos que se muestra a continación.

SELECCIONE * FROM `members` ORDER BY` пол`;

SELECCIONE * FROM `members` ORDER BY` пол`;

número de soc полных номеров género fecha de nacimiento dirección física direct postal contct_number correo electrónico
1 Джанет Джонс Хембра 21-07-1980 Calle Primera Parcela № 4 Bolsa Privada 0759 253 542 janetjones @ yagoo.см
2 Джанет Смит Джонс Хембра 23-06-1980 Мелроуз 123 NULO NULO [email protected]
4 Глория Уильямс Хембра 14-02-1984 2-я улица, 23, NULO NULO NULO
3 Роберт Фил Masculino 12-07-1989 3-я улица, 34, NULO 12345 rm @ tstreet.com
5 Леонард Хофштадтер Masculino NULO Вудкрест NULO 845738767 NULO
6 Шелдон Купер Masculino NULO Вудкрест NULO 976736763 NULO
7 Раджеш Кутраппали Masculino NULO Вудкрест NULO 938867763 NULO
8 Лесли Винкль Masculino 14-02-1984 Вудкрест NULO 987636553 NULO
9 Говард Воловиц Masculino 24-08-1981 Parque del Sur а / я 4563 987786553 NULO

Los miembros «femeninos» se han mostrado primero seguidos por los miembros «masculinos», esto es porque cuando se utiliza la cláusula order by sin especificar la palabra clave ASC o DESC, de forma preterminada el, result ha deorden la consulta en orden ascendente.

Veamos ahora un ejemplo que hace la clasificación usando dos columnas ; el primero está ordenado en orden ascendente por defecto mientras que la segunda columna está ordenada en orden descendente.

SELECCIONAR * FROM `miembros` PEDIR POR` пол`,` date_of_birth` DESC;

SELECCIONAR * FROM `miembros` PEDIR POR` пол`,` date_of_birth` DESC;

Создайте предварительный скрипт в рабочей среде MySQL против myflixdb для получения результатов.

La columna de género se ordenó en orden ascendente de forma preterminada, mientras que la columna de fecha de nacimiento se ordenó en orden descendente Explicitamente

¿Por qué podemos usar DESC y ASC?

Supongamos queremos imprimir un Historial de pagos for un miembro de la biblioteca de videos for ayudar a Responder las consultas de la Recepción, no sería más lógico que los pagos se impriman en orden cronológico descentedente cronológico descentedente pagos

La palabra clave DESC es útil en tales situaciones.Podemos escribir una consulta que ordene la lista en orden descendente utilizando la fecha de pago.

Supongamos que el depamento de marketing desea obtener una lista de películas Por category que los miembros pueden usar para decidir qué películas están disponibles en la biblioteca cuando alquilan películas. ¿No sería más lógico buscar los nombres y títulos de las películas en orden ascendente para que los miembros pueden buscar rápidamente la información de la lista?

La palabra clave ASC es útil en tales situaciones; podemos obtener la lista de películas clasificada por nombre de category y título de la película en orden ascendente.

Результат

  • La clasificación de los resultados de la consulta está reorganizando las filas devueltas desde un concunto de resultados de la consulta en orden ascendente o descendente.
  • La palabra clave DESC se usa para ordenar el condento de resultados de la consulta en un orden descendente.
  • La palabra clave ASC se usa para ordenar el concunto de resultados de la consulta en orden ascendente.
Debian 8 установка mysql: Установка LAMP (Linux, Apache, MySQL, PHP) на Debian 8 Jessie

Debian 8 установка mysql: Установка LAMP (Linux, Apache, MySQL, PHP) на Debian 8 Jessie

Установка и настройка phpMyAdmin в Debian 8 Jessie/Ubuntu Server 14.04

Содержание статьи:

phpMyAdmin — это приложение для удобного администрирования MySQL серверов. Разберем как установить его на Debian 8 Jessie/Ubuntu Server 14.04 и настроить безопасность доступа.

 

Подготовка системы

Перед началом установки обновляем систему до актуального состояния:

apt-get update && sudo apt-get upgrade -y

 

Установка phpMyAdmin

Для установки в терминале вводим:

apt-get install phpmyadmin

В процессе установки, в запросе на какой веб-сервер будет настроен phpMyAdmin, выбираем apache2. В конце установки, в запросе настроить базу данных для phpMyAdmin, нажимаем «Да», вводим пароль от учетной записи (root) и задаем пароль для доступа к phpMyAdmin.

 

Выполняем настройку apache для обеспечения работы phpMyAdmin. Выполняем команду:

ln -s /etc/phpmyadmin/apache.conf /etc/apache2/conf-available/phpmyadmin.conf

a2enconf phpmyadmin

service apache2 reload

 

В веб-браузере переходим по адресу (http://localhost/phpmyadmin). Для доступа используем (Пользователь — root), (Пароль — который вы задавали при настройке phpMyAdmin)

 

 

Настройка безопасности

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

 

Правим файл конфигурации /etc/apache2/conf-available/phpmyadmin. conf. Изменяем путь к веб-интерфейсу phpMyAdmin, на (прим. http://localhost/newadressmyphpadmin/):

Alias /newadressmyphpadmin /usr/share/phpmyadmin/

 

Разрешаем файл .htaccess для phpMyAdmin, находим:

<Directory /usr/share/phpmyadmin>

Options FollowSymLinks

DirectoryIndex index.php

 

добавляем:

AllowOverride All

</Directory>

 

Создаем пользователя, которому будет разрешен доступ на страницу входа в phpMyAdmin:

htpasswd -c /usr/share/phpmyadmin/. htpasswd username

 

Создаем файл .htaccess в каталоге phpmyadmin (/usr/share/phpmyadmin/) со следующим содержимым:

AuthType Basic

AuthName «Restricted Area»

AuthUserFile /usr/share/phpmyadmin/.htpasswd

Require valid-user

 

Перезапуск службы apache:

 

Теперь при входе на страницу phpMyAdmin, будет запрашиваться дополнительная авторизация:

 

 

Понравилась или оказалась полезной статья, поблагодари автора

 

Установка OTRS 6.0.5 (Open-source Ticket Request System) на Debian 8 Jessie/Ubuntu 14.04 Trusty Tahr

Содержание статьи:

Разберем как установить открытую систему обработки заявок OTRS 6.0.5 (Open-source Ticket Request System) на Debian 8 Jessie/Ubuntu 14. 04 Trusty Tahr.

 

В системе уже установлен стек LAMP (Linux, Apache, MySQL, PHP), инструкция как установить LAMP. Все действия будут производится под пользователем root.

 

Подготовка системы

Перед началом установки обновляем систему до актуального состояния:

apt-get update && sudo apt-get upgrade -y

Устанавливаем необходимые зависимости:

apt-get install -y libapache2-mod-perl2 libdbd-mysql-perl libtimedate-perl libnet-dns-perl libnet-ldap-perl libio-socket-ssl-perl libpdf-api2-perl libsoap-lite-perl libtext-csv-xs-perl libjson-xs-perl libapache-dbi-perl libxml-libxml-perl libxml-libxslt-perl libyaml-perl libarchive-zip-perl libcrypt-eksblowfish-perl libencode-hanextra-perl libmail-imapclient-perl libtemplate-perl libdatetime-perl libdbd-odbc-perl libdbd-pg-perl libauthen-ntlm-perl -y

 

Установка OTRS (Open-source Ticket Request System)

Скачиваем актуальную версию OTRS, распаковываем скачанный архив и перемещаем в каталог /opt:

wget ftp://ftp. otrs.org/pub/otrs/otrs-6.0.5.tar.gz

tar -zxvf otrs-6.0.5.tar.gz otrs-6.0.5/

mv otrs-6.0.5 /opt/otrs

 

Создаем пользователя (otrs), для запуска OTRS:

useradd otrs -d /opt/otrs/ -G www-data -c «OTRS User»

 

Подготавливаем файл конфигурации OTRS:

cp /opt/otrs/Kernel/Config.pm.dist /opt/otrs/Kernel/Config.pm

Устанавливаем разрешения для пользователя веб-сервера (www-data) на каталог OTRS:

/opt/otrs/bin/otrs.SetPermissions.pl —web-group=www-data

 

Выполняем проверку установленных модулей:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

perl /opt/otrs/bin/otrs. CheckModules.pl

o Apache::DBI………………….ok (v1.12)

o Apache2::Reload………………ok (v0.13)

o Archive::Tar…………………ok (v1.96)

o Archive::Zip…………………ok (v1.39)

o Crypt::Eksblowfish::Bcrypt…….ok (v0.009)

o Crypt::SSLeay………………..ok (v0.58)

o Date::Format…………………ok (v2.24)

o DateTime…………………….ok (v1.12)

o DBI…………………………ok (v1.631)

o DBD::mysql…………………..ok (v4.028)

o DBD::ODBC……………………ok (v1.50)

o DBD::Oracle………………….Not installed! (optional — Required to connect to a Oracle database.)

o DBD::Pg……………………..ok (v3.4.2)

o Digest::SHA………………….ok (v5.88)

o Encode::HanExtra……………..ok (v0.23)

o IO::Socket::SSL………………ok (v2.002)

o JSON::XS…………………….ok (v2.34)

o List::Util::XS. ………………ok (v1.38)

o LWP::UserAgent……………….ok (v6.26)

o Mail::IMAPClient……………..ok (v3.35)

o IO::Socket::SSL………………ok (v2.002)

o Authen::SASL…………………ok (v2.16)

o Authen::NTLM…………………ok (v1.09)

o ModPerl::Util………………..ok (v2.000009)

o Net::DNS…………………….ok (v0.81)

o Net::LDAP……………………ok (v0.64)

o Template…………………….ok (v2.24)

o Template::Stash::XS…………..ok (undef)

o Text::CSV_XS…………………ok (v1.11)

o Time::HiRes………………….ok (v1.9726)

o XML::LibXML………………….ok (v2.0116)

o XML::LibXSLT…………………ok (v1.92)

o XML::Parser………………….ok (v2.41)

o YAML::XS…………………….ok (v0.41)

Если какой то модуль с пометкой (required), не установлен, то его необходимо установить. Не установленные модули с пометкой (optional) не являются обязательными и их устанавливать не обязательно.

 

Запускаем проверку синтаксиса, чтобы убедиться, что Perl настроен правильно. После каждой команды вы должны увидеть сообщение (syntax OK)

perl -cw /opt/otrs/bin/cgi-bin/index.pl

/opt/otrs/bin/cgi-bin/index.pl syntax OK

 

perl -cw /opt/otrs/bin/cgi-bin/customer.pl

/opt/otrs/bin/cgi-bin/customer.pl syntax OK

 

perl -cw /opt/otrs/bin/otrs.PostMaster.pl

/opt/otrs/bin/otrs.PostMaster.pl syntax OK

 

perl -cw /opt/otrs/bin/otrs.Console.pl

/opt/otrs/bin/otrs.Console.pl syntax OK

 

Настраиваем MySQL-сервер, через файл конфигурации /etc/mysql/my.cnf:

[mysqld]

max_allowed_packet = 64M

query_cache_size = 32M

innodb_log_file_size = 512M

После настройки, необходимо перезапустить MySQL-сервер:

service mysql stop

rm /var/lib/mysql/ib_logfile0

rm /var/lib/mysql/ib_logfile1

service mysql start

Создаем базу данных для работы OTRS:

mysql -u root -p

 

CREATE DATABASE otrs CHARACTER SET utf8;

CREATE USER ‘otrs’@’localhost’ IDENTIFIED BY ‘password’;

GRANT ALL PRIVILEGES ON otrs. * TO ‘otrs’@’localhost’;

FLUSH PRIVILEGES;

EXIT

 

Создаем символьную ссылку конфигурационного файла виртуального хоста, включаем добавленный виртуальный хост, включаем поддержку CGI и перезапускаем веб-сервер:

ln -s /opt/otrs/scripts/apache2-httpd.include.conf /etc/apache2/sites-available/otrs.conf

 

a2ensite otrs.conf

a2enmod cgi

service apache2 restart

 

Запускаем веб-установщик OTRS. В браузере набираем http://OTRS_Server_IP/otrs/installer.pl

 

Шаг 2. Выбираем тип базы данных (MySQL), выбираем тип установки (Использовать существующую базу данных OTRS):

Указываем данные пользователя и пароля от MySQL, указываем имя базы данных (otrs). Нажимаем «Проверить настройки БД».

Если нет ошибок, то проверка пройдет успешно и база данных готова к настройке. Нажимаем «Вперед».

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

Конфигурацию почты, пропускаем (Пропустить этот шаг), ее можно будет настроить позже.

В завершении установки, установщик сообщит нам информацию по доступу к системе OTRS. Желательно сохраните данную информацию.

 

На этом установка системы обработки заявок OTRS завершена. Для начала использования ее воспользуемся следующими ссылками:

 

 

Агентурный доступ:

http://OTRS_Server_IP/otrs/index.pl

Пользовательский доступ:

http://OTRS_Server_IP/otrs/customer.pl

 

Настройка планировщика заданий OTRS

Для правильной работы системы OTRS, необходимо запустить специальный демон для OTRS и настроить планировщик задач:

cp /opt/otrs/var/cron/otrs_daemon.dist /opt/otrs/var/cron/otrs_daemon

cp /opt/otrs/var/cron/aaa_base.dist /opt/otrs/var/cron/aaa_base

 

su -c «/opt/otrs/bin/otrs.Daemon.pl start» -s /bin/bash otrs

su -c «/opt/otrs/bin/Cron.sh start» -s /bin/bash otrs

 

Проверим добавилось ли задание в планировщик:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

crontab -u otrs -l

 

# —

# Copyright (C) 2001-2018 OTRS AG, http://otrs.com/

# —

# This software comes with ABSOLUTELY NO WARRANTY. For details, see

# the enclosed file COPYING for license information (AGPL). If you

# did not receive this file, see http://www.gnu.org/licenses/agpl.txt.

# —

 

# Who gets the cron emails?

MAILTO=»[email protected]»

# —

# Copyright (C) 2001-2018 OTRS AG, http://otrs.com/

# —

# This software comes with ABSOLUTELY NO WARRANTY. For details, see

# the enclosed file COPYING for license information (AGPL). If you

# did not receive this file, see http://www.gnu.org/licenses/agpl.txt.

# —

 

# check OTRS daemon status

*/5 * * * * $HOME/bin/otrs.Daemon.pl start >> /dev/null

 

Понравилась или оказалась полезной статья, поблагодари автора

 

Установка и настройка MySQL8.0 | Linux and Windows

MySQL является решением для малых и средних приложений. Входит в состав серверов WAMP, AppServ, LAMP и в портативные сборки серверов Денвер, XAMPP, VertrigoServ. Обычно MySQL используется в качестве сервера, к которому обращаются локальные или удалённые клиенты, однако в дистрибутив входит библиотека внутреннего сервера, позволяющая включать MySQL в автономные программы.


Первым делом поищем доступные пакеты

pkg search mysql | grep server

Вывод поискового запроса

mysql55-server-5.5.61          Multithreaded SQL database (server)
mysql56-server-5.6.42          Multithreaded SQL database (server)
mysql80-server-8.0.12          Multithreaded SQL database (server)

Устанавливаем mysql

pkg install mysql80-server

Далее пропишем наш сервер в автозагрузку

nano /etc/rc.conf прописываем mysql_enable="YES"

Запускаем сервер mysql

service mysql-server onestart

Далее запускаем скрипт

mysql_secure_installation

Ответы

Securing the MySQL server deployment.

Connecting to MySQL using a blank password.

VALIDATE PASSWORD COMPONENT can be used to test passwords
and improve security. It checks the strength of password
and allows the users to set only those passwords which are
secure enough. Would you like to setup VALIDATE PASSWORD component?

Press y|Y for Yes, any other key for No: n
Please set the password for root here.

New password:

Re-enter new password:

Если Вы выберите N — то просто вводите пароль. Можно сгенерировать, можно придумать свой. 

Если Выбираете Y — то нужно выбрать длину и сложность пароля

  • low — длина пароля не менее 8 символов
  • medium — 8 символов, смешанный регистр, специальные символы
  • strong — 8 символов, смешанный регистр, специальные символы, парольные фразы

Далее скрипт спрашивает: Удалить анонимных пользователей? Ставим — Y

By default, a MySQL installation has an anonymous user,<br>
allowing anyone to log into MySQL without having to have<br>
a user account created for them. This is intended only for<br>
testing, and to make the installation go a bit smoother.<br>
You should remove them before moving into a production<br>
environment.

Remove anonymous users? (Press y|Y for Yes, any other key for No) :Y

Запретить ли пользователю root логиниться удаленно. Запрещаем — Y

Normally, root should only be allowed to connec t from
'localhost'. This ensures that someone cannot guess at
the root password from the network.

Disallow root login remotely? (Press y|Y for Yes, any other key for No) :Y

Удалить тестовые базы данных? Ставим — N

By default, MySQL comes with a database named 'test' that
anyone can access. This is also intended only for testing,
and should be removed before moving into a production
environment.

Remove test database and access to it? (Press y|Y for Yes, any other key for No) : N

Перезагрузить таблицу привилегий  сейчас?. Ставим — Y

Reloading the privilege tables will ensure that all changes
made so far will take effect immediately.

Reload privilege tables now? (Press y|Y for Yes, any other key for No) : Y

Перезапускаем сервер

service mysql-server stop
service mysql-server start

Проверим работу mysql. Вводим

mysql -u root -p

Должно выскочить следующее

Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 8
Server version: 8.0.12 Source distribution

Copyright (c) 2000, 2018, Oracle and/or its affiliates. All rights reserved.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

[email protected] [(none)]> 

Посмотрим какие есть базы данных

show databases;
[email protected] [(none)]> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
| sys                |
+--------------------+
4 rows in set (0.02 sec)

Все отлично.  MySQL работает.

Установка phpMyAdmin в Debian 8 — dimanao.org


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

Установка phpMyAdmin

Для установки phpMyAdmin в терминале выполняем команду:

apt-get install phpmyadmin

Загрузив все необходимые компоненты, запустится мастер настройки phpMyAdmin. В первом вопросе требуется определиться с установленным web-сервером. Доступно два варианта:

 

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

Далее нас попросят ввести пароль пользователя root MySQL-сервера. Вводим и нажимаем «enter».+

Затем нас попросят придумать пароль для доступа в phpMyAdmin. Придумываем пароль посложней и нажимаем «Enter».

Добавляем phpMyAdmin к конфигурации к Apache

Установка phpMyAdmin завершена. Чтобы протестировать этот инструмент в работе, необходимо добавить phpMyAdmin к конфигурации Apache. Для этого открываем конфигурационный файл Apache:

nano /etc/apache2/apache2.conf

Перемещаемся в его конец и добавляем строчку для подключения phpMyAdmin:

Include /etc/phpmyadmin/apache.conf

Сохраняем внесенные изменения (ctrl + o) и закрываем файл (ctrl + x). Перезапускаем Apache:

service apache2 restart

Проверяем phpMyAdmin

Открывай браузер и переходим по ссылке http://ip_адрес/phpmyadmin . Открытие страницы входа phpMyAdmin – подтверждение успешной установки.

Защищаем phpMyAdmin

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

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

Конфигурируем авторизацию на уровне Apache

Сначала откроем конфигурационный файл phpMyAdmin, который используется с Apache:

sudo nano /etc/phpmyadmin/apache.conf

Находим в файле блок «» и дописываем директиву «AllowOverride All». Отредактированный блок в итоге должен выглядеть так:

<Directory /usr/share/phpmyadmin>
        Options FollowSymLinks
        DirectoryIndex index.php
        AllowOverride All
//Остальной текст оставляем как есть

Сохраняем изменения (ctrl + o) и закрываем файл (ctrl + x). При помощи директивы “AllowOverride” мы сообщили Apache, что все директивы могут быть переопределены через внешний файл настроек – «.htaccess».

Подготавливаем .htaccess

Создадим новый конфигурационный файл .htaccess в директории с phpmyadmin:

nano /usr/share/phpmyadmin/.htaccess

Прописываем в этом файле необходимость авторизации на уровне web-сервера:

AuthType Basic
AuthName "Restricted Files"
AuthUserFile /home/.htpasswd
Require valid-user

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

 

  • AuthType – директива определяет тип идентификации пользователя. В качестве значения я указываю Basic. Насколько мне известно, вариантов кроме Basic до сих пор в Apache не реализовано (поправьте, если ошибаюсь).
  • AuthName – директива используется совместно с предыдущей. В ней мы пишем текст, который будет отображаться в диалоге запроса логина/пароля. Значением директивы может быть абсолютно любой текст.
  • AuthUserFile – значением директивы выступает путь к файлу, содержащий информацию опользователях и их паролях, которые могут получить доступ к закрытому ресурсу. На данном этапе этого файла нет, мы создадим его чуть позже.
  • Require – директива позволяет определить принцип аутентификации. Она может принимать несколько значений (например, мы можем перечислить пользователей или группы пользователей, которые могут получать доступ к закрытому ресурсу). Значение Valid-user подразумевает, что получить доступ к закрытому ресурсу могут получить все пользователи, доступные в файле AuthUserFile.

 

Создание htpasswd файла

Необходимые настройки сделаны. Теперь создадим файл, путь к которому мы указывали в директиве AuthUserFile. Для этого вбиваем команду:

sudo htpasswd -c /home/.htpasswd username

Имя пользователя выбираем любое, с системными пользователями оно не переплетается. Утилита htpasswd запросит пароль для нового пользователя. Придумываем пароль и после завершения создания пользователя перезапустим apache:

service apache2 restart

Проверяем авторизацию на уровне web-сервера

Попробуем обратиться к phpMyAdmin. Если все описанные выше манипуляции были проделаны правильно, то страница входа phpMyAdmin сразу будет недоступна. Вместо нее появится окно с запросом имени пользователя и пароля. Вводим данные, которые мы указали утилите htpasswd и только после этого попадаем на страницу входа в phpMyAdmin.

Debian Jessie: Настройка MySQL Server (mariadb-server)

Это статья из цикла стетей моего небольшого HowTo по Debian Jessie.
Из популярных сборок mysql на сегодня я предпочитаю mariadb. С радостью воспринял тот факт что в официальных репах Debian Jessie предлагается 10-й релиз mariadb-server.
Напомню что описывал как добавить все официальные репозитарии в Debian Jessie.
Установим необходимые пакеты:

gw:~$ sudo apt-get install mariadb-server

В процессе установки спросит пароль root на mysql-server. Вводим 2 раза, желательно сложный. После инсталляции сервис будет запущен и добавлен в автозагрузку автоматически, учтите это 🙂
Поехали дальше …

Теперь немного шаманства под названием «безопасная установка», вопросы и ответы в листинге ниже:

gw:~$ sudo mysql_secure_installation

NOTE: RUNNING ALL PARTS OF THIS SCRIPT IS RECOMMENDED FOR ALL MariaDB
      SERVERS IN PRODUCTION USE!  PLEASE READ EACH STEP CAREFULLY!

In order to log into MariaDB to secure it, we’ll need the current
password for the root user.  If you’ve just installed MariaDB, and
you haven’t set the root password yet, the password will be blank,
so you should just press enter here.

Enter current password for root (enter for none):
OK, successfully used password, moving on…

Setting the root password ensures that nobody can log into the MariaDB
root user without the proper authorisation.

You already have a root password set, so you can safely answer ‘n’.

Change the root password? [Y/n] n
 … skipping.

By default, a MariaDB installation has an anonymous user, allowing anyone
to log into MariaDB without having to have a user account created for
them.  This is intended only for testing, and to make the installation
go a bit smoother.  You should remove them before moving into a
production environment.

Remove anonymous users? [Y/n] y
 … Success!

Normally, root should only be allowed to connect from ‘localhost’.  This
ensures that someone cannot guess at the root password from the network.

Disallow root login remotely? [Y/n] y
 … Success!

By default, MariaDB comes with a database named ‘test’ that anyone can
access.  This is also intended only for testing, and should be removed
before moving into a production environment.

Remove test database and access to it? [Y/n] y
 — Dropping test database…
ERROR 1008 (HY000) at line 1: Can’t drop database ‘test’; database doesn’t exist
 … Failed!  Not critical, keep moving…
 — Removing privileges on test database…
 … Success!

Reloading the privilege tables will ensure that all changes made so far
will take effect immediately.

Reload privilege tables now? [Y/n] y
 … Success!

Cleaning up…

All done!  If you’ve completed all of the above steps, your MariaDB
installation should now be secure.

Thanks for using MariaDB!
gw:~$

Также рекомендую mysql datadir разместить на отдельном разделе, поскольку у меня LVM — я примерно прикинул текущий суммарный размер баз (примерно 1GB), докинул +100% про запас роста и создал отдельный LV под mysqldata:

gw:~$ sudo lvcreate -L 2g -n lv_mysqldata vgraid1

Форматируем новый LV в ext4:

gw:~$ sudo mkfs.ext4 -L MYSQLDATA /dev/vgraid1/lv_mysqldata

Останавливаем сервис mysql:

gw:~$ sudo systemctl stop mysql.service

монтируем новый раздел lv_mysqldata куданибудь в /mnt для переноса данных:

gw:~$ sudo mount /dev/vgraid1/lv_mysqldata /mnt

создаем там директорию data:

gw:~$ sudo mkdir /mnt/data

копируем данные из /var/lib/mysql в /mnt/data

gw:~$ sudo rsync -Pavl /var/lib/mysql/ /mnt/data/

очищаем старую директорию:

gw:~$ sudo rm -rf /var/lib/mysql/*

Отмонтируем /mnt

Правим /etc/fstab:

gw:~$ sudo vim /etc/fstab

добавляем туда такую строчку:

/dev/mapper/vgraid1-lv_mysqldata        /var/lib/mysql  ext4    rw,noatime,nodiratime 1 2

монтируем все что есть в fstab, по факту у нас смонтировано все кроме нового раздела, только он и смонтируется:

проверка правильности монтирования:

gw:~$ sudo ls -l /var/lib/mysql/
total 20
drwxr-xr-x 4 mysql mysql  4096 Apr 15 07:30 data
drwx—— 2 root  root  16384 Apr  9 23:34 lost+found
gw:~$

Правим основной конфиг mysql:

gw:~$ sudo vim /etc/mysql/my.cnf

вот такой у нас теперь datadir:
[mysqld]
#
# * Basic Settings
#
datadir         = /var/lib/mysql/data

Запускаем сервис:

gw:~$ sudo systemctl start mysql.service

Ну вот и все … мы установили и базово настроили сервер mysql. Как видите, основной конфиг остался без внимания, это потому что его настройку я опишу отдельно. На данный момент скажу, что в mysql есть встроенный функционал накопления статистики, опираясь на которую можно существенно оптимизировать настройки. Но для накопления статистики нужно чтобы сервер сутки и более поработал в условиях близких к боевым. Поэтому я просто восстановил нужные мне базы и запустил сервис «в бой».
Напомню как создать базу данных или восстановить существующую на новом сервере.
Делается это в 2 этапа:
1). Логинимся под административной учеткой (обычно root) в консоль mysql:

gw:~$ mysql -uroot -p
Enter password:
Welcome to the MariaDB monitor.  Commands end with ; or \g.
Your MariaDB connection id is 59672
Server version: 10.0.20-MariaDB-0+deb8u1-log (Debian)

Copyright (c) 2000, 2015, Oracle, MariaDB Corporation Ab and others.

Type ‘help;’ or ‘\h’ for help. Type ‘\c’ to clear the current input statement.

MariaDB [(none)]>

и создаем новую базу данных, например с названием mydb:

MariaDB [(none)]> CREATE DATABASE `mydb` CHARACTER SET utf8 COLLATE utf8_general_ci;

после чего создаем пользователя с паролем и даем ему полные права на базу mydb:

MariaDB [(none)]> GRANT ALL PRIVILEGES ON mydb.* TO ‘myuser’@’localhost’ IDENTIFIED BY ‘_some_pass_’;

обновляем права:

MariaDB [(none)]> flush privileges;

Получили в итоге:
Название базы: mydb
Пользователь: myuser
Пароль пользователя: _some_pass_

Если вы инсталлируете новый WEB движок (drupal, wordpress, joomla, opencart …. etc) то базу уже можно считать подготовленной, разворачивайте php-файлы и в браузере производите установку.
Если же вы хотите перенести существующую базу на новый сервер, то нужно выполнить еще и второй этап — восстановление базы:
2). Восстанавливать будем базу mydb. Для восстановления базы достаточно из shell-консоли выполнить команду (опять используется mysql root пароль):

gw:~ $ mysql -uroot -p mydb < /home/backup/mydb-backup.sql
password:

Файлик /home/backup/mydb-backup.sql — это SQL-льный файлик, бекап базы mydb

Ну вот и все, базу создали/восстановили … запускаем сервис в бой, накапливаем статистику и готовимся к тюнингу mysql

Хай щастить!

Как установить LAMP сервер на Debian10?|Qbik

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

apt-get update

Устанавливаем сервер

Первым делом нам нужно установить Apache. Делается это элементарно командой:

apt install apache2

После этого можете перейти по адресу http://localhost/ и увидеть страницу приветствия. Выглядит она вот так:

Если вы увидели такое же окно — поздравляю! Веб-сервер успешно установлен! 🙂

Но к сожалению в 21-м веке сайты представляют из себя не просто набор HTML страничек. По этому давайте теперь научим наш сервер понимать какой нибудь язяк программирования. К примеру php.

Делается это ещё одной простой командой:

apt install php libapache2-mod-php php-mysql

Но нам ещё нужно где то хранить данные. По этому давайте добавим базу данных. Но в Debian 10 метапакет mysql-server, который традиционно использовался для установки сервера MySQL, был заменен на default-mysql-server. Этот метапакет ссылается на MariaDB , сообщество форка исходного сервера MySQL от Oracle, и в настоящее время это сервер баз данных, совместимый с MySQL по умолчанию, доступный в репозиториях менеджера пакетов на основе debian. Но для долгосрочной совместимости давайте установим MariaDB с использованием действующего пакета программы mariadb-server.

apt install mariadb-server

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

Устанавливаем phpMyAdmin для нашего LAMP сервера

И первое, с чего начнём — это с панели для БД. Работать через терминал конечно весело, но не слишком комфортно. Так что давайте для начала добавим некоторые модули для php:

apt install php-mbstring php-zip php-gd

И тут нас ждёт первая «засада». Пока что панель недоступна в репозиториях Debian 10 (но возможно появится в будущем) по умолчанию, поэтому нам нужно загрузить исходный код на компьютер с сайта phpMyAdmin.

Для этого переходим сюда, прокручиваем вниз до таблицы со ссылками на скачивание последней стабильной версии и копируем ссылку на скачивание, заканчивающуюся на all-languages.tar.xz. «all-languages» указывает на то, что эта версия мультиязычная, а значит там будет Русский интерфейс, а «tar.xz» указывает на архивный файл, известный как tarball, который при извлечении создаст несколько файлов в вашей системе. На момент написания этой статьи последняя версия — версия 4.9.0.1.

В таком случае команда будет выглядеть так:

wget https://files.phpmyadmin.net/phpMyAdmin/4.9.0.1/phpMyAdmin-4.9.0.1-all-languages.tar.gz

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

Распаковываем архив:

tar xvf phpMyAdmin-4.9.0.1-all-languages.tar.gz

Перемещаем каталог в каталог файлов конфигурации по умолчанию

mv phpMyAdmin-4.9.0.1-all-languages/ /usr/share/phpmyadmin

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

mkdir -p /var/lib/phpmyadmin/tmp

chown -R www-data:www-data /var/lib/phpmyadmin

cp /usr/share/phpmyadmin/config.sample.inc.php /usr/share/phpmyadmin/config.inc.php

Теперь отредактируем только что скопированный кинфигурационный файл по умолчанию Для этого откроем его в текстовом редакторе:

gedit /usr/share/phpmyadmin/config.inc.php

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

Важно! После скачивания нового конфига — замените в нём: строка №43 — замените его на любой другой пароль (и запомните его, он нам один раз дальше пригодится). И на строке №17 — просто втавьте любые другие символы, запоминать их не обязательно! 🙂

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

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

Для начала создадим таблицы, каталогом займёмся вместе с созданием хостов. Для этого выполняем команду:

mariadb < /usr/share/phpmyadmin/sql/create_tables.sql

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

mariadb

Создаём пользователя pma для панели. Важно! «password» заменяем на пароль, который вы указывали в строке 43 конфига!

GRANT {select}, INSERT, UPDATE, DELETE ON phpmyadmin.* TO ‘pma’@’localhost’ IDENTIFIED BY ‘password’;

Теперь создаём пользователя, от имени которого будем входить в панель и от имени которого собственно будем работать. В принципе хватит и одного, но можете создавать столько, сколько считаете необходимым. Важно! «uzers» меняем на имя пользователя, а «password» меняем на свой пароль, который будем вводить при входе в панель.

GRANT ALL PRIVILEGES ON *.* TO ‘uzers’@’localhost’ IDENTIFIED BY ‘password’ WITH GRANT OPTION;

Всё, выходим из БД:

exit

Всё готово, теперь нам осталось только создать конфиг и можно работать. Для этого выполняем:

gedit /etc/apache2/conf-available/phpmyadmin.conf

И в открывшийся новый документ вписываем этот конфиг.

И «скармливаем» этот конфиг Apache:

a2enconf phpmyadmin.conf

* — Если у Вас a2enconf выдаёт ошибку — в конце статьи есть заметка по этому поводу.

Теперь мы можем перезагрузить Apache и всё заработает. Но делать мы этого не будем т.к. после создания новых хостов нам опять же нужно будет его перезагружать. Давайте сразу обновим хосты и после этого уже один раз перезагрузим сервер…

Создаём новые сайты в Apache2

И так, давайте создадим нужные каталоги. Мы в каталоге /var/www/ создадим каталог нового сайта и каталог для бекапов базы данных, который мы указывали в конфиге phpMyAdmin. После чего передадим права пользования этими каталогами себе, чтоб иметь возможность без помощи root записывать в них файлы и удалять их. Для этого поочерёдно выполняем следующие команды:

mkdir /var/www/test_site

mkdir /var/www/backup

chown -R $USER:$USER /var/www/test_site

chown -R $USER:$USER /var/www/backup

Как Вы наверняка догадались, «test_site» — имя каталога для будущего сайта, а «backup» — имя каталога  с бекапами. Имя сайта может быть любым, а вот если решите переименовать каталог с бекапами — не забудьте поменять его в том числе и в конфиге.

Теперь создаём конфигурационный файл для нашего нового сайта:

gedit /etc/apache2/sites-available/test_site.conf

И вписываем в открывшийся новый конфиг следующие строки:


    ServerName your_domain
    ServerAlias www.your_domain
    ServerAdmin [email protected]
    DocumentRoot /var/www/test_site
    ErrorLog ${APACHE_LOG_DIR}/error.log
    CustomLog ${APACHE_LOG_DIR}/access.log combined

Как Вы наверняка заметили, имя сайта и имя его каталога не обязательно должны совпадать, но всё же лучше так не делать т.к. в случае, если сайтов будет много, а каталоги и именя совпадать не будут — вы сами себя запутаете. По этому лучше, чтоб имя сайта и имя каталога в папке /var/www/ совпадали.

Теперь сайт по сути готов, но остался один нюанс. Компьютер по умолчанию будет искать сайт в интернете, а не на компьютере. По этому давайте откроем хост-файл и скажем ему, что вот этот адрес в интернете не искать. Открываем хост:

gedit /etc/hosts

В этом файле уже есть два адреса. Первая строка — localhost. Тот самый, по которому вы проверяли работоспособность сервера после первой команды установки. Далее идёт имя компьютера в сети. Вы по этому адресу так же можете перейти и увидите абсолютно то же самое, что и при localhost. И ниже мы можем дописать новые адреса. Как видите на скриншоте ниже, у меня есть ещё два адреса. Это qb.test и v.test. Адрес, по которому я тестирую свой сайт Qbik.club и ещё один секретный адрес, про который я ничего не скажу! 😉

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

Теперь компьютер знает, что этот сайт ненужно искать в интернете, но где же? Теперь нужно сказать apache, где искать файлы сайта и какие у его конфигурации. Для этого выполняем команду:

Внмиание! Распространённая ошибка, выполнять команду a2ensite передавая имя сайта. передаём не имя сайта, а имя конфигурационного файла, который мы создавали выше!

a2ensite test_site.conf

* — Если у Вас a2ensite выдаёт ошибку — в конце статьи есть заметка по этому поводу.

Теперь мы можем перезагрузить Apache и если Всё сделано правильно — радоваться жизни! 🙂

systemctl reload apache2

Включаем обработку .htaccess и вывод ошибок php

Вроди всё работает, база есть, интерфейс для управления базами есть, всё работает… Но вот есть несколько досадных ошибок. Это кое какие конфигурации по умолчанию. К примеру на «боевом сервере» как правило отключен вывод ошибок php. Это и логично, ведь это потенциальная уязвимость, которая сообщает «много интересного» потенциальному взломщику. Но мы же делаем локальный сервер для разработки. По этому давайте включим вывод ошибок, который нам пригодится для работы. для этого открываем конфиг:

gedit /etc/php/7.3/apache2/php.ini

Теперь в файлике нужно найти следующие значения и заменить их на вот такие:

error_reporting = E_ALL

display_errors = On

display_startup_errors = On

И обработка .htaccess. Для этого открываем другой конфиг:

gedit /etc/apache2/apache2.conf

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


    Options Indexes FollowSymLinks
    Require all granted
    AllowOverride All

Лично я когда так сделал и перезапустил Apache — получил ошибку 500. Всё дело оказалось в том, что по умолчанию mod_rewrite отключен. А это довольно популярный модуль по перенаправлениям в .htaccess. По этому если у вас будет такая же проблема — включаем его одной простой командой:

a2enmod rewrite

Разумеется, после того, как был сохранён конфиг или включен модуль — перезагружаем Apache:

systemctl reload apache2

Замечание для тех, у кого не работает a2enmod, a2ensite или a2enconf!

Важное замечание! Лично я был довольно неплохо так озадачен, почему a2ensite выдаёт ошибку? Всё оказалось просто, на форуме мне подсказали. Просто войдите через su — root и будет Вам счастье! 😉

P.s. небольшое послесловие. Вся работа по поиску информации, переводу, проверке работоспособности и написанию этой статьи у меня заняли почти неделю. Так что надеюсь если статья была полезна — Вы поделитесь ей с друзьями. Это лучшая благодарность за проделанную работу. Если же я что то упустил или попутал от переизбытка информации — свяжитесь со мной Вк, постараюсь поправить! 🙂

Как установить MySQL v5.7 с помощью apt-get на Debian 8 Jessie

В этом руководстве объясняется, как установить MySQL v5.7 на сервер Debian 8 Jessie. Репозитории по умолчанию в Debian 8 будут устанавливать MySQL до версии 5.6, поэтому, если вы когда-нибудь захотите установить 5.7, вам необходимо настроить репозиторий с 5,7 RPM. В качестве альтернативы вы можете скомпилировать исходный код MySQL 5.7, но в этом руководстве будет объяснено, как настроить репозиторий с MySQL версии 5.7 и установить с помощью apt-get (и вы знаете преимущества использования apt-get — он обрабатывает все эти необходимые зависимости).

И, поехали!

Как установить MySQL v5.7 с помощью apt-get?

Шаг 1: Как я уже говорил ранее, для установки последней версии MySQL server 5.7 вам необходимо добавить новый репозиторий пакетов APT с официального сайта MySQL. Перейдите на страницу репозитория MySQL APT и нажмите Загрузить в правом нижнем углу. Щелкните правой кнопкой мыши « Нет, спасибо, просто начните загрузку» и скопируйте адрес ссылки .

Загрузите пакет .deb на свой сервер, как показано в примере ниже:

 #wget https://dev.mysql.com/get/mysql-apt-config_0.8.3-1_all.deb 

Шаг 2: Установите загруженный файл .deb , используя dpkg — Package Manager.

 #dpkg -i mysql-apt-config_0.8.3-1_all.deb 

Вы увидите сообщение с вопросом: «Какой продукт MySQL вы хотите настроить?». Выделенный вариант сервера MySQL скажет, что ваша текущая версия MySQL, e.г., mysql-5.6 (в моем случае). Нажмите ENTER и прокрутите вниз до mysql-5.7 с помощью клавиш со стрелками и снова нажмите ENTER , что вернется к первому запросу. Теперь прокрутите вниз до Ok с помощью клавиш со стрелками и нажмите ENTER для выхода.

Шаг 3: Обновите индекс пакета на сервере — этот шаг очень важен.

 # apt-get update 

Шаг 4: Наконец, установите сервер MySQL версии 5.7 из репозитория. Если вы уже установили MySQL v5.6, необходимые пакеты будут обновлены до версии 5.7.

 # apt-get install mysql-server 

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

Шаг 5: Наконец, проверьте

 #mysql --version 

Пример вывода:

 mysql Ver 14.14 Distrib 5.7.17, для Linux (x86_64) с использованием оболочки EditLine 

Шаг 6 : Вы можете запустить и остановить службу MySQL, как показано ниже:

 #service mysql start | stop | restart | status 

Вот и все! Вы установили сервер MySQL версии 5.7.

Не забудьте защитить свою установку MySQL

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

Вы забыли пароль root MySQL?

Если во время установки вы не запомнили введенный вами пароль root, то вот пошаговое руководство по сбросу пароля root MySQL.

Об авторе

Рамья Сантош

является веб-дизайнером и создателем контента. Писатель-фрилансер о последних тенденциях в технологиях, обзорах гаджетов, инструкциях и многом другом.

Как установить последнюю версию MySQL 8 на Debian 10 Buster — Linux Совет

В этом руководстве объясняется, как установить Mysql 8 на Debian 10 Buster, но он также полезен для предыдущих версий Debian. При его написании я обнаружил некоторые ошибки, связанные со старой установкой Mysql, и процесс устранения неполадок был включен ниже инструкций по процессу установки.

Установка Mysql 8 на Debian 10 Buster

Перед установкой Mysql необходимо настроить репозиторий, который вы можете получить, выполнив следующую команду wget:

$ wget http://repo.mysql.com/mysql-apt-config_0.8.14-1_all.deb

Установите репозиторий apt, запустив:

$ dpkg -i mysql-apt-config_0.8.14-1_all.deb

Примечание : для руководства по команде dpkg вы можете получить доступ к Все о менеджерах пакетов debian: объяснение dpkg, apt и aptitude учебное пособие.

Нажмите ENTER на OK , чтобы продолжить.

Выберите опцию OK и с помощью клавиши TAB нажмите OK и продолжите.

По окончании установки будет отображаться результат, аналогичный показанному на изображении ниже:

Теперь для установки Mysql 8 запустите:

$ apt update && apt install mysql-server -y

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

На следующем экране будет запрошен пароль.

Затем вам нужно будет подтвердить пароль:

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

Начнется установка:

После завершения вы можете проверить свой сервер Mysql, выполнив:

Примечание : вы можете получить доступ к Остановка, запуск и перезапуск служб в учебнике Debian , чтобы изучить управление службами.

Устранение неполадок при установке Mysql

В моем конкретном случае установка не прошла успешно с первой попытки из-за проблем со старой установкой, которую я не удалил до установки Mysql 8.

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

При установке Mysql 8 на Debian 10 Buster я обнаружил следующую ошибку:

dpkg: проблемы с зависимостями мешают настройке mysql-server:
mysql-server зависит от mysql-community-server (= 8.0.18-1debian10); однако:
Пакет mysql-community-server еще не настроен.
dpkg: пакет обработки ошибок mysql-server (—configure):
проблемы с зависимостями — оставление ненастроенным

Выполнение следующей команды не помогло решить проблему:

Не удалось установить модуль: файл mysql.служба: ссылка была разорвана
/ usr / bin / deb-systemd-helper: ошибка: сбой предустановки systemctl на mysql. служба:
Нет такого файла или каталога
Не удалось получить состояние файла модуля для mysql.service: ссылка была разорвана
mysql.service — это отключенный или статический модуль, не запускающий его.
Задание для mysql.service не удалось, потому что процесс управления завершился с кодом ошибки.
См. «Systemctl status mysql.service» и «journalctl -xe» для подробностей.
invoke-rc.d: initscript mysql, действие «start» не выполнено.
mysql.service — Сервер сообщества MySQL
Загружено: загружено (/lib/systemd/system/mysql.service; плохо; предустановка поставщика: включена)
Активно: не удалось (результат: код выхода) с среды 18.12.2019 20:54:55 -03; 18 мс назад
Документы: человек: mysqld (8)
http://dev.mysql.com/doc/refman/en/using-systemd.html
Процесс: 27022 ExecStartPre = / usr / share / mysql-8.0 / mysql-systemd-start pre
(код = завершено, статус = 0 / УСПЕХ)
Процесс: 27057 ExecStart = / usr / sbin / mysqld (код = завершен, статус = 1 / FAILURE)
Главный PID: 27057 (код = завершено, статус = 1 / ОТКАЗ)
Статус: «Обновление словаря данных с MySQL 5.7 in progress »
18 дек. 20:54:54 linuxhint systemd [1]: Запуск MySQL Community Server …
18 дек 20:54:55 linuxhint systemd [1]: mysql.service: Главный процесс завершен,
code = exited, status = 1 / FAILURE
18 декабря 20:54:55 linuxhint systemd [1]: mysql.service: Ошибка с результатом ‘exit-code’.

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

$ APT чистка mysql-client-5.7 mysql-client-core-5.7 mysql-common
mysql-server-5.7 mysql-server-core-5.7 mysql-сервер

При запросе подтверждения используйте клавишу TAB для перехода к YES и нажмите ENTER .

Затем обновите, удалите ненужные левые пакеты и при необходимости устраните зависимости, запустив:

$ apt update && apt autoremove && sudo apt -f install

В ответ на запрос введите Y и нажмите ENTER , чтобы продолжить.

После завершения вы можете снова продолжить установку Mysql, запустив:

$ apt установить mysql-server

Нажмите Y и Введите , когда вас попросят подтвердить установку.

Установка предложит снова установить пароль:

Если вы используете пароль, подтвердите его еще раз:

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

Установка должна пройти успешно:

Статьи по теме

Как установить последний сервер / клиент MySQL на Debian Jessie 8, 32/64-разрядное Easy Guide

Как установить последний сервер / клиент MySQL на Debian Jessie 8, 32/64-разрядное Easy Guide | tutorialforlinux.com 11 марта 2014 г. | Автор + GNU + Linux + евангелист | Заполнено: Учебник.

Установите последнюю версию MySQL на Debian Jessie 8 32/64-бит

Учебник покажет вам , как всегда получить свежую установленную последнюю версию MySQL 5.7.X в Debian Jessie 8 Gnome / KDE / Lxde / Xfce i386 / amd64 .

Обратите внимание на : для среды Production можно использовать вместо пакетов Distro!

Чтобы постоянно устанавливать последнюю версию сервера / клиента MySQL в Debian, вам необходимо Загрузить из Oracle последний пакет Debian для MySQL Community Edition .

Важный шаг, который следует принять во внимание. После установки — это Защитите установку сервера MySQL с помощью подходящего инструмента.

  1. Загрузить последнюю версию сервера MySQL для Debian Linux

    Последняя версия MySQL .deb 32/64-бит

  2. Открыть Терминал Окно
    (Нажмите «Enter» для выполнения команд)

  3. Проверить, установлен ли уже MySQL

     который mysql 

    Если MySQL уже установлен, то можно оставить выпуск дистрибутива!

  4. Установка последней версии MySQL.деб

     su 

    Если получено сообщение «Пользователь не в файле Sudoers», см. Как включить sudo

     dpkg -i / [путь/2 ]/mysql*debian*.deb 
  5. Конфигурация после установки

     groupadd mysql 
     useradd -r -g mysql mysql 
     chown -R mysql: mysql / opt / mysql 
     / opt / mysql / server * / скрипты / mysql_install_db --user = mysql 
     chown -R корень / opt / mysql 
     chown -R mysql / opt / mysql / server * / data 
  6. Настройка пользователя PATH

     su [myUser] 
     кд 
     нано.bashrc 

    Приложение:

     экспорт ПУТЬ = $ ПУТЬ: / opt / mysql / server- [Версия] / bin 

    Ctrl + X для сохранения и выхода из nano 🙂

    Загрузить новый путь:

     исходный код .bashrc 
  7. Настоятельно рекомендуется безопасная установка сервера MySQL

    Установка безопасного сервера MySQL

  8. Запуск сервера MySQL

     sudo su -c "mysqld_safe --user = mysql &" 

Теги: База данных, Debian jessie 8, Руководство, Практические инструкции, Установка, установка mysql Debian, установка mysql linux, Linux, MySQL, mysql Debian, mysql linux, Oracle, Учебник

«) // ->
Нам нужно не образование, а свобода
Философия свободного программного обеспечения GNU / Linux
Спасибо Google

Уважаемый пользователь Linux, было бы хорошо, если бы вы могли понять, как без Google Ads большая часть этого содержания, вероятно, никогда не была бы написана!
Итак, спасибо Google и рекламодателям Google Рекламы за их поддержку.
Более того, я могу легко найти необходимую информацию, чтобы снова составить свои руководства, используя лучшую поисковую систему: Google.

Кредиты

Вечная слава Богу, Иисусу Христу, Святому Духу, Ганеше, Шиве, Вишну, Кришне, Лаози, Будде, Бодхидхарме, Ма Гциг, Хакуину, Иккью, Нагарджуне, Тилопе, Наропе, Миларепе, Сухраварди, Святому Дисмасу, Сан Франческо Тереза, Святой Иоанн, Святой Филипп, Экхарт … Все Святые Божества, Аватары, Святые, Мистики и Истинные Духовные Учителя.Потому что они пребывают в Вечном Свете Истины и Восторга, освещающем мир тьмы, незнания, слепоты, беспокойства и лжи!

Недавние сообщения
Свобода Иисуса

«Правда освободит тебя!»

Иоанна 8:32


«Истинно говорю вам, что если вы не изменитесь и не станете как маленькие дети, вы никогда не войдете в Царство Небесное. Следовательно, кто бы ни занимал низкое положение этого ребенка, тот величайший в Царстве Небесном.«

Матфея 18: 3-4

Узнайте больше о свободе Иисуса и Божьем Царстве Небесном на jesusfreedom.net !

Божественное против дьявольской природы
«Динамика Божественного Святого — это вечное единство, все добродетели и совершенство … Чистота, духовность, невинность, невозмутимость, доверие, невиновность, альтруист, обмен и пустота».
Вместо этого дьявольское человеческое — это эфемерная дифференциация, все недостатки и проблемы … нечистота, бездуховность, порочность, ярость, сомневающийся, инклюзивный, эгоистичный, жадный и денежный.»

Евангелист GNU + Linux

Пожертвуйте беднякам

Поддерживается Google.org
Пожертвовать чистую воду

Как установить MySQL на Debian 10

В этой статье вы узнаете, как установить сервер MySQL в Debian 10.x. Он также работает с другим дистрибутивом на основе Linux (например, Ubuntu).

Шаг 1. Добавьте репозиторий MySQL

Сначала обновим пакеты:
apt update
apt install gnupg

Затем загрузите MySQL с официальной страницы или используйте команду wget:
wget https://dev.mysql.com/get/mysql-apt-config_x.xx-x_all.deb
, где xxx-x — это Версия MySQL (например, 0.8.15-1):

Скриншот 1. Скачайте MySQL.

Установите .deb:
sudo dpkg -i mysql-apt-config_x.x.x-x_all.deb
, где x.x.x-x — версия MySQL.

Когда вы попытаетесь установить пакет, он спросит вас, какой продукт и версию вы хотите установить. Здесь вы можете выбрать версию MySQL, инструменты, коннекторы (например, MySQL Workbench) и пакеты предварительного просмотра. Чтобы выбрать версию, нажмите первую опцию:

Снимок экрана 2. Выберите MySQL Server & Cluster.

Выберите версию, которую вы будете использовать. После выбора вы переместитесь в предыдущее меню — нажмите кнопку Ok:

Скриншот 3.Выберите версию, которую вы будете использовать.

Обновите репозиторий apt:
apt-get update

Пакет для установки сервера — «mysql-community-server», и его версия та же, что вы выбрали ранее в установщике пакета.

Шаг 2. Установите сервер MySQL

Установите сервер MySQL с помощью команды:
sudo apt-get install mysql-community-server

Скриншот 4. Процесс установки.

Когда apt завершит загрузку, установщик запросит пароль root:

Скриншот 5.Введите пароль root.

У вас есть два варианта:

  • Оставьте поле пароля пустым: сервер будет использовать аутентификацию через сокеты unix. Это означает, что вы можете получить доступ к серверу только как пользователь root или как пользователь с sudo;
  • Установите пароль: метод аутентификации будет таким же для других пользователей.

Если вы установите пароль, программа установки спросит, какой плагин аутентификации использовать, надежно зашифрованный пароль (MySQL 8.x) или устаревший метод (MySQL 7.x и ранее).Для выбора параметров используйте стрелки или кнопку Tab. Вы должны выбрать метод, совместимый с вашим клиентом / программой. W Как только вы выберете все параметры, процесс установки будет завершен, и служба запустится автоматически:

Снимок экрана 6. Выберите плагин аутентификации по умолчанию.

Теперь проверьте статус службы с помощью systemctl:
systemctl status mysql.service

Скриншот 7. Проверка статуса сервиса.

Если вы видите «активен», это означает, что сервер работает без ошибок.Для выхода нажмите Q или Ctrl + C.

Затем запустите команду от имени пользователя root для безопасной настройки службы SQL:
mysql_secure_installation

Программа задаст вам вопросы. Вам нужно будет ответить Да (кнопка Y / Y) или Нет (любая другая клавиша):

Снимок экрана 8. Запуск mysql_secure_installation.

Если вы хотите разрешить удаленный доступ, отредактируйте файл «mysqld.conf» в etc /:
sudo nano /etc/mysql/mysql.conf.d/mysqld.cnf

В конце файла добавьте опцию «bind_address» со значением localhost:
адрес привязки = 127.0,0.1

Сохраните файл и перезапустите службу с помощью systemctl:
systemctl restart mysql

Примечание: не забудьте открыть порт MySQL (желательно указать стандартный порт MySQL). Если вы используете ufw:
ufw allow $ yoursqlport
, где вместо yoursqlport напишите свой порт MySQL.

Если вы используете iptables:
iptables –A INPUT –p tcp –dport $ yoursqlport –j ACCEPT
где вместо yoursqlport напишите свой порт MySQL.

Как установить MySQL 5.7 на Debian 9

Автор: GloboTech Communications 18 октября 2017 г.

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

Однако одно существенное изменение по сравнению с предыдущим выпуском Debian 8 — это переход от MySQL к MariaDB. В новом выпуске предыдущие экземпляры MySQL заменяются эквивалентным экземпляром MariaDB. Это руководство поможет вам установить MySQL 5.7 на узел под управлением операционной системы Debian Stretch.

Начало работы

Чтобы начать установку пакетов MySQL на Stretch, у вас должен быть облачный сервер или выделенный серверный узел, в зависимости от того, что вы предпочитаете, с установленным текущим экземпляром Debian Stretch.

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

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

Установка MySQL 5.7 на Debian 9

Первый шаг в установке официального экземпляра MySQL — это перейти на веб-сайт MySQL, найти правильный пакет .deb и загрузить пакет .deb.

Теперь, когда пакет .deb загружен, вам нужно будет загрузить его на свой сервер Debian, следуя приведенному ниже примеру:
wget https://dev.mysql.com/get/mysql-apt-config_0.8.8-1_all .deb

После загрузки на сервер проверьте файл.deb, затем установите его с помощью dpkg:
ls mysql-apt-config_0.8.8-1_all.deb

Для завершения загрузки пакета .deb выполните следующие действия:
dpkg -i mysql-apt-config_0.8.8-1_all.deb

Во время установки вам будет предложено выбрать параметры для вашей установки. Не забудьте оставить параметры по умолчанию, затем нажмите «ОК»

После завершения установки теперь вы можете обновить список пакетов:
apt update

Когда вышеуказанные шаги выполнены, вы готовы приступить к установке MySQL, как сервера, так и клиента.Во время установки вы также получите запрос на создание пароля пользователя root MySQL:
apt install mysql-server mysql-client

После завершения установки сервера MySQL и клиента MySQL необходимо включить экземпляр MySQL на своем сервере, а затем запустить MySQL:
systemctl enable mysql && systemctl start mysql

Защита вашей установки MySQL очень важна, поэтому запустите приведенный ниже сценарий, оставив только настройки по умолчанию, чтобы защитить ваш сервер и клиент MySQL:
mysql_secure_install

Заключение

Поздравляем! Вы завершили установку MySQL 5.7 на вашем облачном сервере Debian 9 или узле выделенного сервера. При установке этого официального экземпляра MySQL вы заменили существующий экземпляр MariaDB; это делает MySQL программным обеспечением базы данных по умолчанию. Если вы успешно использовали это руководство для обновления вашего текущего выпуска Debian с экземпляром MySQL, поделитесь им с другими, проходящими тот же процесс.

Mysql vs postgresql vs: Сравнение MySQL и PostgreSQL | Losst

Mysql vs postgresql vs: Сравнение MySQL и PostgreSQL | Losst

Сравнение MySQL и PostgreSQL | Losst

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

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

Содержание статьи:

Системы управления базами данных

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

Реляционные системы управления базами данных позволяют размещать данные в таблицах, связывая строки из разных таблиц и, таким образом, связывая разные, объединенные логически данные. Перед тем, как вы сможете сохранять данные, необходимо создать таблицы определенного размера и указать тип данных для каждого столбца. Столбы представляют поля данных, а сами данные размещены в строках. Обе системы управления базами данных, и MySQL vs Postgresql принадлежат к реляционным. Дальше мы рассмотрим подробнее чем отличаются обе программы. А теперь перейдем к более детальному рассмотрению.

Краткая история

MySQL

Разработка MySQL началась еще в 90х годах. Первый внутренний выпуск базы данных состоялся в 1995 году. За это время разработкой программы занимались несколько компаний. Разработка была начата шведской компанией MySQL AB, которую приобрела Sun Microsystems, которая, собственно перешла в собственность Oracle. На данный момент, начиная с 2010 года, разработкой занимается Oracle.

Postgresql

Разработка Postrgresql началась в далеком 1986 году в стенах Калифорнийского университета Беркли. Разработка длилась почти восемь лет, затем проект разделился на две части коммерческую базу данных IIlustra и полностью свободный проект Postrgesql, который разрабатывается энтузиастами.

Хранение данных

MySQL

MySQL — это реляционная база данных, для хранения данных в таблицах используются различные движки, но работа с движками спрятана в самой системе. На синтаксис запросов и их выполнение движок не влияет. Поддерживаются такие основные движки MyISAM, InnoDB, MEMORY, Berkeley DB. Они отличаются между собой способом записи данных на диск, а также методами считывания.

Postgresql

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

Стандарт SQL

Независимо от используемой системы управления базами данных, SQL — это стандартизированный язык выполнения запросов. И он поддерживается всеми решениями, даже MySQL или Postgresql. Стандарт SQL был разработан в 1986 году и за это время уже вышло нескольких версий.

MySQL

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

Postgresql

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

Возможности обработки

Из предыдущего пункта выплывают и другие отличия postgresql от mysql, это возможности обработки данных и ограничения. Естественно, соответствие более новым стандартам дает более новые возможности.

MySQL

При выполнении запроса MySQL загружает весь ответ сервера в память клиента, при больших объемах данных это может быть не совсем удобно. В основном по функциям Postgresql превосходит Mysql, дальше рассмотрим в каких именно.

Postgresql

Postgresql поддерживает использование курсоров для перемещения по полученным данным. Вы получаете только указатель, весь ответ хранится в памяти сервера баз данных. Этот указатель можно сохранять между сеансами. Здесь поддерживается построение индексов сразу для нескольких столбцов таблицы. Кроме того, индексы могут быть различных типов, кроме hash и b-tree доступны GiST и SP-GiST для работы с городами, GIN для поиска по тексту, BRIN и Bloom.

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

 Производительность

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

MySQL

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

Postgresql

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

В целом PostgreSQL работает быстрее, за исключениям использования первичных ключей. Давайте рассмотрим несколько тестов с различными операциями:

Типы данных

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

MySQL

MySQL поддерживает такие типы данных:

  • TINYINT: очень маленькое целое.;
  • SMALLINT: маленькое целое;
  • MEDIUMINT: целое среднего размера;
  • INT: целое нормального размера;
  • BIGINT: большое целое;
  • FLOAT: знаковое число с плавающей запятой одинарной точности;
  • DOUBLE, DOUBLE PRECISION, REAL: знаковое число с плавающей запятой двойной точности
  • DECIMAL, NUMERIC: знаковое число с плавающей запятой;
  • DATE: дата;
    DATETIME: комбинация даты и времени;
  • TIMESTAMP: отметка времени;
  • TIME: время;
    YEAR: год в формате YY или YYYY;
  • CHAR: строка фиксированного размера, дополняемая справа пробелами до максимальной длины;
  • VARCHAR: строка переменной длины;
  • TINYBLOB, TINYTEXT: двоичные или текстовые данные максимальной длиной 255 символов;
  • BLOB, TEXT: двоичные или текстовые данные максимальной длиной 65535 символов;
  • MEDIUMBLOB, MEDIUMTEXT: текст или двоичные данные;
  • LONGBLOB, LONGTEXT: текст или двоичные максимальной данные длиной 4294967295 символов;
  • ENUM: перечисление;
  • SET: множества.

Postgresql

Поддерживаемые типы полей в Postgresql достаточно сильно отличаются, но позволяют записывать точно те же данные:

  • bigint: знаковое 8-байтовое целое;
  • bigserial: автоматически увеличиваемое 8-байтовое целое;
  • bit: двоичная строка фиксированной длины;
  • bit varying: двоичная строка переменной длины;
  • boolean: флаг;
  • box: прямоугольник на плоскости;
  • byte: бинарные данные;
  • character varying: строка символов фиксированной длины;
  • character: строка символов переменной длины;
  • cidr: сетевой адрес IPv4 или IPv6;
  • circle: круг на плоскости;
  • date: дата в календаре;
  • double precision: число с плавающей запятой двойной точности;
  • inet: адрес интернет IPv4 или IPv6;
  • integer: знаковое 4-байтное целое число;
  • interval: временной промежуток;
  • line: бесконечная прямая на плоскости;
  • lseg: отрезок на плоскости;
  • macaddr: MAC-адрес;
  • money: денежная величина;
  • path: геометрический путь на плоскости;
  • point: геометрическая точка на плоскости;
  • polygon: многоугольник на плоскости;
  • real: число с плавающей точкой одинарной точности;
  • smallint: двухбайтовое целое число;
  • serial: автоматически увеличиваемое четырехбитное целое число;
  • text: строка символов переменной длины;
  • time: время суток;
  • timestamp: дата и время;
  • tsquery: запрос текстового поиска;
  • tsvector: документ текстового поиска;
  • uuid: уникальный идентификатор;
  • xml: XML-данные.

Как видите, типов данных в Postgresql больше и они более разнообразны, есть свои типы полей для определенных видов данных, которых нет MySQL. Отличие MySQL от Postgresql очевидно.

Разработка

Оба проекта имеют открытый исходный код, но развиваются по-разному. Развитие MySQL нравится далеко не всем. И в этом сравнение mysql и postgresql дает много отличий.

MySQL

База данных MySQL разрабатывается компанией Oracle и ходят слухи, что компания намерено тормозит развитие движка. Было создано очень много форков проекта, в том числе форк MariaDB от разработчика оригинальной MySQL. Но все же развитие остается медленным.

Postgresql

Как было сказано в начале статьи разработка началась в университете Беркли. Затем перешла в коммерческую компанию. Сейчас программа разрабатывается независимой группой программистов и советом нескольких компаний. Новые версии выпускаются достаточно активно и получают все новые и новые функции.

Выводы

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

На завершение видео с описанием возможностей и перспектив Postgresql:

PostgreSQL vs MySQL / Хабр

В преддверии своего доклада на конференции PGCONF.RUSSIA 2015 я поделюсь некоторыми наблюдениями о важных различиях между СУБД MySQL и PostgreSQL. Этот материал будет полезен всем тем, кого уже не устраивают возможности и особенности MySQL, а также тем, кто делает первые шаги в Postgres. Конечно, не стоит рассматривать этот пост как исчерпывающий список различий, но для принятия решения в пользу той или иной СУБД его будет вполне достаточно.

Тема моего доклада «Асинхронная репликация без цензуры, или почему PostgreSQL завоюет мир», и репликация одна из самых больных тем для нагруженных проектов использующих MySQL. Проблем много — корректность работы, стабильность работы, производительность — и на первый взгляд они выглядят несвязанными. Если же посмотреть в историческом контексте, то мы получаем интересный вывод: MySQL репликация имеет столько проблем потому, что она не была продумана, а точкой невозврата была поддержка storage engine (подключаемых движков) без ответов на вопросы «как быть с журналом?» и «как различным storage engine участвовать в репликации». В 2004 году в PostgreSQL рассылке пользователь пытался «найти» storage engine в исходном коде PostgreSQL и сильно удивился, что их нет. В процессе дискуссии кто-то предложил добавить эту возможность PostgreSQL, и один из разработчиков ответил «Ребята, если мы так сделаем, у нас будут проблемы с репликацией и с транзакциями между движками».

The problem is that many storage management systems… often do their own WAL and PITR. Some do their own buffer management, locking and replication/load management too. So, as you say, its hard say where an interface should be
abstracted.
ссылка на это письмо в postgresql mailing list

Прошло более 10 лет, и что мы видим? В MySQL есть раздражающие проблемы с транзакциями между таблицами разных storage engine и у MySQL проблемы с репликацией. За эти десять лет у PostgreSQL появились подключаемые типы данных и индексы, а также есть репликация — т. е. преимущество MySQL было нивелировано, в то время как архитектурные проблемы MySQL остались и мешают жить. В MySQL 5.7 попытались решить проблему производительности репликации, распараллелив её. Поскольку проект на работе очень чувствителен к производительности репликации в силу своего масштаба, я попытался протестировать, стало ли лучше. Я нашёл, что параллельная репликация в 5.7 работает медленней однопоточной в 5.5, и лишь в отдельных случаях — примерно также. Если вы сейчас используете MySQL 5.5 и хотите перейти на более свежую версию, то учтите, что для высоконагруженных проектов миграция невозможна, поскольку репликация просто перестанет успевать выполняться.

После доклада на highload, в Oracle приняли к сведению разработанный мной тест и сообщили, что попытаются исправить проблему; недавно мне даже написали, что смогли увидеть параллелизм на своих тестах, и выслали настройки. Если не ошибаюсь, при 16 потоках появилось незначительное ускорение по сравнению с однопоточной версией. К сожалению, до сих пор не повторил свои тесты на предоставленных настройках — в частности потому, что с такими результатами наши проблемы всё равно остаются актуальными.

Точные причины такой регрессии производительности неизвестны. Было несколько предположений — например, Кристиан Нельсен, один из разработчиков MariaDB, у себя в блоге писал о том, что могут быть проблемы с перфоманс-схемой, с синхронизацией тредов. Из-за этого наблюдается регрессия в 40%, которая видна на обычных тестах. Oracle-разработчики это опровергают, и меня даже убедили, что её нет, видимо, я вижу какую-то другую проблему (и сколько же их всего?).

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

На реализацию низкоуровневой физической репликации в MySQL можно не надеяться. Проблема в том, что там вместо одного журнала (как в PostgreSQL) их получается два или четыре — смотря как посчитать. PostgreSQL просто коммитит запросы, они попадают в журнал, и этот журнал используется в репликации. PostgreSQL-репликация суперстабильна, потому что она использует тот же журнал, что и при операциях восстановления после сбоев. Этот механизм давно написан, хорошо оттестирован и оптимизирован.

В MySQL ситуация другая. У нас есть отдельный журнал InnoDB и журнал репликации, и нужно коммитить и туда, и туда. А это two-phase commit между журналами, который по определению работает медленно. То есть мы не можем просто взять и сказать, что мы повторяем транзакцию из InnoDB-журнала — приходится разбираться, что за запрос, запускать его заново. Если даже это логическая репликация, на уровне строчек, то эти строчки нужно искать в индексе. И мало того, что приходится сделать большое количество работы, чтобы выполнить запрос — он при этом снова будет писаться в свой InnoDB-журнал уже на реплике, что для производительности явно нехорошо.

В PostgreSQL в этом смысле архитектура на порядок продуманней и лучше реализована. Недавно в нём анонсировали возможность под названием Logical Decoding — которая позволяет сделать всякие интересные штуки, которые очень тяжело сделать в рамках физического журнала. В PostgreSQL это надстройка сверху, logical decoding позволяет работать с физическим журналом так, будто он логический. Именно эта функциональность скоро уберёт все преимущества MySQL репликации, кроме, возможно, размера журнала — statement-based репликация MySQL будет выигрывать — но у statement-based репликации MySQL есть совершенно дикие проблемы в самых неожиданных местах, и не стоит считать её хорошим решением (про это всё я тоже буду говорить в докладе).

Кроме того, для PostgreSQL есть триггерная репликация — это Tungsten, который позволяет делать то же самое. Триггерная репликация работает следующим образом: ставятся триггеры, они заполняют таблицы или пишут файлы, результат отправляется на реплику и там применяется. Именно через Tungsten, насколько я знаю, делают миграцию из MySQL в PostgreSQL и наоборот. В MySQL же логическая репликация работает прямо на уровне движка, и другой ее сделать сейчас уже нельзя.

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

Например, так «выстрелила» компания Percona: они вели MySQL Performance Blog, и в этом блоге было множество статей, в которых рассматривались отдельные моменты эксплуатации MySQL. Это принесло бешеную популярность, привело клиентов в консалтинг, позволило привлечь ресурсы для запуска разработки собственного форка Percona-Server. Существование и востребованность MySQL Performance Blog доказывают, что официальной документации просто недостаточно.

У PostgreSQL фактически все ответы есть в документации. С другой стороны, я слышал много критики при сравнении документации PostgreSQL со «взрослой» Oracle. Но это, на самом деле, очень важный показатель. MySQL с взрослым Oracle никто не пытается сравнивать вообще — это было бы смешно и нелепо — а PostgreSQL уже начинают сравнивать вполне серьезно, PostgreSQL-коммьюнити эту критику слышит и работает над улучшением продукта. Это говорит о том, что он по своим возможностям и производительности начинает конкурировать со столь мощной системой как Oracle, на которой работают мобильные операторы и банки, в то время как MySQL остаётся сидеть в нише веб-сайтов. И проекты-гиганты, доросшие до большого количества данных и пользователей, хлебают горе с MySQL большой ложкой, постоянно упираясь в его ограничения и архитектурные проблемы, которые невозможно исправить, затратив разумное количество сил и времени.

Примером таких крупных проектов на PostgreSQL является 1C: PostgreSQL идёт как опция вместо Microsoft SQL, а Microsoft SQL действительно фантастическая СУБД, одна из самых мощных. PostgreSQL может заместить MS SQL, а попытка заместить его MySQL… давайте опустим завесу жалости над этой сценой, как писал Марк Твен.

PostgreSQL соответствует стандартам SQL-92, SQL-98, SQL-2003 (реализованы все его разумные части) и уже работает над SQL-2011. Это очень круто. Для сравнения, MySQL не поддерживает даже SQL-92. Кто-то скажет, что в MySQL такая цель просто не ставилась разработчиками. Но нужно понимать, что разница между версиями стандарта заключается не в мелких изменениях — это новые функциональные возможности. То есть в тот момент, когда MySQL говорил: «Мы не будем следовать стандарту», они не просто вносили какие-то мелкие различия, из-за которых MySQL тяжело поддержать, они еще закрывали дорогу к реализации многих нужных и важных возможностей. Там до сих пор нет нормально оптимизатора. То, что там называется оптимизацией, в PostgreSQL называется «парсер» плюс нормализации. В MySQL это лишь план выполнения запросов, без разделения. И MySQL к поддержке стандартов придут еще очень нескоро, поскольку на них давит груз обратной совместимости. Да, они хотят, но лет через пять, может, что-нибудь у них появится. В PostgreSQL есть уже все и сейчас.

С точки зрения

простоты

администрирования сравнение не в пользу PostgreSQL. MySQL администрировать гораздо проще. И не потому, что в этом смысле он лучше продуман, а просто гораздо меньше умеет делать. Соответственно, и настраивать его проще.

У MySQL есть проблема со сложными запросами. Например, MySQL не умеет спускать группировку в отдельные части union all. Разница между двумя запросами — на нашем примере группировка по отдельным таблицам и union all сверху работала в 15 раз быстрее, чем union all и потом группировка, хотя оптимизатор должен оба запроса приводить в одинаковый, эффективный план выполнения запроса. Нам придется делать генерацию таких запросов руками — т. е. тратить время разработчиков на то, что должна делать база.

«Простота» MySQL вытекает, как можно увидеть выше, из крайне бедных возможностей — MySQL работает просто хуже и требует больше времени и усилий во время разработки. В противоположность этому, у PostrgreSQL есть гистограммы и нормальный оптимизатор, и он выполнит такие запросы эффективно. Но если есть гистограммы, значит, есть их настройки — как минимум bucket size. Про настройки нужно знать и в отдельных случаях их менять — следовательно, нужно понимать, что это за настройка, за что она отвечает, уметь распознавать такие ситуации, увидеть выбрать оптимальные параметры.

Изредка случается, что умелость PostrgreSQL может помешать, а не помочь. В 95% случаев все хорошо работает — лучше, чем MySQL, — а какой-то один дурацкий запрос работает гораздо медленнее. Или всё работает хорошо, а потом внезапно (с точки зрения пользователя) по мере роста проекта некоторые запросы стали работать плохо (стало больше данных, стал выбираться другой план выполнения запроса). Скорее всего, для исправления достаточно запустить analyze или немножко покрутить настройки. Но нужно знать, что делать и как это делать. Как минимум, нужно прочитать документацию PostgreSQL на эту тему, а читать документацию почему-то не любят. Может потому, что в MySQL от неё мало помощи? 🙂

Подчеркну, что PostgreSQL в этом смысле не хуже, просто он позволяет отложить проблемы, а MySQL сразу их вываливает и приходится тратить время и деньги на их решение. В этом смысле MySQL работает всегда стабильно плохо, и еще на этапе разработки люди эти особенности учитывают: делают все максимально простым способом. Это относится только к производительности, точнее, к способам её достижения и к её прогнозируемости. В плане корректности и удобства PostgreSQL на голову выше MySQL.

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

Во-первых, какой опыт есть у команды? Если вся команда имеет 10 лет опыта работы с MySQL и нужно запуститься как можно быстрее, то не факт, что стоит менять знакомый инструмент на незнакомый. Но если сроки не критичны, то стоит попробовать PostgreSQL.

Во-вторых, нужно не забывать про проблемы эксплуатации. Если у вас не высоконагруженный проект, то с точки зрения производительности разницы между этими двумя СУБД нет. Зато у PostgreSQL есть другое важное преимущество: он более строгий, делает больше проверок за вас, дает меньше возможности ошибиться, и это в перспективе огромное преимущество. Например, в MySQL приходится писать собственные инструменты для верификации обычной ссылочной целостности базы. И даже с этим могут быть проблемы. В этом смысле PostgreSQL инструмент более мощный, более гибкий, разрабатывать на нем приятнее. Но это во многом зависит от опыта разработчика.

Подводя итог: если у вас простенький интернет-магазин, нет денег на админа, нет серьезных амбиций перерасти в большой проект и есть опыт работы с MySQL — то берите MySQL. Если предполагаете, что проект будет популярным, если он большой, его будет тяжело переписать, если в нём сложная логика и связи между таблицами — возьмите PostgreSQL. Даже из коробки он у вас будет работать, поможет в разработке, сэкономит время, и вам проще будет расти.

MySQL против PostgreSQL | PostgreSQL

Меня часто спрашивают, «Что вы предпочитаете, PostgreSQL или MySQL?» Мой ответ всегда один и тот же: «Это – вопрос предпочтения». Вы можете задать множеству других разработчиков тот же самый вопрос, и их ответы будут весьма различного толка.

Вот – сравнение баз данных MySQL и PostgreSQL, предлагаемое не ради высказывания моего мнения, а ради того, чтобы помочь другим принять собственное решение. Обеим системам есть что предложить в вопросах стабильности, гибкости и производительности. MySQL имеет особенности, в которых PostgreSQL испытывает недостаток, и наоборот.

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

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

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

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

Таблица A: сравнение MySQL и PostgreSQL

ОсобенностиPostgreSQLMySQL
ANSI SQL совместимостьБлизка к стандарту ANSI SQLСледует некоторым стандартам ANSI SQL
Скорость работыМедленнееБыстрее
Вложенные селектыДаНет
ТранзакацииДаДа, однако должен использоваться тип таблицы InnoDB
Ответ базы данныхДаДа
Поддержка внешних ключейДаНет
ПредставленияДаНет
Хранимые процедурыДаНет
ТриггерыДаНет
UnionsДаНет
Полные JoinsДаНет
Ограничители целостностиДаНет
Поддержка WindowsДаДа
Вакуум (очистка)ДаНет
ODBCДаДа
JDBCДаДа
Различные типы таблицНетДа

Почему бы вы предпочли MySQL, нежели PostgreSQL? Сначала, мы должны рассмотреть потребности приложений в терминах требований базы данных. Если я хочу создать веб приложение, и главное для меня это производительность и скорость – MySQL будет лучшим выбором, потому что она быстра и разработана для того, чтобы хорошо работать с веб серверами.

Однако, если я хочу создать другое приложение, которое требует выполнения транзакаций и наличия внешних ключей, лучшим выбором станет PostgreSQL. Даже при том, что MySQL не полностью совместима с ANSI SQL стандартом, я должен упомянуть, что, в то время как PostgreSQL ближе к ANSI SQL стандарту, MySQL ближе к ODBC стандарту.

Позвольте мне описать некоторые плюсы использования MySQL:

  • MySQL относительно быстрее PostgreSQL.
  • Дизайн и планирование базы данных несколько проще.
  • Можно создать простой веб сайт с использованием базы.
  • Ответы на запросы MySQL были хорошо протестированны.
  • Нет нужды использовать методы очистки (вакуум).

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

Cуществует немало разработчиков, которые предпочитают богатые функциональные возможности SQL команд PostgreSQL. Одно из наиболее ощутимых различий между MySQL и PostgreSQL – невозможность создания вложенных подзапросов (селектов) в MySQL. PostgreSQL соответствует многими SQL стандартам ANSI, таким образом позволяя создание сложных команд SQL.

Несколько причин использовать PostgreSQL:

  • Сложный дизайн базы данных.
  • Переезд с Oracle, Sybase или MSSQL.
  • Сложные наборы правил.
  • Использование процедурных языков на сервере.
  • Транзакации
  • Использование хранимых процедур.
  • Использование географичеких данных.
  • R-Trees (например, использование индексов).

Вы должны будете выбрать, взвесив все плюсы и минусы, какая база данных является «совершенной» для вашего приложения или сайта. А может быть и такое, что вы захотите использовать обе базы (бывают и такие случаи). Мое заключение – одна база не обязательно лучше другой, и каждая из них занимает свою определеную нишу в мире баз данных с открытым исходным кодом.

MySQL vs PostgreSQL

Выбор между MySQL и PostgreSQL — это решение, которое должен принять каждый разработчик веб-приложений, который выбирает между различными Open-Source СУБД. Оба решения проверены временем и оба заслуживают пристального внимания. СУБД MySQL задумывалась как более быстрая но менее функциональная, в то время как разработчики PostgreSQL сосредоточились на большем количестве функционально полезных примочек чтобы как можно ближе соответствовать стандартам Oracle. MySQL очень популярен среди Web разработчиков по причине его высокой скорости и простоты использования. PosgreSQL менее популярен, так как удобен и просто только для тех разработчиков, которые ранее использовали Oracle или другие похожие базы данных. Но все скоростные характеристики MySQL по сравнению с PostgreSQL постепенно таят, так как с каждым обновлением PostgreSQL заметно прибавляет в скорости. Теперь рассмотрим эти две СУБД более пристально.

 

Архитектура

PostgreSQL уникальная СУБД с единым сервером хранения данных (СХД). MySQL имеет два слоя в своей архитектуре. Первый слой — это набор серверов хранения данных. По этому при сравнении обычно указывают какой именно сервер хранения данных MySQL использовался. Каждый сервер отличают и параметры быстродейстсвия и его функциональные возможности. Самый распространенный из них — InnoDB. Он отличается от остальных полной поддержкой модели ACID и высокой производительностью. Прямым конкурентом InnoDB считается MyISAM, который годится для обработки и хранения сравнительно небольших объемов данных, которые преимущественно считываются из БД, а не записываются. А также когда не критично отсутствие ACID. Приложения, которые работают с MySQL, могут одновременно использовать несколько СХД для обеспечения наилучшего набора функциональности и производительности.

Производительность

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

Ориентированность СУБД

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

Скоростные характеристики

PostgreSQL

PostgreSQL предоставляет функционал, который может увеличить производительность для некоторых видов SQL запросов. Из этих функций стоит выделить:
— частичное индексирование;
— сжатие данных;
— объем данных, хранимых в оперативной памяти;
— кэш запросов;

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

 

PostgreSQL поддерживает только один единственный СХД. Он входит в стандартную поставку PostgreSQL.

MySQL:ядро

MySQL 5.1 поддерживает 9 различных СХД:


  1. MyISAM
  2. InnoDB
  3. NDB Cluster
  4. MERGE
  5. MEMORY (HEAP)
  6. FEDERATED
  7. ARCHIVE
  8. CSV
  9. BLACKHOLE

Однако, Federated и Blackhole не являются серверами «хранения» данных (например, Blackhole ничего не хранит). InnoDB разработан сторонней компанией InnoBase, которая была основана компанией Oracle. InnoDB поддерживает транзакции и занимает лидирующее место из всех поставляемых с MySQL серверов хранения данных.

 

MySQL планирует представить новые СХД Maria и Falcon в предстоящей версии 6.x. На них возложена задача заменить существующие движки MyISAM и InnoDB соответственно.

 

Существуют и другие СХД, разработанные сторонними компаниями и группами разработчиков. Наиболее популярные из них:


  • SolidDB
  • NitroEDB
  • BrightHouse

MySQL MyISAM имеет примитивный кэш, который перед выполнением каждого запроса на выборку сверяет простым сравнением строку запроса с предыдущими выполненными запросами и если есть совпадение то выдает ранее выбранный результат. Данный подход годится для систем, где подавляющей операцией является считывание данных, потому как только любая из таблиц изменит свое состояние (INSERT, UPDATE, DELETE) весь кэш очищается и соответственно теряется преимущество в производительности.

 

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

 

MySQL также поддерживает сетевой протокол сжатия данных, который включается и выключается на стороне клиента (если конечно позволяет сервер). Данная функция сжимает все данные которые идут от сервера к клиенту.

MySQL:MyISAM

MyISAM это традиционный СХД для MySQL и предлагает лучшее соотношение производительности и функциональности для баз данных предназначенных преимущественно для выборки данных (select). MySQL MyISAM обрабатывает запросы на выборку быстрее чем PostgreSQL, если речь идет о простых запросах. MyISAM не поддерживает транзакций и внешних ключей.

 

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

 

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

MySQL:InnoDB

InnoDB это полно функциональная ACID транзакционная система (сервер) хранения данных (СХД), которая использует технологию MVCC. Это хороший выбор для современных приложений MySQL.

 

InnoDB хранит данные с первичным ключами, так что поиск по первичным ключам происходит очень быстро. Данный подход очень полезен для физической оптимизации БД. В случае когда он не применим и дает низкую производительность, то явно его можно не использовать и тогда система создаст невидимый внутренний первичный ключ типа Integer(15) и будет проводить индексацию по нему.

 

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

 

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

 

Если InnoDB установлен как плагин к MySQL 5.1, он поддерживает сжатие таблиц налету. Вы можете использовать атрибуты ROW_FORMAT=COMPRESSED или KEY_BLOCK_SIZE в запросах CREATE TABLE и ALTER TABLE, чтобы дать команду InnoDB сжать каждую страницу в 1K, 2K, 4K, 8K или 16K байт.

 

Innobase Oy, это компания, которая занимается разработкой InnoDB. Она была куплена компанией Oracle в октябре 2005 года. С тех пор InnoDB все больше и больше заимствует у СУБД Oracle. А теперь, с покупкой компании MySQL компанией SUN эти и без того тесные взаимоотношения между Oracle и MySQL стали еще крепче. MySQL выходит на качественно новый уровень возможностей.

MySQL:NDB Cluster

 

NDB это высокопроизводительный преимущественно располагающиеся в Оперативной Памяти (RAM) СХД. Не индексируемые атрибуты могут сохраняться на жестком диске. Данные и логи также периодически синхронизируются на жесткий диск, чтобы избежать потери данных в случае внезапного «падения» кластера. NDB преимущественно используется в сфере телекоммуникаций, где аптайм и производительность в реальном масштабе времени критичны. NDB прозрачно собирает данные в фрагменты которые регулярно доставляет во все участки кластера. NDB использует внутреннюю синхронную репликацию чтобы записи были распространенны по меньшей мере на двух участках кластера прежде чем совершать фиксацию на жесткий диск. NDB также поддерживает автоматическое восстановление «упавших» элементов кластера (нодов). Из слабых сторон NDB стоит отметить очень плохую поддержку сложных запросов с использованием операторов JOIN.

 

В PostgreSQL похожих решений на данный момент просто нет.

MySQL:Archive

MySQL поддерживает сжатие на лету с версии 5.0, когда в дистрибутив попал СХД ARCHIVE. Archive — это СХД, который позволяет делать одновременно только 1 запись и множество чтений. Разработан специально для архивных баз данных, где запись в БД осуществляется гораздо реже и преимущественно одним источником данных. Сила сжатия достигает 90%. Archive не поддерживает индексы. В версии MySQL 5.1 Archive может работать с несколькими разделами (партициями).

MySQL:Falcon

Falcon это ACID транзакционный СХД, который был разработан самой MySQL. В данный момент он находится в зачаточном состоянии и доступен для тестирования в бета-ветке MySQL 6.0. Falcon поддерживает сжатие данных налету. Данные, сохраненные в таблицах Falcon, сжимаются на жестком диске, но в оперативной памяти хранятся не в сжатом ввиде. Сжатие происходит автоматически, когда данные синхронизируются на жесткий диск.

MySQL:Maria

Maria это ACID СХД, который был разработан Монти Вайденисом (Monty Widenius) и командой разработчиков MySQL.

Мультпроцессность

 

Исторически сложилось, что MySQL разрабатывалась и оптимизировалась под однопроцессорные системы. PostgreSQL в этом смысле смотрится гораздо симпатичнее. Чем больше ядер в системе, тем PostgreSQL работает быстрее, чего о MySQL сказать трудно.

 

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

 

Ассинхронный Ввод/Вывод

PostgreSQL полностью поддерживает асинхронный API для использования в клиентских приложениях. Данная возможность позволяет увеличить производительность в некоторых случаях до 40%. В MySQL отсутствует поддержка асинхронного режима. Но существует несколько драйверов, которые предоставляют эту возможность. Например MySQL драйверы для perl и ruby.

COUNT(*)

 

Транзакционные версионные СУБД, которые построены на модели MVCC, например такие как PostgreSQL и InnoDB, выполняют COUNT(*) очень медленно в сравнении с не транзакционными СХД или транзакционными не версионными СХД, например такими как MyISAM. MyISAM в MySQL использует сканирование индексов для обработки COUNT(*) и также кэширует полученный результат, данный подход гораздо эффективнее. PostgreSQL и InnoDB требуют полного сканирования таблицы на предмет учета всех видимых полей. MVCC-совместимые СХД выполняют операцию COUNT(*) данным способом потому, что MVCC сохраняет информацию о видимости или не видимости транзакции в данных самой записи (ROW). Во всех MVCC-совместимых СХД кэширование результатов операции COUNT(*) приведет к возврату некорректных данных. PostgreSQL Count() работает медленнее чем COUNT(*) в InnoDB.

 

Тесты производительности

 

Все тесты производительности СУБД напрямую зависят от среды и целей использования. Каждая СУБД может быть настроена на оптимальную производительность для каждого отдельного случая. По этому будет не корректно проводить сравнения простых или сложных выборок из БД. Или же вставки. Чтобы определить наиболее быструю СУБД, нужно проводить сравнения в требуемых условиях на требуемом оборудовании и с требуемыми данными.

Модель ACID

ACID следует понимать как Atomicity, Consistency, Isolation и Durability (Валентность, Последовательность, Изоляция и Длительность). Данная модель используется для обеспечения целостности данных средствами СУБД. Многие СУБД достигают соглашений ACID путем использования транзакций.

PostgreSQL и MySQL использующий InnoDB, Cluster и Falcon СХД полностью соответствуют всем принципам и канонам модели ACID.
Возможности

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

Простота использования

Готча (Gotcha) — это функция или функции которые работают так как описаны но не так как ожидалось (http://sql-info.de/mysql/gotchas.html). Поклонники PostgreSQL настаивают на том, что MySQL имеет больше готчей чем PostgreSQL.

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

Insert Ignore / Replace

MySQL поддерживает операторы ‘INSERT IGNORE’ и ‘REPLACE’ которые вставляют запись если ее не существует и ничего не делают в другом случае или заменяют текущую запись соответственно.

 

PostgreSQL не поддерживает ничего из выше перечисленного и советует использовать сохраненные процедуры для достижения такого эффекта. Однако существует одно «НО». В одно и тоже время может быть вставлено только одно значение. Данное условие накладывает серьезные ограничения на производительность и вызывает определенные сложности. INSERT IGNORE и REPLACE обрабатывают вставку нескольких значений и их запись симпатичнее чем процедура.

 

Еше одна полезная запись в MySQL: INSERT … ON DUPLICATE UPDATE также напрочь отсутствует в PostgreSQL и для реализации своими руками требует написания сохраненных процедур, которые могут обрабатывать только 1 запись в один момент времени.

Ограничители

Обе СУБД PostgreSQL и MySQL поддерживают ограничители Not-Null, Unique, Primary Key и Foreign Key. Однако MySQL не поддерживает ограничение Check когда PostgreSQL поддерживает его уже довольно продолжительное время.

 

Таблицы InnoDB поддерживают проверки внешних ключей. Для остальных СХД MySQL разбирает и игнорирует FOREIGN KEY и REFERENCES в директиве CREATE TABLE.

 

Для движков MySQL не поддерживающих внешние ключи могут быть применены тригеры.

Значения по умолчанию

PostgreSQL позволяет для колонок использовать в качестве значения по умолчанию любую функцию помеченную как IMMUTABLE или STABLE. В MySQL, на данный момент, лишь функция Now() может быть использована как значение по умолчанию для колонки.

Сохраненные процедуры

И PostgreSQL и MySQL поддерживают сохраненные процедуры.

Главный язык запросов в PostgreSQL — PL/pgSQL, он похож на PL/SQL в Oracle. PostgreSQL также поддерживает SQL:2003 PSM сохраненные процедуры также как и другие популярные языки программирования Perl (PL/Perl), Python (PL/Python), TCL (PL/Tcl), Java (PL/Java) и даже C (PL/C).

MySQL следует синтаксису SQL:2003 для сохраненных процедур, который также используется в IBM DB2.

MySQL поддерживает другие языки программирования сохраненный процедур с помощью плагинов. Из самых популярных стоит отметить Java, Perl, XML-RPC.

Триггеры

И PostgreSQL и MySQL поддерживают триггеры. Триггеры в PostgreSQL могут выполнять любые пользовательские функции из любого процедурного языка.

 

Триггеры в MySQL активируют только SQL запросами. Они не активируются изменениями в таблицах, которые делаются при помощи MySQL API и не выполняют никаких SQL запросов.

 

PostgreSQL также поддерживает правила (RULES), которые позволяют оперировать над синтаксисом запросов и могут делать некоторые операции проще, чем традиционный механизм триггеров.

 

Синтаксис для определения триггеров в PostgreSQL не так силен как в MySQL. PostgreSQL требует раздельного определения функции с специальным типом возвращаемого значения.

Репликация и Высокая Доступность

Репликация — это механизм СУБД дублировать свои данные для резервных копий а также для зеркалирования на другие сервера для обеспечения высокой стабильности. PostgreSQL и MySQL оба поддерживают репликации:

PostgreSQL

PostgreSQL поддерживает репликацию на уровне подключаемых модулей. Существует несколько модулей, которые позволяют осуществлять репликацию данных СУБД PostgreSQL:
— PGCluster
— Slony-I
— DBBalancer
— pgpool
— PostgreSQL table comparator
— SkyTools
— Sequoia
— Bucardo
— Mammoth Replicator
— Cubercluster
— GridSQL (shared-nothing)

Существует заблуждение о том, что эти модули третих производителей как-то плохо интегрируются и выполняют свою работу не надлежащим образом. Например Slony, был спроектирован и разработан Жаном Вейком (Jan Weick), членом команды разработчиков PostgreSQL при участии множества людей из сообщества PostgreSQL. Однако, Slony, гараздо медленнее и использует больше ресурсов чем встроенный репликатор в MySQL. Но в версии PostgreSQL 8.4 вышел встроенный репликатор.

Слабые места репликации в PostgreSQL

Slony-I наиболее широко используемый инструмент для репликации данных в PostgreSQL и является прямой противоположностью встроенному механизму репликации данных в MySQL. Во первых он использует SQL и триггера для сбора данных для репликации по всему серверу. Этот подход координально медленнее чем родной способ репликации данных в MySQL, который использует бинарный режим обработки БД. Во вторых Slony-I не придатен для использования в огромных кластерах, так как потребление ресурсов равно квадрату используемых серверов для репликации данных.

2 сервера: MySQL: 2 = 2 PostgreSQL: 2*2^2 = 8
4 сервера: MySQL: 4 = 4 PostgreSQL: 2*4^2 = 32
12 серверов: MySQL: 12 = 12 PostgreSQL: 2*12^2 = 288.

Пока Slony-I адекватен для высокой доступности с использованием двух серверов. Slony-I очень тяжело администрировать.

Bucardo написан на языке Perl и интенсивно использует триггеры PL/PGSQL и PL/PERLU.

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

MySQL

MySQL поставляется с поддержкой асинхронной репликации данных. Начиная с версии 5.1, MySQL поддерживает два формата репликации. SBR отслеживает SQL запросы, которые вносят изменения в БД, в специальный бинарный логфайл, на который подписаны все дочерние сервера. Соответственно при изменениях в главной БД, все остальные БД получают копии данных. RBR отслеживает инкрементальные изменения записей и записывает их в бинарный лог-файл, из которого получают данные все дочерние БД. RBR используется автоматически, когда выполняется определенный запрос в главной БД. Некоторые СХД как NDB, Falcon и в некоторых случаях InnoDB для репликации используют только RBR.

Начиная с версии 6.0 MySQL поддерживает полу-синхронную репликацию в которой мастер подтверждает получение хотя бы одной дочерней БД до возврата из процедуры комита данных. Этот метод позволяет уменьшить до минимума потери данных, особенно в больших кластерах.

Типы данных

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

PostgreSQL позволяет колонкам таблиц быть определенными как мультиразмерный массив с изменяемой длинной. Массивы могут быть любого встроенного или пользовательского типа, enum или композитного типа. Но вот массивы доменов пока не поддерживаются.

MySQL не имеет типа данных IP Адрес, который присутствует в PostgreSQL но для преобразований из и в IPV4 используются функции INET_ATON() и INET_NTOA(). В БД хранится как Integer.

Подзапросы

MySQL и PostgreSQL поддерживают подзапросы. В MySQL подзапросы появились недавно и требуют сильной доработки по части производительности. В PostgreSQL подзапросы доведены практически до совершенства.

Расширенное индексирование

Расширенное индексирование позволяет СУБД выполнять запросы с гораздо более высокой скоростью. И MySQL и PostgreSQL поддерживают расширенное индексирование.

Множественные индексы.

MySQL поддерживает множественные индексы для каждой таблицы в отдельности и может использовать один индекс для одной таблицы. PostgreSQL поддерживает множественные индексы для каждого запроса в отдельности.

Полнотекстовые индексы.

MySQL идет с поддержкой полнотекстового поиска, но поиск может быть использован только на СХД MyISAM. Также MySQL поддерживает внешние модули для организации полнотекстового поиска — Sphinx Fulltext Search Engine. Данный плагин добавляет поддержку полнотекстового поиска для СХД InnoDB.

PostgreSQL начиная с версии 8.2 имеет в своем распоряжении полнотекстовый поиск в модуле tsearch3. Начиная с версии 8.3 модуль tsearch3 интегрирован в ядро PostgreSQL.

Частичное индексирование

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

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

Порционирование

MySQL поддерживает несколько форм горизонтального порционирования:
— RANGE
— LIST
— HASH
— KEY
— Композитное порционирование используя RANGE или LIST с HASH или KEY

PostgreSQL поддерживает только RANGE и LIST. HASH порционирование поддерживается с помощью внешних функций. Также PostgreSQL поддерживает композитные решения.

Лицензирование

PostgreSQL распространяется по лицензии BSD, в которой отмечены пункты Free Software Definition и Open Source Definition и стандарт Copyfree.

MySQL доступен по лицензии GNU General Public License, в которой также отмечены пункты Free Software Definition и Open Source Definition но не по стандарту Copyfree. А это значит что если будет издан продукт, в котором используются исходники MySQL вам придется либо заплатить за коммерческую копию MySQL AB либо открыть исходные коды для общего пользования.

Разработка

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

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

MySQL — это ПРОДУКТ с открытым исходным кодом.
PostgreSQL — это ПРОЕКТ с открытым исходным кодом.

Происхождение названия

Когда был создан стандарт ANSI SQL, его автор сказал, что официально SQL произносится как «ess queue ell». Имена и MySQL и PostgreSQL отражают в своих именах этот стандарт. MySQL официально произносится как «my ess queue ell». Однако многие произносят MySQL как «my sequel».

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

PostgreSQL произносится как «пост гресс ку элл». Название сформировано из старого названия Postgres (так называлась СУБД на базе которой был создан PostgreSQL) и SQL. Некоторые люди называют Постгрескуэл как пиджискуэл (pgsql). Ходят слухи, что PostgreSQL будет переименован назад в Postgres. На данный момент идут активные дебаты по этому поводу.

Популярность

MySQL широко известен и применяется в большинстве открытых (open-source) разработок по всему миру. Наиболее часто используется СХД MyISAM. И с уверенностью можно сказать, что MySQL самая популярная СУБД для вебразработок по всему миру.

Основаниями для такой популярности служит то, что MySQL легче использовать, чем другие СУБД, в частности PostgreSQL. Это утверждение бытует уже много лет. Но фактически несколько лет назад PostgreSQL произвел серьезные изменения в своей структуре и может по праву считаться более легким в использовании нежели MySQL. Но вопрос по прежнему открыт. Что же выбрать? MySQL или PostgreSQL?

Версия статьи

0.4

  • Подсвечено жирным шрифтом название раздела. Спасибо Никите Бабакину (skew).

0.3

  • Исправлено множество грамматических ошибок. Спасибо Алексею (oktogen).

0.2


  • Исправлены недочеты в разделе «Производительность». Спасибо Илье Звягину.

0.1
Первый релиз.

MySQL vs PostgreSQL | Блог Валерия Леонтьева

Неделю назад я инициировал обсуждение на одном сайтике на тему миграции с MySQL на PostgreSQL. В процессе обсуждения плавно сменили тему на сравнение этих двух популярных СУБД. В результате мне показалось, что почитать это обсуждение будет интересно и полезно многим программистам. В обсуждении участвовал известный программист PHP, автор двух книг по PHP, разработчик сервиса moikrug.ru Дмитрий Котеров.

Вот обсуждение, немного обработанное с вырезанными лишними постами.

from MySQL to PostgreSQL

Валерий Леонтьев, программист PHP/MySQL

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

Илья Бутыльский, web-developer

Не сильно сложно. Взвесьте все «за» и «против». Может и не стоит переходить.

Валерий Леонтьев, программист PHP/MySQL

Уже взвесил. Скорость постгри при нагрузке в разы выше, чем у MySQL. При этом, предел отказоустойчивости тоже выше. Т.е. переводить мелкие проекты смысла нет, а вот крупные стоило бы.

Михаил Талисов, Магистрант, Java EE developer

У меня тоже возникала год назад необходимость переводить приложение с MySQL на PostgreSQL. Особых трудностей не возникло.

Но все же некоторые вещи пересмотреть пришлось: в PostgreSQL нет автоинкрементных полей (для автоматического инкремента ПК используется специальный тип SERIAL). И для хранения значения счетчика используются специальные конструкции — sequence. Для получения текущего значения счетчика используется нечто вроде:

«select currval(‘task_id_seq’)»

Вроде больше особых отличий нету, остальное — детали.

Дмитрий Кадыков, web-программист Интернет-гипермаркета 003.ru

Мне приходилось делать обратную операцию: перевести часть кода с Postgre на MySQL. Пришлось заменить TO_CHAR(date,’MM.YYYY’) на DATE_FORMAT(date, ‘%m.%Y\’), и в принципе всё.

Валерий Леонтьев, программист PHP/MySQL

Re: Дмитрий Кадыков

А по какой причине так пришлось сделать, если не секрет?

Антон Полумисков, PHP программист

А на каком MySQL проект находится сейчас? У постгри приемуществ конечно хватает, но может проще будет перейти на MySQL5, если проект конечно не под 5 работает )), он и быстрее чем предшественники и возможностей стало больше. Но и самое главное — возникнет значительно меньше проблем с переходом.

Валерий Леонтьев, программист PHP/MySQL

Re: Антон Полумисков

Понимаешь, тут дело такое: если бы не 5 версия MySQL, то я бы уже давно перешел на ту же PostgreSQL или что-то другое. Версии до 5 — это полупустые СУБД. Там кроме тормозючести еще и половины фишек нет, которые в других СУБД давно есть и являются стандартом.

Евгений Ненаглядов, Вэб-разработчик

А мне из мускула не хватает REPLACE. В постгресе сие реализуется только триггером на INSERT, а я еще не освоил программирование процедур.

Переводил довольно крупный проект. Нудно, но не критично.

Из-за особенностей работы с автоинкреметными полями, реализовал замену функции mysql_insert_id().

Дмитрий Котеров, МойКруг.ру: сооснователь, рук. разработки

Скорость постгри при нагрузке в разы выше, чем у MySQL

Мой опыт показывает, что это совершенно неверное заявление. Все в точности да наоборот. Вы какой тип таблиц используете? Если MyISAM, то все понятно — они под нагрузкой плохо живут, если операции записи производятся сравнительно часто. Попробуйте InnoDB, они работают примерно так же, как таблицы в PostgreSQL (версионник с блокировкой строк). И попробуйте еще настройки MySQL потюнить — от них многое зависит.

Для крупных высоконагруженных проектов важное значение имеет репликация. В MySQL она встроенная и, главное, работает отлично — практически нет запаздывания при обновлении реплики. Для PostgreSQL есть Slony, однако у него: (а) раз в 10 бОльший «барьер на вход» (т.е. если с репликацией MySQL Вы в продакшене освоитесь, скажем, за неделю, то в Slony — за 10 недель), и (б) конструктивно значительный лаг при обновлении реплик, а значит, Вам придется строить приложение с учетом этого лага, что не так-то просто (встроенных средств в Slony для отслеживания этого лага [пока] нет).

Кроме того, если Вы рассчитываете с переходом на PostgreSQL обеспечить лучшую сохранность данных, то для обеспечения высокой производительности совместно с высокой надежностью нужно обязательно использовать аппаратный дисковый контроллер со встроенной кэш-памятью записи значительного размера и батарейкой (а такие контроллеры недешевы). Без аппаратного решения Вы «упретесь» в операцию fsync, которая, собственно, и обеспечивает сохранность данных, и которая несовместима с интенсивным обновлением данных без аппаратного решения.

Так что, если у Вас проект прекрасно работает на MySQL, возможностей MySQL ему хватает, то я бы категорически не рекомендовал переходить на PostgreSQL. PostgreSQL нужен для действительно сложных проектов, когда возможностей MySQL (даже 5-й версии) не хватает, когда приходится применять нереляционный подход, — например, для МойКруг. По крайней мере, в стратегическом (долгосрочном) плане повышения быстродействия при переходе с MySQL на PostgreSQL Вы точно не добьетесь.

Валерий Леонтьев, программист PHP/MySQL

Re: Дмитрий Котеров

Спасибо за столь подробный ответ. Мое «заявление» на самом деле основывалось не на личном опыте (как понятно из темы — я с постгри не работал), а не статьях других программистов. Последняя статья на эту тему, которую я прочитал была опубликована в журнале «Системный администратор» кажется за август (я не обратил внимания на номер). И как раз там у них по результатам опытов разница получилась в разы.

В MySQL медленнее работают сложные запросы: с джойнами и подзапросами. На этой почве у меня даже развилась некая фобия таких запросов. А если эх будет много в скрипте, да плюс нагрузка пиковая большая, то MySQL может и в ступор впасть. Один раз я такой ступор уже наблюдал. Правда там причина была в том, что проект был написан неграмотно (не мной) и не стояли индексы. Когда я открыл show processes, я там наблюдал кучу сложных висящих запросов. И загрузка ЦП деманом мускуля 99%. Так как времени на оптимизацию не было, да и двиг этот скоро уйдет в корзину, я не менял запросы, но просто сделал для них «правильные индексы», проблема частично решилась. Таких ступоров больше не было. И вот сложилось по статьям у меня впечатление, что с постгри такого не будет, а если и будет, то при много большей нагрузке. Тип таблиц в данном скрипте действительно MyISAM.

Александр Лещинский, Мизантропичный админ

Re: Дмитрий Котеров

Мой опыт показывает, что это совершенно неверное заявление.

нечасто я соглашаюсь с Дмитрием, но тут поддержу из всех стволов. Безмозглое неграмотное мудачье, не знающее матчасти, делает «абы как» своими руками, растущими из жопы, а потом удивляется «а шо, нам обещали что будет все шоколадно, а все совсем не так»? Любой инструмент, даже самый хороший, не отменяет необходимости думать… головой!!! а не тем, чем привыкли так называемые «работники» — очком.

Re: Валерий Леонтьев

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

Дмитрий Кадыков, web-программист Интернет-гипермаркета 003.ru

Re: Валерий Леонтьев

Да просто новому начальнику не понравилось, что одна часть проекта работает по Postgre, а всё остальное — под MySQL. Кстати, сразу же хотелось бы задать вопрос всем: может ли считаться оправданным совмещение двух СУБД в рамках одного проекта и в каких случаях стоит так делать?

Валерий Леонтьев, программист PHP/MySQL

Re: Дмитрий Котеров

Кстати, как я понял, Дмитрий Котеров повсеместно предпочитает использовать InnoDB. А как с fulltext-поиском? Используете ли Вы его? Или ищите по каким-то другим алгоритмам?

Валерий Леонтьев, программист PHP/MySQL

Re: Дмитрий Кадыков

Логически поразмышляв, пришел к выводу, что совмещение СУБД оправдано быть не может. Обычно, из 2х СУБД одна лучше. Тогда зачем делить, логичнее все делать на той, которая лучше в данной ситуации. Возможно, деление оправдано в крайне редких случаях, когда разные элементы проекта требуют функционал, доступный только в разных СУБД. Не знаю бывает ли такое вообще, но если и бывает, то крайне редко (может 1 сайт из 1000).

Александр Лещинский, Мизантропичный админ

Re: Валерий Леонтьев

Логически поразмышляв, пришел к выводу, что совмещение СУБД оправдано быть не может.

А практики говорят, что резоны могут быть…

Валерий Леонтьев, программист PHP/MySQL

Ну так у любого правила есть исключения. Я и пример даже привел.

Евгений Неверов, Я — человек!

Если же вернуться к сути вопроса, то структуру из одной БД нужно будет перенести заранее ручками (проще это), а вот данные скорее всего перенесутся без проблем.

Был у меня один проект, который я переносил с MySQL на PostgreSQL, так вот там по ходу дела пришлось сменить структуру таблиц. Чтобы импортировать данные я написал около 20 регулярных выражений, которые преобразовывали INSERT-запросы к нужному формату. Но в результате всё получилось очень хорошо.

Ответить

Виктор Куряшкин, Semantic Web specialist, Sun Microsystems

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

Просто «переписать запросы», сделать автоинкремент сиквенсом и все — это не аргумент.

Если вы не планируете усложнять логику на уровне субд — то точно переходить не стоит. Просто провозитесь и получите прибавку к производительности 5%, а то и потеряете в некоторых случаях.

Дмитрий Котеров, МойКруг.ру: сооснователь, рук. разработки

В MySQL медленнее работают сложные запросы: с джойнами и подзапросами

Не совсем так. Скорость выполнения запроса зависит во многом от того, «попадает» ли он, грубо говоря, в индексы. Если запрос «не попал» в индексы в MySQL и «не попал» в PostgreSQL, неверно говорить, что «в PostgreSQL этот запрос будет работать быстрее» — он в обоих случаях работает недопустимо долго.

Другое дело, что в PostgreSQL мощный планировщик и оптимизатор запросов (правда, он при этом и очень сложен, а также часто «ошибается», т.е. на его приструнение и изучение нужно тратить много времени). Кроме того, в PostgreSQL есть всякие там Hash Join и т.д. Так что, действительно, у написанного «от балды» сложного многотабличного запроса в PostgreSQL вероятность выполниться быстро выше, чем у того же запроса в MySQL. Но речь-то сейчас не о вероятностях, а о том, что запросы нужно строить грамотно, смотреть план их выполнения и «подгонять» друг под друга запрос, его план и индексы. А если все подогнанно, то и там, и там выполняется быстро, и на передний план выходит уже скорость апдейтов и простота репликации.

Кстати, как я понял, Дмитрий Котеров повсеместно предпочитает использовать InnoDB. А как с fulltext-поиском? Используете ли Вы его? Или ищите по каким-то другим алгоритмам?

Собственно, на MойКруге PostgreSQL во многом как раз из-за того, что в нем есть отличный полнотекстовый поиск, который и не снился MySQL. (А в 8.3 он будет еще лучше.) В InnoDB, к сожалению, полнотекстовых индексов и правда не бывает. Но я слышал, что есть масса внешних решений для индексации таблиц — в этом случае индекс строится с задержкой и по нему не так удобно искать, конечно, но — это лучше, чем ничего. Лично мне с ними работать не приходилось.

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

Насчет систем с двумя различными СУБД — почему бы и нет? Мы, например, используем и MySQL тоже (как раз там, где мало селектов, но много инсертов и апдейтов). Да, на администрирование дополнительной базы должно тратиться больше времени, однако тут есть два «но»:

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

2. MySQL очень неприхотлива и нетребовательна в администрировании (по моим приблизительным оценкам — там раз в 10 меньше подводных камней, чем в PostgreSQL), поэтому затраты на администрирование и MySQL тоже крайне малы.

Поучаствовать в обсуждении можно здесь: http://moikrug.ru/topics/216367527/

Вывод: прежде чем переходить на PostgreSQL нужно хорошо обдумать, стоит ли оно того, чтобы потом не пришлось откатывать все назад.

json в PostgreSQL vs Mysql vs Mongodb / Хабр

As such, there’s really no “standard” benchmark that will inform you about the best technology to use for your application. Only your requirements, your data, and your infrastructure can tell you what you need to know.

Для начала немного философии. NoSql окружает и от этого никуда не убежать (хотя не очень то и хотелось). Оставим вопросы о глубинных причинах за рамками данного текста, отметим лишь, что этот тренд отражается не только в появлении новых NoSql решений и развитии старых. Еще одна грань — смешение противоположностей, а именно поддержка хранения schema-less данных в традиционных реляционных базах. В этой серой области на стыке реляционной модели хранения данных и всего остального кроется головокружительное количество возможностей. Но, как и всегда, нужно уметь найти баланс, который подходит именно для ваших данных. Это бывает трудно, в первую очередь из-за того, что приходится сравнивать мало сравнимые вещи, например, производительность NoSql решения с традиционной базой данных. В этой небольшой заметке будет предложена такая попытка и приведено сравнение производительности работы с jsonb в PostgreSQL с json в Mysql и с bson в Mongodb.

Что, черт возьми, вообще происходит?


Краткие вести с полей:
  • PostgreSQL 9.4 — новый тип данных jsonb, поддержка которого будет немного расширена в грядущей PostgreSQL 9.5
  • Mysql 5.7.7 — новый тип данных json

и ряд других примеров, о которых расскажу в следующий раз. Замечательно то, что эти типы данных предполагают не текстовое, а бинарное хранение json, что делает работу с ним гораздо шустрее. Базовый функционал везде идентичен, т.к. это очевидные требования — создать, выбрать, обновить, удалить. Самое древнейшее, почти пещерное, желание человека в этой ситуации — провести ряд benchmark’ов. PostgreSQL & Mysql выбраны, т.к. реализация поддержки json очень похожа в обоих случаях (к тому же они находятся в одинаковой весовой категории), ну а Mongodb — как старожил NoSql мира. Работа, проведенная EnterpriseDB, немного в этом плане устарела, но ее можно взять, в качестве первого шага для дороги в тысячу ли. На данный момент целью данной дороги является не показать, кто быстрее/медленее в искусственных условиях, а постараться дать нейтральную оценку и получить feedback.

Исходные данные и некоторые детали


pg_nosql_benchmark от EnterpriseDB предполагает достаточно очевидный путь — сначала генерируется заданный объем данных разного вида с легкими флуктуациями, который затем записывается в исследуемую базу и по нему происходят выборки.
Функционал для работы с Mysql в нем отсутствует, поэтому его понадобилось реализовать на основе аналогичного для PostgreSQL. На данном этапе есть только одна тонкость, когда мы задумываемся об индексах — дело в том, что в Mysql не реализовано
индексирование json на прямую, поэтому приходится создавать виртуальные колонки и индексировать уже их. Помимо этого, меня смутило то, что для mongodb часть сгенерированных данных размером превышает 4096 байт и не вмещается в буфер mongo shell, т.е. просто отбрасывается. В качестве хака получилось выполнять insert’ы из js файла (который еще и приходится разбивать несколько chunk’ов, т.к. один не может быть больше 2GB). Помимо этого, чтобы избежать издержек, связанных со стартом шелла, аутентификацией и проч., совершается соответствующее количество «no-op» запросов, время которых затем исключается (хотя они, на самом деле, достаточно малы).

Со всеми полученными изменениями проверки проводились для следующих случаев:

  • PostgreSQL 9.5 beta1, gin
  • PostgreSQL 9.5 beta1, jsonb_path_ops
  • PostgreSQL 9.5 beta1, jsquery
  • Mysql 5.7.9
  • Mongodb 3.2.0 storage engine WiredTiger
  • Mongodb 3.2.0 storage engine MMAPv1

Каждый из них был развернут на отдельном m4.xlarge инстансе с ubuntu 14.04 x64 на борту с настройками по умолчанию, тесты проводились на количестве записей, равном 1000000. Для тестов с jsquery надо прочитать readme и не забыть установить bison, flex, libpq-dev и даже postgresql-server-dev-9.5. Результаты будут сохранены в json файл, который можно визуализировать с помощью matplotlib (см. здесь).

Помимо этого возникали сомнения относительно настроек, связанных с durability. Поэтому я провел пару дополнительных тестов для следующих случаев (на мой взгляд, часть из них является скорее теорией, т.к. вряди кто-то будет использовать такие настройки в живую):

  • Mongodb 3.2.0 journaled (writeConcern j:true)
  • Mongodb 3.2.0 fsync (transaction_sync=(enabled=true,method=fsync))
  • PostgreSQL 9.5 beta 1, no fsync (fsync=off)
  • Mysql 5.7.9, no fsync (innodb_flush_method=nosync)

Картинки


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

Select



Insert



Insert (custom configuration)



Update



Еще одним изменением относительно оригинального кода pg_nosql_benchmark было добавление тестов на обновление. Здесь явным лидером оказалась Mongodb, скорее всего за счет того, что в PostgreSQL и Mysql обновление даже одного значения на данным момент означает перезапись всего поля.

Update (custom configuration)



Как можно предположить из документации и подсмотреть в этом ответе, writeConcern j:true — это наивысший возможный уровень durability для одного сервера mongodb, и судя по всему он должен быть эквивалентен конфигурациям с fsync. Я не проверял durability, однако интересно, что для mongodb операции обновления с fsync получились намного медленнее.

Table/index size



I have a bad feeling about this


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

PostgreSQL против MySQL: важные различия

Критические отличия Postgres от MySQL:

  • Postgres — это многофункциональная база данных, которая может обрабатывать сложные запросы и большие базы данных.
  • MySQL — это более простая база данных, относительно простая в настройке и управлении, быстрая, надежная и понятная.
  • Postgres — это объектно-реляционная база данных (ORDBMS) с такими функциями, как наследование таблиц и перегрузка функций, тогда как MySQL — это чистая реляционная база данных (RDBMS).

Большинство разработчиков скажут вам, что MySQL лучше подходит для веб-сайтов и онлайн-транзакций, а PostgreSQL лучше для больших и сложных аналитических процессов. Они также заметят, что PostgreSQL имеет «множество замечательных функций», таких как расширяемость и собственные возможности NoSQL, которые помогут вам справиться с трудными ситуациями с базами данных. Наконец, они напомнят вам, что в MySQL мало функций, поэтому он может сосредоточиться на «скорости и надежности».

По большей части эти точки зрения верны.Несмотря на то, что с каждым новым выпуском MySQL и PostgreSQL становятся все ближе друг к другу в отношении их предложений (см. Таблицу), отличительные характеристики этих систем баз данных означают, что — для определенных случаев использования — одна может быть лучше другой.

Сравнение характеристик PostgreSQL 10 MySQL 8
Общее табличное выражение (CTE) Есть Да (недавно добавлено)
Декларативное разбиение на разделы Да (недавно добавлено) Есть
Полнотекстовый поиск Есть Есть
Географическая информационная система (GIS) / Пространственная справочная система (SRS) Есть Да (обновлено)
JSON Есть Да (обновлено)
Логическая репликация Да (недавно добавлено) Есть
Полусинхронная репликация Да (недавно добавлено) Есть
Оконные функции Есть Да (недавно добавлено)

Интегрируйте свои данные сегодня!

Попробуйте Xplenty бесплатно в течение 7 дней.Кредитная карта не требуется.

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

  1. Общий обзор MySQL и PostgreSQL

  2. Почему разработчики предпочитают одного другому?

  3. Поддержка пользователей MySQL vs.PostgreSQL

  4. MySQL или PostgreSQL быстрее?

  5. Какие языки программирования они поддерживают?

  6. С какими операционными системами они работают?

  7. Как они индексируются?

  8. Чем отличается кодирование?

Общий обзор MySQL и PostgreSQL

Интегрируйте свои данные сегодня!

Попробуйте Xplenty бесплатно в течение 7 дней.Кредитная карта не требуется.

MySQL: общий обзор

MySQL — самая популярная в мире СУБД (в 2019 году ее использовали 39% разработчиков) — это быстрая, надежная, универсальная система управления реляционными базами данных. Хотя ему не хватает обширных возможностей PostgreSQL, он отлично подходит для широкого спектра приложений, особенно веб-приложений.

Фактически, MySQL — лучший выбор для масштабируемых веб-приложений — отчасти потому, что он входит в стандартную комплектацию стека LAMP (набор веб-приложений с открытым исходным кодом, состоящий из Linux, HTTP-сервера Apache, MySQL и PHP).Кроме того, популярные системы управления контентом, такие как Drupal, Joomla и WordPress, полагаются на MySQL, поэтому вы можете найти MySQL практически везде в Интернете.

Вот некоторые дополнительные характеристики MySQL :

  • Открытый исходный код: MySQL — это бесплатная система управления реляционными базами данных (РСУБД) с открытым исходным кодом.
  • Долгая история: MySQL впервые стал доступен с 1995 года.
  • Поддерживается Oracle: Oracle владеет и обслуживает MySQL и предлагает расширенные (платные) версии MySQL с дополнительными услугами, проприетарными плагинами, расширениями и поддержкой пользователей.
  • Сообщество поддержки: Сообщество преданных волонтеров готово помочь с устранением неполадок, когда это необходимо.
  • Стабильный и надежный: Пользователи соглашаются с тем, что MySQL является очень стабильной СУБД, если вы поддерживаете свои базы данных в «порядке» и выполняете регулярное обслуживание.
  • Возможности MVCC: MySQL теперь предлагает функции управления одновременным выполнением нескольких версий (MVCC). Функция, которой PostgreSQL более известен (подробнее об этом мы поговорим ниже).
  • Частые обновления: MySQL извлекает выгоду из частых обновлений с новыми функциями и улучшениями безопасности. Последнее обновление — версия 8.0.16 от 25 апреля 2019 г.
  • 4.3-звездочный рейтинг: MySQL получил 4.3-звездочный рейтинг (из 5 звезд) по 1261 отзывам на G2Crowd.

Вот отличный итог MySQL от обозревателя G2Crowd:

MySQL — это бесплатная, стабильная система управления базами данных с открытым исходным кодом, которую можно использовать в производственных приложениях.Это легкая база данных, которую разработчики могут установить и использовать на рабочих серверах приложений с большими многоуровневыми приложениями, а также на настольных компьютерах. Его можно установить на всех платформах, таких как Windows, Linux и Mac. Это безопасно и не уязвимо для каких-либо уязвимостей.

MySQL может похвастаться некоторыми известными пользователями:

  • Facebook
  • Google
  • Flickr
  • GitHub
  • НАСА
  • Netflix
  • Spotify
  • Тесла
  • Twitter
  • Убер
  • ВМС США
  • WeChat
  • Википедия
  • YouTube
  • Zappos
  • Zendesk

Интегрируйте свои данные сегодня!

Попробуйте Xplenty бесплатно в течение 7 дней.Кредитная карта не требуется.

PostgreSQL: общие характеристики

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

PostgreSQL «имеет больше возможностей», чем другие системы управления базами данных (пользователи подтверждают это). Кроме того, PostgreSQL является расширяемым, «потому что его работа управляется каталогом».Другими словами, он не просто хранит информацию о таблицах и столбцах; он позволяет вам определять типы данных, типы индексов и функциональные языки.

Дополнительные моменты, которые отличают PostgreSQL, — это то, что он объектно-реляционный, ACID-совместимый, высокопараллельный и предлагает поддержку NoSQL (честно говоря, MySQL также предлагает поддержку NoSQL, начиная с версии 8.0).

Наконец, хотя PostgreSQL не является самой «популярной» системой баз данных в мире, за последние два года она получила награду «База данных года» как самая быстрорастущая СУБД.

Вот некоторые дополнительные характеристики PostgreSQL :

  • Открытый исходный код: PostgreSQL — это бесплатная объектно-реляционная система управления базами данных (ORDBMS) с открытым исходным кодом. Как ORDBMS, а не RDBMS, PostgreSQL обеспечивает функциональность как объектно-ориентированной, так и реляционной базы данных.
  • Настраиваемый: Вы можете настроить PostgreSQL, разработав плагины, чтобы СУБД соответствовала вашим требованиям. PostgreSQL также позволяет включать пользовательские функции, созданные с помощью других языков программирования, таких как C / C ++, Java и других.
  • Долгая история: PostgreSQL доступен с 1988 года.
  • Частые обновления: Последнее обновление PostgreSQL было версией 11.3 от 9 мая 2019 г.
  • Либеральная лицензия с открытым исходным кодом: PostgreSQL предлагает обширную лицензию с открытым исходным кодом, которая позволяет вам использовать, изменять и распространять СУБД по своему усмотрению.
  • MVCC Особенности: PostgreSQL была первой СУБД, в которой реализованы функции управления одновременным доступом нескольких версий (MVCC).
  • Сообщество поддержки: Преданное сообщество разработчиков и волонтеров готово помочь, когда это необходимо. Также доступны частные сторонние службы поддержки. Это же сообщество поддерживает PostgreSQL и обновляет платформу через глобальную группу разработчиков PostgreSQL.
  • 4,4-звездочный рейтинг: Имеет 4,4-звездочный обзор (из 5 звезд) на основе 415 отзывов на G2Crowd.

Вот отличный итог PostgreSQL от пользователя G2Crowd:

PostgreSQL — один из самых интересных вариантов в реляционных базах данных с открытым исходным кодом.Это бесплатно… кроме того, сегодня он предлагает множество дополнительных опций. Фактически, на сегодняшний день он считается наиболее продвинутым ядром СУБД. В Postgres нет необходимости использовать блокировки чтения при выполнении транзакции, что дает нам большую масштабируемость. Кроме того, этим инструментом управляет не человек или компания, а сообщество разработчиков, которое помогает нам упростить и ускорить нашу работу.

Среди пользователей

PostgreSQL:

  • яблоко
  • БиоФарм
  • Cisco
  • Debian
  • Etsy
  • Facebook
  • Fujitsu
  • IMDB
  • Instagram
  • Macworld
  • Красная шляпа
  • Skype
  • Spotify
  • Sun Microsystem
  • Yahoo

Интегрируйте свои данные сегодня!

Попробуйте Xplenty бесплатно в течение 7 дней.Кредитная карта не требуется.

Почему разработчики предпочитают одного другому?

PostgreSQL как вариант с «богатым набором функций» получает множество фанатских отзывов от разработчиков. Как вы увидите в описании ниже, у него есть много наворотов. Тем не менее, когда дело доходит до проектирования базы данных, простота, легкость и другие характеристики MySQL имеют большее значение для определенных случаев использования. В этом отношении СУБД превосходны в разных областях.

Давайте посмотрим на ключевые особенности MySQL и PostgreSQL с точки зрения того, почему разработчики СУБД предпочитают одно другому.

Почему разработчики выбирают MySQL?

Вот некоторые из наиболее важных преимуществ MySQL:

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

  • InnoDB
  • MyISAM
  • объем памяти
  • CSV
  • Архив
  • Черная дыра
  • NDB / NDBCLUSTER
  • Объединить
  • Федеративный
  • пример

A Сосредоточьтесь на скорости и надежности: Не включая некоторые функции SQL, MySQL остается легким, отдавая приоритет скорости и надежности.Скорость MySQL особенно очевидна, когда дело доходит до одновременного выполнения функций только для чтения. Это может сделать его отличным выбором для определенных целей бизнес-аналитики. При этом, если вам нужно выполнить много сложных запросов при больших нагрузках, PostgreSQL может быть лучшим выбором.

Параметры для оптимизации сервера: MySQL предлагает множество вариантов для настройки и оптимизации вашего сервера MySQL, регулируя такие переменные, как sort_buffer_size, read_buffer_size, max_allowed_packet и т. Д.

Простой в использовании и популярный: Популярность MySQL означает, что легко найти администраторов баз данных с большим опытом работы с MySQL. Пользователи также сообщают, что это проще в настройке и не требует такой тонкой настройки, как другие решения СУБД. Это руководство покажет вам, насколько легко новичкам создать свою первую базу данных MySQL. Кроме того, ряд внешних интерфейсов (например, Adminer, MySQL Workbench, HeidiSQL и dbForge Studio) добавляют к MySQL графический интерфейс, который обеспечивает более удобный интерфейс.

СУБД, готовая к работе в облаке: MySQL готов к работе в облаке, и многие облачные платформы предлагают функции MySQL, где они устанавливают и поддерживают вашу базу данных MySQL за плату.

Мультиверсионное управление параллелизмом (MVCC) и соответствие ACID, доступные с движком InnoDB: Механизмом по умолчанию для текущих версий MySQL является InnoDB. Это добавляет соответствие MVCC и ACID. Однако проблемы с поврежденными таблицами могут все еще возникать с InnoDB в MySQL из-за его формата таблицы MyISAM.Согласно MySQL, «даже несмотря на то, что формат таблицы MyISAM очень надежен (все изменения в таблице, сделанные оператором SQL, записываются до того, как оператор возвращается), вы все равно можете получить поврежденные таблицы». Более того, выбор другого двигателя, вероятно, приведет к потере совместимости с MVCC и ACID.

Почему разработчики выбирают PostgreSQL?

Вот некоторые из наиболее важных преимуществ PostgreSQL. Вы уже могли заметить, почему эта СУБД требует немного больше технических знаний:

ORDBMS — это не просто RDBMS: PostgreSQL — это объектно-реляционный язык программирования (ORDBMS), поэтому он служит мостом между объектно-ориентированным программированием и реляционным / процедурным программированием (как это делает C ++).Это позволяет вам определять объекты и наследование таблиц, что приводит к более сложным структурам данных. ORDBMS отлично подходит, когда вы имеете дело с данными, которые не связаны с строго реляционной моделью.

Отлично подходит для сложных запросов: Когда вам нужно выполнить сложные операции чтения-записи, используя данные, требующие проверки, PostgreSQL — отличный выбор. Однако ORDBMS может замедляться при работе с операциями только для чтения (в этом случае MySQL превосходит MySQL).

Поддерживает NoSQL и большое количество типов данных: PostgreSQL — популярный выбор для функций NoSQL. Он изначально поддерживает широкий спектр типов данных, включая JSON, hstore и XML. Вы можете определить исходные типы данных, а также настроить собственные функции.

Разработан для управления сверхбольшими базами данных: PostgreSQL не ограничивает размер ваших баз данных. По словам администратора базы данных Adjust.com, его компания использует PostgreSQL для управления «примерно 4 ПБ [петабайтами] данных».Это 4000 терабайт. Он также утверждает, что их «среда обрабатывает (а затем регистрирует) от 100 до 250 тысяч запросов извне за секунду». Это тяжелая нагрузка!

Управление параллельным выполнением нескольких версий (MVCC): MVCC — одна из наиболее важных причин, по которой компании выбирают PostgreSQL. MVCC позволяет различным читателям и писателям одновременно взаимодействовать с базой данных PostgreSQL и управлять ею. Это устраняет необходимость в блокировке чтения-записи каждый раз, когда кому-то нужно взаимодействовать с данными, что повышает эффективность.MVCC достигает этого с помощью «изоляции моментальных снимков» (как это называет Oracle). Снимки представляют состояние данных в определенный момент времени.

Соответствие ACID: PostgreSQL предотвращает повреждение данных и сохраняет целостность данных на уровне транзакций. Узнайте больше о ценности соответствия PostgreSQL ACID здесь. (Как упоминалось выше, и, честно говоря, MySQL также предлагает возможность соответствия ACID, но могут возникнуть сложности).

Интегрируйте свои данные сегодня!

Попробуйте Xplenty бесплатно в течение 7 дней.Кредитная карта не требуется.

Поддержка пользователей MySQL и PostgreSQL

Оба решения СУБД имеют чрезвычайно полезные сообщества для оказания поддержки пользователям в дополнение к платным вариантам поддержки от владельца СУБД или сторонних поставщиков. Вот как они сравниваются:

Поддержка пользователей MySQL

В качестве проекта с открытым исходным кодом MySQL имеет большое сообщество добровольцев, готовых помочь вам бесплатной поддержкой и рекомендациями.Лучший способ получить такую ​​поддержку — на веб-сайтах MySQL и Percona.

Вот что говорит один ИТ-специалист о поддержке клиентов MySQL на G2Crowd:

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

В дополнение к бесплатной поддержке сообщества Oracle (владелец MySQL) предлагает круглосуточную платную поддержку коммерческих версий своих продуктов, которая стоит от 2000 до 10 000 долларов в зависимости от уровня пакета поддержки, который вы хотите приобрести. Кроме того, вы можете самостоятельно устранить неполадки, углубившись в бесплатные книги, руководства и руководства по MySQL, которые можно найти здесь.

Поддержка пользователей PostgreSQL

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

Вот что говорит один администратор базы данных о поддержке PostgreSQL в G2Crowd:

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

Другой обозреватель G2Crowd сказал следующее:

Один недостаток, с которым я столкнулся лично, — это то, что немного сложнее получить поддержку сообщества или Google за результатами.Однако с более широким использованием PostgreSQL поддержка сообщества становится лучше.

В конечном счете, поддержка PostgreSQL может быть немного более сложной, потому что (1) СУБД требует дополнительных технических знаний для настройки и использования; и (2) экспертов по PostgreSQL меньше, чем экспертов по MySQL.

Интегрируйте свои данные сегодня!

Попробуйте Xplenty бесплатно в течение 7 дней. Кредитная карта не требуется.

MySQL или PostgreSQL быстрее?

И MySQL, и PostgreSQL имеют сильную репутацию одних из самых быстрых доступных решений СУБД.Однако что касается самого быстрого , ответ не совсем ясен. По словам Скотта Нойеса на TechTarget:

Легко найти тесты, в которых одна база данных предпочтительнее другой, в зависимости от оборудования, конфигурации и теста. Одна база данных может лучше работать на одноядерной машине с небольшим объемом памяти, в то время как другая может лучше использовать возможности масштабирования до нескольких ядерных процессоров. Один может вести чтение, а другой — запись.

TechTarget сообщает, что тесты скорости дают противоречивые результаты.Например, Windows Skills говорит, что MySQL быстрее, а Benchw говорит, что PostgreSQL быстрее. В конечном итоге скорость будет зависеть от того, как вы используете базу данных. PostgreSQL, как известно, быстрее обрабатывает массивные наборы данных, сложные запросы и операции чтения-записи. Между тем известно, что MySQL работает быстрее с командами только для чтения.

Какие языки программирования они поддерживают?

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

MySQL Поддерживаемые языки

MySQL предлагает поддержку следующих языков:

  • C / C ++
  • Delphi
  • Erlang
  • Перейти
  • Джава
  • Лисп
  • Node.js
  • Perl
  • PHP
  • R

PostgreSQL Поддерживаемые языки

PostgreSQL предлагает поддержку немного большего количества языков:

  • C / C ++
  • Delphi
  • Erlang
  • Перейти
  • Джава
  • JavaScript
  • Лисп
  • .Сеть
  • Python
  • R
  • Tcl
  • Другие языки программирования

С какими операционными системами они работают?

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

Совместимость с ОС MySQL

MySQL предлагает облачную поддержку, локальную установку и совместим со следующими операционными системами и форматами:

  • Windows
  • MacOS
  • Linux (Ubuntu, Debian, Generic, SUSE Linux Enterprise Server, Red Hat Enterprises, Oracle)
  • Oracle Solaris
  • Fedora
  • FreeBSD
  • Сборка с открытым исходным кодом

Совместимость с ОС PostgreSQL

PostgreSQL предлагает облачную поддержку и локальную установку, и пользователи обычно устанавливают PostgreSQL на серверах Linux.Кроме того, ORDBMS предлагает PostgREST REST API. По данным сайта PostgreSQL:

PostgREST — это автономный веб-сервер, который превращает вашу базу данных PostgreSQL непосредственно в RESTful API. Структурные ограничения и разрешения в базе данных определяют конечные точки и операции API.

PostgreSQL доступен для следующих операционных систем:

  • MacOS
  • Солярис
  • Windows
  • BSD (FreeBSD, OpenBSD)
  • Linux (семейство Red Hat Linux, включая варианты CentOS / Fedora / Scientific / Oracle, Debian GNU / Linux и производные, Ubuntu Linux и производные, SuSE и OpenSuSE, другие операционные системы Linux)

Интегрируйте свои данные сегодня!

Попробуйте Xplenty бесплатно в течение 7 дней.Кредитная карта не требуется.

Как они индексируются?

Индексы

повышают производительность базы данных за счет ускорения запросов SQL при работе с большими таблицами данных. Без индексации базы данных запросы будут медленными и чрезмерно обременительными для СУБД. И MySQL, и PostgreSQL предлагают разные варианты индексации.

Типы индексации MySQL

Типы индексов MySQL включают:

  • Индексы, хранящиеся в B-деревьях, такие как INDEX, FULLTEXT, PRIMARY KEY и UNIQUE.
  • Индексы, хранящиеся в R-деревьях, например индексы, найденные в типах пространственных данных.
  • Индексы хеширования и инвертированные списки при использовании индексов FULLTEXT.

Типы индексов PostgreSQL

Типы индексов PostgreSQL включают:

  • Индексы хеширования и индексы B-дерева.
  • Частичные индексы, которые организуют информацию только из части таблицы.
  • Индексы выражений, которые создают индекс на основе функций выражения, а не значений столбцов.

Чем отличается кодирование?

Вот три различия между кодированием с MySQL и PostgreSQL, о которых вам следует знать:

  1. Чувствительность к регистру
  2. Наборы символов и строки по умолчанию
  3. IF и IFNULL против операторов CASE

Чувствительность корпуса

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

Наборы символов и строки по умолчанию

В некоторых версиях MySQL — это , необходимое для преобразования наборов символов и строк в UTF-8. В PostgreSQL не обязательно для преобразования наборов символов и строк в UTF-8. Кроме того, в PostgreSQL запрещен синтаксис UTF-8.

IF и IFNULL в сравнении с CASE

В MySQL совершенно нормально использовать операторы IF и IFNULL. В PostgreSQL операторы IF и IFNULL не работают. Вместо этого вам нужно использовать оператор CASE.

PostgreSQL против MySQL Trends

Заключение

В заключение, выбор между MySQL и PostgreSQL часто сводится к следующим вопросам:

  1. Вам нужна многофункциональная база данных, способная обрабатывать сложные запросы и большие базы данных? PostgreSQL может быть вашим выбором.
  2. Вам нужна более простая база данных, которая относительно проста в настройке и управлении, быстрая, надежная и понятная? MySQL может быть вашим выбором.

При этом, как вы видели из этого руководства, ваше решение может быть немного более тонким, чем ваши ответы на эти простые вопросы. В Xplenty нам интересно узнать, какое из этих решений СУБД вы используете в настоящее время и почему вы выбрали одно вместо другого. Пожалуйста, напишите нам и дайте нам знать!

Интегрируйте свои данные сегодня!

Попробуйте Xplenty бесплатно в течение 7 дней.Кредитная карта не требуется.

Xplenty: Решения для интеграции данных для MySQL и PostgreSQL

Интеграция данных из СУБД MySQL или PostgreSQL в вашу платформу бизнес-аналитики может быть источником постоянных препятствий и проблем. Здесь может помочь Xplenty. В Xplenty мы предлагаем чрезвычайно мощное и интуитивно понятное решение ETL для извлечения информации практически из любого источника данных (независимо от того, используете ли вы MySQL, PostgreSQL или что-то еще), а затем преобразовываем данные для беспрепятственной интеграции с вашим хранилищем данных бизнес-аналитики.Свяжитесь с Xplenty сейчас, чтобы узнать, как наши решения могут решить ваши проблемы интеграции данных.

.

PostgreSQL против MySQL: в чем разница?

  • Home
  • Тестирование

      • Back
      • Agile Testing
      • BugZilla
      • Cucumber
      • Тестирование базы данных
      • Тестирование ETL
      • 0003
      • Jmeter
      • Jmeter Load Backing
      • Ручное тестирование
      • Мобильное тестирование
      • Mantis
      • Почтальон
      • QTP
      • Назад
      • Центр качества (ALM)
      • RPA
      • SAP Testing
      • Selenium
    • SAP

        • Назад
        • ABAP
        • APO
        • Начало er
        • Basis
        • BODS
        • BI
        • BPC
        • CO
        • Назад
        • CRM
        • Crystal Reports
        • FICO
        • Pay4
        • HR
        • Назад
        • PI / PO
        • PP
        • SD
        • SAPUI5
        • Безопасность
        • Менеджер решений
        • Successfactors
        • SAP Tutorials
    • Назад

      Web

          • Angular

            Web

            • ASP.Net
            • C
            • C #
            • C ++
            • CodeIgniter
            • СУБД
            • JavaScript
            • Назад
            • Java
            • JSP
            • Kotlin
            • Linux
            • Linux
            • Kotlin
            • Linux
            • js
            • Perl
            • Назад
            • PHP
            • PL / SQL
            • PostgreSQL
            • Python
            • ReactJS
            • Ruby & Rails
            • Scala
            • SQL
            • 000
            • SQL
            • 000 0003 SQL 000 0003 SQL 000
            • UML
            • VB.Net
            • VBScript
            • Веб-службы
            • WPF
        • Обязательно учите!

            • Назад
            • Бухгалтерский учет
            • Алгоритмы
            • Android
            • Блокчейн
            • Business Analyst
            • Создание веб-сайта
            • CCNA
            • Облачные вычисления
            • 00030003 COBOL
                9000 Compiler
                  9000 Встроенные системы
                • 00030003 9000 Compiler 9000
                • Ethical Hacking
                • Учебные пособия по Excel
                • Программирование на Go
                • IoT
                • ITIL
                • Jenkins
                • MIS
                • Сети
                • Операционная система
                • 00030003
                • Назад
                • Управление проектами Обзоры
                • Salesforce
                • SEO
                • Разработка программного обеспечения
                • VB A
            • Big Data

                • Назад
                • AWS
                • BigData
                • Cassandra
                • Cognos
                • Хранилище данных
                • 0003
                • HBOps
                • 0003
                • HBOps
                • 0003
                • MicroStrategy
                • Монг
            .

            PostgreSQL и MySQL: всестороннее сравнение

            Известен как Самая продвинутая база данных с открытым исходным кодом в мире. самая популярная в мире база данных с открытым исходным кодом .
            Разработка PostgreSQL — проект с открытым исходным кодом . MySQL — это продукт с открытым исходным кодом .
            Произношение post gress queue ell my ess queue ell
            Лицензирование Лицензия в стиле MIT Стандартная общественная лицензия GNU
            Язык программирования реализации C C C
            Инструмент с графическим интерфейсом PgAdmin MySQL Workbench
            ACID Да Да
            Механизм хранения Один механизм хранения Несколько механизмов хранения g., InnoDB и MyISAM
            Полнотекстовый поиск Да Да (ограниченно)
            Удалить временную таблицу Нет TEMP или TEMPORARY ключевое слово в заявлении 091 DROP TABLE 000 000 Тип данных Да (поддерживается CTE, начиная с MySQL 8.0)
            9000 Поддержите ключевое слово TEMP или TEMPORARY в операторе DROP TABLE , который позволяет удалить только временную таблицу.
            DROP TABLE Поддержка опции CASCADE для удаления зависимых объектов таблицы e.г., таблицы и представления. Не поддерживает опцию CASCADE .
            TRUNCATE TABLE PostgreSQL TRUNCATE TABLE поддерживает больше функций, таких как CASCADE , RESTART IDENTITY , CONTINUE IDENTITY , транзакционная безопасность и т. Д. MySQL TRUNCATE TABLE не поддерживает TRUNCATE TABLE CASCADE и безопасная транзакция, т.е. после удаления данных их нельзя откатить.
            Столбец с автоматическим приращением SERIAL AUTO_INCREMENT
            Столбец идентификаторов Да Нет
            Да Да Да Да Поддержка Да многие расширенные типы, такие как массив, hstore и пользовательский тип. Стандартные типы SQL
            Целое число без знака Нет Да
            Логический тип Да Использовать TINYINT (1) внутренне для логического адреса
            Нет
            Установить значение по умолчанию для столбца Поддерживать как постоянный, так и функциональный вызов Должен быть константой или CURRENT_TIMESTAMP для TIMESTAMP или DATETIME столбцов
            CTE
            EXPLAIN вывод Более подробно Менее подробный
            Материализованные представления Да Нет
            Ограничение CHECK Да, начиная с версии 8.0.16 Поддерживается Да До этого MySQL просто игнорировал ограничение CHECK)
            Наследование таблиц Да Нет
            Языки программирования для хранимых процедур Ruby, Perl, Python, TCL, PL / pgSQL, SQL, JavaScript и т. Д. Синтаксис SQL: 2003 для хранимых процедур
            FULL OUTER JOIN Да Нет
            INTERSECT Да Нет
            Нет
            0 9004 с версии 2) 0004 Task Schedule
            Частичные индексы Да Нет
            Растровые индексы Да Нет
            Индексы Expression Да Нет
            Да. MySQL поддерживает покрывающие индексы, которые позволяют извлекать данные, просматривая только индекс, не касаясь данных таблицы. Это выгодно в случае больших таблиц с миллионами строк.
            Триггеры Триггеры поддержки, которые могут срабатывать для большинства типов команд, кроме тех, которые влияют на базу данных глобально, например, роли и табличные пространства. Ограничено некоторыми командами
            Разбиение на разделы RANGE, LIST RANGE, LIST, HASH, KEY и составное разделение с использованием комбинации RANGE или LIST с подразделами HASH или KEY
            Task Schedule Запланированное событие
            Масштабируемость соединения Каждое новое соединение - это процесс ОС Каждое новое соединение - это поток ОС
            .

            MySQL против PostgreSQL для веб-приложений

            Переполнение стека
            1. Около
            2. Продукты
            3. Для команд
            1. Переполнение стека Общественные вопросы и ответы
            2. Переполнение стека для команд Где разработчики и технологи делятся частными знаниями с коллегами
            3. Вакансии Программирование и связанные с ним технические возможности карьерного роста
            4. Талант Нанимайте технических специалистов и создавайте свой бренд работодателя
            5. Реклама Обратитесь к разработчикам и технологам со всего мира
            6. О компании

            Загрузка…

            .
            Строки mysql: Функции для работы со строками

            Строки mysql: Функции для работы со строками

            Символьные / строчные функции MySQL — Oracle PL/SQL •MySQL •MariaDB •SQL Server •SQLite

            Функция & Описание
            ASCII
            Функция MySQL ASCII возвращает числовое значение самого левого символа строки.
            CHAR_LENGTH
            MySQL функция CHAR_LENGTH возвращает количство симолов указанной строки.
            CHARACTER_LENGTH
            MySQL функция CHARACTER_LENGTH возвращает длину указанной строки (измеряется в символах).
            CONCAT
            MySQL функция CONCAT позволяет объединять вместе два или более выражений.
            CONCAT_WS
            MySQL функция CONCAT_WS позволяет объединять два или более выражения вместе и добавляет разделитель между каждым конкатенированным выражением.
            FIELD
            MySQL функция FIELD возвращает позицию значения в списке значений (val1, val2, val3, …).
            FIND_IN_SET
            MySQL функция FIND_IN_SET возвращает позицию строки в списке строк, разделенных запятыми.
            FORMAT
            MySQL функция FORMAT форматирует число в формате ‘#, ###. ##’, округляя его до определенного количества десятичных знаков, а затем возвращает результат в виде строки.
            INSERT
            MySQL функция INSERT вставляет подстроку в строку в заданной позиции для определенного количества символов.
            INSTR
            MySQL функция INSTR возвращает позицию подстроки в строке.
            LCASE
            MySQL функция LCASE преобразует все символы в указанной строке в строчные. Если в строке есть символы, которые не являются буквами, то функция их не преобразует.
            LEFT
            MySQL функция LEFT извлекает подстроку из строки, начиная с самого левого символа.
            LENGTH
            MySQL функция LENGTH возвращает длину указанной строки (измеряется в байтах).
            LOCATE
            MySQL функция LOCATE возвращает местоположение первого вхождения подстроки в строку.
            LOWER
            MySQL функция LOWER преобразует все символы указанной строки в строчные (нижний регистр). Если в строке есть символы, которые не являются буквами, то функция их не преобразует.
            LPAD
            MySQL функция LPAD возвращает строку, дополненную слева с указанной строкой до определенной длины.
            LTRIM
            MySQL функция LTRIM удаляет все пробелы из левой части строки.
            MID
            MySQL функция MID извлекает подстроку из строки.
            POSITION
            MySQL функция POSITION возвращает местоположение подстроки в строке.
            REPEAT
            MySQL функция REPEAT повторяет строку определенное количество раз.
            REPLACE
            MySQL функция REPLACE заменяет все вхождения указанной строки.
            REVERSE
            MySQL функция REVERSE возвращает строку с символами в обратном порядке.
            RIGHT
            MySQL функция RIGHT извлекает подстроку из строки, начиная с самого правого символа.
            RPAD
            MySQL функция RPAD возвращает строку, дополненную с правой стороны строкой до определенной длины.
            RTRIM
            MySQL функция RTRIM удаляет все пробелы из правой части строки.
            SPACE
            MySQL функция SPACE возвращает строку с указанным количеством пробелов.
            STRCMP
            MySQL функция STRCMP проверяет, совпадают ли две строки с текущим набором символов.
            SUBSTR
            MySQL функция SUBSTR извлекает подстроку из строки.
            SUBSTRING
            MySQL функция SUBSTRING извлекает подстроку из строки.
            SUBSTRING_INDEX
            MySQL функция SUBSTRING_INDEX возвращает подстроку из строки перед появлениям (number) вхождений разделителя (delim).
            TRIM
            MySQL функция TRIM удаляет все указанные символы либо из начала, либо из конца строки.
            UCASE
            MySQL функция UCASE преобразует все символы указанной строки в верхний регистр. Если в строке есть символы, которые не являются буквами, то функция их не преобразует.
            UPPER
            MySQL функция UPPER преобразует все символы указанной строки в верхний регистр. Если в строке есть символы, которые не являются буквами, то функция их не преобразует.

            Функция CONCAT — сложение строк при выборке

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

            См. также функцию CONCAT_WS, которая складывает строки с использованием разделителя.

            См. также функцию GROUP_CONCAT, которая складывает содержимое одного поля из разных строк.

            Синтаксис

            SELECT CONCAT(поле1, поле2...) FROM имя_таблицы WHERE условие

            Примеры

            Все примеры будут по этой таблице workers, если не сказано иное:

            id
            айди
            name
            имя
            age
            возраст
            salary
            зарплата
            1 Дима 23 300
            2 Петя 24 400
            3 Вася 25 500

            Пример

            В данном примере при выборке из базы создается новое поле concat, в котором одновременно сольются 3 поля — age, name и salary:

            SELECT *, CONCAT(age, name, salary) as concat FROM workers

            SQL запрос выберет следующие строки:

            id
            айди
            name
            имя
            age
            возраст
            salary
            зарплата
            concat
            объединенное поле
            1 Дима 23 300 23Дима300
            2 Петя 24 400 24Петя400
            3 Вася 25 500 25Вася500

            Пример

            Давайте добавим после name 3 восклицательных знака:

            SELECT *, CONCAT(name, '!!!') as name FROM workers

            SQL запрос выберет следующие строки:

            id
            айди
            name
            имя
            age
            возраст
            salary
            зарплата
            1 Дима!!! 23 300
            2 Петя!!! 24 400
            3 Вася!!! 25 500

            Пример

            Давайте добавим перед name 3 восклицательных знака, а после него — 3 вопросительных:

            SELECT *, CONCAT('!!!', name, '???') as name FROM workers

            SQL запрос выберет следующие строки:

            id
            айди
            name
            имя
            age
            возраст
            salary
            зарплата
            1 !!!Дима??? 23 300
            2 !!!Петя??? 24 400
            3 !!!Вася??? 25 500

            Выбрать определенную строку из таблицы MySQL

            В идеале мне нужен запрос, эквивалентный

            select * from customer where row_number() = 3
            

            но это незаконно.

            Я не могу использовать автоматическое приращение поля.

            row_number () — это строка, которую необходимо выбрать.

            Как мне это сделать?

            EDIT: Ну, я использую iSql * plus для практики, и использование limit и auto_increment по какой-то причине незаконно. Я закончил создание последовательности и триггера и просто увеличил id на 1 каждый раз, когда там была запись.

            18

            Mysql как выйти из базы данных: Как выйти из командной строки MySQL?

            Mysql как выйти из базы данных: Как выйти из командной строки MySQL?

            Как показать пользователей в MySQL

            Вы когда-нибудь хотели получить список всех пользователей на вашем сервере MySQL? Есть команды для отображения баз данных и таблиц, но нет команды в MySQL “показать пользователей”.

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

            Прежде чем вы начнете эту статью, мы предполагаем, что у вас уже есть MySQL или сервер MariaDB, установленный в вашей системе. Если нет, вы можете легко установить его, следуя одному из руководств ниже:

            Все команды будут выполнены внутри оболочки MySQL как пользователь root.

            Чтобы получить доступ к оболочке MySQL, введите следующую команду и введите пароль пользователя root MySQL при запросе:

            Если вы еще не установили пароль для пользователя root в MySQL можно опустить переключатель -p.

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

            MySQL хранит информацию о пользователях, в таблице с именем user в базе данных mysql. Чтобы получить список всех учетных записей пользователей в MySQL, можно использовать заявление SELECT и извлечь все строки из таблицы mysql.users:

            SELECT User, Host FROM mysql.user;

             

            Вывод должен выглядеть примерно так:

            +------------------+-----------+
            | user             | host      |
            +------------------+-----------+
            | root             | localhost |
            | luke             | %         |
            | yoda             | %         |
            | alex             | 10.10.0.6 |
            | alex             | 10.10.0.9 |
            | andeyex          | localhost |
            | anton            | localhost |
            | sniper           | localhost |
            +------------------+-----------+
            8 rows in set (0.00 sec)

             

            Команда выше показывает только две колонки из таблицы  mysql.user (User и Host), в этой таблице содержится более 40 столбцов, таких как PasswordSelect_privUpdate_priv … и т. д.

            Учетная запись пользователя в MySQL состоит из имени пользователя и имени хоста.

            Вы можете использовать оператор desc mysql.user; для отображения информации о каждом столбце таблицы. Как только вы узнаете имя столбца, запустите запрос по выбранным данным.

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

            SELECT User, Host, Password, password_expired FROM mysql.user;

             

            +----------------+-----------+-------------------------------------------+------------------+
            | User           | Host      | Password                                  | password_expired |
            +----------------+-----------+-------------------------------------------+------------------+
            | root           | localhost |                                           | N                |
            | luke           | %         | *AKFG85M09GH96LG058AKHUYOLN76258E149A7EC8 | N                |
            | yoda           | %         | *9550E004046348198A143A115550E1262209FB6F | N                |
            | alex           | 10.10.0.6 | *F91C86B486B945C083BKJJF85JF94J75KHD187EC | Y                |
            | alex           | 10.10.0.9 |                                           | Y                |
            | andreyex       | localhost | *17F2B1E480292KGFG587DJFR85U7JG9FFCA005AF | N                |
            | anton          | localhost | *74409C8DB596J6JG86J7GKT9G76JY9H6EDBFC64A | N                |
            | sniper         | localhost | *7B3022FCAECKFI6897J9H96J6IG850KYOHD95745 | N                |
            +----------------+-----------+-------------------------------------------+------------------+
            8 rows in set (0.00 sec)

             

            В этой статье мы показали вам, как получить список всех учетных записей пользователей MySQL, извлекая данные из пользовательской таблицы в базе данных mysql.

            Не стесняйтесь оставить комментарий, если у вас есть какие-либо вопросы.

             

            Если вы нашли ошибку, пожалуйста, выделите фрагмент текста и нажмите Ctrl+Enter.

            Как восстановить базу MySQL — из дампа и другие способы 🛠️

            Восстановления базы из дампа

            Через phpMyAdmin

            В основном, пользователи работают с MySQL через панель phpMyAdmin, поэтому ниже приведен наиболее простой способ сделать восстановление из бэкапа вручную. Чтобы восстановить базу из дампа, нужно выполнить несколько действий:

            1. Открыть phpMyAdmin и выбрать требуемую БД.
            2. Затем перейти по ссылке «Импорт» – она находится в главном меню.
            3. В ней нужно найти и открыть раздел «Импортируемый файл», где нужно указать источник бэкапа базы.
            4. Подтвердить операцию нажатием «Вперед».
            5. Теперь остается только перезагрузить сервер MySQL.

            Как увеличить объем импортируемых баз данных

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

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

            Во втором случае (в файлах php.ini /.htaccess) потребуется увеличить значения по умолчанию ряда опций, влияющих на загрузку:

            • upload_max_filesize («максимальный размер загружаемого файла»). Первоначальное значение: «2Mб».
            • post_max_size («максимальный размер POST-запросов»). Значение параметра должно быть больше, чем у «upload_max_filesize».
            • max_execution_time («время исполнения скрипта»). Чтобы снять ограничения с параметра, ему нужно присвоить значение «0».
            • max_input_time («время обработки входящих запросов»).
            Способы увеличения лимитов на исполнение php-скриптов
            1. В настройках конфигурационного файла phpMyAdmin (config.inc.php). В файл нужно добавить строки:
            $ cfg['UploadDir'] = './upload';

            После чего добавить туда же переменную, снимающую ограничения со времени исполнения скриптов (после загрузки базы данных ее лучше убрать):

            $ cfg['ExecTimeLimit'] = 0;
            1. В пользовательском файле сайта (php.ini), где хранятся настройки исполнения php-скриптов. Файл «php.ini» можно найти, если открыть в браузере ранее добавленный (в корень сайта) php-файл. Например, ввести запрос вида «https://mysitename.com/myphpinfo.php», где «mysitename.com» — имя сайта, а «myphpinfo.php» — название php-файла. В открывшемся окне нужно найти параметры «Loaded Configuration File» или «Configuration File (php.ini) Path», где и будет указан путь к «php.ini».

            Добавляем в конце файла строки:

            post_max_size = 500M
            upload_max_filesize = 400M
            max_execution_time = 3000
            max_input_time = 6000
            1. В конфигурационном файле сервера (.htaccess), отвечающем, в том числе, за настройку обработки файлов на определенном сайте. Чтобы изменения сработали для всех файлов сайта, «.htaccess» должен обязательно находится в его корневой папке.

            Добавляем в файл строки:

            php_value post_max_size 500M
            php_value upload_max_filesize 400M
            php_value max_execution_time 3000
            php_value max_input_time 6000

            Восстановление новой базы данных

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

            Пример:

            mysql> CREATE DATABASE customers_db;

            2. Далее следует загрузить файл дампа SQL с помощью команды «mysql»:

            $ mysql -u [username] -p[password] [db_to_restore] <  /(Путь к файлу)/ [backupfile.sql]

            Пример:

            $ mysql -u root -pSeCrEt customers_db < /(Путь к файлу)/customers_db_backup.sql

            3. В случае, когда дамп был сделан до того, поможет следующая команда:

            $ gunzip < [backupfile.sql.gz] | mysql -u [username] -p[password] [dbname]

            Пример:

            $ gunzip < customers_db_backup.sql.gz | mysql -u root -pSeCrEt customers_db

            Следовательно, этими командами можно осуществить восстановление базы данных MySQL без особых трудностей.

            Восстановление баз данных с помощью таблиц

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

            Форматы таблиц

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

            Другой популярный формат таблиц — InnoDB. Он обладает более высоким быстродействием, снабжен функцией автоматического восстановления и устойчив к сбоям. Однако, для его ручного ремонта потребуется приложить некоторые усилия.

            Общий принцип восстановления

            Восстановление базы с использованием формата InnoDB можно выполнить благодаря опции innodb_force_recovery. Она будет находиться в конфигурационном файле MySQL.

            Перед тем, как ее запустить, можно попытаться получить результат при помощи команды select … into out file. В большинстве случаев она дает возможность сохранить информацию, не прибегая к дополнительным операциям.

            Однако, если select … into out file не сработала (например, помешали незаконченные процессы), чтобы восстановить базу из файлов .frm, остается прибегнуть к расширенному параметру innodb_force_recovery.

            1. Сначала нужно прописать в конфигурационном файле MySQL опцию innodb_force_recovery.

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

            В ОС Windows:

            1. %WINDIR%\my.ini (%WINDIR%\my.cnf)
            2. C:\my.ini (C:\my.cnf)
            3. BASEDIR\my.ini (BASEDIR\my.cnf)

            «WINDIR» — папка установки Windows. Обычно, путь к ней выглядит так: C:\WINDOWS.
            «BASEDIR» — папка, где установлена база MySQL. Например, для MySQL 8.0 полный путь к ней выглядит так: C:\PROGRAMDIR\MySQL\MySQL 8.0 Server (где «PROGRAMDIR» — папка c программами Windows, обычно это Program Files).

            В дистрибутивах Linux:

            1. /etc/my.cnf
            2. /etc/mysql/my.cnf
            3. SYSCONFDIR/my.cnf

            «SYSCONFDIR» — подкаталог, который использовался для компилирования MySQL (по умолчанию — etc).

            В файле предусмотрена возможность установить для innodb_force_recovery несколько параметров. По умолчанию опция будет иметь вид «innodb_force_recovery = 0». Если установить другие числа (от 1 до 3) можно не только восстановить данные таблицы MySQL, но и процессы, незавершенные из-за аварийной остановки.

            2. После открытия my.cnf или my.ini необходимо найти в нем блок [mysqld], куда и нужно прописать innodb_force_recovery. Пример:

            [mysqld] 
            innodb_force_recovery = 1

            Чтобы применить данный параметр, следует перезапустить сервер MySQL.

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

            Замена значений параметра

            Главное, чего нужно придерживаться во время работы с innodb_force_recovery – последовательно менять значения параметров от 1 до 3 и перезапускать после этого сервер.

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

            • 1 (SRV_FORCE_IGNORE_CORRUPT) — позволит серверу запуститься даже в случае обнаружения поврежденной таблицы.
            • 2 (SRV_FORCE_NO_BACKGROUND) — предотвращает запуск основного процесса и других процессов очистки. Иными словами, если случится сбой во время операции очистки фоновых процессов он будет предотвращен благодаря этому значению.
            • 3 (SRV_FORCE_NO_TRX_UNDO) — не происходит откат транзакций по завершению восстановления после сбоя.
            • 4 (SRV_FORCE_NO_IBUF_MERGE) — предотвращает операции объединения вставленных данных из буфера, при этом не собираются данные статистики. Устанавливается режим InnoDB «только для чтения».
            • 5 (SRV_FORCE_NO_UNDO_LOG_SCAN) — не учитываются логи отмены (undo logs) при запуске базы данных. InnoDB учитывает даже незавершенные операции как выполненные. Устанавливается режим InnoDB «только для чтения».
            • 6 (SRV_FORCE_NO_LOG_REDO) — отключение ведения логов отката изменений (redo logs) в связи с восстановлением. Оставляет таблицы в неактуальном состоянии, что в свою очередь может внести больше повреждений в Б-деревья и другие структуры базы данных. Устанавливается режим InnoDB «только для чтения».

            Пользоваться значениями 4, 5 и 6 не стоит тем, кто не имеет достаточного опыта работы с MySQL таблицами. С их применением в несколько раз возрастает вероятность полной потери информации.

            Восстановление пароля

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

            Использование init-file

            Во время запуска MySQL есть возможность сообщить сервису о файле, в котором находятся исполняемые команды SQL. Его адрес следует указать с помощью параметра «init-file».

            1. В первую очередь необходимо создать файл «init-file»:

            vi /home/user/init-file.txt

            2. Далее нужно добавить в файл следующую строку:

            UPDATE mysql.user SET password=password('новый пароль') WHERE user='root';

            3. Далее следует отключить сервис, если он работает:

            sudo systemctl stop mysql

            4. Затем можно запустить свой файл:

            sudo mysqld --user=mysql --init-file=/home/sergiy/init-file.txt --console

            5. Остается подождать немного, пока все будет работать, как надо, и далее остановить данный процесс. В терминале будет отображен вывод «started as proccess» и PID (номер-идентификатор) процесса. Последний как раз и нужно выключить. К примеру*:

            sudo kill -TERM 1111

            * Значение PID приведено для примера. Следует заменить его на актуальное.

            6. Теперь можно запустить MySQL стандартным способом и попробовать авторизоваться с помощью нового пароля:

            sudo systemctl start mysql
            mysql -u root -p

            Использование skip-grant-tables

            Помимо — init-file можно выполнить сброс пароля с использованием другого параметра —skip-grant-tables. Если запустить с ним сервис, будет пропущена загрузка данных пользователей, что позволяет войти без необходимости вводить логин и пароль.

            1. Здесь также сначала требуется отключить базу данных:

            udo systemctl stop mysqls

            2. Дальше нужно запустить вручную MySQL следующей командой:

            sudo mysqld --user=mysql --skip-grant-tables

            3. Теперь можно открыть консоль для работы с MySQL:

            mysql -u root

            4. Поскольку загрузка была осуществлена без привилегий пользователей, таблицы с ними теперь нужно подгрузить:

            FLUSH PRIVILEGES;

            5. На этой стадии можно менять пароль пользователя root:

            UPDATE mysql.user SET password=password('новый пароль') WHERE user='root';

            6. Можно закрывать консоль управления:

            Exit (quit)

            7. Остается выключить сервис*, как и в приведенном выше способе:

            sudo kill -TERM 1111

            * Значение PID приведено для примера. Следует заменить его на актуальное.

            8. И, наконец, запустить MySQL в стандартном режиме работы:

            sudo systemctl start mysql

            9. После этого появится возможность авторизации с помощью нового пароля:

            sudo mysql -u root -p

            Создание (удаление) базы данных MySQL и пользователя из командной строки (BASH)

            В этой статье рассмотрим, как создавать новые базы данных в MySQL из командной строки сервера, (а также BASH-скрипт для автоматического создания базы данных и пользователя MySQL на сервере).

            Вход под root на MySQL-сервер

            Для того, чтобы воспользоваться интерфейсом MySQL на удалённом сервере, необходимо сперва законнектится к серверу MySQL. В Debian это можно сделать командой mysql -uroot так, чтобы сразу войти в интерфейс с правами root. После удачного входа появится приветствие сервера MySQL и приглашение для ввода команд на языке MySQL:

            [email protected]:~# mysql -uroot
            Welcome to the MariaDB monitor.  Commands end with ; or \g.
            Your MariaDB connection id is 15
            Server version: 10.1.38-MariaDB-0+deb9u1 Debian 9.8
            
            Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others.
            
            Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
            
            MariaDB [(none)]>

            Выход в консоли из режима работы с MySQL-сервером

            Для того, чтобы выйти из режима работы с MySQL-сервером в консоли нужно набрать команду exit:

            MariaDB [(none)]> exit
            Bye
            [email protected]:~#

            CREATE DATABASE — команда MySQL для создания базы данных

            Для того, чтобы создать базу данных на сервере нужно воспользоваться командой MySQL CREATE DATABASE, введя после неё в `` название базы данных. Помним про синтаксис MySQL и после команды обязательно ставим ;:

            MariaDB [(none)]> CREATE DATABASE `new_db`;
            Query OK, 1 row affected (0.00 sec)

            Более полная конструкция команды CREATE DATABASE:

            CREATE DATABASE new_db CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
            • CHARACTER SET задаёт порядок сортировки.
            • COLLATE задаёт кодировку таблиц создаваемой базы данных.

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

            • Если задан параметр CHARACTER SET, но не задан параметр COLLATE, то используется стандартный порядок сортировки.
            • Если задан параметр COLLATE, но не задан CHARACTER SET, то кодировку определяет первая часть имени порядка сортировки в COLLATE.
              • Кодировка, заданная в CHARACTER SET, должна поддерживаться сервером,
              • а порядок сортировки должен быть допустимым для текущей кодировки.
            • Если не заданы оба параметра, то берётся значение по умолчанию.

            Как посмотреть настройки уже существующей базы данных

            Для того, чтобы посмотреть настройки уже существующей базы данных необходимо выполнить команду SHOW CREATE DATABASE, указав имя базы данных, настройки которой нужно посмотреть:

            MariaDB [(none)]> SHOW CREATE DATABASE `new_db`;
            +----------+-----------------------------------------------------------------------------------------------+
            | Database | Create Database                                                                               |
            +----------+-----------------------------------------------------------------------------------------------+
            | new_db   | CREATE DATABASE `new_db` /*!40100 DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci */ |
            +----------+-----------------------------------------------------------------------------------------------+
            1 row in set (0.00 sec)

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

            Для того, чтобы вывести список всех баз данных на сервере MySQL нужно воспользоваться командой show databases:

            MariaDB [(none)]> show databases;
            +--------------------+
            | Database           |
            +--------------------+
            | information_schema |
            | mysql              |
            | new_db             |
            +--------------------+
            3 rows in set (0.00 sec)

            Как удалить базу данных MySQL с сервера

            Для удаления базы данных MySQL с сервера нужно воспользоваться командой DROP DATABASE и ввести имя удаляемой базы данных:

            MariaDB [(none)]> DROP DATABASE `new_db`;
            Query OK, 0 rows affected (0.00 sec)

            CREATE USER — команда MySQL для создания пользователя базы данных

            Для создания пользователя базы данных нужно воспользоваться командой CREATE USER:

            MariaDB [(none)]> CREATE USER new_user;
            Query OK, 0 rows affected (0.00 sec)

            Для задания/изменения пароля пользователя базы данных нужно воспользоваться командой:

            MariaDB [(none)]> UPDATE mysql.user SET Password=PASSWORD('tyt_parol') WHERE User='new_user';
            Query OK, 1 row affected (0.00 sec)
            Rows matched: 1  Changed: 1  Warnings: 0

            DROP USER — команда MySQL для удаления пользователя базы данных

            Для того, чтобы удалить пользователя баз данных нужно выполнить команду DROP USER:

            MariaDB [(none)]> DROP USER `new_user`;
            Query OK, 0 rows affected (0.00 sec)

            Простейший BASH-скрипт для создания новой базы данным MySQL с пользователем и паролем

            Быстро создавать базы данных можно с помощью такого BASH-скрипта:

            #!/bin/bash
            
            mysql -uroot <<MYSQL_SCRIPT
            CREATE DATABASE $1 CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
            CREATE USER '$1'@'localhost' IDENTIFIED BY '$2';
            GRANT ALL PRIVILEGES ON $1.* TO '$1'@'localhost';
            FLUSH PRIVILEGES;
            MYSQL_SCRIPT
            
            echo "MySQL database created."
            echo "Database:   $1"
            echo "Username:   $1"
            echo "Password:   $2"

            На входе этому скрипту нужно задать два параметра:

            1. Имя базы данных (у пользователя будет такое же имя)
            2. Пароль пользователя базы данных.

            Пример работы такого скрипта create-mysql.sh при создании базы данных test c пользователем test и паролем 123:

            [email protected]:~# ./create-mysql.sh test 123
            MySQL database created.
            Database:   test
            Username:   test
            Password:   123

            Простейший BASH-скрипт для удаления базы данным MySQL с пользователем

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

            #!/bin/bash
            
            mysql -uroot <<MYSQL_SCRIPT
            DROP DATABASE $1;
            DROP USER '$1'@'localhost';
            MYSQL_SCRIPT
            
            echo "MySQL database and user deleted."
            echo "Database:   $1"
            echo "Username:   $1"

            Резюме

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

            Заберите ссылку на статью к себе, чтобы потом легко её найти 😉

            Выберите, то, чем пользуетесь чаще всего:

            Спасибо за внимание, оставайтесь на связи! Ниже ссылка на форум и обсуждение ; )

            MySQL – восстановление повреждённых таблиц

            Как известно, любые повреждения происходят в результате каких-либо внешних факторов. Состояние внутренней структуры таблиц баз данных (БД), в данном случае таблиц MySQL, всецело определяет, насколько надёжным будет использование самой БД. На высоконагруженных серверах БД повреждение таблиц отнюдь не редкость. Администраторам, да и самим пользователям порой приходится прибегать к починке структуры таблиц своих БД. О том, по каким причинам повреждаются таблицы и какие существуют методы решения данной проблемы на примере MySQL и будет изложено в данной статье.

            Причины повреждения таблиц

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

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

            В любом случае, первое, что нужно сделать — это остановить работу MySQL-сервера, сделать резервные копии файлов таблиц, которые по умолчанию находятся в каталоге /var/lib/mysql:

            $ cp -r /var/lib/mysql ~/backups/mysql_back

            Для выполнения этой команды могут потребоваться привилегии суперпользователя или пользователя, имеющего доступ к каталогу /var/lib/mysql. Только после этого можно приступить к разбору ситуации и проверить, действительно ли таблицы повреждены. Для этого можно воспользоваться командной консолью MySQL. Но предварительно необходимо снова запустить MySQL-сервер. И авторизоваться на нём (от имени пользователя-администратора) с помощью команды:

            $ mysql -u username -p

            Здесь username – имя пользователя-администратора в системе MySQL.

            Проверка таблиц на предмет повреждений

            Проверить таблицы на предмет повреждения можно встроенными средствами MySQL, если для них используется движок MyISAM. Для этого используется специальный запрос «CHECK TABLE». Итак, для начала, после авторизации в системе MySQL (как описано в предыдущей главе) необходимо выбрать интересующую БД:

            mysql> use db_name;

            Здесь db_name – имя требуемой базы данных, таблицы которой нужно проверить. Для получения списка всех имеющихся на сервере БД можно выполнить следующий запрос:

            mysql> show databases;

            Теперь можно выполнить, собственно, саму проверку:

            mysql> check table db_table;
            +--------------------+-------+----------+----------+
            | Table              | Op    | Msg_type | Msg_text |
            +--------------------+-------+----------+----------+
            | db_name.db_table   | check | status   | OK       |
            +--------------------+-------+----------+----------+
            1 row in set (0.00 sec)

            Как нетрудно догадаться, «db_table» здесь — это имя требуемой таблицы. В данном случае вывод в столбце «Msg-text» говорит о том, что с таблицей всё в порядке.

            Восстановление MyISAM-таблиц

            В случае, когда повреждения таблиц всё же есть. То с большой степенью вероятности таблицу можно починить, используя запрос «REPAIR TABLE»:

            mysql> repair table db_table;

            Теперь, если починка завершилась нормально, будет получен следующий вывод:

            +-------------------+--------+----------+----------+
            | Table             | Op     | Msg_type | Msg_text |
            +-------------------+--------+----------+----------+
            | db_name.db_table  | repair | status   | OK       |
            +-------------------+--------+----------+----------+

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

            Восстановление InnoDB-таблиц

            В случае, если повреждённые таблицы обслуживались движком InnoDB, то придётся использовать более сложный метод восстановления. Дело в том, что движок InnoDB сам способен следить за исправностью таблиц и устранять повреждения. Однако, если он по каким-либо причинам не справляется с этой задачей, то сервер MySQL останавливается.

            Метод восстановления для InnoDB-таблиц рекомендуется разработчиками MySQL и суть его в следующем:

            • необходимо сначала восстановить доступ к повреждённой таблице, поскольку сервер в этом случае останавливается;
            • выполнить резервную копию в виде дампа повреждённых таблиц, используя утилиту mysqldump, которая сохраняет структуру таблицы и данные;
            • удалить повреждённую таблицу;
            • выполнить загрузку дампа таблицы, но уже во вновь созданную таблицу БД, что будет сделано утилитой mysqldump автоматически.

            Для восстановления доступа к таблицам можно сначала попытаться перезагрузить сервер MySQL. Если это не помогло, то можно запустить его с опцией innodb_force_recovery. Для этого необходимо отредактировать конфигурационный файл /etc/mysql/mysql.conf.d/mysqld.cnf, например, используя текстовый редактор nano:

            $ sudo nano /etc/mysql/mysql.conf.d/mysqld.cnf

            Необходимо сделать изменения в разделе [mysqld], добавив в него строку:

            . . .
            [mysqld]
            . . .
            innodb_force_recovery=1

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

            $ mysqldump -u username -p db_name db_table > ~/backups/back.dump

            Дамп back.dump будет сохранён в подкаталоге backups домашнего каталога текущего пользователя.

            Теперь необходимо удалить из БД повреждённую таблицу. Для этого после авторизации в командной консоли MySQL (как описано в главе «Причины повреждения таблиц»), нужно выполнить следующий запрос:

            mysql> DROP TABLE db_name.db_table;

            Если БД была предварительно выбрана командой use, то в запросе следует указать только таблицу:

            mysql> DROP TABLE db_table;

            Теперь можно выйти из командной консоли MySQL командой exit. И выполнить загрузку дампа таблицы в БД:

            $ mysql -u user -p < /home/username/backups/back.dump

            В данном случае вместо «/home/username/backups/back.dump» следует использовать  местоположение, куда ранее был сохранён дамп.

            Заключение

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

            Если вы нашли ошибку, пожалуйста, выделите фрагмент текста и нажмите Ctrl+Enter.

            Как удалить все таблицы в базе mysql через консоль

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

            Если у вас есть желание освоить Linux с нуля, не имея базовых знаний, рекомендую познакомиться с онлайн-курсом Administrator Linux.Basic в OTUS. Курс для новичков, для тех, кто хочет войти в профессию администратора Linux. Подробности по .

            В общем случае удалить таблицы из базы данных можно командой в консоли mysql:

            mysql> use databasename;
            mysql> drop table00 table01, table02;

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

            Можно воспользоваться mysqldump и некоторыми ключами.

            # mysqldump --add-drop-table --no-data databasename

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

            # mysqldump --add-drop-table --no-data databasename | grep ^DROP

            Мы получили набор команд на удаление всех таблиц. Теперь направим эти команды в mysql консоль на исполнение.

            # mysqldump --add-drop-table --no-data databasename | grep ^DROP | mysql databasename

            У меня настроена авторизация в mysql из консоли без пароля. В общем случае, с паролем команда будет выглядеть вот так:

            # mysqldump -uuser -ppassword --add-drop-table --no-data databasename | grep ^DROP | mysql -uuser -ppassword databasename

            Таким простым способом, без скриптов, можно прямо в консоли сервера удалить все таблицы из базы данных mysql, не удаляя саму базу. Может возникнуть вопрос, а почему не удалить все же базу и не создать заново. Причин может быть несколько:

            1. У вас нет прав на создание и удаление баз данных (наиболее частый случай).
            2. Не помните точно параметры базы данных, не хочется вспоминать, искать, как создать новую базу данных с теми же параметрами, что стоят у текущей (мой случай).

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

            Онлайн курс Основы сетевых технологий

            Теоретический курс с самыми базовыми знаниями по сетям. Курс подходит и начинающим, и людям с опытом. Практикующим системным администраторам курс поможет упорядочить знания и восполнить пробелы. А те, кто только входит в профессию, получат на курсе базовые знания и навыки, без воды и избыточной теории. После обучения вы сможете ответить на вопросы:
            • На каком уровне модели OSI могут работать коммутаторы;
            • Как лучше организовать работу сети организации с множеством отделов;
            • Для чего и как использовать технологию VLAN;
            • Для чего сервера стоит выносить в DMZ;
            • Как организовать объединение филиалов и удаленный доступ сотрудников по vpn;
            • и многое другое.
            Уже знаете ответы на вопросы выше? Или сомневаетесь? Попробуйте пройти тест по основам сетевых технологий. Всего 53 вопроса, в один цикл теста входит 10 вопросов в случайном порядке. Поэтому тест можно проходить несколько раз без потери интереса. Бесплатно и без регистрации. Все подробности на странице .

            Не понравилась статья и хочешь научить меня администрировать? Пожалуйста, я люблю учиться. Комментарии в твоем распоряжении. Расскажи, как сделать правильно!

            SQL запросы: Основы администрирования MySQL

            Что такое MySQL

            MySQL — это база данных. В ее таблицах хранятся данные веб-сайта. Для того, чтобы вывести статью, которую вы сейчас читаете, php скрипт обращается к базе данных этого сайта и делает запрос в таблицу с статьями, с определенными условиями. Благодаря SQL запросу, вы видите эту статью.

             

             

             

            Как подключиться к MySQL

            Для подключения к MySQL вы можете воспользоваться командной:

             

            mysql -P 3306 -h IPADDRESS -u USER -p DATABASE

             

            где -P 3306 — это порт базы данных, можно не указывать,
            -h IPADDRESS — ip адрес сервера, на котором находится mysql (можно не указывать или localhost, если база данных располагается локально)
            -u USER — USER имя пользователь mySQL
            -p — опция говорит о том, что база данных с паролем,
            DATABASE — имя базы данных

             

            Как создать дамп (dump) базы данных MySQL

            Для создания дампа базы данных MySQL введите в терминал команду:

             

            mysqldump -uUSER -h292.168.1.20 -p DATABASE > dumpname.sql

             

            где USER — имя пользователя БД
            192.168.1.20 — ip адрес mysql сервера (можно не указывать или указать localhost, если mysql сервер находится локально)
            DATABASE — имя базы данных с которой хотите сделать дамп, dumpname.sql — название дампа базы данных

             

            Как развернуть дамп (dump) базы данных MySQL

            Для того, чтобы развернуть дамп базы данных MySQL, введите команду:

             

            mysql -uUSER -h292.168.1.20 -p DATABASE < dumpname.sql

             

            где USER — имя пользователя БД
            192.168.1.20 — ip адрес mysql сервера (можно не указывать или указать localhost, если mysql сервер находится локально)
            DATABASE — имя базы данных в которую хотите развернуть дамп базы данных, dumpname.sql — название дампа базы данных

             

            Еще один вариант развернуть дамп из консоли MySQL:

             

            mysql> use NAMEDATABASE;
            mysql> source dumpname.sql

             

            где NAMEDATABASE — имя базы данных, в которую хотите развернуть дамп MySQL
            dumpname.sql — имя дампа MySQL

             

            SQL запрос: SELECT

            SELECT — это команда sql для вывода записей из конкретной таблицы

            Пример запроса select

             

            select * from hosting;

             

            Предположим, что у нас есть таблица в MySQL базе данных hosting. Команда выше, выводит все записи из таблицы hosting.
            Звездочка (*) обозначает, что нужно вывести все поля из таблицы hosting. Предположим, что в таблице MySQL hosting, у нас есть поля id, name, address.
            Для того, чтобы вывести только записи из полей name, нужно выполнить запрос:

             

            select name from hosting;

             

            SQL запрос: INSERT

            INSERT — это команда sql для вставки записей в таблицу MySQL

            Для того, чтобы вставить в таблицу hosting новую запись запись, нужно выполнить команду:

             

            INSERT INTO `hosting` (`name`, `address`) VALUES (‘GoDaddy’,’14455 N Hayden Rd #219, Scottsdale, AZ 85260, Соединенные Штаты’)

             

            где (`name`, `address`) — это поля таблицы hosting
            VALUES (‘GoDaddy’,’14455 N Hayden Rd #219, Scottsdale, AZ 85260, Соединенные Штаты’) — это значения для name и address.
            Обратите внимания, данные и поля помещают внутри одинарных кавычек.

             

            SQL запрос: UPDATE

            UPDATE — это команда sql для обновления записей в таблице MySQL

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

             

            UPDATE `hosting` SET `address` = ‘USA’ WHERE `id`=1;

             

            SET `address` = «USA’ — запись обозначает, что в поле address требуется обновить значение
            WHERE `id`=»1″ — оператор в SQL запросах WHERE обозначает условие. Так как мы хотим обновить только одну запись с id = 1 (godaddy), а не все записи в таблице hosting.

             

            Резюме

            В данной статье мы рассмотрели основы администрирования MySQL базы данных. В следующих статьях мы рассмотрим другие SQL запросы и ответим на вопросы, такие как: Как создать базу данных MySQL, что такое LEFT JOIN, INNER JOIN RIGHT JOIN и чем они отличаются между собой.





            Читайте также




            Все материалы с сайта wh-db.com и ru.wh-db.com защищены авторским правом. Копирование, публикация, продажа и распространение материала строго запрещены.

            logging — Как включить журнал запросов MySQL?

            Переполнение стека
            1. Около
            2. Продукты
            3. Для команд
            1. Переполнение стека Общественные вопросы и ответы
            2. Переполнение стека для команд Где разработчики и технологи делятся частными знаниями с коллегами
            3. Вакансии Программирование и связанные с ним технические возможности карьерного роста
            4. Талант Нанимайте технических специалистов и создавайте свой бренд работодателя
            5. Реклама Обратитесь к разработчикам и технологам со всего мира
            6. О компании

            Загрузка…

            .

            журналов аудита — База данных Azure для MySQL

            • 5 минут на чтение

            В этой статье

            В базе данных Azure для MySQL журнал аудита доступен пользователям. Журнал аудита может использоваться для отслеживания активности на уровне базы данных и обычно используется для обеспечения соответствия.

            Настроить журнал аудита

            Важно

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

            По умолчанию журнал аудита отключен. Чтобы включить его, установите для audit_log_enabled значение ON.

            Другие параметры, которые вы можете настроить, включают:

            • audit_log_events : контролирует события, которые должны быть зарегистрированы. См. Таблицу ниже для конкретных событий аудита.
            • audit_log_include_users : Пользователи MySQL должны быть включены для ведения журнала. Значение по умолчанию для этого параметра пусто, что включает всех пользователей для ведения журнала. Это имеет более высокий приоритет по сравнению с audit_log_exclude_users . Максимальная длина параметра — 512 символов.
            • audit_log_exclude_users : пользователи MySQL должны быть исключены из ведения журнала. Максимальная длина параметра — 512 символов.

            Примечание

            audit_log_include_users имеет более высокий приоритет по сравнению с audit_log_exclude_users .Например, если audit_log_include_users = demouser и audit_log_exclude_users = demouser , пользователь будет включен в журналы аудита, потому что audit_log_include_users имеет более высокий приоритет.

            Событие Описание
            ПОДКЛЮЧЕНИЕ — Инициирование соединения (успешное или неудачное)
            — Повторная аутентификация пользователя с другим пользователем / паролем во время сеанса
            — Завершение соединения
            DML_SELECT SELECT запросов
            DML_NONSELECT запросы INSERT / DELETE / UPDATE
            DML DML = DML_SELECT + DML_NONSELECT
            DDL Запросы типа «DROP DATABASE»
            DCL Запросы типа «ПРЕДОСТАВИТЬ РАЗРЕШЕНИЕ»
            АДМИНИСТРАТОР Запросы типа «ПОКАЗАТЬ СТАТУС»
            ОБЩЕЕ Все в DML_SELECT, DML_NONSELECT, DML, DDL, DCL и ADMIN
            ДОСТУП К ТАБЛИЦЕ — Доступно только для MySQL 5.7
            — Операторы чтения таблицы, такие как SELECT или INSERT INTO … SELECT
            — Операторы удаления таблицы, такие как DELETE или TRUNCATE TABLE
            — Операторы вставки таблицы, такие как INSERT или REPLACE
            — Операторы обновления таблицы, такие как UPDATE

            Журналы аудита доступа

            Журналы аудита

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

            Схемы журналов диагностики

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

            Подключение

            Объект Описание
            TenantId Ваш ID арендатора
            SourceSystem Лазурный
            TimeGenerated [UTC] Отметка времени, когда журнал был записан в формате UTC
            Тип Тип журнала.Всегда AzureDiagnostics
            Идентификатор подписки GUID для подписки, которой принадлежит сервер
            ResourceGroup Имя группы ресурсов, к которой принадлежит сервер.
            ResourceProvider Имя поставщика ресурсов. Всегда MICROSOFT.DBFORMYSQL
            ResourceType Серверы
            ResourceId URI ресурса
            Ресурс Имя сервера
            Категория MySqlAuditLogs
            Название операции LogEvent
            LogicalServerName_s Имя сервера
            event_class_s connection_log
            event_subclass_s CONNECT , DISCONNECT , ИЗМЕНИТЬ ПОЛЬЗОВАТЕЛЯ (доступно только для MySQL 5.7)
            connection_id_d Уникальный идентификатор соединения, созданный MySQL
            host_s Пустой
            ip_s IP-адрес клиента, подключающегося к MySQL
            user_s Имя пользователя, выполняющего запрос
            дб_с Имя базы данных, подключенной к
            \ _ResourceId URI ресурса

            Общие

            Схема

            , приведенная ниже, применяется к типам событий GENERAL, DML_SELECT, DML_NONSELECT, DML, DDL, DCL и ADMIN.

            Примечание

            Для sql_text журнал будет усечен, если он превышает 2048 символов.

            Объект Описание
            TenantId Ваш ID арендатора
            SourceSystem Лазурный
            TimeGenerated [UTC] Отметка времени, когда журнал был записан в формате UTC
            Тип Тип журнала.Всегда AzureDiagnostics
            Идентификатор подписки GUID для подписки, которой принадлежит сервер
            ResourceGroup Имя группы ресурсов, к которой принадлежит сервер.
            ResourceProvider Имя поставщика ресурсов. Всегда MICROSOFT.DBFORMYSQL
            ResourceType Серверы
            ResourceId URI ресурса
            Ресурс Имя сервера
            Категория MySqlAuditLogs
            Название операции LogEvent
            LogicalServerName_s Имя сервера
            event_class_s general_log
            event_subclass_s LOG , ERROR , RESULT (доступно только для MySQL 5.6)
            event_time Время начала запроса в формате UTC timestamp
            error_code_d Код ошибки, если запрос не удался. 0 означает отсутствие ошибки
            thread_id_d ID потока, выполнившего запрос
            host_s Пустой
            ip_s IP-адрес клиента, подключающегося к MySQL
            user_s Имя пользователя, выполняющего запрос
            sql_text_s Полный текст запроса
            \ _ResourceId URI ресурса

            Доступ к столу

            Примечание

            Журналы доступа к таблицам

            выводятся только для MySQL 5.7.
            Для sql_text журнал будет усечен, если он превышает 2048 символов.

            Объект Описание
            TenantId Ваш ID арендатора
            SourceSystem Лазурный
            TimeGenerated [UTC] Отметка времени, когда журнал был записан в формате UTC
            Тип Тип журнала.Всегда AzureDiagnostics
            Идентификатор подписки GUID для подписки, которой принадлежит сервер
            ResourceGroup Имя группы ресурсов, к которой принадлежит сервер.
            ResourceProvider Имя поставщика ресурсов. Всегда MICROSOFT.DBFORMYSQL
            ResourceType Серверы
            ResourceId URI ресурса
            Ресурс Имя сервера
            Категория MySqlAuditLogs
            Название операции LogEvent
            LogicalServerName_s Имя сервера
            event_class_s table_access_log
            event_subclass_s ПРОЧИТАТЬ , ВСТАВИТЬ , ОБНОВИТЬ или УДАЛИТЬ
            connection_id_d Уникальный идентификатор соединения, созданный MySQL
            дб_с Имя базы данных, к которой осуществлялся доступ
            table_s Имя таблицы, к которой обращались
            sql_text_s Полный текст запроса
            \ _ResourceId URI ресурса

            Анализировать журналы в журналах Azure Monitor

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

            • Список ОБЩИХ событий на определенном сервере

                AzureDiagnostics
              | где LogicalServerName_s == '<имя вашего сервера>'
              | где Category == 'MySqlAuditLogs' и event_class_s == "general_log"
              | проект TimeGenerated, LogicalServerName_s, event_class_s, event_subclass_s, event_time_t, user_s, ip_s, sql_text_s
              | порядок по TimeGenerated asc nulls last
                
            • Список событий CONNECTION на определенном сервере

                AzureDiagnostics
              | где LogicalServerName_s == '<имя вашего сервера>'
              | где Category == 'MySqlAuditLogs' и event_class_s == "connection_log"
              | проект TimeGenerated, LogicalServerName_s, event_class_s, event_subclass_s, event_time_t, user_s, ip_s, sql_text_s
              | порядок по TimeGenerated asc nulls last
                
            • Обобщение проверенных событий на конкретном сервере

                AzureDiagnostics
              | где LogicalServerName_s == '<имя вашего сервера>'
              | где Category == 'MySqlAuditLogs'
              | проект TimeGenerated, LogicalServerName_s, event_class_s, event_subclass_s, event_time_t, user_s, ip_s, sql_text_s
              | суммировать count () по event_class_s, event_subclass_s, user_s, ip_s
                
            • Построить график распределения типов событий аудита на конкретном сервере

                AzureDiagnostics
              | где LogicalServerName_s == '<имя вашего сервера>'
              | где Category == 'MySqlAuditLogs'
              | проект TimeGenerated, LogicalServerName_s, event_class_s, event_subclass_s, event_time_t, user_s, ip_s, sql_text_s
              | суммировать count () по LogicalServerName_s, bin (TimeGenerated, 5m)
              | визуализировать временную диаграмму
                
            • Список отслеживаемых событий на всех серверах MySQL с включенными журналами диагностики для журналов аудита

                AzureDiagnostics
              | где Category == 'MySqlAuditLogs'
              | проект TimeGenerated, LogicalServerName_s, event_class_s, event_subclass_s, event_time_t, user_s, ip_s, sql_text_s
              | порядок по TimeGenerated asc nulls last
                

            Следующие шаги

            .

            журналов медленных запросов — База данных Azure для MySQL

            • 4 минуты на чтение

            В этой статье

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

            Для получения дополнительной информации о журнале медленных запросов MySQL см. Раздел журнала медленных запросов справочного руководства MySQL.

            Настроить медленное ведение журнала запросов

            По умолчанию журнал медленных запросов отключен. Чтобы включить его, установите slow_query_log в положение ON. Это можно включить с помощью портала Azure или Azure CLI.

            Другие параметры, которые вы можете настроить, включают:

            • long_query_time : если запрос занимает больше времени, чем long_query_time (в секундах), этот запрос регистрируется.По умолчанию — 10 секунд.
            • log_slow_admin_statements : if ON включает административные операторы, такие как ALTER_TABLE и ANALYZE_TABLE, в операторы, записанные в slow_query_log.
            • log_queries_not_using_indexes : определяет, записываются ли запросы, которые не используют индексы, в slow_query_log
            • log_throttle_queries_not_using_indexes : этот параметр ограничивает количество неиндексных запросов, которые могут быть записаны в журнал медленных запросов.Этот параметр вступает в силу, если для параметра log_queries_not_using_indexes установлено значение ON.
            • log_output : если «Файл», позволяет записывать журнал медленных запросов как в хранилище локального сервера, так и в журналы диагностики Azure Monitor. Если «Нет», журнал медленных запросов будет записан только в журналы диагностики Azure Monitor.

            Важно

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

            Если вы планируете регистрировать медленные запросы в течение длительного периода времени, рекомендуется установить для log_output значение «Нет». Если установлено значение «Файл», эти журналы записываются в хранилище локального сервера и могут повлиять на производительность MySQL.

            Полное описание параметров журнала медленных запросов см. В документации к журналу медленных запросов MySQL.

            Доступ к журналам медленных запросов

            Существует два варианта доступа к журналам медленных запросов в базе данных Azure для MySQL: хранилище локального сервера или журналы диагностики Azure Monitor.Это устанавливается с помощью параметра log_output .

            Для локального серверного хранилища вы можете просмотреть и загрузить журналы медленных запросов с помощью портала Azure или Azure CLI. На портале Azure перейдите к своему серверу на портале Azure. Под заголовком Monitoring выберите страницу Server Logs . Дополнительные сведения о Azure CLI см. В разделе Настройка журналов медленных запросов и доступ к ним с помощью Azure CLI.

            Журналы диагностики Azure Monitor позволяют передавать журналы медленных запросов по конвейеру в журналы Azure Monitor (аналитика журналов), хранилище Azure или концентраторы событий.Смотрите ниже для получения дополнительной информации.

            Хранение журнала хранилища локального сервера

            При входе в локальное хранилище сервера журналы доступны в течение семи дней с момента их создания. Если общий размер доступных журналов превышает 7 ГБ, самые старые файлы удаляются до тех пор, пока не освободится место.

            Журналы меняются каждые 24 часа или 7 ГБ, в зависимости от того, что наступит раньше.

            Примечание

            Указанное выше сохранение журнала не применяется к журналам, которые передаются по конвейеру с помощью журналов диагностики Azure Monitor.Вы можете изменить срок хранения для отправляемых приемников данных (например, хранилище Azure).

            Журналы диагностики

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

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

            Имущество Описание
            TenantId Ваш идентификатор арендатора
            SourceSystem Лазурный
            TimeGenerated [UTC] Отметка времени, когда журнал был записан в формате UTC
            Тип Тип журнала.Всегда AzureDiagnostics
            Идентификатор подписки GUID для подписки, которой принадлежит сервер
            ResourceGroup Имя группы ресурсов, к которой принадлежит сервер
            ResourceProvider Имя поставщика ресурсов. Всегда MICROSOFT.DBFORMYSQL
            ResourceType Серверы
            ResourceId URI ресурса
            Ресурс Имя сервера
            Категория MySqlSlowLogs
            Название операции LogEvent
            логические_имя_сервера Имя сервера
            start_time_t [UTC] Время начала запроса
            query_time_s Общее время в секундах, которое потребовалось для выполнения запроса
            lock_time_s Общее время в секундах, в течение которого запрос был заблокирован
            user_host_s Имя пользователя
            rows_sent_s Количество отправленных строк
            rows_examined_s Количество проверенных строк
            last_insert_id_s last_insert_id
            insert_id_s ID вставки
            sql_text_s Полный запрос
            server_id_s ID сервера
            thread_id_s ID резьбы
            \ _ResourceId URI ресурса

            Примечание

            Для sql_text журнал будет усечен, если он превышает 2048 символов.

            Анализировать журналы в журналах Azure Monitor

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

            • Запросы продолжительностью более 10 секунд на определенном сервере

                AzureDiagnostics
              | где LogicalServerName_s == '<имя вашего сервера>'
              | где Category == 'MySqlSlowLogs'
              | проект TimeGenerated, LogicalServerName_s, event_class_s, start_time_t, query_time_d, sql_text_s
              | где query_time_d> 10
                
            • Список 5 самых длинных запросов на определенном сервере

                AzureDiagnostics
              | где LogicalServerName_s == '<имя вашего сервера>'
              | где Category == 'MySqlSlowLogs'
              | проект TimeGenerated, LogicalServerName_s, event_class_s, start_time_t, query_time_d, sql_text_s
              | заказать по query_time_d desc
              | взять 5
                
            • Суммируйте медленные запросы по минимальному, максимальному, среднему и стандартному отклонению времени запроса на конкретном сервере

                AzureDiagnostics
              | где LogicalServerName_s == '<имя вашего сервера>'
              | где Category == 'MySqlSlowLogs'
              | проект TimeGenerated, LogicalServerName_s, event_class_s, start_time_t, query_time_d, sql_text_s
              | суммировать count (), min (query_time_d), max (query_time_d), avg (query_time_d), stdev (query_time_d), процентиль (query_time_d, 95) по LogicalServerName_s
                
            • Построить график распределения медленных запросов на конкретном сервере

                AzureDiagnostics
              | где LogicalServerName_s == '<имя вашего сервера>'
              | где Category == 'MySqlSlowLogs'
              | проект TimeGenerated, LogicalServerName_s, event_class_s, start_time_t, query_time_d, sql_text_s
              | суммировать count () по LogicalServerName_s, bin (TimeGenerated, 5m)
              | визуализировать временную диаграмму
                
            .

            sql — Как узнать время последнего доступа (и / или записи) к базе данных MySQL?

            Переполнение стека
            1. Около
            2. Продукты
            3. Для команд
            1. Переполнение стека Общественные вопросы и ответы
            2. Переполнение стека для команд Где разработчики и технологи делятся частными знаниями с коллегами
            3. Вакансии Программирование и связанные с ним технические возможности карьерного роста
            4. Талант Нанимайте технических специалистов и создавайте свой бренд работодателя
            5. Реклама Обратитесь к разработчикам и технологам со всего мира
            6. О компании

            Загрузка…

            .
            Как создать mysql базу: MySQL Учебник: установка, создание БД и таблицы, вставка и выбор записей

            Как создать mysql базу: MySQL Учебник: установка, создание БД и таблицы, вставка и выбор записей

            MySQL: Создать Базу Данных — Командная Строка

            Из этой небольшой статьи вы узнаете, как создать базу данных в MySQL из командной строки в Linux.

            Я покажу основной синтаксис команды CREATE DATABASE в MySQL для создания простой базы данных с кодировкой по умолчанию.

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

            Дельный Совет: У вас есть бэкап? Он ОБЯЗАН у вас быть! Бэкапте базы данных MySQL из командной строки! Это действительно просто! Читать далее →

            Подключитесь к MySQL серверу из командной строки под пользователем root:

            $ mysql -u root -p

            Создать Базу Данных MySQL

            Используйте следующий синтаксис для создания базы данных в MySQL:

            mysql> CREATE DATABASE имя_базы;

            Создайте нового пользователя:

            mysql> GRANT ALL PRIVILEGES ON имя_базы.* TO имя_пользователя@localhost IDENTIFIED BY 'пароль_пользователя';
            С помощью последней команды мы дали пользователю имя_пользователя все права на только что созданную базу данных имя_базы и установили ему пароль пароль_пользователя.

            Указывая localhost после символа @ мы разрешаем пользователю подключаться к базе данных только с самого сервера на котором установлен MySQL.

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

            Дельный Совет: Узнайте, как легко получить список пользователей MySQL, посмотреть их пароли и привилегии из командной строки! Читать далее →

            Теперь под этим пользователем вы можете подключиться к MySQL серверу из командной строки:

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

            Чтобы показать все базы данных доступные для текущего пользователя, выполните:

            mysql> SHOW DATABASES;

            Чтобы открыть новосозданную базу данных в MySQL, выполните:

            mysql> USE имя_базы;

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

            $ mysql -u имя_пользователя -p -В имя_базы

            Чтобы явно указать IP-адрес или имя MySQL сервера, выполните:

            $ mysql -u имя_пользователя -p -h имя_хоста

            Создание базы данных MySQL | IT-блог о веб-технологиях, серверах, протоколах, базах данных, СУБД, SQL, компьютерных сетях, языках программирования и создание сайтов.

            Здравствуйте, уважаемые посетители блога ZametkiNaPolyah.ru. Продолжаем разговор о базах данных, сегодня будем разбираться с тем, как создать базу данных MySQL. Как вы уже знаете, минимальной информационной единицей любой реляционной базы данных является таблица – неделимое целое базы данных. Сегодня мы рассмотрим процесс создания базы данных. Для создания базы данных MySQL используется SQL запрос CREATE DATABASE, с его синтаксисом мы и ознакомимся в данной статье подробно.

            Помимо создания базы данных можно создавать таблицы и наполнять их, для этого есть два оператора: CREATE TABLE и INSERT. Для создания таблицы MySQL – CREATE TABLE. Для наполнения таблицы используется оператор INSERT. На самом деле, на этом можно было бы и закончить описание создания базы данных MySQL, поскольку на официальном  сайте есть подробная техническая документация по созданию таблиц и баз данных сервера MySQL, но есть несколько моментов, которые необходимо объяснить более подробно. О создании таблицы базы данных MySQL мы поговорим отдельно в одной из следующих публикаций.

            Как хранится база данных MySQL

            Содержание статьи:

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

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

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

            //
            //

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

            c:\ProgramData\MySQL\MySQL Server 5.6\data\

            c:\ProgramData\MySQL\MySQL Server 5.6\data\

            В этом каталоге находятся папки, имена которых полностью совпадают с именами баз данных MySQL, которые были отображены в консоли. Вывод: чтобы создать базу данных MySQL достаточно создать папку в каталоге data. Поэтому имена баз данных MySQL могут иметь ограничения. Максимальная длина имени базы данных MySQL не может превышать 64 символов. Для именования базы данных MySQL можно использовать все символы, разрешенные в операционной системе. MySQL сервер не разрешает использовать в именах баз данных следующие символы: слэш(/), точка, ASCII (0) и ASCII (255).

            Если создать папку в каталоге data, то база данных MySQL автоматически будет создана, попробуйте создать папку в этом каталоге, а затем выполнить запрос SHOW DATABASES. Рассматривать содержимое папок (баз данных MySQL) сейчас не имеет смысла, поскольку каждый движок MySQL будет хранить таблицы по-своему.

            Создание базы данных MySQL

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

            CREATE {DATABASE | SCHEMA} [IF NOT EXISTS] db_name [create_specification] … create_specification: [DEFAULT] CHARACTER SET [=] charset_name | [DEFAULT] COLLATE [=] collation_name

            CREATE {DATABASE | SCHEMA} [IF NOT EXISTS] db_name

             

            [create_specification] …

             

            create_specification:

             

            [DEFAULT] CHARACTER SET [=] charset_name

             

            | [DEFAULT] COLLATE [=] collation_name

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

            Все, база данных с именем test1 создана, повторное создание базы данных с таким же именем приведет к ошибке: ERROR 1007 (HY000) Can’t create database ‘test1’; database exists. По-русски: не могу создать базу данных с именем ‘test1’; база данных уже существует. Чтобы таких ошибок не возникало, создавайте базы данных MySQL с добавлением конструкции [IF NOT EXISTS] (если не существует), в этом случае ошибки не будет, но будет предупреждение:

            CREATE DATABASE IF NOT EXISTS test1;

            CREATE DATABASE IF NOT EXISTS test1;

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

            Создадим базу данных MySQL с именем test2, кодировкой utf8 и сравнением utf8_general_ci:

            CREATE DATABASE IF NOT EXISTS test2 CHARACTER SET = utf8 COLLATE utf8_general_ci;

            CREATE DATABASE IF NOT EXISTS test2

             

            CHARACTER SET = utf8

             

            COLLATE utf8_general_ci;

            На заметку. Если вы создаете сайт с использованием CMS (установка Drupal, установка Joomla, установка WordPress), то при ее установки потребуется вручную создать базу данных, конечно, база данных будет заполнена автоматически установочным скриптом, но ее нужно уметь создать. Здесь вы сможете ознакомиться с архитектурой базы данных WordPress сайта.

            Конструкция CHARACTE SET определяет кодировку созданной базы данных MySQL (в какой кодировки данные будут храниться). COLLATE определяет порядок сравнения данных в базе данных (с учетом регистра символов или нет и прочее). Думаю, с вопросом создания базы данных MySQL мы разобрались, давайте разберемся с кодировкой базы данных, этот вопрос актуален и для каждой таблицы в отдельности.

            Я уже говорил, что кодировку для таблицы можно задавать точно так же, как и для всей базы данных, если кодировка не задана явно, то она будет точно такой же, как и кодировка всей базы данных MySQL. Если вы указали кодировку базы данных, но не задали порядок сравнения, то он будет использован по умолчанию. Если задан порядок сравнения, то он определяет кодировку все сущности: либо таблицы, либо базы данных. Обратите внимание: порядок сортировки (COLLATE), должен быть допустимым для текущей кодировки (CHARACTER SET).

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

             

            Установка MySql и создание базы данных

            В прошлой статье мы узнали что такое базы данных и создали реляционную модель. Теперь настало время установить систему управления базами данных (СУБД), создать БД и таблицы.

            План на сегодня:

            Для примера будем использовать СУБД MySql — она бесплатна, хоть есть и платная версия. Для учебных целей ее функционала будет вполне достаточно. Пример установки и работы с данной СУБД будет таким же и для других систем. Поэтому, если у Вас уже есть определенные предпочтения — используйте то, что нравиться.

            Пошаговая установка MySql сервера

            Заходим в гугл и вводим mysql:

            Жмем на вторую ссылку, которая ведет на страницу загрузки MySql сервера. Здесь не теряемся и жмем на кнопку Community (скрин ниже):

            Далее жмем ссылку MySQL Community Server:

            Если все сделано согласно инструкциям, Вы должны увидеть страницу выбора операционной системы и кнопку Go to download page:

             

            Для тех, кто все это не нашел или ему было лень я сбрасываю ссылку: https://dev.mysql.com/downloads/mysql/

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

            Для начала нам подойдет mysql-installer-web-community:

            После запуска инсталятора Вам предложит выбрать тип установки:

            Для дальнейших целей использовать MySql в программировании с Java, выбирайте Developer Default.

            После установки сервера откроется окно его конфигурации. Нажимаем кнопку Next пока не увидим примерно такое окно:

            По умолчанию в MySql создается пользователь с именем root. В данном окне Вас просят задать для него пароль. Подберите такой пароль, который не забудете. По желанию, можно добавить еще пользователей. Нам пока достаточно одного. После того как ввели пароль нажимаем Next, а в конце нажмете Execute.

            Готово! Вы установили MySql сервер.

            Создание новой базы данных

            Теперь можно приступать к созданию БД. Для четкого понимания SQL и работы баз данных все действия будем выполнять через консоль MySql.

            Для этого идем в пуск и вводим mysql. Откройте Mysql Command Line Client.

            В открытой консоли Вам будет предложено ввести пароль. Вы же не забыли пароль, который указали при настройке сервера?

            Вводим пароль и жмем Enter.

            Чтобы увидеть список баз данных в MySql нужно ввести комманду: SHOW DATABASES; регистр не имеет значения. Если Вы еще ничего создавали — в списке будут только значения по умолчанию:

            Комманда для создания новой базы: CREATE DATABASE имя_базы_данных;.

            Когда мы программируем на языке Java, для названия переменных, методов и классов используется CamelCase (верблюжий стиль). Для программирования SQL принято использовать snake_case.

            Давайте попробуем создать нашу первую базу данных используя вышеупомянутою комманду. Проверить, создалась ли она мы сможем коммандой SHOW DATABASES;. Имя БД желательно подбирать осмысленное и которое близко к Вашей бизнес логике. То же самое касается и таблиц с полями. В первой статье мы взяли за пример магазин обуви. Продолжим развивать тему, чтобы у тех, кто полностью выучит раздел SQL было полное представление о базах данных: от проектирования до манипулирования данными.

            Назовем нашу БД shoes_shop:

            Вот и все! База данных создана. Теперь Вы готовы работать с таблицами и данными.

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

            Понравилась статья? Поделиться ссылкой:

            Как создать Базу Данных MySql через phpmyadmin

            Всем доброго времени суток! Сегодня я расскажу вам о том, как создать базу данных в phpmyadmin. И так, в первую очередь запускаем сервер и заходим в phpMyAdmin.Если у Вас сервер установлен на локальном компьютере, то в Danwer phpMyAdmin расположен по адресу http://localhost/tools/phpmyadmin/, а в WAMP и в других серверах, phpMyAdmin доступен по адресу http://localhost/phpmyadmin/

            На реальном хостинге, phpMyadmin доступен по другому адресу. По какому именно Вам нужно узнать у хостинга провайдера.

            Далее, для того чтобы создать базу данных (В дальнейшем я буду писать коротко БД ) в phpmyadmin нажимаем на Базы данных.

            В версии 5.5 это выглядит так:

            Далее в поле имя новой БД вводим название нашей БД, например test. В поле сравнение выбираем кодировку БД, utf8mb4_unicode_ci. Эту кодировку необходимо использовать если у Вас версия MySQL выше 5.5.3.

            Если мы не указываем кодировку, то есть оставляем как есть «сравнение» то это кодировка выбирается по умолчанию. После того как заполнили эти поля, нажимаем на кнопку создать.

            Посередине экрана появится сообщение, что База данных test была создана. Она появится в списке с созданными БД. Находим ее в этом списке, кликнем на ее название и попадаем внутри созданной БД. Изначально она пуста, поэтому давайте создадим таблицу.

            Есть два способа для создания таблиц:

            Первый способ: В левой колонке нажимаем на создать таблицу

            И появится такое окно:

            Задаем имя для таблицы и название для каждого поля. Например, мы хотим создать таблицу с категориями сайта. Поэтому задаем имя таблицы categories. Для этой таблицы нам понадобится только 2 поля, это id и название категорий (name) По правилам в любой таблицы, первое поле всегда имеет название id, то есть идентификатор. Для этого поля обязательно выбираем тип INT и задаем длину значения в цифрах, например 2. Индекс выбираем PRIMARY, таким образом, мы задаем ей первичный ключ и вставляем галочку у A_I (Auto Increment) для того чтобы ее значение автоматически увеличивалось на единичку.

            Для поля с названием категорий выбираем тип VARCHAR и задаем максимальную длину 255 символов.

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

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

            Вот и все, таблица с названием categories создана. Она появится в списке таблиц, в левой части экрана.

            Второй способ:

            Сразу как вошли в БД видим такой блок Создать таблицу. В этом блоке есть 2 поля, где мы можем вводить название таблицы и кол-во столбцов в таблице. Создадим, например таблицу с регистрированными пользователями, назовем эту таблицу users . В этой таблицы будут такие поля: id, login, password, e-mail, f_name, s_name, В поле количество столбцов вводим 6 и нажимаем ок.

            Появится то же самое окно, как и в первом способе.

            После того как заполняли все поля спускаемся чуть ниже и жмем на кнопку сохранить.

            Все таблица users создана. Она также добавилась в левом списке с созданными БД.

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

            Понравилась статья?

            Тогда поделитесь ею с друзьями и подпишитесь на новые интересные статьи.

            Поделиться с друзьями:

            Подписаться на новые статьи:

            Поддержите пожалуйста мой проект!

            Если у Вас есть какие-то вопросы или предложения, то можете писать их в комментариях или мне на почту [email protected]. И если Вы заметили какую-то ошибку в статье, то прошу Вас, сообщите мне об этом, и в ближайшее время я всё исправлю.

            Добавляйтесь ко мне в друзья в:

            Добавляйтесь в мои группы:

            Подпишитесь на мои каналы:

            Автор статьи: Мунтян Сергей

            Копирование материалов с сайта sozdatisite.ru ЗАПРЕЩЕНО!!!

            Дата добавления: 2014-06-21 04:42:03

            Создание базы данных MySQL и установка СУБД

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

            Зачем нужна база данных?

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

            Если вы только начинаете путь веб-разработчика и создаете простые одностраничные сайты, не пренебрегайте СУБД. Если приучить себя к подключению MySQL к каждому вашему проекту, то, впоследствии, не возникнет трудностей с освоением этого софта. Тем более, если вы сделаете скрипт авторизации, пусть даже и примитивный. Ну, а когда речь идет о том, чтобы сформировать небольшое обсуждение на странице, или даже чат, то база данных сможет сделать из студенческой поделки настоящий интерактивный портал, где каждому участнику будет присвоен идентификатор: в файле базы сохранится информация о каждом участнике беседы, чтобы сделать его неповторимым для других пользователей.

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

            JavaScript. Быстрый старт

            Изучите основы JavaScript на практическом примере по созданию веб-приложения

            Узнать подробнее

            К тому же, не стоит забывать о том, что база данных – это разгрузка сервера. Обернутая в СУБД информация не расходует ресурсы с тем энтузиазмом, который присущ обычным файлам. Несмотря на то, что такая big data немного «тяжелеет» в СУБД, она будет оперироваться внутри ее. Таким образом, сервер не получит высоких нагрузок. Не то чтобы мы защищали мощности серверов, но, таким образом, владелец заплатит гораздо меньшую сумму за хостинг.

            Не стоит забывать о важности подключения MySQL для безопасности сайта. Несмотря на то, что SQL-инъекция – один из самых известных способов взлома, современные СУБД умеют противостоять такому внедрению.

            Установка софта

            Теперь перейдём к первым вашим шагам к использованию MySQL. Перед тем, как создать базу данных, необходимо установить утилиты и настроить работу сервера. Во всех мануалах, которые вы читали до этого, работа с БД выглядела сложнее чем программирование на PHP. Сегодня мы расскажем, насколько простым может быть этот процесс, если пользоваться свежим программным обеспечением и делать все правильно.

            Windows и простой exe. Установщик

            Да, существуют способы установки MySQL, которые покажутся весьма сложными. Некоторые любители экзотики делают всю работу вручную, чтобы полностью контролировать процесс установки. Это неоправданно в 9/10 случаев, да и не нужно начинающему разработчику. Также, MySQL всегда поставляется вместе с «джентельменскими наборами», вроде Денвера, WAMP, XAMPP и прочих. Но, пакет программ не всегда нужен в полном объёме, а запущенное стороннее приложение может здорово нагружать работу системы.

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

            Для начала, необходимо:

            Скачать файл инсталлирования базы данных. Лучше всего сделать это при подключении к официальному сайту. Как только вы начинаете использование других ресурсов, вся ответственность за причиненный компьютеру вред ложится на ваши плечи. Но, MySQL Installer ни к чему качать с торрента (чего не скажешь о OpenServer, который просто невозможно «стянуть» с оригинального источника). Так как система MySQL теперь разрабатывается и поддерживается компанией Oracle, для использования СУБД необходимо иметь их учетную запись. Создайте её, это не заберет много времени!

            Кроме регистрации аккаунта, необходимо установить на свой компьютер свежий NET. Framework и Microsoft Visual C++ Redistributable for Visual Studio 2013. Это нужно для корректной работы программы. Не стоит проверять систему на их наличие: если какого-то из элементов не окажется на машине, инсталлятор самостоятельно уведомит о необходимости установки.

            Далее, начинается работа GUI-установщика, где все предельно понятно. Нужно лишь уточнить некоторые детали. К примеру, вы точно не захотите удалять ненужные утилиты после установки. Поэтому, рекомендуемым вариантом будет Developer Default, а не Custom, и уж точно не Full. Если конкретный функционал понадобится, вы всегда сможете его доустановить. Файлы MySQL распространяются свободно.

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

            Жмите этапы установки до конца, не внося никаких изменений. Исправляйте данные, только если вы осведомлены о значении каждой из опций. Это может привести к тому, что установленная СУБД будет некорректно выполнять свои задачи. В конце установки вас ждет запуск и выбор сервера для подключения. Если вы делали все по инструкции, в распоряжении у вас окажется локальный сервер. Войдите в него с помощью рут-пароля. Вот и все!

            JavaScript. Быстрый старт

            Изучите основы JavaScript на практическом примере по созданию веб-приложения

            Узнать подробнее

            Как создать базу данных MySQL на Amazon Web Services

            Сеть и безопасность

            • Virtual Private Cloud (VPC): выберите Default VPC (VPC по умолчанию). Дополнительную информацию о VPC см. в разделе Amazon RDS и Amazon Virtual Private Cloud (VPC).
            • Subnet Group (Группа подсетей): выберите группу подсетей default (По умолчанию). Дополнительную информацию о группах подсетей см. в разделе Работа с группами подсетей БД.
            • Public accessibility (Общий доступ): выберите Yes (Да). Инстансу базы данных будет присвоен IP-адрес, что позволит подключаться к базе данных непосредственно с пользовательского устройства.
            • Availability Zone (Зона доступности): выберите значение No Preference (Нет предпочтений). Для получения дополнительной информации см. раздел Регионы и зоны доступности.
            • VPC security groups (Группы безопасности VPC): выберите Create new VPC security group (Создать новую группу безопасности VPC). Будет создана группа безопасности, поддерживающая соединение между IP-адресом используемого устройства и созданной базой данных.

            Настройки базы данных

            • Database Name (Имя базы данных): введите имя базы данных, которое может содержать от 1 до 64 буквенно-цифровых символов. Если имя не указано, Amazon RDS не сможет автоматически создать базу данных на основе нового инстанса БД.
            • Port (Порт): сохраните значение по умолчанию – 3306.
            • Option group (Группа настроек): выберите значение по умолчанию default:mysql5.7. С помощью групп настроек в Amazon RDS активируются и настраиваются дополнительные возможности.  Дополнительную информацию см. в разделе Работа с группами настроек.
            • IAM DB authentication (Аутентификация IAM БД): выберите Disable (Отключить). С помощью этой настройки можно управлять данными для доступа к базе данных с использованием пользователей и групп AWS IAM.

            Шифрование

            Эта настройка недоступна на уровне бесплатного пользования. Дополнительную информацию см. в разделе Шифрование ресурсов Amazon RDS.

            Резервное копирование

            • Backup Retention Period (Срок хранения резервных копий): в этом поле можно выбрать количество дней, в течение которого сохраняются резервные данные. В данном случае выберите значение 1 day (1 день).
            • Backup Window (Окно резервного копирования): задайте значение по умолчанию – No Preference (Нет предпочтений).

            Мониторинг

            • Enhanced Monitoring (Расширенный мониторинг): выберите Disable enhanced monitoring (Отключить расширенный мониторинг), чтобы остаться на уровне бесплатного пользования. В случае активации расширенного мониторинга в режиме реального времени становятся доступны метрики для операционной системы (ОС), на которой работает инстанс БД. Дополнительную информацию см. в разделе Просмотр метрик инстанса БД.

            Performance Insights

            Для выполнения заданий этого учебного пособия выберите Disable Performance Insights (Отключить Performance Insights).

            Обслуживание

            • Auto minor version upgrade (Автоматическое промежуточное обновление версии): выберите Enable auto minor version upgrade (Включить автоматическое промежуточное обновление версии), чтобы получать автоматические обновления, как только они станут доступны.
            • Maintenance Window (Окно обслуживания): выберите No preference (Нет предпочтений).

            Защита от удаления

            Отключите параметр Enable deletion protection (Включить защиту от удаления) для выполнения заданий этого учебного пособия. Если этот параметр включен, базу данных невозможно удалить.

             

            Создаем Базу Данных в MySQL из командной строки.

            Сегодня рассмотрим, как создать базу данных в MySQL из командной строки в Linux.

            В качестве подопытного будем использовать Ubuntu Server 18.04 с установленным LNMP

            Я покажу основной синтаксис команды CREATE DATABASE в MySQL для создания простой базы данных с кодировкой по умолчанию.

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

            Подключитесь к MySQL серверу из командной строки под пользователем root:

            sudo mysql -u root -p

            Создать Базу Данных MySQL

            Используйте следующий синтаксис для создания базы данных в MySQL:

            mysql> CREATE DATABASE имя_базы;

            Создайте нового пользователя:

            mysql> GRANT ALL PRIVILEGES ON имя_базы.* TO имя_пользователя@localhost IDENTIFIED BY 'пароль_пользователя';

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

            Указывая localhost после символа @ мы разрешаем пользователю подключаться к базе данных только с самого сервера на котором установлен MySQL.

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

            Теперь под этим пользователем вы можете подключиться к MySQL серверу из командной строки:

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

            Чтобы показать все базы данных доступные для текущего пользователя, выполните:

            mysql> SHOW DATABASES;

            Чтобы открыть новосозданную базу данных в MySQL, выполните:

            mysql> USE имя_базы;

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

            sudo mysql -u имя_пользователя -p -В имя_базы

            Чтобы явно указать IP-адрес или имя MySQL сервера, выполните:

            sudo mysql -u имя_пользователя -p -h имя_хоста

            Если есть вопросы, то пишем в комментариях.

            Также можете помочь проекту, заранее всем СПАСИБО!!!
            .

            Если вы нашли ошибку, пожалуйста, выделите фрагмент текста и нажмите Ctrl+Enter.

            MySQL Create Database, Tables, Data Types

            • Home
            • Testing

                • Back
                • Agile Testing
                • BugZilla
                • Cucumber
                • Database Testing
                • Тестирование ETL
                • Назад
                • JUnit
                • LoadRunner
                • Ручное тестирование
                • Мобильное тестирование
                • Mantis
                • Почтальон
                • QTP
                • Назад
                • Центр качества (ALM3000)
                • Управление тестированием
                • TestLink
            • SAP

                • Назад
                • ABAP
                • APO
                • Начинающий
                • Basis
                • BODS
                • BI
                • BPC
                • CO
                • Назад
                • CRM
                • Crystal Reports
                • QM4000
                • QM4
                • Заработная плата
                • Назад
                • PI / PO
                • PP
                • SD
                • SAPUI5
                • Безопасность
                • Менеджер решений
                • Successfactors
                • Учебники SAP

                  • Apache
                  • AngularJS
                  • ASP.Net
                  • C
                  • C #
                  • C ++
                  • CodeIgniter
                  • СУБД
                  • JavaScript
                  • Назад
                  • Java
                  • JSP
                  • Kotlin
                  • Linux
                  • Linux
                  • Kotlin
                  • Linux
                  • js
                  • Perl
                  • Назад
                  • PHP
                  • PL / SQL
                  • PostgreSQL
                  • Python
                  • ReactJS
                  • Ruby & Rails
                  • Scala
                  • SQL
                  • 000
                  • SQL
                  • 000 0003 SQL 000 0003 SQL 000
                  • UML
                  • VB.Net
                  • VBScript
                  • Веб-службы
                  • WPF
              • Обязательно учите!

                  • Назад
                  • Бухгалтерский учет
                  • Алгоритмы
                  • Android
                  • Блокчейн
                  • Business Analyst
                  • Создание веб-сайта
                  • CCNA
                  • Облачные вычисления
                  • 00030003 COBOL
                      9000 Compiler
                        9000 Встроенные системы
                      • 00030002 9000 Compiler
                        • Ethical Hacking
                        • Учебные пособия по Excel
                        • Программирование на Go
                        • IoT
                        • ITIL
                        • Jenkins
                        • MIS
                        • Сети
                        • Операционная система
                        • 00030003
                        • Назад
                        • Управление проектами Обзоры
                        • Salesforce
                        • SEO
                        • Разработка программного обеспечения
                        • VB A
                    • Big Data

                        • Назад
                        • AWS
                        • BigData
                        • Cassandra
                        • Cognos
                        • Хранилище данных
                        • 0003
                        • HBOps
                        • 0003
                        • HBOps
                        • MicroStrategy
                    .

                    Создайте новую базу данных с MySQL Workbench

                    Переполнение стека
                    1. Около
                    2. Продукты
                    3. Для команд
                    1. Переполнение стека Общественные вопросы и ответы
                    2. Переполнение стека для команд Где разработчики и технологи делятся частными знаниями с коллегами
                    3. Вакансии Программирование и связанные с ним технические возможности карьерного роста
                    4. Талант Нанимайте технических специалистов и создавайте свой бренд работодателя
                    5. Реклама Обратитесь к разработчикам и технологам со всего мира
                    6. О компании

                    Загрузка…

                    1. Авторизоваться зарегистрироваться
                    2. текущее сообщество

                    .

                    Насколько легко создать базу данных MySQL?

                    Что такое база данных MySQL?

                    Сегодня современные веб-приложения, такие как Joomla, Moodle и 4images, динамичны. Они предназначены для хранения статей, сообщений, рассказов, изображений, фильмов и другого контента. Чтобы все данные были организованы и отображались быстрее, эти приложения используют базы данных MySQL. База данных MySQL состоит из таблиц, и каждая таблица MySQL хранит определенную информацию для приложения.Чтобы лучше понять, как база данных MySQL хранит данные вашего сайта, давайте взглянем на общую базу данных Joomla:

                    Как видите, Joomla хранит информацию базы данных разделенной во многих таблицах. Информация о пользователях (например, имена, учетные данные и пароли) хранится в таблице jos_users, а данные контента (статьи, новости, сообщения) — в jos_content. Часть «jos_» в имени таблицы базы данных называется префиксом и используется для определения приложения, которое использует эту таблицу.Например, ‘jos_’ является префиксом по умолчанию для всех таблиц, созданных Joomla, но если вы хотите разместить вторую установку Joomla и использовать ту же базу данных (не рекомендуется), вы можете изменить префикс (например) на ‘jo2_’ . Итак, ваш первый сайт Joomla будет использовать таблицы, которые начинаются с jos_, а вторая установка — те, которые начинаются с jo2_.

                    Как добавить новую базу данных с помощью PHPMyAdmin?

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

                    Есть несколько способов создать новую базу данных на сервере MySQL5. Два основных — через интерфейс phpMyAdmin и через командную строку SQL, оба требуют от пользователей некоторых базовых навыков администрирования MySQL.Чтобы создать новую базу данных с помощью инструмента PHPMyAdmin, сначала вам необходимо войти в систему, используя учетную запись пользователя ROOT вашего сервера MySQL или другую учетную запись с соответствующими привилегиями. После входа в систему вы увидите форму «Создать новую базу данных» на домашней странице PHPMyAdmin:

                    Пример формы раздела «Создать новую базу данных» в PHPMyAdmin

                    Введите новое имя базы данных в первое поле (my_db в нашем примере), а затем выберите кодировку из раскрывающегося списка.Когда будете готовы, нажмите кнопку «Создать», чтобы создать свою базу данных.

                    Как создать базу данных с помощью командной строки SQL?

                    Как мы видели выше, довольно легко создать базу данных с использованием графической пользовательской среды PHPMyAdmin, но иногда PHPMyAdmin недоступен или отсутствует на веб-сервере. В таких случаях полезно знать, как создать базу данных с помощью командной строки SQL. Чтобы войти в командную строку, вам необходимо войти на сервер MySQL как ROOT-пользователь или через учетную запись с достаточными привилегиями.Чтобы установить корневое соединение, запустите сеанс SSH с помощью приложения терминала / консоли, если вы используете Linux или MacOS, или используйте PuTTY (или другой клиент SSH) на ПК с Windows, затем введите следующую команду:

                    Пример запуска SSH-соединения с сервером MySQL

                    $ ssh databasehost

                    Затем вам необходимо войти в систему, используя свою учетную запись ROOT, используя следующую строку:

                    Как войти в систему как ROOT на сервере MySQL

                    $ mysql -u корень -p

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

                    Пример создания базы данных в MySQL

                    СОЗДАТЬ БАЗУ ДАННЫХ mydatabasename

                    Мы, в NTC Hosting, максимально упростили для вас процесс создания базы данных MySQL. Теперь вы можете создавать новые базы данных MySQL и управлять ими прямо из Панели управления вашего веб-хостинга, поставляемой с нашими пакетами. Нет необходимости иметь дело с интерфейсом phpMyAdmin или возиться с окном запроса SQL или программой приглашения оболочки.Мы обеспечиваем быстрый и удобный процесс настройки базы данных MySQL.

                    Пример создания базы данных в MySQL

                    СОЗДАТЬ БАЗУ ДАННЫХ mydb

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

                    Пример того, как ПРЕДОСТАВИТЬ привилегии пользователю для новой базы данных

                    РАЗРЕШИТЬ ИСПОЛЬЗОВАНИЕ НА mydb. * На db_user @ localhost ИДЕНТИФИЦИРОВАНО ‘db_passwd’;

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

                    Пример того, как ПРЕДОСТАВИТЬ ВСЕ привилегии пользователю

                    ПРЕДОСТАВИТЬ ВСЕ НА mydb. * Db_user @ localhost;

                    Теперь давайте попробуем установить соединение с нашей новой базой данных mydb, используя учетную запись db_user через командную строку SSH:

                    Как войти в определенную базу данных на сервере MySQL:

                    mysql -u db_user -p’db_passwd ‘mydb

                    Как создать базу данных с помощью панели управления хостинга NTC

                    Как видите, создать базу данных с помощью инструмента PHPMyAdmin проще, чем с помощью командной строки SSH и SQL.Чтобы сделать процесс еще проще, NTC Hosting предоставляет всем пользователям инструмент управления базой данных MySQL. Вот видеоурок о том, как создать базу данных с помощью нашей панели управления

                    .

                    Видеоурок по созданию базы данных

                    Короче говоря, чтобы быстро создать базу данных MySQL, просто войдите в панель управления и перейдите в раздел «Базы данных MySQL» в разделе «Управление сайтом». Там нам потребуются только две записи от вас — имя вашей новой базы данных и ее пароль.Просто заполните пустые поля и нажмите кнопку «Создать базу данных». Вот и все. Повторяйте те же простые шаги каждый раз, когда вам нужно добавить новую базу данных MySQL в вашу учетную запись веб-хостинга.

                    Ресурсов:

                    .Учебное пособие по

                    : проектирование сервера — портал Azure — База данных Azure для MySQL

                    • 7 минут на чтение

                    В этой статье

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

                    В этом руководстве вы используете портал Azure, чтобы узнать, как:

                    • Создание базы данных Azure для MySQL
                    • Настроить межсетевой экран сервера
                    • Используйте инструмент командной строки mysql для создания базы данных
                    • Загрузить данные образца
                    • Данные запроса
                    • Обновить данные
                    • Восстановить данные

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

                    Войдите на портал Azure

                    Откройте свой любимый веб-браузер и посетите портал Microsoft Azure.Введите свои учетные данные для входа на портал. Вид по умолчанию — это ваша служебная панель.

                    Создание базы данных Azure для сервера MySQL

                    База данных Azure для сервера MySQL создается с определенным набором вычислительных ресурсов и ресурсов хранения. Сервер создается в группе ресурсов Azure.

                    1. Выберите кнопку Создать ресурс (+) в верхнем левом углу портала.

                    2. Выберите базы данных > База данных Azure для MySQL .Если вы не можете найти сервер MySQL в категории Базы данных , щелкните Просмотреть все , чтобы отобразить все доступные службы баз данных. Вы также можете ввести База данных Azure для MySQL в поле поиска, чтобы быстро найти службу.

                    3. Щелкните плитку База данных Azure для MySQL . Заполните форму База данных Azure для MySQL.

                      Настройка Рекомендуемое значение Описание поля
                      Имя сервера Уникальное имя сервера Выберите уникальное имя, которое идентифицирует вашу базу данных Azure для сервера MySQL.Например, mydemoserver. Доменное имя .mysql.database.azure.com добавляется к указанному вами имени сервера. Имя сервера может содержать только строчные буквы, цифры и знак дефиса (-). Он должен содержать от 3 до 63 символов.
                      Подписка Ваша подписка Выберите подписку Azure, которую вы хотите использовать для своего сервера. Если у вас несколько подписок, выберите подписку, в которой вам будет выставлен счет за ресурс.
                      Группа ресурсов myresourcegroup Укажите новое или существующее имя группы ресурсов.
                      Выбрать источник Пустой Выберите Пустой , чтобы создать новый сервер с нуля. (Вы выбираете Backup , если вы создаете сервер из гео-резервной копии существующей базы данных Azure для сервера MySQL).
                      Вход администратора сервера myadmin Учетная запись для входа, используемая при подключении к серверу.Имя администратора для входа не может быть azure_superuser , admin , administrator , root , guest или public .
                      Пароль Ваш выбор Введите новый пароль для учетной записи администратора сервера. Он должен содержать от 8 до 128 символов. Ваш пароль должен содержать символы из трех из следующих категорий: английские прописные буквы, английские строчные буквы, цифры (0–9) и не буквенно-цифровые символы (!, $, #,% И т. Д.).
                      Подтвердите пароль Ваш выбор Подтвердите пароль учетной записи администратора.
                      Расположение Регион, ближайший к вашим пользователям Выберите расположение, наиболее близкое к вашим пользователям или другим вашим приложениям Azure.
                      Версия Последняя версия Последняя версия (если у вас нет особых требований, требующих другой версии).
                      Ценовой уровень Универсальный , Gen 5 , 2 виртуальных ядра , 5 ГБ , 7 дней , Географически избыточный Конфигурации вычислений, хранения и резервного копирования для вашего нового сервера. Выберите Ценовой уровень . Затем выберите вкладку General Purpose . Gen 5 , 2 виртуальных ядра , 5 ГБ и 7 дней являются значениями по умолчанию для Compute Generation , vCore , Storage и Срок хранения резервной копии .Вы можете оставить эти ползунки как есть. Чтобы включить резервное копирование сервера в геоизбыточном хранилище, выберите Geographically Redundant из Backup Redundancy Options . Чтобы сохранить этот выбор ценового уровня, выберите ОК . На следующем снимке экрана показаны эти выборы.

                      Подсказка

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

                    4. Щелкните Просмотр + создание . Вы можете нажать кнопку Notifications на панели инструментов, чтобы отслеживать процесс развертывания. Развертывание может занять до 20 минут.

                    Настроить межсетевой экран

                    Базы данных Azure для MySQL защищены брандмауэром. По умолчанию все подключения к серверу и базам данных внутри сервера отклоняются. Перед подключением к базе данных Azure для MySQL в первый раз настройте брандмауэр, чтобы добавить IP-адрес общедоступной сети клиентского компьютера (или диапазон IP-адресов).

                    1. Щелкните только что созданный сервер, а затем щелкните Безопасность подключения .

                    2. Вы можете Добавить мой IP или настроить правила брандмауэра здесь. Не забудьте нажать Сохранить после создания правил. Теперь вы можете подключиться к серверу с помощью инструмента командной строки mysql или инструмента GUI MySQL Workbench.

                    Подсказка

                    Сервер базы данных

                    Azure для MySQL обменивается данными через порт 3306. Если вы пытаетесь подключиться из корпоративной сети, исходящий трафик через порт 3306 может быть запрещен межсетевым экраном вашей сети.В этом случае вы не сможете подключиться к серверу Azure MySQL, если ваш ИТ-отдел не откроет порт 3306.

                    Получить информацию о подключении

                    Получите полное имя сервера и имя для входа администратора сервера для своей базы данных Azure для сервера MySQL на портале Azure. Вы используете полное имя сервера для подключения к вашему серверу с помощью инструмента командной строки mysql.

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

                    2. На странице обзора запишите Имя сервера и Имя входа администратора сервера . Вы можете нажать кнопку «Копировать» рядом с каждым полем, чтобы скопировать его в буфер обмена.

                    В этом примере имя сервера — mydemoserver.mysql.database.azure.com , а логин администратора сервера — myadmin @ mydemoserver .

                    Подключиться к серверу с помощью mysql

                    Используйте инструмент командной строки mysql

                    .
            Mysql distinct по нескольким полям: DISTINCT по нескольким полям???

            Mysql distinct по нескольким полям: DISTINCT по нескольким полям???

            DISTINCT по нескольким полям???

             
            Sirus   (2004-02-14 06:48) [0]

            Привет Мастера…

            Нужен SQL запрос типа
            select distinct(CODE), distinct(NAME), distinct(DATE) from TABLE1
            order by CODE, DATE

            Как можно сделать???

            select distinct(CODE||NAME||DATE) from TALBE1
            не устравивает…


             
            hursand   (2004-02-14 09:02) [1]

            select code,name,distinct(date) from table1
            group by code,name


             
            kaif   (2004-02-14 20:16) [2]

            Просто
            select distinct CODE, NAME, DATE from TABLE1
            order by CODE, DATE


             
            Johnmen   (2004-02-15 01:58) [3]

            Смотря, что нужно. Неповторяющаяся тройка полей см. kaif © (14.02.04 20:16) [2].
            Неповторяющееся каждое поле — надо подумать…:)


             
            kaif   (2004-02-15 13:50) [4]

            2 Johnmen © (15.02.04 01:58) [3]
            Я тоже об этом подумал после того, как написал. Я бы предложил наверно три select distinct с union, но нужно понять, что спрашивающий имеет в виду под order by code, date. Скорее всего, ему именно нужны уникальные комбинации всех трех полей. Иначе это упорядочивание теряет смысл.


             
            Sirus   (2004-02-15 18:04) [5]

            Нужны уникальные комбинации трех полей и сортировка по двоим из них…


             
            asp   (2004-02-16 09:38) [6]

            Посто:
            SELECT DISTINCT CODE, NAME, DATE
            FROM TABLE
            ORDER BY CODE, NAME

            Или я что-то не понимаю?


            Sql distinct по нескольким полям

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

            Синтаксис запросов SELECT DISTINCT в MySQL

            Базовый синтаксис запросов SELECT DISTINCT :

            • DISTINCT : это ключевое слово возвращает уникальные результаты;
            • Columns : позволяет выбрать столбцы, из которых будет осуществляться выборка. Это может быть один или несколько столбцов;
            • Source : одна или несколько таблиц, присутствующих в базе данных. Используйте ключевое слово JOIN , чтобы соединить несколько таблиц.

            Мы собираемся использовать данные, приведенные ниже, чтобы объяснить применение ключевого слова DISTINCT в MySQL на конкретном примере:

            DISTINCT-запрос к одному столбцу

            В этом примере мы отобразим уникальные записи из столбца education , используя SELECT DISTINCT MySQL . Но сначала выведем все значения из этого столбца:

            Теперь я использую ключевое слово DISTINCT :

            DISTINCT-запрос к нескольким столбцам

            Когда мы используем запрос MySQL DISTINCT по нескольким полям , SELECT вернёт комбинацию нескольких столбцов вместо уникальных отдельных записей. В этом примере мы выберем уникальные записи из столбцов education и profession :

            Несмотря на то, что мы использовали ключевое слово DISTINCT в выражении SELECT , из скриншота, приведенного выше видно, что запрос вернул дублирующие результаты внутри каждого столбца, потому что:

            • Bachelors и Developer — это уникальная комбинация;
            • Bachelors и Programming — это уникальная комбинация и т.д.

            Пример DISTINCT-запроса в MySQL – условие WHERE

            В этом MySQL DISTINCT примере мы покажем, как его использовать вместе с условием WHERE . Следующее выражение возвратит уникальные значения столбцов education и profession из таблицы customers , в которых годовой доход больше или равен 85000 :

            Несмотря на то, что существует 13 уникальных записей с комбинациями столбцов education и profession , 10 записей не соответствуют условию WHERE . Поэтому на скриншоте показано только 5 записей.

            Замечание : Выражение DISTINCT в MySQL воспринимает NULL как допустимое уникальное значение. Поэтому используйте любое NOT NULL условие или функцию, чтобы избавиться от этих значений.

            DISTINCT или GROUP BY в MySQL

            В MySQL DISTINCT наследует поведение от GROUP BY . Если вы используете выражение GROUP BY без агрегатной функции, то оно будет выполнять роль ключевого слова DISTINCT .

            Единственное отличие между ними заключается в следующем:

            • GROUP BY сначала сортирует данные, а затем осуществляет группировку;
            • Ключевое слово DISTINCT не выполняет сортировки.

            Если вы используете ключевое слово DISTINCT вместе с выражением ORDER BY , то получите тот же результат, что и при применении GROUP BY . Следующий запрос возвращает уникальные значения столбца profession из таблицы customerdetails :

            Уберём ключевое слово DISTINCT и используем выражение GROUP BY :

            Как видите, запрос возвращает тот же результат, но в другом порядке:

            В этом MySQL SELECT DISTINCT примере я использую выражение ORDER BY :

            Результат тот же, что и при использовании GROUP BY :

            Пример DISTINCT-запроса в MySQL – командная строка

            Теперь я покажу, как отобразить уникальные записи с помощью SELECT DISTINCT MySQL в командной строки. В этом случае мы выбираем записи с уникальными значениями столбцов education и profession из таблицы customerdetails :

            Данная публикация представляет собой перевод статьи « MySQL Distinct » , подготовленной дружной командой проекта Интернет-технологии.ру

            Помогите сформировать sql запрос

            — это работает, но выбирается только поле news, а мне надо id, news, reg, name, comment,date_add

            — этот не работает

            2 ответа 2

            DISTINCT — это уникальность по всем полям ( практически тоже самое что GROUP BY по всем полям )

            То что хотите, можно как-то так:

            Всё ещё ищете ответ? Посмотрите другие вопросы с метками select sql или задайте свой вопрос.

            Похожие

            Для подписки на ленту скопируйте и вставьте эту ссылку в вашу программу для чтения RSS.

            дизайн сайта / логотип © 2020 Stack Exchange Inc; пользовательское содержимое попадает под действие лицензии cc by-sa 4.0 с указанием ссылки на источник. rev 2020.1.17.35809

            В моей таблице, у меня есть Collection_Date и Tag_Date поле, оба типа date .

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

            Я попытался это:

            Тем не менее, это возвращает только строки с уникальным Collection_Date и Tag_Date .

            То , что я думаю , что я хочу, чтобы разделить его на два запрос, один SELECT DISTINCT Инга Collection_Date и один для Tag_Date . Тем не менее, я бы очень хотел , чтобы избежать нескольких запросов, если это возможно.

            Как я могу это сделать?

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

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

            Этот запрос возвращает все уникальные collection_date и tag_date. Если collection_date такого же, как tag_date они оба вернулись. Запрос также возвращает какой тип даты, когда она:

            Если вы хотите только один tag_date или collection_date, когда они имеют дату в общем, то вы можете использовать

            Mysql distinct по нескольким полям

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

            Синтаксис запросов SELECT DISTINCT в MySQL

            Базовый синтаксис запросов SELECT DISTINCT :

            • DISTINCT : это ключевое слово возвращает уникальные результаты;
            • Columns : позволяет выбрать столбцы, из которых будет осуществляться выборка. Это может быть один или несколько столбцов;
            • Source : одна или несколько таблиц, присутствующих в базе данных. Используйте ключевое слово JOIN , чтобы соединить несколько таблиц.

            Мы собираемся использовать данные, приведенные ниже, чтобы объяснить применение ключевого слова DISTINCT в MySQL на конкретном примере:

            DISTINCT-запрос к одному столбцу

            В этом примере мы отобразим уникальные записи из столбца education , используя SELECT DISTINCT MySQL . Но сначала выведем все значения из этого столбца:

            Теперь я использую ключевое слово DISTINCT :

            DISTINCT-запрос к нескольким столбцам

            Когда мы используем запрос MySQL DISTINCT по нескольким полям , SELECT вернёт комбинацию нескольких столбцов вместо уникальных отдельных записей. В этом примере мы выберем уникальные записи из столбцов education и profession :

            Несмотря на то, что мы использовали ключевое слово DISTINCT в выражении SELECT , из скриншота, приведенного выше видно, что запрос вернул дублирующие результаты внутри каждого столбца, потому что:

            • Bachelors и Developer — это уникальная комбинация;
            • Bachelors и Programming — это уникальная комбинация и т.д.

            Пример DISTINCT-запроса в MySQL – условие WHERE

            В этом MySQL DISTINCT примере мы покажем, как его использовать вместе с условием WHERE . Следующее выражение возвратит уникальные значения столбцов education и profession из таблицы customers , в которых годовой доход больше или равен 85000 :

            Несмотря на то, что существует 13 уникальных записей с комбинациями столбцов education и profession , 10 записей не соответствуют условию WHERE . Поэтому на скриншоте показано только 5 записей.

            Замечание : Выражение DISTINCT в MySQL воспринимает NULL как допустимое уникальное значение. Поэтому используйте любое NOT NULL условие или функцию, чтобы избавиться от этих значений.

            DISTINCT или GROUP BY в MySQL

            В MySQL DISTINCT наследует поведение от GROUP BY . Если вы используете выражение GROUP BY без агрегатной функции, то оно будет выполнять роль ключевого слова DISTINCT .

            Единственное отличие между ними заключается в следующем:

            • GROUP BY сначала сортирует данные, а затем осуществляет группировку;
            • Ключевое слово DISTINCT не выполняет сортировки.

            Если вы используете ключевое слово DISTINCT вместе с выражением ORDER BY , то получите тот же результат, что и при применении GROUP BY . Следующий запрос возвращает уникальные значения столбца profession из таблицы customerdetails :

            Уберём ключевое слово DISTINCT и используем выражение GROUP BY :

            Как видите, запрос возвращает тот же результат, но в другом порядке:

            В этом MySQL SELECT DISTINCT примере я использую выражение ORDER BY :

            Результат тот же, что и при использовании GROUP BY :

            Пример DISTINCT-запроса в MySQL – командная строка

            Теперь я покажу, как отобразить уникальные записи с помощью SELECT DISTINCT MySQL в командной строки. В этом случае мы выбираем записи с уникальными значениями столбцов education и profession из таблицы customerdetails :

            Данная публикация представляет собой перевод статьи « MySQL Distinct » , подготовленной дружной командой проекта Интернет-технологии.ру

            Помогите сформировать sql запрос

            — это работает, но выбирается только поле news, а мне надо id, news, reg, name, comment,date_add

            — этот не работает

            2 ответа 2

            DISTINCT — это уникальность по всем полям ( практически тоже самое что GROUP BY по всем полям )

            То что хотите, можно как-то так:

            Всё ещё ищете ответ? Посмотрите другие вопросы с метками select sql или задайте свой вопрос.

            Похожие

            Для подписки на ленту скопируйте и вставьте эту ссылку в вашу программу для чтения RSS.

            дизайн сайта / логотип © 2020 Stack Exchange Inc; пользовательское содержимое попадает под действие лицензии cc by-sa 4.0 с указанием ссылки на источник. rev 2020.1.14.35781

            В моей таблице, у меня есть Collection_Date и Tag_Date поле, оба типа date .

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

            Я попытался это:

            Тем не менее, это возвращает только строки с уникальным Collection_Date и Tag_Date .

            То , что я думаю , что я хочу, чтобы разделить его на два запрос, один SELECT DISTINCT Инга Collection_Date и один для Tag_Date . Тем не менее, я бы очень хотел , чтобы избежать нескольких запросов, если это возможно.

            Как я могу это сделать?

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

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

            Этот запрос возвращает все уникальные collection_date и tag_date. Если collection_date такого же, как tag_date они оба вернулись. Запрос также возвращает какой тип даты, когда она:

            Если вы хотите только один tag_date или collection_date, когда они имеют дату в общем, то вы можете использовать

            Sql distinct по нескольким полям

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

            Синтаксис запросов SELECT DISTINCT в MySQL

            Базовый синтаксис запросов SELECT DISTINCT :

            • DISTINCT : это ключевое слово возвращает уникальные результаты;
            • Columns : позволяет выбрать столбцы, из которых будет осуществляться выборка. Это может быть один или несколько столбцов;
            • Source : одна или несколько таблиц, присутствующих в базе данных. Используйте ключевое слово JOIN , чтобы соединить несколько таблиц.

            Мы собираемся использовать данные, приведенные ниже, чтобы объяснить применение ключевого слова DISTINCT в MySQL на конкретном примере:

            DISTINCT-запрос к одному столбцу

            В этом примере мы отобразим уникальные записи из столбца education , используя SELECT DISTINCT MySQL . Но сначала выведем все значения из этого столбца:

            Теперь я использую ключевое слово DISTINCT :

            DISTINCT-запрос к нескольким столбцам

            Когда мы используем запрос MySQL DISTINCT по нескольким полям , SELECT вернёт комбинацию нескольких столбцов вместо уникальных отдельных записей. В этом примере мы выберем уникальные записи из столбцов education и profession :

            Несмотря на то, что мы использовали ключевое слово DISTINCT в выражении SELECT , из скриншота, приведенного выше видно, что запрос вернул дублирующие результаты внутри каждого столбца, потому что:

            • Bachelors и Developer — это уникальная комбинация;
            • Bachelors и Programming — это уникальная комбинация и т.д.

            Пример DISTINCT-запроса в MySQL – условие WHERE

            В этом MySQL DISTINCT примере мы покажем, как его использовать вместе с условием WHERE . Следующее выражение возвратит уникальные значения столбцов education и profession из таблицы customers , в которых годовой доход больше или равен 85000 :

            Несмотря на то, что существует 13 уникальных записей с комбинациями столбцов education и profession , 10 записей не соответствуют условию WHERE . Поэтому на скриншоте показано только 5 записей.

            Замечание : Выражение DISTINCT в MySQL воспринимает NULL как допустимое уникальное значение. Поэтому используйте любое NOT NULL условие или функцию, чтобы избавиться от этих значений.

            DISTINCT или GROUP BY в MySQL

            В MySQL DISTINCT наследует поведение от GROUP BY . Если вы используете выражение GROUP BY без агрегатной функции, то оно будет выполнять роль ключевого слова DISTINCT .

            Единственное отличие между ними заключается в следующем:

            • GROUP BY сначала сортирует данные, а затем осуществляет группировку;
            • Ключевое слово DISTINCT не выполняет сортировки.

            Если вы используете ключевое слово DISTINCT вместе с выражением ORDER BY , то получите тот же результат, что и при применении GROUP BY . Следующий запрос возвращает уникальные значения столбца profession из таблицы customerdetails :

            Уберём ключевое слово DISTINCT и используем выражение GROUP BY :

            Как видите, запрос возвращает тот же результат, но в другом порядке:

            В этом MySQL SELECT DISTINCT примере я использую выражение ORDER BY :

            Результат тот же, что и при использовании GROUP BY :

            Пример DISTINCT-запроса в MySQL – командная строка

            Теперь я покажу, как отобразить уникальные записи с помощью SELECT DISTINCT MySQL в командной строки. В этом случае мы выбираем записи с уникальными значениями столбцов education и profession из таблицы customerdetails :

            Данная публикация представляет собой перевод статьи « MySQL Distinct » , подготовленной дружной командой проекта Интернет-технологии.ру

            Помогите сформировать sql запрос

            — это работает, но выбирается только поле news, а мне надо id, news, reg, name, comment,date_add

            — этот не работает

            2 ответа 2

            DISTINCT — это уникальность по всем полям ( практически тоже самое что GROUP BY по всем полям )

            То что хотите, можно как-то так:

            Всё ещё ищете ответ? Посмотрите другие вопросы с метками select sql или задайте свой вопрос.

            Похожие

            Для подписки на ленту скопируйте и вставьте эту ссылку в вашу программу для чтения RSS.

            дизайн сайта / логотип © 2020 Stack Exchange Inc; пользовательское содержимое попадает под действие лицензии cc by-sa 4.0 с указанием ссылки на источник. rev 2020.1.17.35809

            В моей таблице, у меня есть Collection_Date и Tag_Date поле, оба типа date .

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

            Я попытался это:

            Тем не менее, это возвращает только строки с уникальным Collection_Date и Tag_Date .

            То , что я думаю , что я хочу, чтобы разделить его на два запрос, один SELECT DISTINCT Инга Collection_Date и один для Tag_Date . Тем не менее, я бы очень хотел , чтобы избежать нескольких запросов, если это возможно.

            Как я могу это сделать?

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

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

            Этот запрос возвращает все уникальные collection_date и tag_date. Если collection_date такого же, как tag_date они оба вернулись. Запрос также возвращает какой тип даты, когда она:

            Если вы хотите только один tag_date или collection_date, когда они имеют дату в общем, то вы можете использовать

            Mysql distinct по одному полю

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

            Синтаксис запросов SELECT DISTINCT в MySQL

            Базовый синтаксис запросов SELECT DISTINCT :

            • DISTINCT : это ключевое слово возвращает уникальные результаты;
            • Columns : позволяет выбрать столбцы, из которых будет осуществляться выборка. Это может быть один или несколько столбцов;
            • Source : одна или несколько таблиц, присутствующих в базе данных. Используйте ключевое слово JOIN , чтобы соединить несколько таблиц.

            Мы собираемся использовать данные, приведенные ниже, чтобы объяснить применение ключевого слова DISTINCT в MySQL на конкретном примере:

            DISTINCT-запрос к одному столбцу

            В этом примере мы отобразим уникальные записи из столбца education , используя SELECT DISTINCT MySQL . Но сначала выведем все значения из этого столбца:

            Теперь я использую ключевое слово DISTINCT :

            DISTINCT-запрос к нескольким столбцам

            Когда мы используем запрос MySQL DISTINCT по нескольким полям , SELECT вернёт комбинацию нескольких столбцов вместо уникальных отдельных записей. В этом примере мы выберем уникальные записи из столбцов education и profession :

            Несмотря на то, что мы использовали ключевое слово DISTINCT в выражении SELECT , из скриншота, приведенного выше видно, что запрос вернул дублирующие результаты внутри каждого столбца, потому что:

            • Bachelors и Developer — это уникальная комбинация;
            • Bachelors и Programming — это уникальная комбинация и т.д.

            Пример DISTINCT-запроса в MySQL – условие WHERE

            В этом MySQL DISTINCT примере мы покажем, как его использовать вместе с условием WHERE . Следующее выражение возвратит уникальные значения столбцов education и profession из таблицы customers , в которых годовой доход больше или равен 85000 :

            Несмотря на то, что существует 13 уникальных записей с комбинациями столбцов education и profession , 10 записей не соответствуют условию WHERE . Поэтому на скриншоте показано только 5 записей.

            Замечание : Выражение DISTINCT в MySQL воспринимает NULL как допустимое уникальное значение. Поэтому используйте любое NOT NULL условие или функцию, чтобы избавиться от этих значений.

            DISTINCT или GROUP BY в MySQL

            В MySQL DISTINCT наследует поведение от GROUP BY . Если вы используете выражение GROUP BY без агрегатной функции, то оно будет выполнять роль ключевого слова DISTINCT .

            Единственное отличие между ними заключается в следующем:

            • GROUP BY сначала сортирует данные, а затем осуществляет группировку;
            • Ключевое слово DISTINCT не выполняет сортировки.

            Если вы используете ключевое слово DISTINCT вместе с выражением ORDER BY , то получите тот же результат, что и при применении GROUP BY . Следующий запрос возвращает уникальные значения столбца profession из таблицы customerdetails :

            Уберём ключевое слово DISTINCT и используем выражение GROUP BY :

            Как видите, запрос возвращает тот же результат, но в другом порядке:

            В этом MySQL SELECT DISTINCT примере я использую выражение ORDER BY :

            Результат тот же, что и при использовании GROUP BY :

            Пример DISTINCT-запроса в MySQL – командная строка

            Теперь я покажу, как отобразить уникальные записи с помощью SELECT DISTINCT MySQL в командной строки. В этом случае мы выбираем записи с уникальными значениями столбцов education и profession из таблицы customerdetails :

            Данная публикация представляет собой перевод статьи « MySQL Distinct » , подготовленной дружной командой проекта Интернет-технологии.ру

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

            В настоящее время есть это:

            Который сводит мои результаты с 9208 до 7848, так что работает нормально.

            У меня есть 3 или 4 таблицы с примерно 10000 строками в каждой, и мы сейчас собираемся создать одну таблицу «клиентов». Я делаю скрипт для «импорта» всех этих строк в таблицу клиентов.

            Строки, которые мне нужны, например, «имя пользователя», «номер», «название» и т. д.

            Они не должны быть уникальными, просто электронная почта.

            Но это вернуло больше строк, чем раньше, как мне это сделать?

            Базы данных

            В этом учебном пособии вы узнаете, как использовать MySQL оператор DISTINCT с синтаксисом и примерами.

            Описание

            MySQL оператор DISTINCT используется для удаления дубликатов из набора результатов. Оператор DISTINCT может использоваться только с операторами SELECT.

            Синтаксис

            Синтаксис оператор DISTINCT в MySQL:

            Параметры или аргументы

            expressions — столбцы или вычисления, которые вы хотите получить.
            tables — таблицы, из которых вы хотите получить записи. Должна быть хотя бы одна таблица, перечисленная в операторе FROM.
            WHERE conditions — необязательный. Условия, которые должны быть выполнены для выбранных записей.

            Примечание

            • Когда в DISTINCT предусмотрено только одно expressions , запрос возвращает уникальные значения для этого expressions .
            • Если в DISTINCT представлено более одного expressions , запрос будет получать уникальные комбинации для указанных expressions .
            • В MySQL оператор DISTINCT не игнорирует значения NULL. Поэтому при использовании DISTINCT в вашем SQL-предложении ваш результирующий набор будет включать NULL в качестве отдельного значения.

            Пример с одним столбцом

            Рассмотрим простейший пример MySQL оператора DISTINCT. Мы можем использовать MySQL DISTINCT, чтобы вернуть один столбец, который удаляет дубликаты из набора результатов.

            php — MySql Distinct с несколькими полями

            Переполнение стека
            1. Около
            2. Продукты
            3. Для команд
            1. Переполнение стека Общественные вопросы и ответы
            2. Переполнение стека для команд Где разработчики и технологи делятся частными знаниями с коллегами
            3. Вакансии Программирование и связанные с ним технические возможности карьерного роста
            4. Талант Нанимайте технических специалистов и создавайте свой бренд работодателя
            5. Реклама Обратитесь к разработчикам и технологам со всего мира
            6. О компании

            Загрузка…

            .

            sql — Рассчитывать на DISTINCT нескольких полей работают только на MySQL?

            Переполнение стека
            1. Около
            2. Продукты
            3. Для команд
            1. Переполнение стека Общественные вопросы и ответы
            2. Переполнение стека для команд Где разработчики и технологи делятся частными знаниями с коллегами
            3. Вакансии Программирование и связанные с ним технические возможности карьерного роста
            4. Талант Нанимайте технических специалистов и создавайте свой бренд работодателя
            5. Реклама Обратитесь к разработчикам и технологам со всего мира
            6. О компании

            Загрузка…

              .

              sql — ВЫБЕРИТЕ DISTINCT для нескольких полей

              Переполнение стека
              1. Около
              2. Продукты
              3. Для команд
              1. Переполнение стека Общественные вопросы и ответы
              2. Переполнение стека для команд Где разработчики и технологи делятся частными знаниями с коллегами
              3. Вакансии Программирование и связанные с ним технические возможности карьерного роста
              4. Талант Нанимайте технических специалистов и создавайте свой бренд работодателя
              5. Реклама Обратитесь к разработчикам и технологам со всего мира
              6. О компании

              Загрузка…

              .

              Использование MySQL DISTINCT для исключения дубликатов

              Резюме : в этом руководстве вы узнаете, как использовать предложение MySQL DISTINCT в операторе SELECT для удаления повторяющихся строк в наборе результатов.

              Введение в MySQL DISTINCT clause

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

              Вот синтаксис предложения DISTINCT :

               

              SELECT DISTINCT select_list ОТ table_name;

              MySQL DISTINCT примеры

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

              Сначала запросите фамилии сотрудников из таблицы сотрудников , используя следующий оператор SELECT :

               

              SELECT фамилия ОТ сотрудники СОРТИРОВАТЬ ПО фамилия;

              Попробовать

              Как ясно видно из выходных данных, у некоторых сотрудников одинаковая фамилия e.г, Бондур, Фиррелли .

              Этот оператор использует предложение DISTINCT для выбора уникальных фамилий из таблицы сотрудников :

               

              SELECT ОТЛИЧИТЕЛЬНАЯ фамилия ОТ сотрудники СОРТИРОВАТЬ ПО фамилия;

              Попробовать


              Как видно из выходных данных, повторяющиеся фамилии были удалены из набора результатов.

              MySQL DISTINCT и NULL значения

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

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

              Когда вы используете предложение DISTINCT для запроса состояний клиентов, вы увидите уникальные состояния и NULL в виде следующего запроса:

               

              SELECT DISTINCT state ОТ клиентов;

              Попробовать

              MySQL DISTINCT с несколькими столбцами

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

              Например, чтобы получить уникальную комбинацию города и штата из таблицы клиентов , вы используете следующий запрос:

               

              SELECT DISTINCT город-государство ОТ клиенты ГДЕ состояние НЕ ПУСТО СОРТИРОВАТЬ ПО государство, город;

              Попробовать

              Без предложения DISTINCT вы получите повторяющуюся комбинацию штата и города следующим образом:

               

              SELECT город-государство ОТ клиенты ГДЕ состояние НЕ ПУСТО СОРТИРОВАТЬ ПО государство , город;

              Попробовать

              Предложение DISTINCT vs.Предложение GROUP BY

              Если вы используете предложение GROUP BY в операторе SELECT без использования агрегатных функций, предложение GROUP BY ведет себя так же, как предложение DISTINCT .

              Следующий оператор использует предложение GROUP BY для выбора уникальных состояний клиентов из таблицы customers .

               

              ВЫБРАТЬ государство ОТ клиенты GROUP BY состояние;

              Попробовать

              Вы можете добиться аналогичного результата, используя предложение DISTINCT :

               

              SELECT DISTINCT государство ОТ клиенты;

              Попробовать

              Вообще говоря, предложение DISTINCT является частным случаем предложения GROUP BY .Разница между предложением DISTINCT и предложением GROUP BY заключается в том, что предложение GROUP BY сортирует набор результатов, а предложение DISTINCT — нет.

              Обратите внимание, что MySQL 8.0 удалил неявную сортировку для предложения GROUP BY . Поэтому, если вы используете MySQL 8.0+, вы обнаружите, что набор результатов вышеуказанного запроса с предложением GROUP BY не отсортирован.

              Если вы добавите предложение ORDER BY к оператору, использующему предложение DISTINCT , набор результатов будет отсортирован и будет таким же, как тот, который возвращается оператором, использующим предложение GROUP BY .

               

              ВЫБРАТЬ ОТЛИЧИТЕЛЬНЫЙ государство ОТ клиенты СОРТИРОВАТЬ ПО государство;

              Попробовать

              MySQL DISTINCT и агрегатные функции

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

              Например, чтобы подсчитать уникальные состояния клиентов в США, вы используете следующий запрос:

               

              SELECT COUNT (DISTINCT state) ОТ клиенты ГДЕ country = 'США';

              Попробовать

              MySQL DISTINCT с предложением LIMIT

              Если вы используете предложение DISTINCT с предложением LIMIT , MySQL немедленно прекращает поиск, когда находит количество уникальных строк, указанное в пункт LIMIT .

              Следующий запрос выбирает первые пять непустых уникальных состояний в таблице customers .

               

              ВЫБРАТЬ ОТЛИЧИТЕЛЬНЫЙ государство ОТ клиенты ГДЕ состояние НЕ ПУСТО LIMIT 5;

              Попробовать

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

              • Было ли это руководство полезным?
              • Да Нет
              .
            Mysql запросы примеры: Примеры SQL запросов к базе данных MySQL

            Mysql запросы примеры: Примеры SQL запросов к базе данных MySQL

            Примеры сложных запросов для выборки данных в СУБД MySQL

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

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

            Сравнение данных за две даты

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

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

            Структура таблицы products

            
            CREATE TABLE IF NOT EXISTS `products` (
              `id` int(11) NOT NULL AUTO_INCREMENT,
              `ShopID` int(11) NOT NULL,
              `Name` varchar(150) NOT NULL,
              PRIMARY KEY (`id`)
            ) ENGINE=MyISAM  DEFAULT CHARSET=utf8 AUTO_INCREMENT=10 ;
            

            Структура таблицы statistics

            
            CREATE TABLE IF NOT EXISTS `statistics` (
              `id` int(11) NOT NULL AUTO_INCREMENT,
              `ProductID` bigint(20) NOT NULL,
              `Orders` int(11) NOT NULL,
              `Date` date NOT NULL DEFAULT '0000-00-00',
              PRIMARY KEY (`id`),
              KEY `ProductID` (`ProductID`)
            ) ENGINE=MyISAM  DEFAULT CHARSET=utf8 AUTO_INCREMENT=20 ;
            

            Дело в том, что стандарт языка SQL допускает использование вложенных запросов везде, где разрешается использование ссылок на таблицы. Здесь вместо явно указанных таблиц, благодаря использованию псевдонимов, будут применяться результирующие таблицы вложенных запросов с имеющейся связью один – к – одному. Результатом каждой результирующей таблицы будут данные о количестве произведенных заказов некоего товара за определенную дату, полученные путем выполнения запроса на выборку данных из таблицы statistics по требуемым критериям. Иными словами мы свяжем таблицу statistics саму с собой. Пример запроса:

            
            SELECT stat1.Name, stat1.Orders, stat1.Date, stat2.Orders, stat2.Date FROM 
            (SELECT statistics.ProductID, products.Name, statistics.Orders, statistics.Date 
            FROM products JOIN statistics ON products.id = statistics.ProductID WHERE 
            DATE(statistics.date) = '2014-09-04') AS stat1 JOIN (SELECT statistics.ProductID, 
            statistics.Orders, statistics.Date FROM statistics WHERE DATE(statistics.date) = 
            '2014-09-12') AS stat2 ON stat1.ProductID = stat2.ProductID
            

            В итоге имеем такой результат:

            
            +------------------------+----------+------------+----------+------------+
            | Name                   | Orders1  | Date1      | Orders2  | Date2      |
            +------------------------+----------+------------+----------+------------+
            | Процессоры Pentium II  |        1 | 2014-09-04 |        1 | 2014-09-12 |
            | Процессоры Pentium III |        1 | 2014-09-04 |       10 | 2014-09-12 |
            | Оптическая мышь Atech  |       10 | 2014-09-04 |        3 | 2014-09-12 |
            | DVD-R                  |        2 | 2014-09-04 |        5 | 2014-09-12 |
            | DVD-RW                 |       22 | 2014-09-04 |       18 | 2014-09-12 |
            | Клавиатура MS 101      |        5 | 2014-09-04 |        1 | 2014-09-12 |
            | SDRAM II               |       26 | 2014-09-04 |       12 | 2014-09-12 |
            | Flash RAM 8Gb          |        8 | 2014-09-04 |        7 | 2014-09-12 |
            | Flash RAM 4Gb          |       18 | 2014-09-04 |       30 | 2014-09-12 |
            +------------------------+----------+------------+----------+------------+
            

            Подстановка нескольких значений из другой таблицы

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

            Демонстрация данного запроса будет происходить на другом примере, а не на примере сетевой игры. Это чтобы не создавать заново все необходимые таблицы. В качестве данных возьмем таблицу products из примера “сравнение данных за две даты” и создадим еще одну недостающую таблицу replace_com, структура которой представлена ниже:

            
            CREATE TABLE IF NOT EXISTS `replace_com` (
              `id` int(11) NOT NULL AUTO_INCREMENT,
              `sProductID` int(11) NOT NULL,
              `rProductID` int(11) NOT NULL,
              `Date` date NOT NULL DEFAULT '0000-00-00',
              PRIMARY KEY (`id`),
              KEY `sProductID` (`sProductID`,`rProductID`)
            ) ENGINE=MyISAM  DEFAULT CHARSET=utf8 AUTO_INCREMENT=4 ;
            

            Предположим, что у нас есть некий компьютерный салон и мы проводим модификации некоторых компьютерных составляющих, а все операции по замене комплектующих заносим в базу данных. В таблице replace_com интересующими нас полями являются: sProductID и rProductID. Где sProductID – идентификатор заменяемого модуля, а rProductID – идентификатор заменяющего модуля. Запрос, реализующий вывод данных о совершенных операциях выглядит следующим образом:

            
            SELECT sProducts.Name AS sProduct, rProducts.Name AS rProduct, 
            replace_com.Date FROM replace_com JOIN products AS sProducts ON 
            sProducts.id = replace_com.sProductID JOIN products AS rProducts ON 
            rProducts.id = replace_com.rProductID
            

            Результирующая таблица данных:

            
            +-----------------------+------------------------+------------+
            | sProduct              | rProduct               | Date       |
            +-----------------------+------------------------+------------+
            | Процессоры Pentium II | Процессоры Pentium III | 2014-09-15 |
            | Flash RAM 4Gb         | Flash RAM 8Gb          | 2014-09-17 |
            | DVD-R                 | DVD-RW                 | 2014-09-18 |
            +-----------------------+------------------------+------------+
            

            Вывод статистики с накоплением по дате

            Предположим, что у нас имеется склад с некими товарами. Товары периодически поступают, и нам бы хотелось видеть в отчете остатки товаров по дням. Поскольку данные о наличии товаров необходимо накапливать, то мы введем пользовательскую переменную. Но есть одно небольшое “но”. Мы не можем использовать в запросе переменные пользователя и группировку данных одновременно (вернее можем, но в итоге получим, не то, что ожидаем), но мы можем использовать вложенный запрос, вместо явно указанной таблицы. Данные в таблице будут предварительно сгруппированы по дате. И уже затем на основе этих данных мы произведем расчет статистики с накоплением.

            На первом этапе требуется установить переменную и присвоить ей нулевое значение:

            
            SET @cvalue = 0
            

            В следующем запросе, мы созданную ранее переменную и применим:

            
            SELECT products.Name AS Name, (@cvalue := @cvalue + Orders) as Orders, 
            Date FROM (SELECT ProductID AS ProductID, SUM(Orders) AS Orders, 
            DATE(date) AS Date FROM statistics WHERE ProductID = '1' GROUP BY date) 
            AS statistics JOIN products ON statistics.ProductID = products.id
            

            Итоговый отчет:

            
            +-----------------------+--------+------------+
            | Name                  | Orders | Date       |
            +-----------------------+--------+------------+
            | Процессоры Pentium II |      1 | 2014-09-04 |
            | Процессоры Pentium II |      2 | 2014-09-12 |
            | Процессоры Pentium II |      4 | 2014-09-14 |
            | Процессоры Pentium II |      6 | 2014-09-15 |
            +-----------------------+--------+------------+
            

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

            Оптимизация запросов MySQL профилированием на примере

            Существует два подхода к профилированию запросов, соответствующие двум вопро­сам, упомянутым в этой статье. Можно профилировать весь сервер, основываясь на том, какие запросы в наибольшей степени его загружают. (Если вы начали с верхнего уровня, с профилирования на уровне приложений, то, возможно, уже знаете, какие запросы требуют внимания.) Затем, как только настроите конкретные запросы для оптимизации, можете углубиться в их профилирование по отдельности, определяя, какие подзадачи значительнее увеличивают их время отклика.

             

            Профилирование рабочей нагрузки сервера MySQL

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

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

             

            Фиксация запросов MySQL в журнал

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

            В MySQL 5.1 и более поздних версиях журнал медленных запросов расширен так, что переменную сервера long_query_time можно установить равной нулю, зафиксировав все запросы, а время отклика на запрос детализировано с дискретностью 1 микросекунда. Если вы используете Percona Server, этот функционал доступен уже в версии 5.0, кроме того, Percona Server дает намного больший контроль над со­держимым журнала и фиксацией запросов.

            В существующих версиях MySQL у журнала медленных запросов наименьшие из­держки и наибольшая точность измерения времени выполнения запроса. Если вас беспокоит дополнительный ввод/вывод, вызываемый этим журналом, то не тревожь­тесь. Мы провели эталонное тестирование и выяснили, что при нагрузках, связанных с вводом/выводом, издержки незначительны. (На самом деле это лучше видно в ходе работ, нагружающих процессор.) Более актуальной проблемой является заполнение диска. Убедитесь, что вы установили смену журнала для журнала медленных за­просов, если он включен постоянно. Либо оставьте его выключенным и включайте только на определенное время для получения образца рабочей нагрузки.

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

            Percona Server регистрирует в журнале медленных запросов значительно более по­дробную информацию, чем MySQL. Здесь отмечается полезная информация о плане выполнения запроса, блокировке, операциях ввода/вывода и многом другом. Эти до­полнительные биты данных добавлялись медленно, поскольку мы столкнулись с раз­личными сценариями оптимизации, которые требовали более подробных сведений о том, как запросы выполняются и где происходят затраты времени. Мы также упростили администрирование. Например, добавили возможность глобально кон­тролировать порог long_query_time для каждого соединения, поэтому вы можете заставить их запускать или останавливать журналирование своих запросов, когда приложение использует пул соединений или постоянные соединения, но не можете сбросить переменные уровня сеанса.

            В целом это легкий и полнофункциональный способ профилирования сервера и оп­тимизации его запросов.

            Допустим, вы не хотите регистрировать запросы на сервере или по какой-то причине не можете делать этого, например не имеете доступа к серверу. Мы сталкивались с такими ограничениями, поэтому разработали две альтернативные методики и до­бавили их в инструмент pt-query-digest пакета Percona Toolkit. Первая методика подразумевает постоянное отслеживание состояния с помощью команды SHOW FULL PROCESSLIST с параметром —processlist. При этом отмечается, когда запросы появ­ляются и исчезают. В некоторых случаях этот метод довольно точен, но он не может зафиксировать все запросы. Очень короткие запросы могут проскочить и завершить­ся, прежде чем инструмент их заметит.

            Второй метод состоит в фиксировании сетевого трафика TCP и его проверки, а затем декодирования протокола «клиент/сервер MySQL» (MySQL client/server protocol). Вы можете использовать утилиту tcpdump для записи трафика на диск, а затем — pt-query-digest с параметром --type=tpcdump для декодирования и анализа запросов. Это гораздо более точная методика, которая зафиксирует все запросы. Методика работает даже с расширенными протоколами, такими как бинарный про­токол, используемый для создания и выполнения подготовленных операторов на стороне сервера, и сжатый протокол. Можно также использовать MySQL Proxy со скриптом журналирования, но в практике это нам редко встречалось.

             

            Анализ журнала запросов

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

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

            Для создания профиля из журнала медленных запросов требуется хороший инстру­мент анализа журналов. Мы предлагаем утилиту pt-query-digest, которая, возможно, является самым мощным инструментом анализа журнала запросов MySQL. Она под­держивает множество различных функций, включая возможность сохранять отчеты о запросах в базе данных и отслеживать изменения в рабочей нагрузке.

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

            Приведем краткий обзор отчета pt-query-digest, начиная с профиля. Ниже представ­лена полная версия профиля, который мы показали ранее в этой статье:

            # Profile
            # Rank Query ID           Response time    Calls R/Call V/M   Item
            # ==== ================== ================ ===== ====== ===== =======
            #    1 0xBFCF8E3F293F6466 11256.3618 68.1% 78069 0.1442  0.21 SELECT InvitesNew?
            #    2 0x620B8CAB2B1C76EC  2029.4730 12.3% 14415 0.1408  0.21 SELECT StatusUpdate?
            #    3 0xB90978440CC11CC7  1345.3445  8.1%  3520 0.3822  0.00 SHOW STATUS
            #    4 0xCB73D6B5B031B4CF  1341.6432  8.1%  3509 0.3823  0.00 SHOW STATUS
            # MISC 0xMISC               560.7556  3.4% 23930 0.0234   0.0 <17 ITEMS>

            Здесь показано чуть больше деталей, чем раньше. Во-первых, каждый запрос имеет идентификатор, который является хеш-подписью его цифрового отпечатка. Цифровой отпечаток — это нормализованная каноническая версия запроса с уда­ленными литералами и пробелами, переведенная в нижний регистр (обратите внимание, что запросы 3 и 4 кажутся одинаковыми, но у них разные отпечатки). Инструмент также объединяет таблицы с похожими именами в каноническую форму. Вопросительный знак в конце имени таблицы invitesNew означает, что к имени таблицы был добавлен идентификатор сегмента данных (шарда), а инструмент уда­лил его, так что запросы к таблицам, сделанные с похожими целями, объединены вместе. Этот отчет взят из сильно шардированного приложения Facebook.

            Еще один появившийся здесь столбец — отношение рассеяния к среднему значе­нию V/M. Этот показатель называется индексом рассеяния. У запросов с более высо­ким индексом рассеяния сильнее колеблется время выполнения, и они, как правило, являются хорошими кандидатами на оптимизацию. Если вы укажете параметр --explain в утилите pt-query-digest, то к таблице будет добавлен столбец с кратким описанием плана запроса EXPLAIN — своего рода неформальный код запроса. Это в со­четании со столбцом V/M позволяет быстро определить, какие запросы являются плохими и потенциально легко оптимизируемыми.

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

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

            # Query 1: 24.28 QPS, 3.50x concurrency, ID 0xBFCF8E3F293F6466 at byte 5590079
            # This item is included in the report because it matches --limit.
            # Scores: V/M = 0.21
            # Query_time sparkline: | _^_.^_ |
            # Time range: 2008-09-13 21:51:55 to 22:45:30
            # Attribute    pct   total     min     max     avg     95%  stddev  median
            # ============ === ======= ======= ======= ======= ======= ======= =======
            # Count         63   78069
            # Exec time     68  11256s    37us      1s   144ms   501ms   175ms    68ms
            # Lock time     85    134s       0   650ms     2ms   176us    20ms    57us
            # Rows sent      8  70.18k       0       1    0.92    0.99    0.27    0.99
            # Rows examine   8  70.84k       0       3    0.93    0.99    0.28    0.99
            # Query size    84  10.43M     135     141  140.13  136.99    0.10  136.99
            # String:
            # Databases    production
            # Hosts
            # Users        fbappuser
            # Query_time distribution
            #   1us
            #  10us  #
            # 100us  ####################################################
            #   1ms  ###
            #  10ms  ################
            # 100ms  ################################################################
            #    1s  #
            #  10s+
            # Tables
            #    SHOW TABLE STATUS FROM `production ` LIKE'InvitesNew82'\G
            #    SHOW CREATE TABLE `production `.`InvitesNew82'\G
            # EXPLAIN /*!50100 PARTITIONS*/
            SELECT InviteId, InviterIdentifier FROM InvitesNew82 WHERE (InviteSetId = 87041469)
            AND (InviteeIdentifier = 1138714082) LIMIT 1\G

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

            Затем представлена гистограмма времени отклика. Любопытно, что, как вы види­те под строкой Query_time distribution, у гистограммы этого запроса два пика. Обычно запрос выполняется за сотни миллисекунд, но есть также значительный всплеск числа запросов, которые были выполнены на три порядка быстрее. Если бы этот журнал был создан в пакете Percona Server, в журнале запросов был бы более богатый набор параметров. Как следствие, мы могли бы проанализировать запро­сы вдоль и поперек, чтобы понять, почему это происходит. Возможно, это были запросы к определенным значениям, которые непропорционально распределены, поэтому использовался другой индекс, или, возможно, это хиты запросов кэша. В реальных системах гистограмма с двумя пиками не редкость, особенно в случае простых запросов, которые часто имеют лишь несколько альтернативных путей выполнения.

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

            После выбора запросов, которые вы хотите оптимизировать, можете использовать этот отчет, чтобы быстро проверить выполнение запроса. Мы постоянно пользуемся этим инструментом, и потратили много времени на то, чтобы сделать его максимально эффективным и полезным. Настоятельно рекомендуем подружиться с ним. Возможно, в скором времени MySQL будет лучше оснащена встроенными инструментами профи­лирования, но на момент написания этой статьи нет инструментов лучше, чем журналиро­вание запросов с помощью журнала медленных запросов или использование tcpdump и запуск полученного журнала с помощью утилиты pt-query-digest.

             

            Профилирование отдельных запросов

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

            К сожалению, большинство инструментов в MySQL не очень полезны для профили­рования запросов. Ситуация меняется, но на момент написания этого блога большинство производственных серверов не поддерживают новейших функций профилирования. Поэтому при их использовании в практических целях мы сильно ограничены командами SHOW STATUS, SHOW PROFILE и изучением отдельных записей в журнале медленных запро­сов (если у вас есть Percona Server — в стандартной системе MySQL в журнале нет до­полнительной информации). Мы продемонстрируем все три метода на примере одного и того же запроса и покажем, что вы можете узнать о его выполнении в каждом случае.

             

            Команда SHOW PROFILE

            Команда SHOW PROFILE появилась благодаря Джереми Коулу (Jeremy Cole). Она включена в MySQL 5.1 и более поздние версии. Это единственный реальный инструмент профилирования запросов, доступный в GA-релизе MySQL на момент на­писания блога. Профилирование по умолчанию отключено, но его можно включить во время сеанса, установив значение переменной сервера:

            mysql> SET profiling = 1;

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

            Каждый раз, когда вы отправляете запрос на сервер, он записывает информацию профилирования во временную таблицу и присваивает выражению целочисленный идентификатор, начиная с 1. Приведем пример профилирования представления, включенного в базу данных Sakila:

            mysql> SELECT * FROM sakila.nicer_but_slower_film_list;
            [query results omitted]
            997 rows in set (0.17 sec)

            Запрос возвратил 997 строк примерно через 1/6 секунды. Посмотрим, что выдаст команда SHOW PROFILES (обратите внимание на множественное число):

            mysql> SHOW PROFILES;
            +----------+------------+-------------------------------------------------+
            | Query_ID | Duration   | Query                                           |
            +----------+------------+-------------------------------------------------+
            |        1 | 0.16767900 | SELECT * FROM sakila.nicer_but_slower_film_list |
            +----------+------------+-------------------------------------------------+

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

            MySQL, часто недостаточно, когда вы работаете с быстрыми запросами. Теперь по­смотрим на профиль для этого запроса:

            mysql> SHOW PROFILE FOR QUERY 1;
            +----------------------+----------+
            | Status               | Duration |
            +----------------------+----------+
            | starting             | 0.000082 |
            | Opening tables       | 0.000459 |
            | System lock          | 0.000010 |
            | Table lock           | 0.000020 |
            | checking permissions | 0.000005 |
            | checking permissions | 0.000004 |
            | checking permissions | 0.000003 |
            | checking permissions | 0.000004 |
            | checking permissions | 0.000560 |
            | optimizing           | 0.000054 |
            | statistics           | 0.000174 |
            | preparing            | 0.000059 |
            | Creating tmp table   | 0.000463 |
            | executing            | 0.000006 |
            | Copying to tmp table | 0.090623 |
            | Sorting result       | 0.011555 |
            | Sending data         | 0.045931 |
            | removing tmp table   | 0.004782 |
            | Sending data         | 0.000011 |
            | init                 | 0.000022 |
            | optimizing           | 0.000005 |
            | statistics           | 0.000013 |
            | preparing            | 0.000008 |
            | executing            | 0.000004 |
            | Sending data         | 0.010832 |
            | end                  | 0.000008 |
            | query end            | 0.000003 |
            | freeing items        | 0.000017 |
            | removing tmp table   | 0.000010 |
            | freeing items        | 0.000042 |
            | removing tmp table   | 0.001098 |
            | closing tables       | 0.000013 |
            | logging slow query   | 0.000003 |
            | logging slow query   | 0.000789 |
            | cleaning up          | 0.000007 |
            +----------------------+----------+

            Профиль позволяет следить за каждым шагом выполнения запроса и видеть, сколько прошло времени. Обратите внимание, что не очень легко просмотреть выведенный результат и найти, где затраты времени были максимальными: он сортируется в хро­нологическом порядке. Однако нас интересует не порядок, в котором выполнялись операции, — мы просто хотим знать, каковы были затраты времени на них. К сожа­лению, отсортировать вывод с помощью ORDER BY нельзя. Давайте перейдем к исполь­зованию команды SHOW PROFILE для запроса связанной таблицы INFORMATION_SCHEMA и формата, который выглядит как просмотренные нами ранее профили:

            Так намного лучше! Теперь мы видим, что причина, по которой этот запрос так долго выполнялся, заключалась в копировании данных во временную таблицу, на что затрачено более половины общего времени. Возможно, придется переписать этот запрос так, чтобы он не использовал временную таблицу или хотя бы делал это более эффективно. Следующий крупный потребитель времени, отправка данных, фактически является своеобразной кладовкой, которая может включать в себя любое количество различных действий сервера, в том числе поиск совпадающих строк в соединении и т. д. Трудно сказать, сможем ли мы здесь что-то сэкономить. Обратите внимание на то, что результат сортировки занимает недостаточно много времени, чтобы его можно было оптимизировать. Это довольно типично, поэтому призываем вас не тратить время на «настройку буферов сортировки» и подобные мероприятия.

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

             

            Команда SHOW STATUS

            Команда SHOW STATUS MySQL возвращает множество счетчиков. Существует гло­бальная область действия сервера для счетчиков, а также область сеанса, которая специфична для конкретного соединения. Например, счетчик Queries в начале вашего сеанса равен нулю и увеличивается каждый раз, когда вы делаете запрос. Выполнив команду SHOW GLOBAL STATUS (обратите внимание на добавление ключевого слова GLOBAL), вы увидите общее количество запросов, полученных с момента его запуска. Области видимости разных счетчиков различаются — счетчики, которые не имеют области видимости на уровне сеанса, отображаются в SHOW STATUS, маски­руясь под счетчики сеансов, и это может ввести в заблуждение. Учитывайте это при использовании данной команды. Как говорилось ранее, подбор должным образом откалиброванных инструментов является ключевым фактором успеха. Если вы пытаетесь оптимизировать что-то, что можете наблюдать только в конкретном со­единении с сервером, измерения, которые «засоряются» всей активностью сервера, вам не помогут. В руководстве по MySQL есть отличное описание всех переменных, имеющих как глобальную, так и сеансовую область видимости.

            SHOW STATUS может быть полезным инструментом, но на самом деле его применение — это не профилирование. Большинство результатов команды SHOW STATUS — всего лишь счетчики. Они сообщают вам, как часто протекали те или иные виды деятель­ности, например чтение из индекса, но ничего не говорят о том, сколько времени на это было затрачено. В команде SHOW STATUS есть только один счетчик, который по­казывает время, израсходованное на операцию (Innodb_row_lock_time), но он имеет лишь глобальную область видимости, поэтому вы не можете использовать его для проверки работы, выполненной в ходе сеанса.

            Хотя команда SHOW STATUS не предоставляет информацию о затратах времени, тем не менее иногда может быть полезно использовать ее после выполнения запроса для просмотра значений некоторых счетчиков. Вы можете сделать предположение о том, какие типы затратных операций выполнялись и как они могли повлиять на время запроса. Наиболее важными счетчиками являются счетчики обработчи­ков запросов и счетчики временных файлов и таблиц. А сейчас приведем пример сброса счетчиков состояния сеанса до нуля, выбора из использованного нами ранее представления и просмотра счетчиков:

            mysql> SET @query_id = 1;
            Query OK, 0 rows affected (0.00 sec)
            
            mysql> SELECT STATE, SUM(DURATION) AS Total_R,
                ->    ROUND(
                ->       100 * SUM(DURATION) /
                ->          (SELECT SUM(DURATION)
                ->           FROM INFORMATION_SCHEMA.PROFILING
                ->           WHERE QUERY_ID = @query_id
                ->       ), 2) AS Pct_R,
                ->    COUNT(*) AS Calls,
                ->    SUM(DURATION) / COUNT(*) AS "R/Call"
                -> FROM INFORMATION_SCHEMA.PROFILING
                -> WHERE QUERY_ID = @query_id
                -> GROUP BY STATE
                -> ORDER BY Total_R DESC;
            +----------------------+----------+-------+-------+--------------+
            | STATE                | Total_R  | Pct_R | Calls | R/Call       |
            +----------------------+----------+-------+-------+--------------+
            | Copying to tmp table | 0.090623 | 54.05 |     1 | 0.0906230000 |
            | Sending data         | 0.056774 | 33.86 |     3 | 0.0189246667 |
            | Sorting result       | 0.011555 |  6.89 |     1 | 0.0115550000 |
            | removing tmp table   | 0.005890 |  3.51 |     3 | 0.0019633333 |
            | logging slow query   | 0.000792 |  0.47 |     2 | 0.0003960000 |
            | checking permissions | 0.000576 |  0.34 |     5 | 0.0001152000 |
            | Creating tmp table   | 0.000463 |  0.28 |     1 | 0.0004630000 |
            | Opening tables       | 0.000459 |  0.27 |     1 | 0.0004590000 |
            | statistics           | 0.000187 |  0.11 |     2 | 0.0000935000 |
            | starting             | 0.000082 |  0.05 |     1 | 0.0000820000 |
            | preparing            | 0.000067 |  0.04 |     2 | 0.0000335000 |
            | freeing items        | 0.000059 |  0.04 |     2 | 0.0000295000 |
            | optimizing           | 0.000059 |  0.04 |     2 | 0.0000295000 |
            | init                 | 0.000022 |  0.01 |     1 | 0.0000220000 |
            | Table lock           | 0.000020 |  0.01 |     1 | 0.0000200000 |
            | closing tables       | 0.000013 |  0.01 |     1 | 0.0000130000 |
            | System lock          | 0.000010 |  0.01 |     1 | 0.0000100000 |
            | executing            | 0.000010 |  0.01 |     2 | 0.0000050000 |
            | end                  | 0.000008 |  0.00 |     1 | 0.0000080000 |
            | cleaning up          | 0.000007 |  0.00 |     1 | 0.0000070000 |
            | query end            | 0.000003 |  0.00 |     1 | 0.0000030000 |
            +----------------------+----------+-------+-------+--------------+

            Похоже, что в запросе использовались три временные таблицы — две из них на дис­ке — и было много неиндексированных чтений (Handler_read_rnd_next). Если бы мы ничего не знали о представлении, к которому только что обращались, то могли бы предположить, что запрос сделал объединение без индекса, возможно, из-за подза­проса, который создал временные таблицы, а затем использовал их с правой стороны в соединении. Временные таблицы, созданные для хранения результатов подзапро­сов, не имеют индексов, поэтому эта версия кажется правдоподобной.

            Используя эту методику, имейте в виду, что команда SHOW STATUS создает временную таблицу и обращается к ней с помощью обработчика операций, поэтому на полу­ченные результаты в действительности влияет и SHOW STATUS. Это зависит от версий сервера. Используя информацию о выполнении запроса, полученную от команды SHOW PROFILES, мы можем предположить, что количество временных таблиц завы­шено на 2.

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

             

            Использование журнала медленных запросов

            Что расширенный в Percona Server журнал медленных запросов расскажет об этом запросе? Вот что было зафиксировано при выполнении запроса, продемонстриро­ванного в разделе о SHOW PROFILE:

            mysql> FLUSH STATUS;
            mysql> SELECT * FROM sakila.nicer_but_slower_film_list;
            [query results omitted]
            mysql> SHOW STATUS WHERE Variable_name LIKE 'Handler%'
                      OR Variable_name LIKE 'Created%';
            +----------------------------+-------+
            | Variable_name              | Value |
            +----------------------------+-------+
            | Created_tmp_disk_tables    | 2     |
            | Created_tmp_files          | 0     |
            | Created_tmp_tables         | 3     |
            | Handler_commit             | 1     |
            | Handler_delete             | 0     |
            | Handler_discover           | 0     |
            | Handler_prepare            | 0     |
            | Handler_read_first         | 1     |
            | Handler_read_key           | 7483  |
            | Handler_read_next          | 6462  |
            | Handler_read_prev          | 0     |
            | Handler_read_rnd           | 5462  |
            | Handler_read_rnd_next      | 6478  |
            | Handler_rollback           | 0     |
            | Handler_savepoint          | 0     |
            | Handler_savepoint_rollback | 0     |
            | Handler_update             | 0     |
            | Handler_write              | 6459  |
            +----------------------------+-------+

            Похоже, что запрос действительно создал три временные таблицы, которые были скрыты от представления в SHOW PROFILE (возможно, из-за особенностей способа вы­полнения запроса сервером). Две временные таблицы находились на диске. Здесь мы сократили выведенную информацию для улучшения удобочитаемости. В конце концов, данные, полученные при выполнении команды SHOW PROFILE по этому за­просу, записываются в журнал, поэтому вы можете журналировать в Percona Server даже такой уровень детализации.

            Согласитесь, эта весьма подробная запись в журнале медленных запросов содержит практически все, что вы можете видеть в SHOW PROFILE и SHOW STATUS, и еще кое-что. Это делает журнал очень полезным для поиска более подробной информации при нахождении плохого запроса с помощью утилиты pt-query-digest. Когда вы просмо­трите отчет от pt-query-digest, увидите такую строку заголовка:

            # Query 1: 0 QPS, 0x concurrency, ID 0xEE758C5E0D7EADEE at byte 3214 _____

            Вы можете использовать байтовое смещение для фокусировки на нужном разделе журнала следующим образом:

            tail -c +3214 /path/to/query.log | head -n100

            Вуаля! Можно рассмотреть все подробности. Кстати, pt-query-digest понимает все добавленные пары «имя — значение» формата медленного журнала запросов Percona Server и автоматически выводит намного более подробный отчет.

             

            Использование Performance Schema

            На момент написания этой статьи таблицы Performance Schema, представленные в MySQL 5.5, не поддерживают профилирование на уровне запросов. Performance Schema появилась не так давно. Однако она быстро развивается, приобретая до­полнительную функциональность в каждом следующем релизе. Но даже первона­чальная функциональность MySQL 5.5 позволяет получать любопытную инфор­мацию. Например, следующий запрос покажет основные причины ожидания в системе:

            mysql> SELECT event_name, count_star, sum_timer_wait
                -> FROM events_waits_summary_global_by_event_name
                -> ORDER BY sum_timer_wait DESC LIMIT 5;
            +----------------------------------------+------------+------------------+
            | event_name                             | count_star | sum_timer_wait   |
            +----------------------------------------+------------+------------------+
            | innodb_log_file                        | 205438     | 2552133070220355 |
            | Query_cache::COND_cache_status_changed | 8405302    | 2259497326493034 |
            | Query_cache::structure_guard_mutex     | 55769435   |  361568224932147 |
            | innodb_data_file                       | 62423      |  347302500600411 |
            | dict_table_stats                       | 15330162   |   53005067680923 |
            +----------------------------------------+------------+------------------+

            Сейчас существует несколько моментов, ограничивающих использование Per­formance Schema в качестве инструмента профилирования общего назначения. Во-первых, она не обеспечивает достаточный уровень детализации выполнения запросов и затрат времени, который можно получить благодаря существующим ин­струментам. Во-вторых, она довольно долго не использовалась и в данный момент ее применение приводит к большим издержкам, чем применение привычного для многих инструмента профилирования. (Есть основания полагать, что это будет ис­правлено в ближайшее время.)

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

            Будет здорово, когда Performance Schema в более поздних версиях MySQL получит больше функциональности. И очень приятно, что Oracle реализует ее как табли­цы, доступные через SQL, тем самым пользователи могут получать данные любым удобным для них способом. Однако пока она еще не способна заменить журнал медленных запросов или другие инструменты, помогающие сразу увидеть варианты улучшения производительности сервера и выполнения запросов.

             

            Использование профиля для оптимизации

            Итак, у вас есть профиль сервера или запроса — что с ним делать? Хороший профиль обычно делает проблему очевидной, но решения может и не быть (хотя чаще всего есть). На этом этапе, особенно при оптимизации запросов, вам нужно полагаться на знания о сервере и о том, как он выполняет запросы. Профиль или те данные, которые вы можете собрать, указывают направление движения и дают основания для применения ваших знаний и нахождения результатов с помощью дополнительных инструментов, таких как EXPLAIN.

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

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

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

             

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

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


            запрос в запросе. MySQL: примеры запросов. Вложенные запросы MySQL

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

            СУБД MySQL – что это?

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

            Поэтому многие проекты, где важно время быстродействия и необходимо обеспечить хранение информации, а также осуществлять сложные выборки данных, разрабатываются на базе СУБД MySQL. Большую часть таких разработок составляют интернет-сайты. При этом MySQL активно внедряется при реализации как небольших (блоги, сайт-визитки и т. п.), так и достаточно крупных задач (интернет-магазины, хранилище данных и т. д.). В обоих случаях для отображения информации на странице сайта применяется MySQL-запрос. В запросе разработчики стараются максимально использовать имеющиеся возможности, которые предоставляет система управления базами данных.

            Как должно быть организовано хранение данных

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

            Например, если составляется таблица сотрудников определенной компании, то ее самая простая структура будет иметь следующий вид. За каждым сотрудником закреплен уникальный номер, который, как правило, используется в качестве первичного ключа к таблице. Затем в таблицу заносятся персональные данные сотрудника. Это может быть что угодно: Ф. И. О., номер отдела, за которым он закреплен, телефон, адрес и прочее. Согласно требованиям нормализации (6 нормальных форм баз данных), а также для того, чтобы MySQL-запросы выстраивались структурированно, поля таблицы должны быть атомарными, то есть не иметь перечислений или списков. Поэтому, как правило, в таблице существуют отдельные поля для фамилии, имени и т. д.

            Employee_id

            Surname

            Name

            Patronymic

            Department_id

            Position

            Phone

            Employer_id

            1

            Иванов

            Иван

            Иванович

            Администрац.

            Директор

            495****

            null

            2

            Петров

            Петр

            Петрович

            Администрац.

            Зам. директора

            495***

            1

            3

            Гришин

            Григорий

            Григорьевич

            Продажи

            Начальник

            1

            59

            Сергеев

            Сергей

            Сергеевич

            Продажи

            Продавец-консульт.

            495***

            32

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

            Каким образом происходит выборка данных

            Для получения данных из таблиц в СУБД используется специальная команда MySQL – запрос Select. Для того чтобы сервер базы данных правильно отреагировал на обращение, запрос должен быть корректно сформирован. Структура запроса формируется следующим образом. Любое обращение к серверу БД начинается с ключевого слова select. Именно с него строятся все в MySQL запросы. Примеры могут иметь различную сложность, но принцип построения очень похож.

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

            Для ограничения выборки в MySQL-запросы добавляются специальные операторы, предусмотренные СУБД. Для выборки неповторяющихся (уникальных) данных используется предложение distinct, а для задания условий – оператор where. В качестве примера, применимого к вышеуказанной таблице, можно рассмотреть запрос, требующий информацию о Ф.И.О. сотрудников, работающих в отделе «Продажи». Структура запроса примет вид, как в таблице ниже.

            Понятие вложенного запроса

            Но главная особенность СУБД, как было указано выше, возможность обрабатывать вложенные запросы MySQL. Как он должен выглядеть? Из названия логически понятно, что это запрос, сформированный в определенной иерархии из двух или более запросов. В теории по изучению особенностей СУБД сказано, что MySQL не накладывает ограничений на количество MySQL-запросов, которые могут быть вложены в главный запрос. Однако можно поэкспериментировать на практике и убедиться, что уже после второго десятка вложенных запросов время отклика серьезно увеличится. В любом случае на практике не встречаются задачи, требующие использовать чрезвычайно сложный MySQL-запрос. В запросе может потребоваться максимально до 3-5 вложенных иерархий.

            Построение вложенных запросов

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

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

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

            Итоги

            Подводя итог, необходимо отметить, что существует ещё много других дополнительных возможностей, которые значительно облегчают построение запросов, так как СУБД MySQL – мощное средство с богатым арсеналом инструментов для хранения и обработки данных.

            EXPLAIN — Самая мощная команда MySQL / Хабр

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

            Как использовать команду EXPLAIN


            Вот очень простой пример использования этой команды:

            Схема базы данных:

            (таблица с пользователями users)

            (таблица с адресами address)

            В этом примере производится выборка данных пользователя на основе его идентификатора (userid).
            Вот то, что мы имеем в результате выполнения запроса EXPLAIN:

            Переменная   Значение
              Идентификатор (ID) таблицы в запросе. EXPLAIN создает по одной записи для каждой таблицы в запросе.
              Возможные значения: SIMPLE, PRIMARY, UNION, DEPENDENT UNION, SUBSELECT, и DERIVED.
              Имя таблицы, из которой MySQL читает данные
              Тип объединения, которое использует MySQL. Возможные значения: eq_ref, ref, range, index, или all.
              Список индексов (или NULL, если индексов нет), которые MySQL может использовать для выборки рядов в таблице.
              Название индекса, который использует MySQL (после проверки всех возможных индексов).
              Размер ключа в байтах.
              Колонки или значения, которые используются для сравнения с ключем.
              Количество рядов, которые MySQL необходимо проверить, для обработки запроса.
              Дополнительная информация о запросе.

            Этот пример достаточно прост. Мы производим поиск по первичному ключу (userid) и может быть только одна запись, которая подойдет нашим условиям (переменная rows равна 1).

            Вот более расширенный пример:

            Этот запрос более расширенный, чем первый. Он производит объединение таблиц users и address на основе userid. Поле userid – это первичный ключ таблицы users, но он не является индексом в таблице address. Результат выполнения команды EXPLAIN в этом случае будет следующий:

            (таблица users)
            Type: const
            Possible_Keys: primary
            Ref: const
            (таблица address)
            Type: all
            Possible_Keys: (ничего)
            Ref: (ничего)

            Первая таблица является оптимизированной. Для выполнения запроса используется первичный ключ. Вторая таблица неоптимизирована. Значением параметра type является all, а Possible_keys пустой, что означает, что будет производиться полное сканирование таблицы. Добавление индекса к полю user второй таблицы сделает ее оптимизированной.
            Результат вывода команды EXPLAIN после оптимизации второй таблицы будет следующим:
            (таблица users)
            Type: const
            Possible_Keys: primary
            Ref: const
            (таблица address)
            Type: const
            Possible_Keys: primary
            Ref: const

            Дополнительную информацию о команде EXPLAIN вы можете найти в официальной документации MySQL: dev.mysql.com/doc/refman/5.0/en/explain.html

            MySQL SubQuery Tutorial с примерами

            • Home
            • Testing

                • Back
                • Agile Testing
                • BugZilla
                • Cucumber
                • Database Testing
                • 000
                • JTL Testing
                • JUnit
                • LoadRunner
                • Ручное тестирование
                • Мобильное тестирование
                • Mantis
                • Почтальон
                • QTP
                • Назад
                • Центр качества (ALM)
                • RPA 9000 Test4 Управление
                • TestLink
            • SAP

                • Назад
                • ABAP 900 04
                • APO
                • Начинающий
                • Basis
                • BODS
                • BI
                • BPC
                • CO
                • Назад
                • CRM
                • Crystal Reports
                • FICO
                • 000
                • 000 HRM
                • 9000 3000 Заработная плата
                • Назад
                • PI / PO
                • PP
                • SD
                • SAPUI5
                • Безопасность
                • Менеджер решений
                • Successfactors
                • Учебники SAP

                  • Apache
                  • AngularJS
                  • ASP.Net
                  • C
                  • C #
                  • C ++
                  • CodeIgniter
                  • СУБД
                  • JavaScript
                  • Назад
                  • Java
                  • JSP
                  • Kotlin
                  • Linux
                  • Linux
                  • Kotlin
                  • Linux
                  • js
                  • Perl
                  • Назад
                  • PHP
                  • PL / SQL
                  • PostgreSQL
                  • Python
                  • ReactJS
                  • Ruby & Rails
                  • Scala
                  • SQL
                  • 000
                  • SQL
                  • 000 0003 SQL 000 0003 SQL 000
                  • UML
                  • VB.Net
                  • VBScript
                  • Веб-службы
                  • WPF
              • Обязательно учите!

                  • Назад
                  • Бухгалтерский учет
                  • Алгоритмы
                  • Android
                  • Блокчейн
                  • Business Analyst
                  • Создание веб-сайта
                  • CCNA
                  • Облачные вычисления
                  • 00030003 COBOL 9000 Compiler
                      9000 Встроенные системы
                    • 00030002 9000 Compiler 9000
                    • Ethical Hacking
                    • Учебники по Excel
                    • Программирование на Go
                    • IoT
                    • ITIL
                    • Jenkins
                    • MIS
                    • Сеть
                    • Операционная система
                    • Назад
                    • Управление проектами Обзоры
                    • Salesforce
                    • SEO
                    • Разработка программного обеспечения
                    • VB A
                • Big Data

                    • Назад
                    • AWS
                    • BigData
                    • Cassandra
                    • Cognos
                    • Хранилище данных
                    • 0003
                    • HBOps
                    • 0003
                    • HBOps
                    • 0003
                    • MicroStrategy
                    • MongoDB
                .

                PHP Функции MySQLi: mysqli_query, mysqli_connect, mysqli_fetch_array

                • Домашняя страница
                • Тестирование

                    • Назад
                    • Agile Testing
                    • BugZilla
                    • BugZilla
                    • Тестирование базы данных Cucill
                      • Назад
                      • JUnit
                      • LoadRunner
                      • Ручное тестирование
                      • Мобильное тестирование
                      • Mantis
                      • Почтальон
                      • QTP
                      • Назад
                      • Центр качества
                      • 000300030003 SoapUI
                      • Управление тестированием
                      • TestLink
                  • SAP

                      • B ack
                      • ABAP
                      • APO
                      • Начинающий
                      • Basis
                      • BODS
                      • BI
                      • BPC
                      • CO
                      • Назад
                      • CRM
                      • CRM
                      • Crystal Reports
                      • Crystal Reports
                      • QM
                      • Зарплата
                      • Назад
                      • PI / PO
                      • PP
                      • SD
                      • SAPUI5
                      • Безопасность
                      • Менеджер решений
                      • Success Webfactors
                      • SAP 9272000
                      • 000 9272000 00040003 SAP Tutorials 000
                      • Назад
                      • Apache
                      • AngularJS
                      • ASP.Net
                      • C
                      • C #
                      • C ++
                      • CodeIgniter
                      • СУБД
                      • JavaScript
                      • Назад
                      • Java
                      • JSP
                      • Kotlin
                      • Linux
                      • Linux
                      • Kotlin
                      • Linux
                      • js
                      • Perl
                      • Назад
                      • PHP
                      • PL / SQL
                      • PostgreSQL
                      • Python
                      • ReactJS
                      • Ruby & Rails
                      • Scala
                      • SQL
                      • 000
                      • SQL
                      • 000 0003 SQL 000 0003 SQL 000
                      • UML
                      • VB.Net
                      • VBScript
                      • Веб-службы
                      • WPF
                  • Обязательно учите!

                      • Назад
                      • Бухгалтерский учет
                      • Алгоритмы
                      • Android
                      • Блокчейн
                      • Business Analyst
                      • Создание веб-сайта
                      • CCNA
                      • Облачные вычисления
                      • 00030003 COBOL 9000 Compiler
                          9000 Встроенные системы
                        • 00030002 9000 Compiler 9000
                        • Ethical Hacking
                        • Учебники по Excel
                        • Программирование на Go
                        • IoT
                        • ITIL
                        • Jenkins
                        • MIS
                        • Сеть
                        • Операционная система
                        • Назад
                        • Управление проектами Обзоры
                        • Salesforce
                        • SEO
                        • Разработка программного обеспечения
                        • VB A
                    • Big Data

                        • Назад
                        • AWS
                        • BigData
                        • Cassandra
                        • Cognos
                        • Хранилище данных
                        • 0003
                        • HBOps
                        • 0003
                        • HBOps
                        • MicroStrategy
                        • MongoDB
                    .

                    MySQL DELETE Query с примером

                    • Home
                    • Testing

                        • Back
                        • Agile Testing
                        • BugZilla
                        • Cucumber
                        • Database Testing
                          • JTL Testing
                          • JUnit
                          • LoadRunner
                          • Ручное тестирование
                          • Мобильное тестирование
                          • Mantis
                          • Почтальон
                          • QTP
                          • Назад
                          • Центр качества (ALM)
                          • RPA 9000 Testing SAPI
                          • Управление
                          • TestLink
                      • SAP

                          • Назад
                          • ABAP
                          • 9 0003 APO
                          • Начинающий
                          • Basis
                          • BODS
                          • BI
                          • BPC
                          • CO
                          • Назад
                          • CRM
                          • Crystal Reports
                          • FICO
                          • Hroll
                          • Hroll
                          • Назад
                          • PI / PO
                          • PP
                          • SD
                          • SAPUI5
                          • Безопасность
                          • Менеджер решений
                          • Successfactors
                          • SAP Tutorials

                      • Web
                      • Web
                      • AngularJS
                      • ASP.Net
                      • C
                      • C #
                      • C ++
                      • CodeIgniter
                      • СУБД
                      • JavaScript
                      • Назад
                      • Java
                      • JSP
                      • Kotlin
                      • Linux
                      • Linux
                      • Kotlin
                      • Linux
                      • js
                      • Perl
                      • Назад
                      • PHP
                      • PL / SQL
                      • PostgreSQL
                      • Python
                      • ReactJS
                      • Ruby & Rails
                      • Scala
                      • SQL
                      • 000
                      • SQL
                      • 000 0003 SQL 000 0003 SQL 000
                      • UML
                      • VB.Net
                      • VBScript
                      • Веб-службы
                      • WPF
                  • Обязательно учите!

                      • Назад
                      • Бухгалтерский учет
                      • Алгоритмы
                      • Android
                      • Блокчейн
                      • Business Analyst
                      • Создание веб-сайта
                      • CCNA
                      • Облачные вычисления
                      • 00030003 COBOL 9000 Compiler
                          9000 Встроенные системы
                        • 00030002 9000 Compiler 9000
                        • Ethical Hacking
                        • Учебники по Excel
                        • Программирование на Go
                        • IoT
                        • ITIL
                        • Jenkins
                        • MIS
                        • Сеть
                        • Операционная система
                        • Назад
                        • Управление проектами Обзоры
                        • Salesforce
                        • SEO
                        • Разработка программного обеспечения
                        • VB A
                    • Big Data

                        • Назад
                        • AWS
                        • BigData
                        • Cassandra
                        • Cognos
                        • Хранилище данных
                        • 00030003
                        • HBOps
                        • 0003
                        • HBOps
                        • 0003
                        • MicroStrategy
                        • MongoDB
                    .

                    Как добавить строку в таблицу (пример)

                    • Home
                    • Testing

                        • Back
                        • Agile Testing
                        • BugZilla
                        • Cucumber
                        • Database Testing
                        • ETL Testing
                          • Назад
                          • JUnit
                          • LoadRunner
                          • Ручное тестирование
                          • Мобильное тестирование
                          • Mantis
                          • Почтальон
                          • QTP
                          • Назад
                          • Центр качества
                          • 000300030003 SoapUI
                          • Управление тестированием
                          • TestLink
                      • SAP

                          • Назад
                          • ABAP
                          • APO
                          • Начинающий
                          • Basis
                          • BODS
                          • BI
                          • BPC
                          • CO
                          • Назад
                          • CRM
                          • Crystal Reports
                          • FICO
                          • 000 HRM
                          • 000 HRM
                          • MM Pay
                          • Назад
                          • PI / PO
                          • PP
                          • SD
                          • SAPUI5
                          • Безопасность
                          • Менеджер решений
                          • Successfactors
                          • SAP Tutorials
                      • Web
                      • AngularJS
                      • ASP.Net
                      • C
                      • C #
                      • C ++
                      • CodeIgniter
                      • СУБД
                      • JavaScript
                      • Назад
                      • Java
                      • JSP
                      • Kotlin
                      • Linux
                      • Linux
                      • Kotlin
                      • Linux
                      • js
                      • Perl
                      • Назад
                      • PHP
                      • PL / SQL
                      • PostgreSQL
                      • Python
                      • ReactJS
                      • Ruby & Rails
                      • Scala
                      • SQL
                      • 000
                      • SQL
                      • 000 0003 SQL 000 0003 SQL 000
                      • UML
                      • VB.Net
                      • VBScript
                      • Веб-службы
                      • WPF
                  • Обязательно учите!

                      • Назад
                      • Бухгалтерский учет
                      • Алгоритмы
                      • Android
                      • Блокчейн
                      • Business Analyst
                      • Создание веб-сайта
                      • CCNA
                      • Облачные вычисления
                      • 00030003 COBOL 9000 Compiler
                          9000 Встроенные системы
                        • 00030002 9000 Compiler 9000
                        • Ethical Hacking
                        • Учебники по Excel
                        • Программирование на Go
                        • IoT
                        • ITIL
                        • Jenkins
                        • MIS
                        • Сеть
                        • Операционная система
                        • Назад
                        • Управление проектами Обзоры
                        • Salesforce
                        • SEO
                        • Разработка программного обеспечения
                        • VB A
                    • Big Data

                        • Назад
                        • AWS
                        • BigData
                        • Cassandra
                        • Cognos
                        • Хранилище данных
                        • 0003
                        • HBOps
                        • 0003
                        • HBOps
                        • MicroStrategy
                    .
            Mysql exists: MySQL | Оператор EXISTS

            Mysql exists: MySQL | Оператор EXISTS

            Решение для ошибки MySQL-запроса IF EXISTS UPDATE ELSE INSERT

            При работе со связанными таблицами, когда требуется создать новую запись в связанной таблице, если её ещё нет и обновить поля в этой записи, если она уже есть, требуется написать MySQL-запрос , выполняющий данные условия. Однако, при работе со связанными таблицами InnoDB могут возникнуть проблемы в виде ошибки корректности использования условного оператора IF, а также проверки EXISTS. Решая данную задачу, я пришёл к выводу, что нужно использовать конструкцию  ON DUPLICATE KEY UPDATE, которая решает данную задачу без ошибок.

            Ошибка при использовании MySQL-запроса IF EXISTS UPDATE ELSE INSERT

            Итак, имеем две таблицы. Основная tableA и связанная с ней tableВ по полю id. Казалось бы логично описать логику работы следующим SQL-запросом:

            IF EXISTS(SELECT * FROM `tableB` WHERE id = `тут id ключа`) 
               UPDATE `tableB`
                  SET var_1 = `значение1`, var_2 = `значение2` //. .и т.д. для обновления тех полей, значения которых нужно обновить
                WHERE id = `тут id ключа` // в записи, содержащей ключ id
            ELSE 
                INSERT INTO `tableB` (`id`, `var_1`, `var_2`)
                VALUES ('тут id ключа', 'значение1', 'значение2')

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

            Альтернативный MySQL-запрос для обновления или добавления записи в таблицу со связанным полем с другой таблицей

            Итак, вся эта задача сводится к тому, чтобы в связанной таблице tableВ содержались записи с уникальными ключами id. И если в ней уже есть запись с этим ключом, то не создавать ещё одну запись, а обновить поля в имеющейся. Используем следующий SQL-запрос, содержащий функцию работы с ключами ON DUPLICATE KEY UPDATE:

            INSERT INTO `tableB` (`id`,`var_1`,`var_2`)
              VALUES ('тут id ключа','значение1','значение2') // и это отработает, если id в таблице tableB ещё нет
            ON DUPLICATE KEY UPDATE //а то, что ниже, просто обновит запись, содержащую id
              `var_1` = 'значение1',
              `var_2` = 'значение2'

            И этот запрос обрабатывается правильно.

            Пример MySQL-запроса использования связанных таблиц по ключу

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

              `var_1` = `var_1` + 'значение1',
              `var_2` = `var_2` + 'значение2'

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

            Мне это понадобилось для разделения таблицы, содержащей список транзакций пользователей (tableA) и таблицы, содержащей состояние счёта пользователей (tableB) при написании биллинга на сайте, работающем на CMS Joomla. Но данное решение может быть нужно и для массы других задач, которые требуют раздельного хранения суммарных значений по конкретным позициям какого-либо объекта.

            Заберите ссылку на статью к себе, чтобы потом легко её найти 😉

            Выберите, то, чем пользуетесь чаще всего:

            Спасибо за внимание, оставайтесь на связи! Ниже ссылка на форум и обсуждение ; )

            Как устранить неисправность InnoDB в базе данных MySQL — База знаний JustHost.ru

            Источник: http://kb. odin.com/ru/6586

            Проблема

            1. MySQL query failed: Incorrect information in file: ‘./psa/misc.frm’
            2. При работе mysqldump и mysqlcheck появляется сообщение о несуществующей таблице (для проверки используйте учетную запись администратора MySQL):
              
              mysqlcheck -uadmin -p****** db_example
              db_example.BackupTasks
              error : Can't find file: 'BackupTasks.MYD' (errno: 2)
              
            3. Невозможно выполнить запрос таблицы с оператором «SELECT»:
              
              mysql> select * from db_example.misc;
              ERROR 1033 (HY000): Incorrect information in file: './db_example/misc.frm'
              
            4. Таблица не может быть восстановлена, так как ядро InnoDB не поддерживает восстановление.
              
              mysql> repair table misc;
              +-------------------------+--------+----------+---------------------------------------------------------+
              | Table | Op | Msg_type | Msg_text |
              +-------------------------+--------+----------+---------------------------------------------------------+
              | psa. APSApplicationItems | repair | note | The storage engine for the table doesn't support repair |
              +-------------------------+--------+----------+---------------------------------------------------------+
              

            Причина

            Повреждения InnoDB часто связаны с неисправностью оборудования. Сохранение поврежденных страниц происходит в результате сбоев питания или повреждений памяти. Также эта проблема может возникать, если вы храните базы данных InnoDB в сетевом хранилище (NAS).

            Решение

            Существует несколько способов восстановить MySQL:

            I. Принудительное восстановление InnoDB

            Остановите mysqld и сохраните резервную копию всех файлов, расположенных в папке /var/lib/mysql/:

            
            /etc/init.d/mysqld stop
            mkdir /root/mysql_backup
            cp -r /var/lib/mysql/* /root/mysql_backup/
            

            Добавьте опцию innodb_force_recovery в раздел [mysqld] в /etc/my.cnf. Эта опция позволит вам запустить mysqld и создать дамп базы данных.

            
            /etc/my.cnf
            
            [mysqld]
            innodb_force_recovery = 4
            

            ПРИМЕЧАНИЕ. Вы можете увеличить эту опцию до 5 или 6 — пока не получите оптимальный дамп.

            Запустите службу mysqld:

            
            /etc/init.d/mysqld start
            

            Создайте дамп всех баз данных:

            
            mysqldump -uadmin -p****** -A > /root/dumpall.sql
            

            Если при создании дампа возникла следующая ошибка:
            Incorrect information in file: ‘xxxxxxxx.frm’ when using LOCK TABLES»`

            увеличьте значение innodb_force_recovery и повторите попытку. Если вы не можете создать дамп баз данных, попробуйте использовать способ II (скопировать содержимое таблицы) или III (восстановить из резервной копии).

            Остановите mysqld и удалите поврежденные данные:

            
            /etc/init.d/mysqld stop
            rm -rf /var/lib/mysql/*
            

            Удалите опцию innodb_force_recovery из файла /etc/my.cnf и запустите mysqld:

            
            /etc/init. d/mysqld start
            

            В результате этого будет восстановлена главная база данных «mysql» и движок баз данных InnoDB.
            Восстановите базы данных из дампа:

            
            mysql -uadmin -p****** > dumpall.sql
            
            II. Копирование содержимого таблицы

            Остановите mysqld и сохраните резервную копию всех файлов, расположенных в папке /var/lib/mysql/:

            
            /etc/init.d/mysqld stop
            mkdir /root/mysql_backup
            cp -r /var/lib/mysql/* /root/mysql_backup/
            

            Добавьте опцию innodb_force_recovery в раздел [mysqld] в /etc/my.cnf. Эта опция позволит вам запустить mysqld и создать дамп базы данных.

            
            /etc/my.cnf
            
            [mysqld]
            innodb_force_recovery = 1
            

            Попробуйте создать копию:

            
            CREATE TABLE <новая таблица> LIKE <поврежденная таблица>;
            INSERT INTO <новая таблица> SELECT * FROM <поврежденная таблица>;
            

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

            
            DROP TABLE <поврежденная таблица>;
            RENAME TABLE <новая таблица> TO <поврежденная таблица>;
            
            III. Восстановление таблицы InnoDB

            Восстановление таблиц InnoDB необходимо в случае возникновения следующей ошибки

            mysql> USE databasename;
            mysql> SELECT * FROM table1;
            ERROR 1146 (42S02): TABLE 'databasename.table1' doesn't exist
            mysql>

            Или при попытке сделать дамп через mysqldump

            [[email protected] ~]$ mysqldump -uroot -p databasename > databasename.sql
            Enter password:
            mysqldump: Got error: 1146: Table 'databasename.table1' doesn't exist when using LOCK TABLES
            [[email protected] ~]$

            ВниманиеДо начала любых действий рекомендуем создать резервную копию файлов базы

            Создать резервную копию через mysqldump не получится (из-за ошибки). Потребуется копирование файлов базы на уровне файловой системы:

            service mysqld stop
            cp -R /var/lib/mysql/databasename /home/USERNAME/backup

            Для того чтобы восстановить таблицы InnoDB, нам нужно узнать:

            • узнать структуру таблиц
            • иметь файлы с данными (имеется ввиду файлы на уровне файловой системы)

            Таблица InnoDB на уровне файловой системы состоит из двух фалов:

            • файл . frm хранит в себе структуру таблицы;
            • файл .ibd собственно данные

            План восстановления:

            • выяснить структуру поврежденной таблицы;
            • создать новую базу;
            • создать в новой базе таблицу нужной структуры;
            • скопировать данные в новую таблицу из старой;
            • если данные окажутся поврежденными, можно попробовать восстановить их используя утилиту innochecksum

            Применяем утилиту чтения структуры таблицы:

            mysqlfrm --diagnostic table1.frm
            CREATE TABLE `table1` (
              `id` int(10) unsigned NOT NULL comment 'ID',
              `title` varchar(128) NOT NULL comment 'Title',
            PRIMARY KEY `PRIMARY` (`id`)
            ) ENGINE=InnoDB;
            

            Также желательно узнать кодировку старой базы:

            mysql> SELECT DEFAULT_CHARACTER_SET_NAME, DEFAULT_COLLATION_NAME FROM INFORMATION_SCHEMA.SCHEMATA WHERE SCHEMA_NAME = 'databasename';
            +----------------------------+------------------------+
            | DEFAULT_CHARACTER_SET_NAME | DEFAULT_COLLATION_NAME |
            +----------------------------+------------------------+
            | cp1251                     | cp1251_general_ci      |
            +----------------------------+------------------------+
            1 ROW IN SET (0. 00 sec)

            Создаем новую базу:

            mysql> CREATE DATABASE helldb CHARACTER SET cp1251 DEFAULT COLLATE cp1251_general_ci;
            Query OK, 1 ROW affected (0.00 sec)

            Создаем таблицу по выводу утилиты чтения структуры поврежденной таблицы:

            mysql> USE databasename;
            mysql> CREATE TABLE `table1` (
              `id` int(10) unsigned NOT NULL comment 'ID',
              `title` varchar(128) NOT NULL comment 'Title',
            PRIMARY KEY `PRIMARY` (`id`)
            ) ENGINE=InnoDB;

            Далее копируем данные:

            • Очищаем автоматически созданный файл
              mysql> ALTER TABLE tables1 DISCARD TABLESPACE;
              Query OK, 0 ROWS affected (0.04 sec)
            • Копируем файл с данными с поврежденной таблицы
              cp /home/USERNAME/tables1.ibd tables1.ibd
              chown mysql:mysql tables1.ibd
            • Импортируем данные
              mysql> ALTER TABLE tables1 IMPORT TABLESPACE;
              Query OK, 0 ROWS affected, 1 warning (0.50 sec)
            • Проверяем корректность чтения данных
              mysql> SELECT * FROM tables1 LIMIT 10;
              +-----+-----------+
              | id  | title     |
              +-----+-----------+
              |  1  | Title 1   |
              |  2  | Title 2   |
              |  3  | Title 3   |
              |  4  | Title 4   |
              +-----+-----------+
              4 ROWS IN SET (0. 00 sec)

            Далее можно импортировать восстановленную таблицу или базу целиком.

            IV. Восстановление из резервной копии

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

            Поделиться ссылкой:

            Похожее

            Зерезервированные слова в Mysql | MySQL

            Подробности
            Категория: MySQL
            Просмотров: 2541

            Если не проходит запрос к БД Mysql, то проверьте не попадает ли он под выражение «Зарезервированные слова».

            Зарезервированные слова MySQL — те, что в таблице ниже нельзя использовать для имен ваших таблиц БД:

            action add aggregate all
            alter after and as
            asc avg avg_row_length autojncrement
            between bigint bjt binary
            blob bool both by
            cascade case char character
            change check checksum column
            columns comment constraint create
            cross current_date current_time current_timestamp
            data database databases date
            datetime day day_hour day_minute
            day_second dayofmonth dayofweek dayofyear
            dec decimal default delayed
            delay_key_write delete desc describe
            distinct distinctrow double drop
            end else escape escaped
            enclosed enum explain exists
            fields file first float
            float4 float8 flush foreign
            from for full function
            global grant grants group
            having heap high_priority hour
            hour_minute hour_second hosts identified
            ignore in index infile
            inner insert insert_id int
            integer interval int1 int2
            int3 int4 int8 into
            if is isam join
            key keys kill last_insert_id
            leading left length like
            lines limit load local
            lock logs long longblob
            longtext low_priority max max_rows
            match mediumblob mediumtext mediumint
            middleint min_rows minute minute_second
            modify month monthname myisam
            natural numeric no not
            null on optimize option
            optionally or order outer
            outfile pack_keys partial password
            precision primary procedure process
            processlist privileges read real
            references reload regexp rename
            replace restrict returns revoke
            rlike row rows second
            select set show shutdown
            smallint soname sql_big_tables sql_big_selects
            sql_low_priority_updates sql_log_off sql_log_update sql_select_limit
            sql_small_result sql_big_result sql_warnings straight_join
            starting status string table
            tables temporary terminated text
            then time timestamp tinyblob
            tinytext tinyint trailing to
            type use using unique
            unlock unsigned update usage
            values varchar variables varying
            varbinary with write when
            where year year_month zerofill

            Зарезервированные слова, которые появились в Mysql версии 4. 1

            before collate convert
            current_user day_microsecond div
            dual false hour_microsecond
            minute_microsecond mod no_write_to_binlog
            second_microsecond separator spatial
            true utc_date utc_time
            utc_timestamp varcharacter  

            Зарезервированные слова, которые появились в Mysql версии 5.0

            asensitive call condition
            connection continue cursor
            declare deterministic each
            elseif exit fetch
            goto inout insensitive
            iterate label leave
            loop modifies out
            reads release repaet
            return schema schemas
            sensitive specific sql
            sqlexception sqlstate sqlwarning
            trigger undo upgrade
            while    

            Зарезервированные слова, которые появились в Mysql версии 5. 1

            accessible linear master_ssl_server_cert
            range read_only read_write

            Зарезервированные слова, которые появились в Mysql версии 5.5

            general ignore_server_ids master_heartbeat_period
            maxvalue resignal signal
            slow    

            Зарезервированные слова, которые появились в Mysql версии 5.6

            get io_after_gtids io_before_gtids
            master_bind one_shot partition
            sql_after_gtids sql_before_gtids  

            Новое зарезервированное слово добавилось Mysql в  5.7

            В результате может возникать ошибка 1064 для Mysql

            Добавить комментарий

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

            Повреждения InnoDB часто связаны с неисправностью оборудования. Сохранение поврежденных страниц происходит в результате сбоев питания или повреждений памяти. Также эта проблема может возникать, если вы храните базы данных InnoDB в сетевом хранилище (NAS).

            Проблема

            MySQL query failed: Incorrect information in file: ‘./psa/misc.frm’

            При работе mysqldump и mysqlcheck появляется сообщение о несуществующей таблице (для проверки используйте учетную запись администратора MySQL):

            # mysqlcheck -uadmin -p****** db_example
            db_example.BackupTasks
            error : Can't find file: 'BackupTasks.MYD' (errno: 2)

            Невозможно выполнить запрос таблицы с оператором «SELECT»:

            mysql> select * from db_example.misc;
            ERROR 1033 (HY000): Incorrect information in file: './db_example/misc.frm'

            Таблица не может быть восстановлена, так как ядро InnoDB не поддерживает восстановление.

            mysql> repair table misc;
            +-------------------------+--------+----------+---------------------------------------------------------+
            | Table | Op | Msg_type | Msg_text |
            +-------------------------+--------+----------+---------------------------------------------------------+
            | psa. APSApplicationItems | repair | note | The storage engine for the table doesn't support repair |
            +-------------------------+--------+----------+---------------------------------------------------------+

            Решение

            Существует несколько способов восстановить MySQL:

            I. Принудительное восстановление InnoDB

            Остановите mysqld и сохраните резервную копию всех файлов, расположенных в папке /var/lib/mysql/:

            # /etc/init.d/mysqld stop
            # mkdir /root/mysql_backup
            # cp -r /var/lib/mysql/* /root/mysql_backup/

            Добавьте опцию innodb_force_recovery в раздел [mysqld] в /etc/my.cnf. Эта опция позволит вам запустить mysqld и создать дамп базы данных.

            [mysqld]
            innodb_force_recovery = 4

            ПРИМЕЧАНИЕ. Вы можете увеличить эту опцию до 5 или 6 — пока не получите оптимальный дамп.

            Запустите службу mysqld:

            # /etc/init.d/mysqld start

            Создайте дамп всех баз данных:

            # mysqldump -uadmin -p****** -A > /root/dumpall. sql

            Если при создании дампа возникла следующая ошибка:

            Incorrect information in file: ‘xxxxxxxx.frm’ when using LOCK TABLES»`

            увеличьте значение innodb_force_recovery и повторите попытку. Если вы не можете создать дамп баз данных, попробуйте использовать способ II (скопировать содержимое таблицы) или III (восстановить из резервной копии).

            Остановите mysqld и удалите поврежденные данные:

            # /etc/init.d/mysqld stop
            # rm -rf /var/lib/mysql/*

            Удалите опцию innodb_force_recovery из файла /etc/my.cnf и запустите mysqld:

            # /etc/init.d/mysqld start

            В результате этого будет восстановлена главная база данных «mysql» и движок баз данных InnoDB.

            Восстановите базы данных из дампа:

            # mysql -uadmin -p****** > dumpall.sql

            II. Копирование содержимого таблицы

            Остановите mysqld и сохраните резервную копию всех файлов, расположенных в папке /var/lib/mysql/:

            # /etc/init. d/mysqld stop
            # mkdir /root/mysql_backup
            # cp -r /var/lib/mysql/* /root/mysql_backup/

            Добавьте опцию innodb_force_recovery в раздел [mysqld] в /etc/my.cnf. Эта опция позволит вам запустить mysqld и создать дамп базы данных.

            [mysqld]
            innodb_force_recovery = 1

            Попробуйте создать копию:

            CREATE TABLE <новая таблица> LIKE <поврежденная таблица>;
            INSERT INTO <новая таблица> SELECT * FROM <поврежденная таблица>;

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

            DROP TABLE <поврежденная таблица>;
            RENAME TABLE <новая таблица> TO <поврежденная таблица>;

            III. Восстановление таблицы InnoDB

            Восстановление таблиц InnoDB необходимо в случае возникновения следующей ошибки

            mysql> USE databasename;
            mysql> SELECT * FROM table1;
            ERROR 1146 (42S02): TABLE 'databasename.table1' doesn't exist
            mysql>

            Или при попытке сделать дамп через mysqldump

            # mysqldump -uroot -p databasename > databasename. sql
            Enter password:
            mysqldump: Got error: 1146: Table 'databasename.table1' doesn't exist when using LOCK TABLES

            Внимание! До начала любых действий рекомендуем создать резервную копию файлов базы!

            Создать резервную копию через mysqldump не получится (из-за ошибки). Потребуется копирование файлов базы на уровне файловой системы:

            # service mysqld stop
            # cp -R /var/lib/mysql/databasename /home/USERNAME/backup

            Для того чтобы восстановить таблицы InnoDB, нам нужно узнать:

            узнать структуру таблиц
            иметь файлы с данными (имеется ввиду файлы на уровне файловой системы)

            Таблица InnoDB на уровне файловой системы состоит из двух фалов:

            файл .frm хранит в себе структуру таблицы;
            файл .ibd собственно данные

            План восстановления:

            выяснить структуру поврежденной таблицы;
            создать новую базу;
            создать в новой базе таблицу нужной структуры;
            скопировать данные в новую таблицу из старой;
            если данные окажутся поврежденными, можно попробовать восстановить их используя утилиту innochecksum

            Применяем утилиту чтения структуры таблицы:

            # mysqlfrm --diagnostic table1. frm
            CREATE TABLE `table1` (
            `id` int(10) unsigned NOT NULL comment 'ID',
            `title` varchar(128) NOT NULL comment 'Title',
            PRIMARY KEY `PRIMARY` (`id`)
            ) ENGINE=InnoDB;

            Также желательно узнать кодировку старой базы:

            mysql> SELECT DEFAULT_CHARACTER_SET_NAME, DEFAULT_COLLATION_NAME FROM INFORMATION_SCHEMA.SCHEMATA WHERE SCHEMA_NAME = 'databasename';
            +----------------------------+------------------------+
            | DEFAULT_CHARACTER_SET_NAME | DEFAULT_COLLATION_NAME |
            +----------------------------+------------------------+
            | cp1251 | cp1251_general_ci |
            +----------------------------+------------------------+
            1 ROW IN SET (0.00 sec)

            Создаем новую базу:

            mysql> CREATE DATABASE databasename CHARACTER SET cp1251 DEFAULT COLLATE cp1251_general_ci;
            Query OK, 1 ROW affected (0.00 sec)

            Создаем таблицу по выводу утилиты чтения структуры поврежденной таблицы:

            mysql> USE databasename;
            mysql> CREATE TABLE `table1` (
            `id` int(10) unsigned NOT NULL comment 'ID',
            `title` varchar(128) NOT NULL comment 'Title',
            PRIMARY KEY `PRIMARY` (`id`)
            ) ENGINE=InnoDB;

            Далее копируем данные. Очищаем автоматически созданный файл:

            mysql> ALTER TABLE tables1 DISCARD TABLESPACE;
            Query OK, 0 ROWS affected (0.04 sec)

            Копируем файл с данными с поврежденной таблицы:

            # cp /home/USERNAME/tables1.ibd tables1.ibd
            # chown mysql:mysql tables1.ibd

            Импортируем данные:

            mysql> ALTER TABLE tables1 IMPORT TABLESPACE;
            Query OK, 0 ROWS affected, 1 warning (0.50 sec)

            Проверяем корректность чтения данных:

            mysql> SELECT * FROM tables1 LIMIT 10;
            +-----+-----------+
            | id | title |
            +-----+-----------+
            | 1 | Title 1 |
            | 2 | Title 2 |
            | 3 | Title 3 |
            | 4 | Title 4 |
            +-----+-----------+
            4 ROWS IN SET (0.00 sec)

            Далее можно импортировать восстановленную таблицу или базу целиком.

            IV. Восстановление из резервной копии

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

            Источник

            MariaDB: Table ‘mysql.user’ doesn’t exist

            Есть локальный сервер MariaDB на рабочем ноуте с Arch Linux, для мелких тестовых баз.

            При попытке запуска — ошибка:

            $ sudo systemctl start mariadb
            Job for mariadb.service failed because the control process exited with error code.
            See "systemctl status mariadb.service" and "journalctl -xe" for details.

            Проверяем лог:

            systemctl status mariadb

            ● mariadb.service — MariaDB database server

            Loaded: loaded (/usr/lib/systemd/system/mariadb.service; disabled; vendor preset: disabled)

            Active: failed (Result: exit-code) since Fri 2017-12-29 13:55:55 EET; 4min 53s ago

            Process: 7405 ExecStart=/usr/bin/mysqld $MYSQLD_OPTS $_WSREP_NEW_CLUSTER $_WSREP_START_POSITION (code=exited, status=1/FAILURE)

            Process: 7349 ExecStartPre=/bin/sh -c [ ! -e /usr/bin/galera_recovery ] && VAR= ||   VAR=`/usr/bin/galera_recovery`; [ $? -eq 0 ]   && systemctl set-environment _WSREP_START_POSITION=$VAR || exit 1 (code=exited, status=0/SUCCESS)

            Process: 7348 ExecStartPre=/bin/sh -c systemctl unset-environment _WSREP_START_POSITION (code=exited, status=0/SUCCESS)

            Main PID: 7405 (code=exited, status=1/FAILURE)

            Dec 29 13:55:55 setevoy-arch-work mysqld[7405]: 2017-12-29 13:55:55 140233913434048 [Note] Recovering after a crash using mysql-bin

            Dec 29 13:55:55 setevoy-arch-work mysqld[7405]: 2017-12-29 13:55:55 140233913434048 [Note] Starting crash recovery. ..

            Dec 29 13:55:55 setevoy-arch-work mysqld[7405]: 2017-12-29 13:55:55 140233913434048 [Note] Crash recovery finished.

            Dec 29 13:55:55 setevoy-arch-work mysqld[7405]: 2017-12-29 13:55:55 140233913412352 [Warning] Failed to load slave replication state from table mysql.gtid_slave_pos: 1146: Table ‘mysql.gtid_slave_pos’ doesn’t exist

            Dec 29 13:55:55 setevoy-arch-work mysqld[7405]: 2017-12-29 13:55:55 140233913434048 [ERROR] Can’t open and lock privilege tables: Table ‘mysql.servers’ doesn’t exist

            Dec 29 13:55:55 setevoy-arch-work mysqld[7405]: 2017-12-29 13:55:55 140233913434048 [Note] Server socket created on IP: ‘::’.

            Dec 29 13:55:55 setevoy-arch-work mysqld[7405]: 2017-12-29 13:55:55 140233913434048 [ERROR] Fatal error: Can’t open and lock privilege tables: Table ‘mysql.user’ doesn’t exist

            Dec 29 13:55:55 setevoy-arch-work systemd[1]: mariadb.service: Main process exited, code=exited, status=1/FAILURE

            Dec 29 13:55:55 setevoy-arch-work systemd[1]: mariadb. service: Failed with result ‘exit-code’.

            Dec 29 13:55:55 setevoy-arch-work systemd[1]: Failed to start MariaDB database server.

            Удаляем всё содержимое /var/lib/mysql/ (при условии, что базы в MySQL — тестовые, иначе — сначала делаем бекап всех баз):

            sudo rm -rf /var/lib/mysql/*

            Устанавливаем дефолтные базы заново с помощью mysql_install_db:

            sudo mysql_install_db —user=mysql —ldata=/var/lib/mysql/ —basedir=/usr/

            Запускаем сервис:

            systemctl start mariadb

            Проводим обычную установку:

            /usr/bin/mysql_secure_installation

            Подключаемся:

            mysql -u root -p

            Enter password:

            Welcome to the MariaDB monitor.  Commands end with ; or \g.

            Your MariaDB connection id is 11

            Server version: 10.1.29-MariaDB MariaDB Server

            Copyright (c) 2000, 2017, Oracle, MariaDB Corporation Ab and others.

            Type ‘help;’ or ‘\h’ for help. Type ‘\c’ to clear the current input statement.

            MariaDB [(none)]>

            Готово.


            Все запрещённые/зарезервированные MySql слова

            Зарезервированные слова в MySql версии 3.23:
            ADDALLALTER
            ANALYZEANDAS
            ASCBEFOREBETWEEN
            BIGINTBINARYBLOB
            BOTHBYCASCADE
            CASECHANGECHAR
            CHARACTERCHECKCOLLATE
            COLUMNCOLUMNSCONSTRAINT
            CONVERTCREATECROSS
            CURRENT_DATECURRENT_TIMECURRENT_TIMESTAMP
            CURRENT_USERDATABASEDATABASES
            DAY_HOURDAY_MICROSECONDDAY_MINUTE
            DAY_SECONDDECDECIMAL
            DEFAULTDELAYEDDELETE
            DESCDESCRIBEDISTINCT
            DISTINCTROWDIVDOUBLE
            DROPDUALELSE
            ENCLOSEDESCAPEDEXISTS
            EXPLAINFALSEFIELDS
            FLOATFLOAT4FLOAT8
            FORFORCEFOREIGN
            FROMFULLTEXTGRANT
            GROUPHAVINGHIGH_PRIORITY
            HOUR_MICROSECONDHOUR_MINUTEHOUR_SECOND
            IFIGNOREIN
            INDEXINFILEINNER
            INSERTINTINT1
            INT2INT3INT4
            INT8INTEGERINTERVAL
            INTOISJOIN
            KEYKEYSKILL
            LEADINGLEFTLIKE
            LIMITLINESLOAD
            LOCALTIMELOCALTIMESTAMPLOCK
            LONGLONGBLOBLONGTEXT
            LOW_PRIORITYMATCHMEDIUMBLOB
            MEDIUMINTMEDIUMTEXTMIDDLEINT
            MINUTE_MICROSECONDMINUTE_SECONDMOD
            NATURALNOTNO_WRITE_TO_BINLOG
            NULLNUMERICON
            OPTIMIZEOPTIONOPTIONALLY
            ORORDEROUTER
            OUTFILEPRECISIONPRIMARY
            PRIVILEGESPROCEDUREPURGE
            READREALREFERENCES
            REGEXPRENAMEREPLACE
            REQUIRERESTRICTREVOKE
            RIGHTRLIKESECOND_MICROSECOND
            SELECTSEPARATORSET
            SHOWSMALLINTSONAME
            SPATIALSQL_BIG_RESULTSQL_CALC_FOUND_ROWS
            SQL_SMALL_RESULTSSLSTARTING
            STRAIGHT_JOINTABLETABLES
            TERMINATEDTHENTINYBLOB
            TINYINTTINYTEXTTO
            TRAILINGTRUEUNION
            UNIQUEUNLOCKUNSIGNED
            UPDATEUSAGEUSE
            USINGUTC_DATEUTC_TIME
            UTC_TIMESTAMPVALUESVARBINARY
            VARCHARVARCHARACTERVARYING
            WHENWHEREWITH
            WRITEXORYEAR_MONTH
            ZEROFILL

            В MySql версии 4. 0, список пополнился следующими словами:

            CHECKFORCELOCALTIME
            LOCALTIMESTAMPREQUIRESQL_CALC_FOUND_ROWS
            SSLXOR

            В MySql версии 4.1, список пополнился следующими словами:

            BEFORECOLLATECONVERT
            CURRENT_USERDAY_MICROSECONDDIV
            DUALFALSEHOUR_MICROSECOND
            MINUTE_MICROSECONDMODNO_WRITE_TO_BINLOG
            SECOND_MICROSECONDSEPARATORSPATIAL
            TRUEUTC_DATEUTC_TIME
            UTC_TIMESTAMPVARCHARACTER

            В MySql версии 5.0, список пополнился следующими словами:

            ASENSITIVECALLCONDITION
            CONNECTIONCONTINUECURSOR
            DECLAREDETERMINISTICEACH
            ELSEIFEXITFETCH
            GOTOINOUTINSENSITIVE
            ITERATELABELLEAVE
            LOOPMODIFIESOUT
            READSRELEASEREPEAT
            RETURNSCHEMASCHEMAS
            SENSITIVESPECIFICSQL
            SQLEXCEPTIONSQLSTATESQLWARNING
            TRIGGERUNDOUPGRADE
            WHILE

            В MySql версии 5. 1, список пополнился следующими словами:

            ACCESSIBLELINEARMASTER_SSL_VERIFY_SERVER_CERT
            RANGEREAD_ONLYREAD_WRITE

            В MySql версии 5.5, список пополнился следующими словами:

            GENERALIGNORE_SERVER_IDSMASTER_HEARTBEAT_PERIOD
            MAXVALUERESIGNALSIGNAL
            SLOW

            В MySql версии 5.6, список пополнился следующими словами:

            GETIO_AFTER_GTIDSIO_BEFORE_GTIDS
            MASTER_BINDONE_SHOTPARTITION
            SQL_AFTER_GTIDSSQL_BEFORE_GTIDS

            В MySql версии 5.7, список пополнился следующим словом:

            Комментарии и отзывы к материалу

            Открыта вакансия на первого комментатора!

            INSERT IF NOT EXISTS синтаксис »Автархия частной пещеры

            18 октября 2007 г.

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

            Есть 3 возможных решения: с помощью INSERT IGNORE, REPLACE или INSERT… ON DUPLICATE KEY UPDATE.

            Представьте, что у нас есть таблица:

            1. CREATE TABLE `transcripts` (

            2. ` ensembl_transcript_id` varchar (20) NOT NULL,

            3. `transcript_chrom_start` int (10)

              NOT NULL

              `transcript_chrom_end` int (10) unsigned NOT NULL,

            4. PRIMARY KEY (` ensembl_transcript_id`)

            5. ) ENGINE = InnoDB DEFAULT CHARSET = latin1;

            Теперь представьте, что у нас есть автоматический конвейер, импортирующий метаданные транскриптов из Ensembl, и что по разным причинам конвейер может выйти из строя на любом этапе выполнения.Таким образом, нам нужно убедиться в двух вещах: 1) повторное выполнение конвейера не приведет к разрушению нашей базы данных и 2) повторное выполнение не прекратится из-за ошибок «дублирования первичного ключа».

            Метод 1: использование REPLACE

            Это очень просто:

            1. REPLACE INTO `transcripts`

            2. SET` ensembl_transcript_id` = ‘ENSORGT00000000001’,

            3. `transcript_312145_start transcript_chrom_end` = 12678;

            Если запись существует, она будет перезаписана; если его еще нет, он будет создан.
            Однако в нашем случае использование этого метода неэффективно: нам не нужно перезаписывать существующие записи, их можно просто пропустить.

            Метод 2: использование INSERT IGNORE
            Также очень просто:

            1. INSERT IGNORE INTO `transcripts`

            2. SET` ensembl_transcript_id` = ‘ENSORGT00000000001’,

            3. 0

              42_start_chip 911 `transcript_chrom_end` = 12678;

            Здесь, если «ensembl_transcript_id» уже присутствует в базе данных, он будет автоматически пропущен (проигнорирован).(Чтобы быть более точным, вот цитата из справочного руководства MySQL: «Если вы используете ключевое слово IGNORE, ошибки, возникающие при выполнении оператора INSERT, вместо этого обрабатываются как предупреждения. Например, без IGNORE, строка, которая дублирует существующий индекс UNIQUE. или значение PRIMARY KEY в таблице вызывает ошибку дублирования ключа, и выполнение оператора прерывается. ».) Если запись еще не существует, она будет создана.

            У этого второго метода есть несколько потенциальных недостатков, включая невозможность прерывания запроса в случае возникновения любой другой проблемы (см. Руководство).Таким образом, его следует использовать, если ранее не было ключевого слова IGNORE.

            Есть еще один вариант: использовать синтаксис INSERT… ON DUPLICATE KEY UPDATE, а в части UPDATE просто ничего не делать выполнить какую-то бессмысленную (пустую) операцию, например вычисление 0 + 0 (Джеффрей предлагает выполнить присвоение id = id чтобы механизм оптимизации MySQL игнорировал эту операцию). Преимущество этого метода в том, что он игнорирует только повторяющиеся ключевые события и по-прежнему прерывает выполнение других ошибок.

            И последнее замечание: этот пост был вдохновлен Xaprb.Я также посоветовал бы проконсультироваться с другой его статьей о написании гибких SQL-запросов.

            Эта запись была опубликована в четверг, 18 октября 2007 г., в 15:20 и находится в разделе «Программирование». Вы можете следить за любыми ответами на эту запись через канал RSS 2.0. Вы можете перейти к концу и оставить отзыв. Пинг в настоящее время не разрешен.

            MySQL: вставить запись, если она не существует в таблице

              СОЗДАТЬ ТАБЛИЦУ `имя_таблицы` (
              `id` int (11) NOT NULL auto_increment,
              `name` varchar (255) НЕ NULL,
              `адрес` varchar (255) НЕ NULL,
              `tele` varchar (255) NOT NULL,
              ПЕРВИЧНЫЙ КЛЮЧ (`id`)
            ) ДВИГАТЕЛЬ = InnoDB;  

            Вставить запись:

              ВСТАВИТЬ  имя_таблицы  (имя, адрес, теле)
            ВЫБРАТЬ * ИЗ (ВЫБРАТЬ 'Назир', 'Калькутта', '033') КАК tmp
            ГДЕ НЕ СУЩЕСТВУЕТ (
                ВЫБЕРИТЕ имя ИЗ имя_таблицы, ГДЕ имя = 'Назир'
            ) LIMIT 1;  

            Запрос в порядке, затронута 1 строка (0. 00 сек)
            Записей: 1 Дубликатов: 0 Предупреждений: 0

              ВЫБРАТЬ * ИЗ `имя_таблицы`;
            
            + ---- + -------- + ----------- + ------ +
            | id | имя | адрес | теле |
            + ---- + -------- + ----------- + ------ +
            | 1 | Назир | Калькутта | 033 |
            + ---- + -------- + ----------- + ------ +  

            Попробуйте снова вставить ту же запись:

              ВСТАВИТЬ  имя_таблицы  (имя, адрес, теле)
            ВЫБРАТЬ * ИЗ (ВЫБРАТЬ 'Назир', 'Калькутта', '033') КАК tmp
            ГДЕ НЕ СУЩЕСТВУЕТ (
                ВЫБЕРИТЕ имя ИЗ имя_таблицы, ГДЕ имя = 'Назир'
            ) LIMIT 1;
            
            Запрос выполнен, затронуты 0 строк (0.00 сек)
            Записей: 0 Дубликатов: 0 Предупреждений: 0
            
            + ---- + -------- + ----------- + ------ +
            | id | имя | адрес | теле |
            + ---- + -------- + ----------- + ------ +
            | 1 | Назир | Калькутта | 033 |
            + ---- + -------- + ----------- + ------ +  

            Вставить другую запись:

              ВСТАВИТЬ  имя_таблицы  (имя, адрес, теле)
            ВЫБРАТЬ * ИЗ (ВЫБРАТЬ 'Сантош', 'Кестопур', '044') КАК tmp
            ГДЕ НЕ СУЩЕСТВУЕТ (
                ВЫБЕРИТЕ имя ИЗ имя_таблицы, ГДЕ имя = 'Сантош'
            ) LIMIT 1;  

            Запрос в порядке, затронута 1 строка (0. 00 сек)
            Записей: 1 Дубликатов: 0 Предупреждений: 0

              ВЫБРАТЬ * ИЗ `имя_таблицы`;
            
            + ---- + -------- + ----------- + ------ +
            | id | имя | адрес | теле |
            + ---- + -------- + ----------- + ------ +
            | 1 | Назир | Калькутта | 033 |
            | 2 | Сантош | Кестопур | 044 |
            + ---- + -------- + ----------- + ------ +  

            Нравится:

            Нравится Загрузка …

            Связанные

            MySQL существует 的 用法 介绍 — 简明 现代 魔法

            2011 09 07 日 那天 写 的 已经 有 168188 阅读 了

            君 一共 花费 了 167.717 мс 进行 了 5 次 数据库 查询 , 努力 地 为 您 提供 了 这个 页面。

            有 一个 查询 如下 :

            ВЫБЕРИТЕ c.CustomerId, CompanyName
            ОТ клиентов c
            ГДЕ СУЩЕСТВУЕТ (
            ВЫБРАТЬ ИД ЗАКАЗА ИЗ О
            ГДЕ o.CustomerID = cu.CustomerID)
             

            里面 的 EXISTS 运作 子 返回 的 是 OrderId 字段 可是 的 查询 要找 的 是 CustomerID 和 CompanyName OrderID 如何 匹配

            СУЩЕСТВУЕТ 用于 检查 子 查询 是否 至少 会 返回 一行 , 该 子 查询 实际上 并不 返回 任何 , 而是 返回 True 或 False。

            EXISTS 一个 子 查询 , 检测 的 存在。 语法 EXISTS subquery。 subquery 一个 受限 的 SELECT 语句 (不允许 有 COMPUTE 子句 和 INTO 关键字)。 Boolean , 如果 子 包含则 返回 ИСТИНА。

            • 子 查询 中 使用 NULL 仍然 返回 结果 集
            • 例子 在 子 查询 中 指定 NULL , 并 返回 结果 集 , 通过 使用 EXISTS 仍 取值 为 TRUE。

            ВЫБЕРИТЕ CategoryName
            ИЗ категорий
            ГДЕ СУЩЕСТВУЕТ (ВЫБРАТЬ NULL)
            ЗАКАЗАТЬ ПО КАТЕГОРИИ ASC
             
          • 使用 EXISTS 和 IN 的 查询
          • 例子 比较 语义 类似 的 查询。 第 一个 查询 使用 EXISTS 而 第二 个 IN。 注意 两个 返回 的 信息。

            ВЫБЕРИТЕ DISTINCT pub_name
            ОТ издателей
            ГДЕ СУЩЕСТВУЕТ
                (ВЫБРАТЬ *
                ИЗ названий
                ГДЕ pub_id = издатели. pub_id
                И тип = 'бизнес')
             
            ВЫБЕРИТЕ отдельное имя pub_name
            ОТ издателей
            ГДЕ pub_id IN
                (ВЫБЕРИТЕ pub_id
                ИЗ названий
                ГДЕ тип = 'бизнес')
             
          • 比较 使用 EXISTS 和 = ANY 的 查询
          • 本 示例 查找 子 在 城市 中 的 作者 的 两种 查询 方法 : 一种 方法 使用 = ANY , 第二种 方法 EXISTS。 两种 方法 返回。

            ВЫБЕРИТЕ au_lname, au_fname
            ОТ авторов
            ГДЕ существует
                (ВЫБРАТЬ *
                ОТ издателей
                ГДЕ авторы.city = publishers.city)
             
            ВЫБЕРИТЕ au_lname, au_fname
            ОТ авторов
            ГДЕ город = ЛЮБОЙ
                (ВЫБЕРИТЕ город
                ОТ издателей)
             
          • 使用 EXISTS 和 IN 的 查询
          • 查询 位于 以 字母 B 的 城市 中 的 任 一 կ 的 书名

            ВЫБЕРИТЕ заголовок
            ИЗ названий
            ГДЕ СУЩЕСТВУЕТ
                (ВЫБРАТЬ *
                ОТ издателей
                ГДЕ pub_id = названия.pub_id
                И город КАК 'B%')
             
            ВЫБЕРИТЕ заголовок
            ИЗ названий
            ГДЕ pub_id IN
                (ВЫБЕРИТЕ pub_id
                ОТ издателей
                ГДЕ город КАК 'B%')
             
          • 使用 НЕ СУЩЕСТВУЕТ
          • НЕ СУЩЕСТВУЕТ. НЕ СУЩЕСТВУЕТ. НЕ СУЩЕСТВУЕТ.

            ВЫБЕРИТЕ pub_name
            ОТ издателей
            ГДЕ НЕ СУЩЕСТВУЕТ
                (ВЫБРАТЬ *
                ИЗ названий
                ГДЕ pub_id = publishers.pub_id
                И тип = 'бизнес')
            ЗАКАЗАТЬ ПО pub_name
             

            又 比如 以下 SQL 语句 :

            выбрать отличное 姓名 от xs
            где не существует (
            выберите * из kc
            где не существует (
            выберите * из xs_kc
            где 学 号 = xs.学 号 и 课程 号 = kc. 课程 号
            )
             

            最 外层 的 查询 xs 里 的 数据 一行 一行 的 做 里 层 的 子 查询。

            中间 的 exists 语句 只 对 上 一层 的 返回 true 或 false , 因为 查询 的 条件 都 在, где 学 号 = xs. 学 号 и 课程 号 = kc. 课程 号 这 句话 里。 每值。 它 只是 告诉 一层 , 最 外层 的 查询 条件 在 这里 成立 或 都不 成立 , 的 时候 值 也 一样 回 返回 上去。 的 时候 如果 true (真) 就 到 结果。 为ложно (假) 丢弃。

            где не существует
            выберите * из xs_kc
            где 学 号 = xs. 学 号 и 课程 号 = kc. 课程 号
             

            这个 существует 就是 告诉 上 一层 , 这一 行 语句 在 我 这里 不 成立。 因为 他 不是 高层 , 所以 还要 继续 向上 返回。

            выбрать отличное 姓名 из xs где не существует (这里 的 上 一个 false 的 在 判断 结果 true (成立) 由于 是 高层 的 结果 (这里 指 是 查询 条件)返回 到 结果 集。

            几个 重要 的 点 :

            • 里 层 要用 到 的 醒 询 条件 的 表 比如: xs.
            Theme: Overlay by Kaira Extra Text
            Cape Town, South Africa