Рано или поздно начинающему разработчику предстоит столкнуться с консолью, например, это может случиться при разработке/поддержке сайта на выделенном сервере, где как правило мало графических оболочек. Поэтому хорошим тоном будет — освоить создание баз данных и пользователей для доступа к ним через консольные команды. На самом деле это не сложно и вы в этом убедитесь.
Наши исходные данные: это доступ по 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. Не забудьте перезагрузить СУБД.