Как создать базу данных и пользователя MariaDB, MySQL?

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

Наши исходные данные: это доступ по SSH на сервер где уже установлена какая то из СУБД: MySQL или MariaDB.

Давайте законектимся с СУБД, введя команду:

sudo mysql -u root

Ну, или если вы уже работаете в системе от «рута», то:

mysql

Если все пойдет правильно, то в консоли вы увидите вот такую строку

MariaDB [(none)]>
mysql>

Это говорит о том, что следующие команды будут адресоваться непосредственно через оболочку СУБД MariaDB или MySQL.

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

SHOW DATABASES;

Получим:

+---------------------+
| Database            |
+---------------------+
| api_site            |
| dev_site            |
| information_schema  |
| laravel_dev         |
| mysql               |
| performance_schema  |
| russia_site         |
| sys                 |
| wiki_db             |
+---------------------+
9 rows in set (0.002 sec)

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

SHOW DATABASES LIKE 'm%';

Создание новой базы данных

Давайте создадим новую базу для хранения данных:

CREATE DATABASE db1;

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

CREATE TABLE english_names (id INT, name VARCHAR(40)) 
  CHARACTER SET 'utf8' 
  COLLATE 'utf8_icelandic_ci';

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

CREATE TABLE rus_db 
  CHARACTER SET 'utf8mb4' 
  COLLATE 'utf8mb4_general_ci';

Теперь у нас есть база. Проверить ее в списке доступных вы уже знаете как 🙂

Создание пользователя для БД

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

Создать пользователя можно вот такой нехитрой командой:

CREATE USER wordpress@localhost IDENTIFIED BY 'your-password';

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

CREATE USER IF NOT EXISTS wordpress@localhost IDENTIFIED BY 'your-password';

Права пользователя

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

SHOW GRANTS FOR 'root'@'localhost';

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

+-----------------------------------------------------------------------------------------------------------------------------------------+
| Grants for root@localhost                                                                                                               |
+-----------------------------------------------------------------------------------------------------------------------------------------+
| GRANT ALL PRIVILEGES ON *.* TO `root`@`localhost` IDENTIFIED VIA mysql_native_password USING 'invalid' OR unix_socket WITH GRANT OPTION |
| GRANT PROXY ON ''@'%' TO 'root'@'localhost' WITH GRANT OPTION                                                                           |
+-----------------------------------------------------------------------------------------------------------------------------------------+
2 rows in set (0.001 sec)

Увидеть чем наделен текущий пользователь можно одной из этих команд:

SHOW GRANTS;
SHOW GRANTS FOR CURRENT_USER;
SHOW GRANTS FOR CURRENT_USER();

А теперь давайте созданному ранее пользователю wordpress@localhost, которого мы идентифицируем по паролю, зададим определенные, но не все, разрешения:

GRANT SELECT,INSERT,UPDATE,DELETE,CREATE,DROP,ALTER ON db1.* TO wordpress@localhost;

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

GRANT ALL PRIVILEGES ON db1.* TO wordpress@localhost;

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

  • ALL PRIVILEGES — данный набор прав предоставляет пользователю MySQL полный доступ к определенной базе данных (если не выбрана ни одна база данных, предоставляется глобальный доступ к системе)
  • CREATE — позволяет пользователю создавать новые таблицы или базы данных
  • DROP — позволяет пользователю удалять таблицы или базы данных
  • DELETE — позволяет пользователю удалять строки из таблиц
  • INSERT — позволяет пользователю вставлять строки в таблицы
  • SELECT — позволяет пользователю выполнять команду SELECT для чтения данных из базы
  • UPDATE — позволяет пользователю обновлять строки таблицы
  • GRANT OPTION — позволяет пользователю предоставлять или отзывать права других пользователей

И последнее что нам предстоит сделать — это перезагрузить (обновить) привилегии пользователей СУБД:

FLUSH PRIVILEGES;

Покинуть оболочку СУБД можно при помощи одной из этих команд:

quit
exit

В ответ СУБД вежливо с нами попрощается 🙂

mysql> quit
Bye

P.S. Не забудьте перезагрузить СУБД.