Чтобы приступить к созданию Базы данных, нам необходимо осуществить вход на сервер СУБД MariaDB или MySQL. Для этого из командной строки используйте команду:
mysql -u root -p
Следующим шагом вам будет предложено ввести пароль вашего пользователя. Примечание. Если вы работаете под другим пользователем, то нужно указывать его. В моём примере — это пользователь root.
Вот пример удачного входа на сервер MySQL
mysql> это хороший знак! Значит вы успешно авторизовались. Для СУБД MariaDB будет справедливо MariaDB [(none)]>
Если вы находитесь на сервере под учётной записью root, то в некоторых случаях осуществить подключение может простая команда
mysql
Ниже мы видим реальное выполнение команды под учётной записью root
Отлично! Теперь можно приступить к созданию базы данных.
Как создать базу данных из командной строки?
Создать базу данных мы можем при помощи оператора CREATE DATABASE
- Оператор CREATE DATABASE на сайте MySQL
- Оператор CREATE DATABASE на сайте MariaDB
Если используется выражение IF NOT EXISTS, то в ситуации, когда база данных уже существует, пользователю будет выдано предупреждение, а не сообщение об ошибке.
CREATE DATABASE IF NOT EXISTS db_name;
Результат вывода
+--------------------+
| Database |
+--------------------+
| amo |
| db_name |
| information_schema |
| mysql |
| performance_schema |
| sys |
+--------------------+
7 rows in set (0.020 sec)
Поздравляю! База данных с именем db_name успешно создана.
Для ознакомления с базовыми операторами рекомендуется к прочтению эта публикация.
Как удалить базу данных из командной строки?
Тут всё очень просто. Идём от обратного. Оператор DROP удаляет, а выражение IF EXISTS проверяет присутствие базы с этим именем в системе
DROP DATABASE IF EXISTS db_name;
Настройка кодировки и правил сортировки
Вдаваться в подробности про кодировки и правила сортировки я в этой статье не буду, скорее всего создам отдельную, так как тема довольно запутанная и неоднозначная для начинающих пользователей.
Вы можете начать с просмотра поддерживаемых параметров сортировки вашего сервера. Для этого воспользуйтесь оператором SHOW COLLATION
Отмечу, что в СУБД MariaDB и MySQL имеют набор символов по умолчанию, и в зависимости от дистрибутива параметры сортировки могут отличаться. И если ваш сайт, например, на двух языках: латинские и кириллические символы, то возможно при создании базы данных оптимальным выбором будет указать utf8mb4_general_ci | utf8mb4
То есть, при создании базы данных запись будет выглядеть следующим образом:
CREATE DATABASE IF NOT EXISTS db_name
CHARACTER SET = 'utf8mb4'
COLLATE = 'utf8mb4_general_ci';
Но если вы сомневаетесь, или точно знаете, какие символы будут присутствовать в индексах, то можно остановиться на этом решении utf8mb4_unicode_ci — которое обеспечивает полную поддержку символов Unicode, или версией Unicode «520»: utf8mb4_unicode_520_ci, или более свежим алгоритмом сравнения символов utf8mb4_0900_ai_ci. Но тут по ситуации.
CREATE DATABASE IF NOT EXISTS db_name
CHARACTER SET = 'utf8mb4'
COLLATE = 'utf8mb4_unicode_ci';
В каких то случаях оптимально будет указать CHARACTER SET ‘utf8’, так как эта кодировка менее требовательна к памяти, но зато не может сохранить, например, смайлики, которые требуют выделения большего числа байтов для хранения (utf8mb4). Вобщем, тут нюансов не мало и зависит от архитектуры и требований к веб-приложению.
В любом случае параметры сортировки пользовательской базы данных можно изменить с помощью ALTER DATABASE
. Менять и задавать новые значения мы можем, как на уровне сервера, так и на уровне БД, её отдельных таблиц и столбцов.
ALTER DATABASE db_name COLLATE utf8mb4_unicode_ci;
Что ж, база данных у нас есть и теперь нам необходимо создать пользователя.
Как создать нового пользователя в MySQL или MariaDB?
Работать под «рутом», как мы делали это раньше, не безопасно. Поэтому, давайте создадим отдельного пользователя и наделим его правами.
По аналогии с адресом электронной почты имя пользователя СУБД MySQL (или MariaDB) состоит из двух частей, разделенных символом «собачки»:
‘user’@’host’
Обратите внимание на кавычки, зачастую отсутствие одной из них является причиной ошибки.
При создании пользователя предлагаю сразу добавить пароль для аутентификации на сервере (IDENTIFIED BY) и по аналогии с созданием БД проверить на отсутствие в системе при помощи IF NOT EXISTS
CREATE USER IF NOT EXISTS 'vasya'@'localhost' IDENTIFIED BY '12345';
Убедимся, что наш пользователь добавился:
SHOW CREATE USER 'vasya'@'localhost';
Результат:
MariaDB [db_name]> SHOW CREATE USER 'vasya'@'localhost';
+----------------------------------------------------------------------------------------------------+
| CREATE USER for vasya@localhost |
+----------------------------------------------------------------------------------------------------+
| CREATE USER `vasya`@`localhost` IDENTIFIED BY PASSWORD '*00A51F3F48415C7D4E8908980D443C29C69B60C9' |
+----------------------------------------------------------------------------------------------------+
1 row in set (0.002 sec)
Обратите внимание, что пароль хранится в хешированном виде, так как был хеширован функцией PASSWORD перед сохранением в таблице mysql.user.
Как удалить пользователя в MySQL или MariaDB?
По аналогии с базой данных, раз мы научились создавать пользователей, давайте рассмотрим возможность их удаления:
DROP USER IF EXISTS 'vasya'@'localhost';
Как изменить пароль у пользователя СУБД?
Осмелюсь предвидеть, что однажды вы забудете пароль или вам потребуется его изменить, для этого можно воспользоваться командой:
ALTER USER 'vasya'@'localhost' IDENTIFIED BY 'new_password';
На самом деле нюансов и настроек большое количество при создании пользователей СУБД. Взглянуть можно тут.
Следующим шагом мы проверим подключение и пройдём аутоинтефикацию на сервере под именем нового пользователя. Для этого выйдем из оболочки MySQL при помощи команды exit; И затем осуществим вход под новым созданным пользователем:
mysql -u vasya -p
И затем попросим СУБД отобразить базы данных
MariaDB [(none)]> SHOW DATABASES;
+--------------------+
| Database |
+--------------------+
| information_schema |
+--------------------+
1 row in set (0.002 sec)
Маленькая неприятность. Мы не видим всех баз данных, а только служебную. Это происходит потому что наш пользователь не наделён нужными правами.
Давайте проверим текущие права (полномочия) пользователя
SHOW GRANTS FOR 'vasya'@'localhost';
На текущий момент они отсутствуют. Вот пример сравнение двух пользователей: root и vasya
MariaDB [(none)]> SHOW GRANTS FOR 'root'@'localhost';
+------------------------------------------------------------------------------------------------+
| Grants for root@localhost |
+------------------------------------------------------------------------------------------------+
| GRANT ALL PRIVILEGES ON *.* TO `root`@`localhost` IDENTIFIED VIA unix_socket WITH GRANT OPTION |
| GRANT PROXY ON ''@'%' TO 'root'@'localhost' WITH GRANT OPTION |
+------------------------------------------------------------------------------------------------+
2 rows in set (0.000 sec)
MariaDB [(none)]> SHOW GRANTS FOR 'vasya'@'localhost';
+--------------------------------------------------------------------------------------------------------------+
| Grants for vasya@localhost |
+--------------------------------------------------------------------------------------------------------------+
| GRANT USAGE ON *.* TO `vasya`@`localhost` IDENTIFIED BY PASSWORD '*00A51F3F48415C7D4E8908980D443C29C69B60C9' |
+--------------------------------------------------------------------------------------------------------------+
1 row in set (0.001 sec)
Что ж, давайте исправим это. И поможет нам в этом оператор GRANT, с помощью которого мы предоставим полный доступ к созданной базе данных пользователю ‘vasya‘.
В работе с оператором тоже не мало нюансов, нельзя смешивать сразу привилегии и роли, а иногда стоит выборочно указывать возможности (привилегии) пользователю и также выборочно предоставлять доступ, например, не ко всей БД, а к какой-нибудь отдельной таблице и т.п.
Но мы рассмотрим общую типичную ситуацию, когда мы создали базу данных, предположим для сайта на CMS WordPress, создали отдельного пользователя для работы с ней, чтобы он мог (от его имени) создавать новые таблицы, выполнять операции по удалению, обновлению данных (SELECT, INSERT, UPDATE…).
И всё что нам осталось — это наделить его всеми правами исключительно для созданной базы данных (напомню, что в нашем примере её имя db_name)
GRANT ALL ON db_name.* TO 'vasya'@'localhost';
После подобных операций необходимо сбрасывать привилегии. Если я не ошибаюсь, то после подобных операций, сервер сам должен перезагружать таблицы привилегий, но чтобы было наверняка давайте сообщим об этом серверу, о необходимости перезагрузки таблиц привилегий. Для этого выполните операцию очистки привилегий FLUSH PRIVILEGES
GRANT ALL ON db_name.* TO 'vasya'@'localhost';
FLUSH PRIVILEGES;
Теперь если мы зайдём под учётной записью ‘vasya‘ и повторим запрос на просмотр доступных БД, то увидим в списке нашу db_name
MariaDB [(none)]> SHOW DATABASES;
+--------------------+
| Database |
+--------------------+
| db_name |
| information_schema |
+--------------------+
2 rows in set (0.001 sec)
А если сделаем запрос на просмотр привилегий, то можем заметить следующее:
MariaDB [(none)]> SHOW GRANTS FOR 'vasya'@'localhost';
+--------------------------------------------------------------------------------------------------------------+
| Grants for vasya@localhost |
+--------------------------------------------------------------------------------------------------------------+
| GRANT USAGE ON *.* TO `vasya`@`localhost` IDENTIFIED BY PASSWORD '*00A51F3F48415C7D4E8908980D443C29C69B60C9' |
| GRANT ALL PRIVILEGES ON `db_name`.* TO `vasya`@`localhost` |
+--------------------------------------------------------------------------------------------------------------+
2 rows in set (0.000 sec)
Добавить комментарий