Как работать в mysql в windows

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

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

Введение

При постоянном расширении веб-приложений и веб-сайтов, управляемых пользователем, появляется необходимость иметь способ хранения данных в
организованном виде, при этом данные можно получить и манипулировать ими «на лету»; что невозможно при статическом контенте.
Для этого необходимо использовать базу данных!
Базой данных в ее простейшей форме является огранизованный сбор данных, независимо от того, используется ли шкаф для хранения документов или компьютеризированную базу данных.
Интеграция базы данных на ваш веб-сайт или веб-приложение позволяет хранить и извлекать данные с помощью определенных команд.
В этой статье мы будем использовать систему управления реляционной базой данных MySQL.
Это программное обеспечение с открытым исходным кодом, доступное в соответствии с общедоступной лицензией GNU, которое, конечно же, делает его бесплатным!
Веб-сайт MySQL можно найти по адресу http://www.mysql.com/. Все что вы видите в этой статье, указывает на функцию MySQL, вы можете найти полную документацию по этим функциям на веб-сайте MySQL.

СОВЕТ. Чтобы выполнить поиск на веб-сайте MySQL по определенной функции, просто добавьте имя этой функции в URL-адрес MySQL. НАПРИМЕР. http://www.mysql.com/SELECT, этот пример будет искать select.

Я создал модифицированную версию поискового буклета Jesse Ruderman для поиска документации MySQL 5.1. Чтобы использовать его, просто выделите подчеркнутое слово, затем нажмите букмарклет, чтобы перейти к результатам поиска. В качестве альтернативы запустите букмарклет ничего не выделяя, чтобы получить окно подсказки с просьбой ввести то, что вы хотите найти.
Закладка:> MySQL SEARCH

Понимание базы данных

Чтобы хранить данные в базе данных, сначала необходимо создать базу данных. Затем эта база данных может хранить множество таблиц (представьте, что в шкафу хранения хранится много файлов); каждая таблица должна иметь определенные столбцы, и эти столбцы создаются для хранения определенных данных (представьте форму ввода данных). Можно ограничить то, что может быть введено в них, например числовые данные или ограничения символов.
После того, как данные будут введены в базу данных, они будут сохранены в соответствующей таблице, тогда таблица будет состоять из строк и столбцов, похожих на таблицу, поскольку данные сохраняются и отображаются в табличной форме. MySQL может управлять несколькими базами данных, которые могут содержать несколько таблиц. Уровни доступа могут предоставляться различным пользователям для предоставления или отзыва определенных привилегий.
MySQL использует команды/функции на основе SQL (язык структурированных запросов). Это позволяет нам использовать ключевые слова, чтобы указать, какие данные мы хотим вернуть. Затем MySQL реализует некоторые дополнительные функции для улучшения доступных функций. Ключевые слова, как правило, легко понять и часто связаны с английским словом или фразой (например SELECT, UPDATE, WHERE).

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

В этой части мы рассмотрим:

  • Установка MySQL на ваш локальный компьютер (windows)
  • Настройка локальной установки MySQL (windows)
  • Подключение к локальной базе данных
  • Подключение к удаленной базе данных
  • Ввод и форматирование запросов
  • Форматирование и протоколирование результатов
  • Резервное копирование базы данных
  • Восстановление базы данных

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

Сегодня мы будем использовать пакет Essentials, который доступен на веб-сайте MySQL по адресу http://dev.mysql.com/downloads/.
На момент написания этой статьи, текущей стабильной версией была 5.1, и я расскажу, как ее установить в операционной системе Windows. Сначала найдите нужное программное обеспечение, я буду использовать 64-битную версию Windows, но вы можете выбрать другую в зависимости от архитектуры вашей системы. Для этой статьи я решил использовать пакет Essentials, поскольку он включает в себя все необходимые функции. Вы можете сравнить различия между версиями windows  по адресу http://dev.mysql.com/doc/refman/5.1/en/windows-choosing-package.html.

Установка MySQL на локальную машину

После того как вы загрузите соответствующий исполняемый файл установки, запустите его, и вам будет предложено вывести это окно. Как вы видите, я устанавливаю версию 5.1.30. Нажмите «Далее», чтобы перейти к следующему экрану.

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

Затем вас попросят подтвердить ваш выбор, нажмите «Установить», если вы согласны, иначе нажмите «Назад», чтобы внести какие-либо изменения.

Будет запущена ваша установка, на этом этапе вы можете получить уведомление от антивируса или управления учетными записями пользователей Windows Vista, в нем указывается, что программа просит установить или получить доступ к определенным файлам. Это будет подписан MySQL AB; это компания, которая работает и поддерживает MySQL, о котором вы можете прочитать на http://www.mysql.com/about/.

После установки убедитесь, что сервер MySQL настроен (если установлен), и нажмите «Готово». Поздравляем, вы успешно установили MySQL Server / components. Затем должен загрузиться мастер настройки экземпляра сервера MySQL. Однако, если он не запускается, не волнуйтесь, вы можете получить к нему доступ в папке программ MySQL (если установлена).

Настройка локальной установки MySQL

Теперь мы настроим вашу установку (если вы установили сервер), нажмите «Далее», чтобы перейти к следующему экрану.

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

Я выбрал это как машину для разработки; однако вы можете выбрать, какой вариант вы предпочитаете. Машина для разработки содержит полный функицонал, но это предотвратит использование слишком большого количества ресурсов. Нажмите «Далее», чтобы перейти к следующему экрану.

Поскольку эта установка предназначена для целей разработки, а не для конкретного проекта, я выбрал многофункциональную базу данных, которая позволяет использовать механизм хранения InnoDB и MyISAM. Подробнее о механизмах хранения можно узнать по адресу http://dev.mysql.com/doc/refman/5.1/en/storage-engines.html. Нажмите «Далее», чтобы перейти к следующему экрану.

Теперь вы должны выбрать, где вы хотите хранить файл данных InnoDB, в зависимости от имеющегося у вас пространства для хранения, которое вы, возможно, захотите изменить, если у вас есть большая емкость или более быстрый диск. Нажмите «Далее», чтобы перейти к следующему экрану.

Теперь вы должны настроить количество одновременных подключений, которые вы собираетесь подключать к своей базе данных в любой момент времени. Выбор DSS позволяет до 100 подключений, но предполагает в среднем 20 одновременных подключений. OLTP поддерживает до 500 одновременных подключений. Однако для нашей машины для разработки мы часто используем только одно соединение; поэтому я установил ручную настройку на 5. Нажмите «Далее», чтобы перейти к следующему экрану.

Теперь вам предоставляется возможность настроить параметры TCP/IP. Я убрал галочку, чтобы отключить этот флажок. Отключив это, он предотвращает удаленные подключения к базе данных. Затем вы можете установить режим сервера, я оставил этот флажок (вы можете подробнее узнать о режимах сервера по адресу http://dev.mysql.com/doc/refman/5.1/en/server-sql-mode.html) , Нажмите «Далее», чтобы перейти к следующему экрану.

Теперь нам нужно выбрать, какой набор символов/ кодировку мы будем использовать. Я выбрал UTF8, поскольку она позволяет вводить символы на разных языках. Нажмите «Далее», чтобы перейти к следующему экрану.

Теперь вам нужно решить, хотите ли вы запускать сервер в качестве службы, вы можете настроить имя службы в раскрывающемся списке. Установив MySQL как службу по умолчанию, сервер будет запущен автоматически и перезапустится даже с ошибкой. Я рекомендую использовать приведенную выше настройку. Вы также можете включить файлы MySQL Bin в путь windows. Это позволяет нам вызывать MySQL непосредственно из командной строки, я также рекомендую это сделать. Нажмите «Далее», чтобы перейти к следующему экрану.

Теперь вы должны указать пароль для учетной записи root. Это учетная запись «master» с полными привилегиями (имя пользователя учетной записи будет «root»); Я не рекомендую оставлять его пустым! Выбор для включения доступа к корневым машинам по умолчанию отключен; Я сохранил его таким образом, так как отключил настройки TCP/IP, но он также открывает более высокий риск для безопасности, если детали попадают в чужие руки. Я также отключил выбор, чтобы включить анонимную учетную запись, поскольку эта база данных предназначена для личного использования. Нажмите «Далее», чтобы перейти к следующему экрану.

Теперь ваша конфигурация установки готова к применению, нажмите «выполнить», чтобы запустить процесс.
Затем вы получите сообщение об успешном конфигурировании. После завершения нажмите кнопку завершения, чтобы выйти из этого мастера. Теперь вы успешно завершили настройку.
Если вы устанавливаете MySQL в другой операционной системе или хотите взглянуть на официальную документацию, то ее можно найти по адресу http://dev.mysql.com/doc/refman/5.1/en/installing.html.

Подключение к локальной базе данных

Теперь, когда у вас установлен сервер, мы можем подключиться к нему!

Я собираюсь использовать Windows CLI (интерфейс командной строки) для инициализации соединения, но вы можете использовать MySQL CLI, найденный в папке программ MySQL.
Сначала откройте командную строку, открыв диалоговое окно запуска, которое находится в меню «Пуск», затем введите CMD и нажмите [ENTER]; под котором вы увидите окно, подобное приведенному ниже.

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

mysql [host] [port] [username] [password] [database]

Каждый из этих аргументов может быть передан команде mysql следующим образом:

  • —host=host или -hhost
  • —port=port или -P
  • —username=username or -uusername
  • —password=password or -ppassword
  • база данных задается просто как строка (например db_name)

Примечание. Если вы печатаете строку пароля так, то она будет видна на экране, если вы предпочитаете, вы можете просто предоставить команду -p или -password без пароля, который будет представлен со скрытой подсказкой ввода пароля. Нам также не нужен командный терминатор, поскольку мы вводим в CLI Windows на данный момент не MySQL.

Так как мы хотим подключиться к нашему локальному компьютеру, так что мы можем исключить аргумент host (см. соединение с удаленным хостом позже в этой статье). Мы хотим войти в нашу учетную запись root, чтобы получить полные привилегии, поэтому нам понадобятся наши имя пользователя и пароль; поскольку в настоящее время у нас нет каких-либо баз данных, мы также не будем указывать аргумент базы данных.
Я буду подключаться к учетной записи пользователя root на моей локальной машине с паролем «secret», используя следующую команду:

mysql -uroot -psecret

Эта команда соединится с MySQL с использованием пользователя root и паролем secret. Следующие команды достигнут того же результата.

mysql --username=root --password=secret
mysql -uroot --password=secret
mysql --username=root -psecret

Учетная запись пользователя «root» — это основная учетная запись MySQL, которая была создана во время установки; это тот же пользователь, с которым вы должны подключаться. Однако имейте в виду, что не рекомендуется оставлять учетную запись root, включенной при веб-установке, для получения дополнительной информации см. Учетные записи пользователей и привилегии на веб-сайте MySQL. (http://dev.mysql.com/doc/refman/ 5.1 / о / добавления-users.html)

Подключение к удаленной базе данных

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

Закрытие соединения

Чтобы отключиться от сеанса MySQL, отправьте команду QUIT (или q).

QUIT

Форматирование запросов и результатов

Теперь, когда мы подключены (после получения сообщения «Welcome to the MySQL monitor.»), мы готовы отправить наши команды, но сначала есть еще несколько замечаний.

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

Примечание. Этот запрос не будет работать, поскольку у нас нет базы данных, установленной для демонстрационных целей!
Вы можете увидеть код, который я использовал ниже, оба введенных запроса идентичны, но нажав [ENTER], CLI позволяет нам продолжать команду на отдельной строке. MySQL реализовал функцию отмены ввода, если ваша команда охватывает несколько строк, просто выпустите команду clear « c».

SELECT fld_1longlonglong, fld_2longlonglong, fld_3longlonglong, fld_4longlonglong, fld_5longlonglong, fld_6longlonglong, fld_7longlonglong FROM tbl_name WHERE fld_1longlonglong = `datavalue`;

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

  • ;
  • g
  • G

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

Восстановление базы данных

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

Мы собираемся использовать предварительно подготовленную базу данных, доступную по адресу http://dev.mysql.com/doc/#sampledb, прокрутите вниз до тех пор, пока вы не увидите примеры баз данных, и вы хотите продолжить и загрузить базу данных world.

(world.sql).

После подключения к MySQL мы собираемся восстановить базу данных world, так как это резервная копия предыдущей базы данных. Этот файл представляет собой просто список команд MySQL, которые будут запускаться для создания новой базы данных. Этот файл SQL содержит только данные таблицы и не сохраняет информацию о базе данных, поэтому мы должны сначала создать базу данных для хранения таблиц (см. Аналогию в начале статьи).
Примечание. Чтобы эта статья не стала слишком длинной, я буду размещать несколько команд в фрагментах кода, вы можете разделить эти команды или собрать их вместе для поиска завершающих команд, показанных ранее в этой статье. Также имейте в виду, что функции MySQL не чувствительны к регистру, поэтому SELECT — это то же самое, что и select и SeLEcT. Я лично использую функции MySQL, чтобы сделать мои запросы максимально простыми, поскольку запросы становятся длиннее и сложнее.

Чтобы создать базу данных, которую мы собираемся вызвать команду CREATE DATABASE, после создания мы будем использовать USE базу данных.

CREATE DATABASE db_world; USE db_world;

Время импортировать резервную копию, есть много способов сделать это (http://dev.mysql.com/doc/refman/5.0/en/batch-commands.html). Поскольку мы уже подключены к MySQL, мы будем использовать команду SOURCE, за которой следует наше имя файла. Я извлек файл «world.sql» из папки zip и поместил его в свой корневой каталог C: вам нужно знать абсолютный путь к исходному файлу. Если вы укажете только свое имя файла, то MySQL будет искать источник в папке, в которой вы запустили свою командную строку (C:USERSUSERNAME на vista C:Documents and SettingsUsername
на XP). Вы не можете перейти в другой каталог, используя интерфейс MySQL, поэтому убедитесь, что вы предоставили соответствующий абсолютный путь. После выдачи этой команды окно CLI выдает каждую из команд в файле SQL, после завершения вы будете возвращены в приглашение mysql>.

SOURCE C:world.sql;

Теперь у вас есть полностью функциональная база данных. Однако мы еще не знаем, что она содержит! Давайте немного поизучаем ее содержимое; мы будем использовать следующие команды:

  • SHOW TABLES; — это показывает таблицы в текущей базе данных.
  • DESCRIBE tbl_name; — это показывает, какие поля существуют в указанной таблице.
SHOW TABLES;

После выдачи команды мы теперь знаем, что база данных содержит три таблицы: «city», «country» и «countrylanguage». Затем мы узнаем, какие поля хранятся в этих таблицах. Для каждой из таблиц выполните DESCRIBE tbl_name .

После выдачи команды DESCRIBE для таблицы country вы увидите, что она вернула нечитаемый беспорядок, чтобы решить эту проблему, просто используйте терминатор G вместо;.

DESCRIBE city;
DESCRIBE country;
DESCRIBE country G
DESCRIBE countrylanguage;

Теперь у нас есть вся информация, которая нам нужна для управления таблицами по своему желанию, у нас есть имя пользователя, пароль, имя базы данных, имена таблиц и имена полей, если вы работаете на другом языке, таком как PHP, это информация вам потребуется чтобы получить эти данные в вашей системе (см. http://php.net/mysql).

Логирование результатов

Мы можем выбрать логирование вывода MySQL-интерфейса; мы делаем это, отправив команду T filename.txt. Чтобы остановить ведение журнала, мы выдаем команду t. В приведенном ниже примере сохраняется файл с именем log.txt в корневой каталог жесткого диска E:. На моей машине это запасной жесткий диск, обратите внимание, что у вас должно быть разрешение на доступ к этому диску; вы не сможете записать данные в корень на установочном диске Windows в Windows Vista без запуска MySQL из командной строки с повышенными правами.

T E:log.txt
SHOW TABLES;
t

E:log.txt contents:
mysql> SHOW TABLES;
+--------------------+
| Tables_in_db_world |
+--------------------+
| city               | 
| country            | 
| countrylanguage    | 
+--------------------+
3 rows in set (0.00 sec)

mysql> t

Резервное копирование базы данных

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

mysqldump [username] [password] [database name] > [dump file]

Чтобы запустить это, вы должны быть отключены от сеанса MySQL.

Следующий код логируется в сеанс MySQL с учетной записью пользователя root с паролем secret, затем он выгружает таблицу db_world в файл db_worldbak.sql.

mysqldump -uroot -psecret db_world > db_worldbak.sql

Заключение

Прочитав эту статью, я надеюсь, что вы получили четкое представление о том, как взаимодействовать с mysql на уровне командной строки. То, что может оказаться полезным в качестве команд, может быть отправлено непосредственно в базу данных MySQL, а не через другой язык сценариев. Пожалуйста, не останавливайтесь здесь, http://dev.mysql.com/doc/ действительно отличный ресурс, и вы никогда не будете создавать свою собственную базу данных. Ниже я написал для вас несколько базовых запросов для поиска в базе данных world и некоторые примеры. Посмотрим, сможете ли вы их понять, если вы еще не знаете, где находится документация.

SELECT Name, Population
FROM city
WHERE CountryCode='GBR'
ORDER BY Population ASC
LIMIT 0,5G

На английском языке этот запрос SELECT и возвращает Name и Population FROM таблицы city WHERE код страны является GBR, результаты затем фильтруются с использованием ORDER BY Population ASC (возрастающая популяция) и затем LIMIT, чтобы вернуть первые 5 результатов. Этот запрос показывает название и население 5 наименее населенных городов Великобритании.

И еще немного…

SELECT
CONCAT(city.Name,' speak the ', countrylanguage.Language, ' language')AS Detail,
city.Population
FROM city, countrylanguage
WHERE city.CountryCode = countrylanguage.CountryCode
AND city.countryCode = 'GBR'
AND countrylanguage.Language = 'English'
ORDER BY city.Population ASC
LIMIT 5,5 G

На английском языке этот запрос SELECT данные, он CONCAT Name из таблицы city и Language из таблицы countrylanguage и отображает результаты AS Detail запрос также SELECT Population из таблицы city. Снова этот запрос SELECT свои данные FROM таблицы city и таблицы countrylanguage, он возвращает данные, в которых код страны города совпадает с кодом страны на языке страны. Данные отфильтровываются, чтобы отображать страны, WHERE код страны — это GBR, AND язык — английский, затем он ORDER BY возрастающей численности населения, а результаты LIMIT, чтобы показать результаты от 6 до 10. Этот запрос известен как INNER JOIN, поскольку две таблицы связаны между собой в запросе. Этот запрос отобразит 6-ю по 10-ю наименее населенные города с кодом страны GBR, в которых оворят по-английски.

Как я узнал, какие данные нужно писать для этих запросов? Запустив следующий запрос SELECT, он использует символ wild card, чтобы выбрать все поля и вернуть все данные в указанной таблице. Из результата запроса я понял, что было включено, и я сделал некоторые сценарии, которые я хотел запросить.

SELECT * FROM tbl_name;

Вот несколько функций, которые вы можете посмотреть более подробно, чтобы начать работу:

  • SELECT
  • FROM
  • WHERE
  • ПРЕДЕЛ
  • ORDER BY
  • А ТАКЖЕ
  • OR
  • CONCAT
  • ПОКАЗАТЬ БАЗЫ ДАННЫХ
  • USE
  • CREATE
  • ПОКАЗАТЬ ТАБЛИЦЫ
  • DESCRIBE
  • UPDATE

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

  • Подпишитесь на RSS-канал NETTUTS для получения других ежедневных статей по веб-разработоке.

mysql-komandnaya-strokaДоброго времени суток, коллеги 🙂

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

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

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

Ну что ж… Весьма похвально 🙂

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

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

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

Поехали 🙂

  • Когда MySQL командная строка может пригодиться?
  • Запуск консоли на разных ОС
  • Основные команды консоли MySQL
  • Подключение к серверу MySQL в консоли
  • Как создать базу данных в MySQL консоли
  • Как создать пользователя MySQL в командной строке
  • Выбор базы данных при работе с MySQL через командную строку
  • Работа с таблицами MySQL через консоль MySQL
  • Работа с данными таблиц MySQL через командную строку
  • Как удалить базу данных MySQL через командную строку
  • Как удалить пользователя MySQL в консоли
  • Выход из консоли MySQL

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

Хотя, здесь имеет место привычка. Лично у меня есть знакомые из ранга «трушных кодеров», которые являются фанатами консоли со времён MS-DOS и чистого Linux, видимо, где работать с ОС можно было только из консоли.

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

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

У меня на данный момент их было три:

  1. Впервые я столкнулся с работой в MySQL консоли, когда понадобилось сделать импорт большого дампа БД. Через phpMyAdmin он не загружался целиком, т.к. отваливался где-то посередине по таймауту, несмотря на изменение настроек времени выполнения операции и размеров загружаемых файлов. В принципе, можно было подобрать нужные значения, но мне показалось это слишком длительным процессом.
  2. В следующий раз поработать с MySQL через командную строку пришлось для отключения проверки внешних ключей, когда нужно было удалить данные из таблицы, которая с помощью ключей была связана с другими. В phpMyAdmin я просто не нашёл, как это сделать.
  3. В серьёзных компаниях для работы с MySQL используется исключительно консоль без каких-либо phpMyAdmin-ов. Не знаю почему конкретно, но знающие люди говорили, что это как-то связано с безопасностью. В результате, всем приходилось работать с командной строкой MySQL, в том числе и мне 🙂

Но, повторюсь, работа с MySQL в консоли и командной строке вполне подходит и для повседневного использования. Все известные визуальные программы для работы с БД всё равно работают на основе консольных команд MySQL. Поэтому, кому как нравится 🙂

Запуск консоли на разных ОС

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

Действие простое, многим знакомое, для которого достаточно знания «горячих клавиш».

Запуск консоли в Windows:

  • Win+R для открытия командной строки Windows с правами администратора;
  • Вводим команду cmd
  • Нажимаем Enter на клавиатуре

Запуск консоли в Linux дистрибутивах (терминала): в Ubuntu, с которой я работал, достаточно системной комбинации клавиш Ctrl+Alt+T. Про остальные ОС на базе Linux ничего сказать не могу.

Запуска консоли в MacOS: сам я таким не занимался, т.к. Мак-ом ещё не обзавёлся и вряд ли обзаведусь за ненадобностью, но, насколько мне удалось узнать, «горячих клавиш» для вызова терминала в этой ОС нет. Так что если вы являетесь пользователем «яблочной» продукции, то запустите консоль через интерфейс ОС, благо, что мануалов в сети много.

Немного стыдно даже такую информацию публиковать на случай, если на данную статью случайно набредёт какой-то профессиональный системный администратор с бородатым опытом, т.к. он подумает: «Автор считает своих читателей программистами, но при этом учит запускать консоль… Псих какой-то :-)».

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

Основные команды консоли MySQL

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

mysql -V

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

Это позволит нам узнать версию MySQL, установленного на компьютере и убедиться, что он вообще установлен как служба. Если это так, то в ответ в консоли вы увидите примерно следующий текст: mysql Ver 14.14 Distrib 5.7.16, for Win64 (x86_64).

Да, я не «трушный кодер», потому что сижу под Виндой 🙂 Но, не суть. На Unix системах процедура будет такой же.

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

В консоли переходим в каталог, где находится исполняемый файл MySQL (на Windows, по крайней мере, это mysql.exe) следующей командой:

cd C:OpenServermodulesdatabaseMySQL-5.7-x64bin

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

И запускаем MySQL, проверяя попутно его версию:

mysql.exe -V

В результате в консоль должно было вывестись аналогичное первому случаю сообщение mysql Ver 14.14 Distrib 5.7.16, for Win64 (x86_64).

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

Подключение к серверу MySQL в консоли

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

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

mysql

Однако, в таком случае вы получите следующую ошибку: ERROR 1045 (28000): Access denied for user ‘ODBC’@’localhost’ (using password: NO). Так сообщение об ошибке выглядит у меня на Windows. Если же вы используете Linux, то вместо ODBC будет имя вашего системного пользователя, под которым вы совершаете действия в системе.

Всё это потому, что по умолчанию при подключении к MySQL серверу в консоли используется пользователь ODBC на Windows без пароля и системный юзер на Linux с его же паролем. Хост по умолчанию localhost, т.е. данный пользователь может подключаться только с локальной машины.

Поэтому выхода у вас два: либо использовать другого пользователя для входа в командную строку MySQL, либо создать пользователя MySQL с нужной учёткой. Но для второго способа нам без первого всё равно не обойтись 🙂 Поэтому для начала подключаемся к серверу MySQL под стандартным пользователем root, который создаётся при установке MySQL на компьютер и для которого по умолчанию разрешён доступ с localhost:

mysql -u root -p

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

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

mysql -u имя_пользователя -p пароль_пользователя -h хост_или_IP_сервера_MySQL

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

mysql --user=имя_пользователя --password=пароль_пользователя --host=хост_или_IP_сервера_MySQL

Если по какой-то причине вы не хотите, чтобы ваш пароль подключения к MySQL отображался в консоли (что правильно, на самом деле), можете использовать следующую команду:

mysql -u имя_пользователя -h хост_или_IP_сервера_MySQL -p

Поскольку пароль не указан явно, вам будет предложено его ввести на следующем шаге. Причём, введённые вами символы отображены не будут даже в виде звёздочек (wildcards), вместо этого будет просто пустая строка.

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

  1. —port или -P — для указания порта подключения к серверу MySQL;
  2. —protocol — протокол, по которому будет осуществляться подключение (возможные варианты: TCP для Windows и Linux, SOCKET для Linux, PIPE и MEMORY для Windows);
  3. —socket или -S — данный параметр пригодится, если вы захотите подключаться через сокеты, следовательно, значение параметра будет сокет;
  4. —pipe или -W — параметр нужен, если вы захотите использовать именованные «трубопроводы» или «пайпы» для подключения;
  5. —shared-memory-base-name — этот параметр вам пригодится для MEMORY подключений через общую память на Windows;

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

Если по какой-то причине стандартный вариант с указанием хоста, пользователя и пароля вам не подойдёт, то для выяснения полного перечня параметров подключения вам будет полезна следующая информация — https://dev.mysql.com/doc/refman/5.7/en/connecting.html

Как создать базу данных в MySQL консоли

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

CREATE DATABASE имя_базы_данных;

То же самое действие можно сделать и с помощью специальной MySQL утилиты mysqladmin. Запускается она изолированно от командной строки MySQL, т.е. для её использования вам нужно будет выйти из неё или открыть новую консоль сервера.

А затем вызвать следующую команду:

mysqladmin create имя_базы_данных;

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

Более подробно о mysqladmin можете прочитать здесь — https://dev.mysql.com/doc/refman/5.7/en/mysqladmin.html

Как создать пользователя MySQL в командной строке

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

В командной строке MySQL это делается следующим образом:

CREATE USER 'имя_пользователя'@'хост_или_IP_машины' IDENTIFIED BY 'пароль_пользователя';

Пользователь создан. Параметр хост_или_IP_машины означает, что при создании пользователя нужно указывать IP, с которого он сможет подключаться к серверу, или имя хоста (подойдёт доменное имя рабочей машины в сети).

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

При этом нужно учитывать, что в данном случае localhost не входит в список адресов, указываемых с помощью %, т.к. localhost обозначает подключение через UNIX сокет вместо стандартного TCP/IP. Т.е. если созданный пользователь MySQL будет подключаться к серверу не с помощью сокетов, а по другому протоколу, указываемому при соединении с MySQL сервером в консоли, то ему нужно будет создавать две учётные записи пользователя:

CREATE USER 'имя_пользователя'@'%' IDENTIFIED BY 'password';
CREATE USER 'имя_пользователя'@'localhost' IDENTIFIED BY 'password';

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

GRANT ALL PRIVILEGES ON имя_базы_данных.* TO 'имя_пользователя'@'хост_или_IP_машины';

Опция ALL, как вы поняли, как раз и указывает на то, что пользователю разрешаются любые действия с определённой БД. Полный список прав, которые можно выдавать пользователям с помощью команды GRANT, можно найти здесь (правда, описание параметров на английском) — https://dev.mysql.com/doc/refman/5.7/en/grant.html#grant-privileges

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

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

GRANT ALL ON *.* TO 'имя_пользователя'@'хост_или_IP_машины';

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

FLUSH PRIVILEGES;

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

REVOKE ALL PRIVILEGES ON *.* FROM 'имя_пользователя'@'хост_или_IP_машины';

А затем установите ему нужные с помощью GRANT, как это было описано ранее.

Если же вам в будущем потребуется изменить пароль пользователя MySQL, то для этого достаточно выполнить в MySQL Shell следующие команды:

SET PASSWORD FOR 'имя_пользователя'@'хост_или_IP_машины' = PASSWORD('новый_пароль');

FLUSH PRIVILEGES;

Сброс кэша привилегий MySQL сервера нужен с той же целью, что и при смене прав — без этого действия смена пароля пользователя MySQL может быть не засчитана, поэтому не ленитесь пользоваться 🙂

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

UPDATE mysql.user SET Password=PASSWORD('пароль') WHERE User='имя_пользователя';

Но у меня на MySQL 5.7 данный вариант не сработал, выдав ошибку ERROR 1054 (42S22): Unknown column ‘Password’ in ‘field list’. Её причина оказалось отсутствие поля Password в таблице mysql.user.

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

На этом создание нового пользователя MySQL и обзор действий с его правами и паролями закончен. Идём далее.

Выбор базы данных при работе с MySQL через командную строку

Теперь, после создания пользователя в MySQL Shell и назначения ему прав на работу с БД нам нужно выбрать эту самую базу, чтобы можно было оперировать самой базой и хранящимися в ней данными.

Для этого используем следующую команду в MySQL консоли:

USE имя_базы_данных;

Если всё прошло успешно, то в консоли выведется сообщение Database changed, что будет сигнализировать о том, что мы выполнили вход в базу MySQL через консоль. Кстати, при соединении с сервером MySQL, изначально можно указывать БД, с которой необходимо будет работать. Для этого нужно прописать следующую команду в консоли сервера:

mysql --user=имя_пользователя --password=пароль_пользователя --host=хост_или_IP_сервера_MySQL --database=имя_базы_данных

Или то же самое, только с запросом ввода пароля пользователя MySQL:

mysql -u имя_пользователя -h хост_или_IP_сервера_MySQL имя_базы_данных -p

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

Работа с таблицами MySQL через консоль MySQL

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

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

CRUD операции, если кто-то не в курсе, — это операции по созданию, чтению, обновлению и удалению данных от англ. «Create, Read, Update, Delete» (возможно, на собеседованиях вам такое понадобится).

Напоминаю, что для выполнения действий с таблицами вы должны сперва подключиться к БД MySQL с помощью команды USE.

Итак, первая на повестке у нас команда создания таблицы MySQL в БД через командную строку, которая выглядит так:

CREATE TABLE имя_таблицы (название_поля_1 тип_поля_1, название_поля_2 тип_поля_2(размер_поля_2), INDEX(название_поля_1), ...);

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

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

CREATE TABLE новое_имя_таблицы LIKE старое_имя_таблицы;
INSERT новое_имя_таблицы SELECT * FROM старое_имя_таблицы;

Данные команды позволяют скопировать структуру таблицы и её данные вместе с индексами и триггерами таблиц. Если вам нужны просто данные и структура (имена полей и их типов данных), то можете обойтись вызовом одной команды:

CREATE TABLE новое_имя_таблицы AS SELECT * FROM старое_имя_таблицы;

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

SHOW FULL COLUMNS FROM имя_таблицы;
DESCRIBE имя_таблицы;
EXPLAIN имя_таблицы;
SHOW CREATE TABLE имя_таблицы;

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

Вторая и третья команды являются просто сокращёнными формами первой команды без расширенной информации. Зачем было их плодить — даже не представляю… Разве что, чтобы было что спросить на собеседованиях при приёме на работу? 🙂

Четвёртая команда, помимо имени, типов полей и значений их по умолчанию позволяет получить значения ключей таблиц, движков таблиц (InnoDB, MyISAM), кодировку и др.

Update операция в случае таблиц представляет собой изменение их структуры, т.е. различные действия с полями таблиц MySQL:

ALTER TABLE имя_таблицы DROP COLUMN название_поля;
ALTER TABLE имя_таблицы ADD COLUMN название_поля VARCHAR(20);
ALTER TABLE имя_таблицы CHANGE старое_название_поля новое_название_поля VARCHAR(50);
ALTER TABLE имя_таблицы MODIFY название_поля VARCHAR(3);

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

Тоже самое можно делать и с индексами таблиц с помощью во многом похожих команд:

ALTER TABLE имя_таблицы ADD UNIQUE INDEX имя_индекса (название_поля_1, ...);
ALTER TABLE имя_таблицы rename INDEX старое_имя_индекса TO новое_имя_индекса;
ALTER TABLE имя_таблицы DROP INDEX имя_индекса;

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

CREATE UNIQUE INDEX имя_индекса (название_поля_1, ...) ON имя_таблицы;
DROP INDEX имя_индекса ON имя_таблицы;

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

Ну, и наконец, мы дошли до последней операции из блока CRUD — к удалению. Удалить таблицы MySQL из БД очень просто. Достаточно в консоли MySQL выполнить следующую команду:

DROP TABLE имя_таблицы;

Иногда на практике возникают ситуации, из-за которых не получается удалить таблицу или изменить её структуру. Как правило, это связано с использованием в БД внешних ключей для связи таблиц между собой. С этой ситуацией я лично сталкивался неоднократно, о чём говорил в начале статьи.

Поэтому, если при удалении или обновлении структуры таблицы или её данных MySQL вернул вам ошибку с текстом Cannot delete or update a parent row: a foreign key constraint fails, то следующая информация вам будет как нельзя кстати.

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

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

Итак, для удаления данных, которому мешают внешние ключи необходимо выполнить следующие действия в консоли MySQL:

SET FOREIGN_KEY_CHECKS=0;
#необходимая_mysql_команда
SET FOREIGN_KEY_CHECKS=1;

Кстати, если захотите удалить внешний ключ, то процедура будет такой же, как и при удалении индекса:

ALTER TABLE имя_таблицы DROP FOREIGN KEY имя_внешнего_ключа;

Чтобы узнать имя внешнего ключа MySQL таблицы, используйте уже знакомую команду MySQL консоли SHOW CREATE TABLE.

Работа с данными таблиц MySQL через командную строку

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

CRUD операции для работы с данными таблиц MySQL будут выглядеть так:

INSERT INTO имя_таблицы (поле1, поле2, ...) VALUES (значение_поля_1, значение_поля_2, ...);
SELECT поле1, поле2, ... FROM имя_таблицы;
UPDATE имя_таблицы SET поле1 = значение_поля_1, поле2 = значение_поля_2;
DELETE FROM имя_таблицы WHERE поле1 = значение_поля_1;

Приведённые выше команды соответствуют операциям создания, чтения, обновления и удаления данных из таблиц БД MySQL. При использовании SELECT и UPDATE также возможно использовать уточняющий оператор WHERE, с помощью которого можно конкретизировать выбор данных способом, описанным в случае использования DELETE.

Также при выборке данных из БД с помощью SELECT можно использовать следующий вариант для получения значений всех полей таблицы:

SELECT * FROM имя_таблицы;

Естественно, что в данных операциях могут использоваться и другие операторы, помимо WHERE. Особенно их много при выборке данных с помощью SELECT: тут и UNION для объединения результатов нескольких запросов, и различные типы JOIN. Все перечислять очень долго и утомительно как для меня, так и для вас будет читать это.

Поэтому давайте договоримся: если вам захочется о чём-то узнать поподробнее — просто напишите об этом в комментариях, и я постараюсь вам ответить. Или же это сделают другие сведущие участники нашего сообщества. Ок? 😉

Так что пока на данном блоке останавливаться не будем.

Если же вам нужно будет удалить все данные из таблицы, то можете воспользоваться следующей MySQL командой:

TRUNCATE имя_таблицы;

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

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

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

Т.е., если до удаления данных таблицы с помощью TRUNCATE максимальное значение счётчика было 1200, то у первой записи после данной процедуры значение идентификатора будет 1201. В принципе, ничего страшного. Если вы задали достаточный размер для данного поля, то переполнение значений вам грозит не скоро.

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

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

TRUNCATE TABLE someTable RESTART IDENTITY;

Данный вариант вызова команды TRUNCATE позволит вам сбросить значение счётчика полей с AUTO_INCREMENT. Поэтому значение поля первой добавленной записи после данного удаления будет 1 вместо 1201, как в примере выше.

Как удалить базу данных MySQL через командную строку

Жизненный цикл работы с базой данных подходит к концу и завершается вполне логично — её удалением. Для того, чтобы сделать данную операцию в консоли MySQL, нужно выполнить следующую команду (при этом удаляемая БД может быть и не выбрана командой USE):

DELETE DATABASE имя_базы_данных;

То же самое действие можно сделать и с помощью MySQL утилиты mysqladmin, о которой я уже упоминал в начале статьи при создании БД:

mysqladmin drop имя_базы_данных;

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

Dropping the database is potentially a very bad thing to do.
Any data stored in the database will be destroyed.

Do you really want to drop the ‘имя_базы_данных’ database [y/N]

Вкратце — это предупреждение о том, что удаление базы данных MySQL — идея очень плохая. Также запрашивается подтверждение действия. Если согласны — пишем y и нажимаем Enter на клавиатуре, после чего на экран выведется следующее сообщение (если всё прошло успешно, конечно же):

Database «имя_базы_данных» dropped

Вот так 🙂

Как удалить пользователя MySQL в консоли

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

Начиная с MySQL 5.7 для обоих этих действий существует одна команда:

DROP USER IF EXISTS имя_пользователя;

В более ранних версиях MySQL требовалось две отдельные команды:

GRANT USAGE ON *.* TO 'имя_пользователя'@'хост_или_IP_адрес';
DROP USER 'имя_пользователя'@'хост_или_IP_адрес';

К сожалению, в данном случае сообщение о выполнении операции в консоли MySQL традиционно малоинформативно 🙁 Поэтому, чтобы узнать, что удаление пользователя пользователь MySQL всё-таки произошло, можно воспользоваться следующей командой, которая выводит на экран список всех существующих на текущем MySQL сервере пользователей:

SELECT User FROM mysql.user;

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

SELECT User, Host, Grant_priv FROM mysql.user;

Также в таблице mysql.user существует масса других полей, в которых хранятся другие типы привилегий и прочая информация, с полным списком которой можно познакомиться здесь — https://mariadb.com/kb/en/library/mysqluser-table/

Не смущайтесь, что это документация к СУБД MariaDB. Технически это то же самое, что и MySQL, т.к. MariaDB является всего лишь её ответвлением или форком от англ «fork» — ответвление, вилка.

Зачем её было делать — снова без понятия 🙂 Разве что, чтобы всем гордо заявлять, что «у меня своя СУБД»?.. Но о точных мотивах и различиях MySQL и MariaDB я, честно говоря, не сильно в курсе. Поэтому если вы что-то об этом знаете — было бы интересно прочитать об этом в комментариях.

Выход из консоли MySQL

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

Осталось только выйти из неё…

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

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

vykhod-iz-mysql-v-konsoli

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

Вот и всё, что я хотел вам сегодня рассказать. Надеюсь, что моя шпаргалка по работе с командной строкой MySQL через консоль пригодится не только мне, но и вам.

Говоря о практическом применении изложенной в статье информации хочется напомнить, что приведёнными конструкциями можно пользоваться не только в командной строке MySQL и консоли сервера, но и в консоли phpMyAdmin и прочего ПО, которое предоставляет такую возможность.

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

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

Обещаю, что в процессе вы узнаете много нового, как и я при написании каждой своей статьи 🙂

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

На этом всё! Удачи и до новых встреч 🙂

P.S.: если вам нужен сайт либо необходимо внести правки на существующий, но для этого нет времени и желания, могу предложить свои услуги.

Более 5 лет опыта профессиональной разработки сайтов. Работа с PHP, OpenCart, WordPress, Laravel, Yii, MySQL, PostgreSQL, JavaScript, React, Angular и другими технологиями web-разработки.

Опыт разработки проектов различного уровня: лендинги, корпоративные сайты, Интернет-магазины, CRM, порталы. В том числе поддержка и разработка HighLoad проектов. Присылайте ваши заявки на email cccpblogcom@gmail.com.

И с друзьями не забудьте поделиться 😉

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

Начало работы с MySQL

Введение

MySQL — это популярный сервер баз данных, используемый в разных приложениях. SQL означает язык структурированных запросов — (S)tructured (Q)uery (L)anguage, который MySQL использует для коммуникации с другими программами. Сверх того, MySQL имеет свои собственные расширенные функции SQL для того чтобы обеспечить пользователям дополнительный функционал. В этом документе мы рассмотрим как провести первоначальную установку MySQL, настроить базы данных и таблицы, и создать новых пользователей. Давайте начнем с установки.

Установка MySQL

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

По завершении установки, вы увидите следующее уведомление:

Код Сообщение einfo MySQL

You might want to run:
"emerge --config =dev-db/mysql-[version]"
if this is a new install.

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

root #emerge --config =dev-db/mysql-[version]

 * MySQL DATADIR is /var/lib/mysql
 * Press ENTER to create the mysql database and set proper
 * permissions on it, or Control-C to abort now...
 
   Preparing db table
   Preparing host table
   Preparing user table
   Preparing func table
   Preparing tables_priv table
   Preparing columns_priv table
   Installing all prepared tables
 
   To start mysqld at boot time you have to copy support-files/mysql.server
   to the right place for your system
 
   PLEASE REMEMBER TO SET A PASSWORD FOR THE MySQL root USER !
   To do so, issue the following commands to start the server
   and change the applicable passwords:
 
   /etc/init.d/mysql start
   /usr/bin/mysqladmin -u root -h pegasos password 'new-password'
   /usr/bin/mysqladmin -u root password 'new-password'
   Depending on your configuration, a -p option may be needed
   in the last command. See the manual for more details.

Заметка
Если предыдущая команда не выполнится из-за того, что имя хоста установлено в localhost, измените его на другое имя, например gentoo. Обновите файл /etc/conf.d/hostname и перезапустите /etc/init.d/hostname.

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

Важно
Начиная с mysql-4.0.24-r2, пароли вводятся во время этапа конфигурации, что делает пароль root более надежным.

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

Если вы используете OpenRC, выполните данную команду:

root #/etc/init.d/mysql start

 * Re-caching dependency info (mtimes differ)...
 * Starting mysqld (/etc/mysql/my.cnf) ...        [ ok ]

Если вы используете systemd, вместо этого используйте следующую команду:

root #systemctl restart mysqld.service

With >=dev-db/mariadb-10.1.18, use:

root #systemctl restart mariadb.service

После этого установите пароль root:

root #/usr/bin/mysqladmin -u root -h localhost password 'new-password'

Теперь вы можете проверить, что пароль root был успешно настроен, попытавшись войти на MySQL-сервер:

user $mysql -u root -h localhost -p

Enter password:
Welcome to the MySQL monitor. Commands end with ; or g.
Your MySQL connection id is 4 to server version: 4.0.25
 
Type 'help;' or 'h' for help. Type 'c' to clear the buffer.
 
mysql>

Параметр -u указывает пользователя, который будет выполнять вход. Параметр -h указывает хост. Обычно это будет localhost, если только вы не настраиваете удаленный сервер. И, наконец, -p сообщает клиенту mysql что вы будете вводить пароль для доступа к базе данных. Обратите внимание на приглашение mysql>. Это то место, где вы будете вводить все ваши команды. Теперь, когда мы в командной строке mysql в качестве пользователя root, мы можем начать настраивать нашу базу данных.

Важно
Установка mysql по умолчанию приемлема для систем разработки. Для более безопасных значений по умолчанию можно запустить /usr/bin/mysql_secure_installation

Настройка Базы Данных

Создание Базы Данных

Мы вошли и приглашение mysql показано на экране. Сначала, давайте рассмотрим базы данных, которые у нас имеются в настоящий момент. Чтобы это сделать, мы используем команду SHOW DATABASES.

mysql>SHOW DATABASES;

+----------+
| Database |
+----------+
| mysql    |
| test     |
+----------+
2 rows in set (0.09 sec)

Важно
Пожалуйста, запомните что команды MySQL должны оканчиваться точкой с запятой — ;

Вопреки тому факту, что тестовая база данных уже создана, мы собираемся создать нашу собственную. Базы данных создаются с использованием команды CREATE DATABASE. Мы создадим одну из них под названием gentoo.

mysql>CREATE DATABASE gentoo;

Query OK, 1 row affected (0.08 sec)

Ответ позволяет нам узнать, что команда была выполнена без ошибок. В этом случае, одна строка была изменена. Это является отсылкой к основной базе данных mysql, которая содержит список всех баз данных. Вам не нужно сильно беспокоиться о второстепенных деталях. Последнее число является характеристикой того, насколько быстро был выполнен запрос. Мы можем проверить, что база данных была создана, запустив команду SHOW DATABASES снова.

mysql>SHOW DATABASES;

+----------+
| Database |
+----------+
| gentoo   |
| mysql    |
| test     |
+----------+
3 rows in set (0.00 sec)

В самом деле, наша база данных была создана. Для того чтобы работать с созданием таблиц для нашей новой базы данных gentoo, нам надо выбрать ее в качестве текущей базы данных. Чтобы это сделать, мы используем команду USE. Команда USE принимает имя базы данных, которую вы хотите использовать в качестве текущей. Другой возможностью является ее установка в командной строке после параметра -D. Давайте продолжим и переключимся к базе данных gentoo.

mysql>USE gentoo;

Database changed

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

Работа с таблицами в MySQL

Создание таблицы

В структуру MySQL входят базы данных, таблицы, записи, и поля. Базы данных объединяют таблицы, таблицы объединяют записи, записи объединяют поля, которые содержат действительную информацию. Такая структура позволяет пользователям выбирать как они хотят обращаться к своей информации. На данный момент, мы разобрались с базами данных, теперь давайте поработаем с таблицами. Во-первых, таблицы могут быть перечислены, подобно базам данных, с использованием команды SHOW TABLES. Сейчас, в базе данных gentoo не имеется таблиц, как и показывает нам следующая команда:

mysql>SHOW TABLES;

Empty set (0.00 sec)

Это означает нам надо создать какие-либо таблицы. Чтобы это сделать, мы используем команду CREATE TABLE. Однако, эта команда достаточно отличается от простой команды CREATE DATABASE тем что принимает список аргументов. Формат команды следует ниже:

Код Синтаксис CREATE TABLE

CREATE TABLE [table_name] ([field_name] [field_data_type]([size]));

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

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

field_data_type — это то, какой тип информации будет сохранен. Различные доступные форматы могут быть найдены по адресу MySQL Column Types Page . Для наших целей, мы будем использовать тип данных VARCHAR для всех наших полей. VARCHAR — это один из простейших типов данных, когда дело касается работы со строками.

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

mysql>CREATE TABLE developers ( name VARCHAR(128), email VARCHAR(128), job VARCHAR(128));

Query OK, 0 rows affected (0.11 sec)

Похоже, наша таблица была успешно создана. Давайте проверим это командой SHOW TABLES:

mysql>SHOW TABLES;

+------------------+
| Tables_in_gentoo |
+------------------+
| developers       |
+------------------+
1 row in set (0.00 sec)

Да, наша таблица существует. Однако, она, по-видимому, не имеет никакой информации о типах полей, которые мы создали. Для этого, мы используем команду DESCRIBE (или, кратко, DESC), которая принимает имя таблицы в качестве своих аргументов. Давайте посмотрим что она нам даст для нашей таблицы developers.

mysql>DESCRIBE developers;

+-------+--------------+------+-----+---------+-------+
| Field | Type         | Null | Key | Default | Extra |
+-------+--------------+------+-----+---------+-------+
| name  | varchar(128) | YES  |     | NULL    |       |
| email | varchar(128) | YES  |     | NULL    |       |
| job   | varchar(128) | YES  |     | NULL    |       |
+-------+--------------+------+-----+---------+-------+
3 rows in set (0.00 sec)

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

Заполнение Базы Данных MySQL

Мы заполним таблицу (или добавим в нее данные), используя команду INSERT. Подобно команде CREATE TABLE, она также имеет особый формат:

Код Синтаксис INSERT

INSERT INTO table (col1, col2, ...) VALUES('value1', 'value2', ...);

Эта команда используется для вставки записи в таблицу. table содержит таблицу MySQL, в которую мы хотим ввести информацию. Имя таблицы может сопровождаться списком столбцов для вставки данных, VALUES() хранит значения, которые вы хотите вставить в таблицу. Вы можете опустить список столбцов, если вы вставляете значение в каждый из них и если Вы пишете значения в том же порядке, в котором определены столбцы. В данном случае, мы хотим вставить данные в таблицу developers. Давайте добавим примеры записей:

mysql>INSERT INTO developers VALUES('Joe Smith', 'joesmith@gentoo.org', 'toolchain');

Query OK, 1 row affected (0.06 sec)
## (Если вы не знаете порядок столбцов в таблице или хотите вставить неполную запись)
mysql> INSERT INTO developers (job, name) VALUES('outsourced', 'Jane Doe');
Query OK, 1 row affected (0.01 sec)

В соответствии с полученным результатом, кажется, запись была вставлена правильно. Что если мы хотим ввести больше, чем просто одну запись? Это тот случай, когда команда LOAD DATA вступает в действие. Она загружает записи из файла, разделенного символами табуляции. Давайте это попробуем, отредактировав файл в домашнем каталоге пользователя и добавив в него записи. Мы назовем этот файл records.txt . Здесь приведен пример:

Код ~/records.txt

John Doe	johndoe@gentoo.org	portage
Chris White	chriswhite@gentoo.org	documentation
Sam Smith	samsmith@gentoo.org	amd64

Важно
Убедитесь, что вы знаете, с какими данными вы будете работать. Очень небезопасно использовать LOAD DATA, когда вы не уверены насчет содержимого файла!

Команда LOAD DATA имеет в каком-то смысле пространное определение, но здесь мы используем ее самую простую форму.

Код Синтаксис LOAD DATA

LOAD DATA LOCAL INFILE '/path/to/filename' INTO TABLE table;

/path/to/filename — это каталог и имя файла, которые будут использоваться. table — это имя нашей таблицы. В этом случае, наш файл — ~/records.txt, а имя таблицы — developers.

mysql>LOAD DATA LOCAL INFILE '~/records.txt' INTO TABLE developers;

Query OK, 3 rows affected (0.00 sec)
Records: 3  Deleted: 0  Skipped: 0  Warnings: 0

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

Сработало хорошо. Однако, это просто вставляет записи, и не дает вам какого-либо контроля над MySQL. Множество веб-приложений используют скрипты sql для того чтобы настроить MySQL быстро и легко. Если вы хотите использовать скрипты sql, вам нужно запустить mysql в пакетном режиме, или использовать файл в качестве источника команд. Здесь приведен пример запуска mysql в пакетном режиме:

user $mysql -u root -h localhost -p < sqlfile

Как и в случае с LOAD DATA, убедитесь, что вы можете сказать что делает файл sqlfile. Невозможность этого может скомпрометировать вашу базу данных! Другим способом выполнения этого является использование команды source. Эта команда запустит команды из файла sql, находясь в интерактивном режиме mysql. Здесь показано как использовать sql file в качестве источника команд:

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

Запросы к Таблицам MySQL

Запросы являются одной из основных функций любой базы данных SQL. Они помогают превратить данные в таблицах во что-то полезное. Большинство запросов выполняются командой SELECT . Команда SELECT — довольно сложна, и мы рассмотрим только три основных формы этой команды в данном документе.

Код Виды команды SELECT

## (Выбрать все записи в таблице)
SELECT * FROM table;
## (Выбрать определенные записи в таблице)
SELECT * FROM table WHERE field=value;
## (Выбрать определенные поля)
SELECT field1,field2,field3 FROM table [WHERE field=value];

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

mysql>SELECT * FROM developers;

+-------------+-----------------------+----------------+
| name        | email                 | job            |
+-------------+-----------------------+----------------+
| Joe Smith   | joesmith@gentoo.org   | toolchain      |
| John Doe    | johndoe@gentoo.org    | portage        |
| Chris White | chriswhite@gentoo.org | documentation  |
| Sam Smith   | samsmith@gentoo.org   | amd64          |
| Jane Doe    | NULL                  | Outsourced job |
+-------------+-----------------------+----------------+
5 rows in set (0.00 sec)

Мы видим как данные, которые мы добавили с INSERT, так и вставленные LOAD DATA. Теперь, давайте предположим что мы просто хотим посмотреть запись для Chris White. Мы можем сделать это с помощью второй формы команды select, как показано ниже.

mysql>SELECT * FROM developers WHERE name = 'Chris White';

+-------------+-----------------------+---------------+
| name        | email                 | job           |
+-------------+-----------------------+---------------+
| Chris White | chriswhite@gentoo.org | documentation |
+-------------+-----------------------+---------------+
1 row in set (0.08 sec)

Как предполагалось, выбрана отдельная запись, которую мы искали. Теперь, предположим, мы только хотели узнать должность и email адрес данной персоны, но не ее имя. Мы можем это выполнить с помощью третьей формы SELECT , как здесь и показано.

mysql>SELECT email,job FROM developers WHERE name = 'Chris White';

+-----------------------+---------------+
| email                 | job           |
+-----------------------+---------------+
| chriswhite@gentoo.org | documentation |
+-----------------------+---------------+
1 row in set (0.04 sec)

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

Привилегии MySQL

Привилегии — это то, каким доступом обладают пользователи к базам данных, таблицам, почти ко всему. На данный момент в базе данных gentoo, учетная запись MySQL root — это единственная учетная запись, которая может получить к ней доступ, учитывая ее разрешения. Теперь, давайте создадим двух обычных пользователей, guest и admin, которые получат доступ к базе данных gentoo и будут работать с информацией, хранящейся в ней. Учетная запись guest будет ограниченной в правах. Все, что он сможет сделать, это получить информацию из базы данных, и только это. admin будет иметь те же самые права на управление, что и root, но только к базе данных gentoo (а не основным базам данных mysql). Перед тем как начать, давайте рассмотрим подробнее этот, в некотором смысле, упрощенный формат команды GRANT.

Creating users

The CREATE USER SQL statement will define users and set the authentication method, commonly by password but other plugins may be available.

An example CREATE USER command is:

Код CREATE USER Syntax

CREATE USER '[user]'@'[host]' IDENTIFIED BY '[password]';

user is the name of the user and host is the hostname the user will be accessing from. In most cases, this will be localhost. To create our users for this example:

(admin)

mysql>CREATE USER 'admin'@'localhost' IDENTIFIED BY 'password';

(guest)

mysql>CREATE USER 'guest'@'localhost' IDENTIFIED BY 'password';

Важно
A host of ‘localhost’ does not mean DNS localhost (127.0.0.1) to MySQL. Instead, it refers to the UNIX socket connection and not TCP/IP.

Предоставление Привилегий Командой GRANT

Let’s have a closer look at this somewhat simplified format of the GRANT command.

Код Синтаксис команды GRANT

GRANT [privileges] ON database.* TO '[user]'@'[host]' IDENTIFIED BY '[password]';

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

  • ALL — Дает полный контроль базы данных со всеми привилегиями
  • CREATE — Позволяет пользователям создавать таблицы
  • SELECT — Позволяет пользователям делать запросы к таблицам
  • INSERT — Позволяет пользователям вставлять данные в таблицу
  • SHOW DATABASES — Позволяет пользователям просматривать список баз данных
  • USAGE — Пользователь не имеет привилегий
  • GRANT OPTION — Позволяет пользователям предоставлять привилегии

Заметка
Если вы запустили MySQL чтобы передавать данные веб-приложению, CREATE, SELECT, INSERT (обсуждалось здесь же), DELETE и UPDATE (для получения дальнейшей информации посмотрите раздел Справочного Руководства MySQL — Синтаксис GRANT и REVOKE) — это единственные разрешения, которые вам, скорее всего, понадобятся. Большинство делает ошибку, предоставляя все разрешения, когда в этом нет действительной необходимости. Сверьтесь с разработчиками приложения, чтобы посмотреть, не вызовут ли такие разрешения проблемы в общей работе.

Для пользователя admin, подойдет уровень ALL. Для пользователя guest, SELECT будет достаточно для доступа только на чтение. database — это база данных, над которой пользователь, как мы того желаем, должен иметь эти разрешения. В этом примере, базой данных является gentoo. .* означает все таблицы. Если бы вы хотели, вы могли бы установить права доступа для каждой из таблиц. user — это имя пользователя, а host — имя хоста, с которого пользователь будет получать доступ. В большинстве случаев, это будет localhost. И наконец, password — это пароль пользователя. Учитывая эту информацию, давайте продолжим и создадим наших пользователей.

mysql>GRANT ALL ON gentoo.* TO 'admin'@'localhost' IDENTIFIED BY 'password';

mysql>GRANT SELECT ON gentoo.* TO 'guest'@'localhost' IDENTIFIED BY 'password';

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

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

Проверка Пользовательских Разрешений

Сейчас мы должны попытаться войти в качестве пользователя guest. В настоящий момент, пользователь guest имеет только привилегии SELECT. Это, просто-напросто, сводится к способности поиска в базе данных, и ничему другому. Продолжайте и войдите как пользователь guest.

user $mysql -u guest -h localhost -p

Enter password:
Welcome to the MySQL monitor. Commands end with ; or g.
Your MySQL connection id is 6 to server version: 4.0.25
 
Type 'help;' or 'h' for help. Type 'c' to clear the buffer.
 
mysql>

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

mysql>USE gentoo;

Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A
 
Database changed

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

mysql>CREATE TABLE test (test VARCHAR(20), foobar VARCHAR(2));

ERROR 1044: Access denied for user: 'guest@localhost' to database 'gentoo'

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

mysql>SELECT * FROM developers;

+-------------+-----------------------+----------------+
| name        | email                 | job            |
+-------------+-----------------------+----------------+
| Joe Smith   | joesmith@gentoo.org   | toolchain      |
| John Doe    | johndoe@gentoo.org    | portage        |
| Chris White | chriswhite@gentoo.org | documentation  |
| Sam Smith   | samsmith@gentoo.org   | amd64          |
| Jane Doe    | NULL                  | Outsourced job |
+-------------+-----------------------+----------------+
5 rows in set (0.00 sec)

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

user $mysql -u admin -h localhost -p

Enter password:
Welcome to the MySQL monitor. Commands end with ; or g.
Your MySQL connection id is 7 to server version: 4.0.25
 
Type 'help;' or 'h' for help. Type 'c' to clear the buffer.
 
mysql>

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

mysql>CREATE DATABASE gentoo2;

ERROR 1044: Access denied for user: 'admin@localhost' to database 'gentoo2'

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

mysql>USE gentoo;

Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A
 
Database changed
mysql> INSERT INTO developers VALUES('Bob Simmons', 'bobsimmons@gentoo.org', 'python');
Query OK, 1 row affected (0.08 sec)

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

Удаление Прав Доступа Пользователя Командой REVOKE

Команда REVOKE позволяет нам запретить доступ пользователю. Мы можем запретить или все права на доступ, или определенные права. В действительности, формат весьма схож с командой GRANT .

Код Синтаксис REVOKE

REVOKE [privileges] ON database.* FROM '[user]'@'[host]';

Здесь, параметры объясняются в разделе команды GRANT . Однако же, в этом разделе, мы собираемся запретить пользователю доступ полностью. Давайте предположим, мы обнаружили, что учетная запись guest вызывает некоторые проблемы с безопасностью. Мы решаем отозвать все привилегии. Мы заходим под учетной записью root и делаем то, что необходимо.

mysql>REVOKE ALL ON gentoo.* FROM 'guest'@'localhost';

Query OK, 0 rows affected (0.00 sec)

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

Давайте теперь выйдем и попытаемся зайти в качестве пользователя guest.

user $mysql -u guest -h localhost -p

Enter password:
Welcome to the MySQL monitor. Commands end with ; or g.
Your MySQL connection id is 9 to server version: 4.0.25
 
Type 'help;' or 'h' for help. Type 'c' to clear the buffer.
 
mysql>

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

mysql>USE gentoo;

ERROR 1044: Access denied for user: 'guest@localhost' to database 'gentoo'

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

Удаление Учетных Записей с Использованием DELETE

Таблица пользователей MySQL является перечислением всех пользователей и информации о них. Убедитесь, что вы выполнили вход под root. Затем продолжайте и используйте основную базу данных MySQL.

DROP USER will delete the record in the user table and all privilege tables. Let’s go ahead and do that:

mysql>DROP USER 'guest'@'localhost';

Query OK, 1 row affected (0.07 sec)

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

user $mysql -u guest -h localhost -p

Enter password:
ERROR 1045: Access denied for user: 'guest@localhost' (Using password: YES)

Наш пользователь успешно удален!

Заключение

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

  • phpMyAdmin — Популярный инструмент администрирования MySQL, основанный на php.
  • mysqlnavigator — Интерфейс QT к MySQL.
  • gmyclient — MySQL клиент, основанный на GNOME.
  • knoda — клиент MySQL для KDE.

Это завершает вводное руководство к MySQL. Я надеюсь это дало вам лучшее понимание основ MySQL и настройки базы данных.


This page is based on a document formerly found on our main website gentoo.org.
The following people contributed to the original document: Chris White, Shyam Mani, Xavier Neys
They are listed here because wiki history does not allow for any external attribution. If you edit the wiki article, please do not add yourself here; your contributions are recorded on each article’s associated history page.

  1. Скачиваем Community Server в виде zip-архива.
    (Если пугают новшества последних версий, можно остановиться на 5.7. Например, 5.7.26-winx64.)
    На странице загрузки можно перейти по ссылке No thanks, just start my download в нижней части страницы.

  2. Распаковываем куда-нибудь.

  3. Удаляем папку lib (она содержит исходный код для самостоятельной компиляции и при работе сервера не требуется).
    Также можно удалить файлы bin/*.pdb (они нужны только для отладки исполняемых файлов MySQL и при обычной работе не требуются).
    Это позволит снизить общий размер инсталляции примерно в 4 раза, он станет порядка 200 Мб.

  4. Добавляем в системную переменную PATH путь {каталог MySQL}bin, чтобы было удобней запускать exe-файлы.

Выбор места для хранения данных и конфигурационный файл my.ini

Нужно выбрать каталог, где MySQL будет хранить файлы баз данных и некоторые служебные файлы.
Рекомендуется это сделать вне каталога сервера MySQL, т.к. файлы БД следует рассматривать независимо от конкретной инсталляции/версии.

Затем нужно создать файл my.ini, поместив его в корневой каталог сервера MySQL (т.е. рядом с bin и пр.; my.ini в корневом каталоге запуска сервер будет пытаться найти и прочитать автоматически). Содержимое файла должно быть следующим:

[mysqld]
datadir = 'D:/s/.mysql-datadir'
character_set_server = utf8
sql_mode =
skip-networking = 1
named-pipe = 1
local_infile = 1 # С версии 8.0
skip_log_bin = 1 # С версии 8.0 против долгого waiting for handler commit при вставках
# log-syslog = 0 # До версии 5.7 включительно

[client]
# mysql, mysqldump, mysqladmin
user = someone
password = "a password"
pipe
loose-local-infile = 1 # С версии 8.0 для LOAD DATA LOCAL INFILE

[mysqldump]
# С версии 8.0
# https://dba.stackexchange.com/a/273040
no-tablespaces = 1 # чтобы не нужна была привилегия PROCESS
single-transaction = 1 # чтобы не нужна была привилегия LOCK TABLES

Указание datadir является обязательным. Без этого сервер не запустится.
Обратный слэш (), стандартно используемый в путях Windows, интерпретируется как экранирующий и образующий управляющие последовательности (n, s и др.) символ, поэтому его самого нужно экранировать или же использовать вместо него прямой слэш:

datadir = "D:\somedir\data"
datadir = "D:/somedir/data"

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

Если при запуске сервера возникают сообщения об ошибках насчет невомзожности записи в системный журнал событий Windows, можно добавить в my.ini запись log-syslog = 0.

Все настройки сервера перечислены здесь и здесь.

Первый запуск mysqld — инициализация каталога данных

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

mysqld --initialize

Может возникнуть сообщение от брандмауэра Windows, которому нужно указать соотв. разрешения.

Инициализировав каталог данных, сервер завершит работу и вернёт управление командной строке.

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

Второй запуск mysqld — установка пароля пользвателю root

При первом запуске сервера для рута был сгенерирован временный пароль (действительный только на одну сессию) и записан в err-файл. Вместо того, чтобы искать его там, удобнее лишний раз запустить сервер в режиме без проверки прав:

mysqld --skip-grant-tables

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

  1. Из командной строки запускаем консольный клиент mysql.

  2. Даем команду FLUSH PRIVILLEGES; (она требуется после запуска сервера с ключом --skip-grant-tables, чтобы начали работать команды по управлению учетными записями).

  3. Устанавливаем пароль:

    • MySQL 5.7.6 и выше: ALTER USER 'root'@'localhost' IDENTIFIED BY 'somepass';

    • 5.7.5 и ранее: SET PASSWORD FOR 'root'@'localhost' = PASSWORD('somepass');

  4. Останавливаем сервер с помощью команды SHUTDOWN.
    Сервер завершит работу и вернёт управление командной строке, из клиента нужно выйти вручную (продолжать сессию смысла нет, т.к. соединение разорвано и автоматически возобновлено не будет).
    Остановка сервера необходима, чтобы прекратить работу в режиме отсутствия проверки прав доступа.

    Для MySQL 5.7.8 и ранее следует использовать утилиту mysqladmin, дав из терминала команду mysqladmin -u root -p shutdown (потребуется ввести пароль рута).

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

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

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

mysql -u root -p

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

CREATE USER someone@localhost IDENTIFIED BY 'a password';

CREATE DATABASE somedb;

GRANT ALL ON somedb.* TO someone@localhost;

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

Работа через named pipe

Сервер MySQL на компьютере разработчика обычно принимает соединения только с этого же компьютера. Такие соединения можно принимать через named pipe, а сетевой интерфейс сервера MySQL вообще закрыть за ненадобностью и по соображениям безопасности.

За включение named pipe и отключение сети отвечают две разных настройки (причем второе без первого не сработает). Запуск сервера с ними выглядит следующим образом:

mysqld --named-pipe --skip-networking

Или указать эти же опции в my.ini, чтобы запускать сервер без аргументов:

[mysqld]
...
named-pipe 
skip-networking

В каталоге данных появится файл .pid.

Как PHP под Windows, так и различные GUI для работы с базами данных (например, MySQL Workbench, однако не(!) JetBrains DataGrip) умеют устанавливать соединение через named pipe.

Утилитам командной строки (mysql, mysqladmin и пр.) нужно указывать опцию --pipe.

Настройки для клиента ([client])

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

В отличие от Linux, конфигурационный файл из домашнего каталога пользователя не читается. Список мест, откуда файлы будут прочитаны, можно посмотреть командой mysql --help (где-то в середине вывода будет фраза Default options are read from the following files in the given order).
Можно указыать клиентские настройки в том же файле, что и настройки сервера:

[mysqld]
...

[client]
user = someone
password = "a password"
pipe

Обновление сервера MySQL

  1. Повторяем пункты 1-3 из раздела Загрузка и подготовка к запуску.
    Пакет можно разместить в каталоге рядом с имеющимся, чтобы на всякий случай было две версии одновременно.

  2. Открываем командную строку и останавливаем текущую версию сервера:
    mysqld stop
    или
    mysqladmin -u root -pпароль shutdown

  3. Заменяем путь в переменной PATH.

  4. Копируем файл my.ini из старого каталога в новый.

  5. Даём команду на запуск, не забыв необходимые ключи.
    Например, mysqld --skip-networking --named-pipe.
    Первый запуск может проходить долго.

  6. Если возникает ошибка про файл с названием вида VCRUNTIME*.dll — значит, нужно обновить версию Microsoft Visual Studio.
    Скачиваем файл vc_redist.x64.exe с официального сайта Microsoft и запускаем его.
    После этого повторяем предыдущий пункт, всё должно пройти нормально.

  7. Если сервер все-таки не запускается (завершает работу и отдает управление в командной строке), нужно найти в файл с расширением *.err в каталоге для хранения данных и посмотреть, что там написано.
    Один из вариантов решения проблемы — сначала запустить сервер с ключом --initialize, и после того, как он завершит работу, запустить его снова уже в штатном режиме.
    *Замечено, что при обновлении с версии 5.7 при запуске над теми же данными (без перезаливки) сервер требует запуска два-три раза подряд, и только последний из них проходит успешно.

  8. Выполняем запрос SELECT VERSION(), убеждаемся, что запущена обновлённая версия сервера.

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

Данный материал — продолжение вступительной статьи цикла.

Авторизовавшись в консоли сервера нужно подключиться к mysql введя имя пользователя, пароль и указав имя хоста (FQDN или IP адрес — по умолчанию если не указано значение -h используется localhost)

mysql -h host -u user -p

Enter password: ********

Также можно вводить пароль сразу

mysql -h host -u user -pPASSWORD

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

Основы работы с MySQL

Любой запрос (за исключением USE, QUIT и еще нескольких) должен завершаться точкой с запятой. Запрос может быть разнесен на несколько строк и будет выполнен только после введения точки с запятой

SELECT
-> *
-> FROM
-> gebwoocommerce_api_keys
-> ;
Empty set (0.01 sec)

MariaDB [db_locks]>

От выполнения запроса можно отказаться после введения введения нескольких строк выполнив  c

SELECT
-> *
-> FROM
-> gebwoocommerce_api_keys
-> c

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

1) >

( или вариации: mysql>, MariaDB> ) Ожидается ввод

2) ->

Ожидается следующая строка запроса длиной в несколько строк

3) ‘>

Ожидается следующая строка запроса длиной в несколько строк в случае если запрос начат с одинарной кавычки

4) «>

Ожидается следующая строка запроса длиной в несколько строк в случае если запрос начат с двойной кавычки

5)`>

Ожидается следующая строка запроса длиной в несколько строк в случае если запрос начат с backtick (“`”)
6) /*>

Ожидается следующая строка запроса длиной в несколько строк в случае если запрос начат со знака комментария /*

Создание базы данных MySQL и ее наполнение данными

Работать от имени пользователя root не желательно, лучшим решением является создание пользователя с ограниченным доступом

Например, добавим пользователя user (в тестовой среде можно работать и от имени root). Авторизовавшись в консоли MySQL создаем базу данных и таблицы

CREATE DATABASE REAL_ESTATE_AGENCY;

Query OK, 1 row affected (0.00 sec)

SHOW DATABASES;

+——————————+
| Database |
+——————————+
| information_schema |
| mysql |
| performance_schema |
| REAL_ESTATE_AGENCY |
+——————————+
4 rows in set (0.03 sec)

USE REAL_ESTATE_AGENCY

Database change

CREATE TABLE REAL_ESTATE (type VARCHAR(20), city VARCHAR(20), floorspace INT, district VARCHAR(20), street VARCHAR(20), rentorsale VARCHAR(20), PRICE VARCHAR (20));

Query OK, 0 rows affected (0.01 sec)

CREATE TABLE PEOPLE (name VARCHAR(20), profession VARCHAR(20), age INT, city VARCHAR(20), district VARCHAR(20), rentorsale VARCHAR(20), PRICE VARCHAR (20));

Query OK, 0 rows affected (0.01 sec)

SHOW TABLES;

+——————————+
| Tables_in_REAL_ESTATE_AGENCY |
+——————————+
| PEOPLE |
| REAL_ESTATE |
+——————————+
2 rows in set (0.00 sec)

Информацию о структуре таблицы и всех существующих столбцах и колонках можно получить выполнив команду DESCRIBE

DESCRIBE REAL_ESTATE;

+————+————-+——+——+———+——-+
| Field | Type | Null | Key | Default | Extra |
+————+————-+——+——+———+——-+
| type | varchar(20) | YES | | NULL | |
| city | varchar(20) | YES | | NULL | |
| floorspace | int(11) | YES | | NULL | |
| district | varchar(20) | YES | | NULL | |
| street | varchar(20) | YES | | NULL | |,

| rentorsale | varchar(20) | YES | | NULL | |
| PRICE | varchar(20) | YES | | NULL | |
+————+————-+——+——+———+——-+
7 rows in set (0.00 sec)

Вывести все содержимое таблицы можно с помощью самого общего SELECT запроса (этот вид запросов используется чаще всего и будет подробно рассмотрен в дальнейшем)

SELECT * FROM REAL_ESTATE;

Empty set (0.00 sec)

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

Загрузка данных в таблицы MySQL

Сохраняем информацию в /tmp/real_estate.txt — значения в столбцах разделяем табуляцией. После этого в консоли загружаем данные предварительно выбрав таблицу.

LOAD DATA LOCAL INFILE ‘/tmp/real_estate.txt’ INTO TABLE REAL_ESTATE;

Может возникнуть следующая ошибка.

ERROR 1148 (42000): The used command is not allowed with this MySQL version

Если ошибка возникает к MySQL нужно подключаться с  опцией —local-infile=1:

mysql —local-infile=1 -u root -p

LOAD DATA LOCAL INFILE ‘/tmp/real_estate.txt’ INTO TABLE REAL_ESTATE;

Query OK, 13 rows affected (0.00 sec)
Records: 13 Deleted: 0 Skipped: 0 Warnings: 0

Результаты SELECT теперь выглядят иначе:

SELECT * FROM REAL_ESTATE;

mysql начало работы
Если для какого-то столбца и ряда нужно значение NULL в текстовом документе оно должно быть представлено как N. В MySQL начало работы с базами и таблицами выглядит именно так. Далее рассмотрим основы использования SELECT.

Понравилась статья? Поделить с друзьями:
  • Как работать в dos в windows 10
  • Как разархивировать фото на компьютере windows 10
  • Как работать без мыши windows 10
  • Как разархивировать файл на компьютере windows 10 на ноутбуке
  • Как работает файловая система в windows