Мы используем MySQL 8 в Linux в течение нескольких лет, но версия репозитория Linux не установила новую оболочку MySQL. Обнаружили новую оболочку MySQL, когда установили MySQL 8 (8.0.21) в Windows.
Ниже приведено руководство по настройке пользователя andreyex и базы данных andreyexdb в MySQL. Используется MySQL Shell ( mysqlsh) и этапы для загрузки файлов значений, разделенных запятыми.
После установки MySQL в ОС Windows 10 откройте оболочку интерфейса командной строки ОС Windows (CLI), введя следующее в поле поиска слева внизу:
cmd
Он запускает интерфейс командной строки для ОС Windows. Утилита cmd (команда) открывает интерфейс командной строки в следующем каталоге (где вы подставляете имя пользователя вместо заполнителя имени пользователя ниже):
C:\Users\username
В командной строке вы должны ввести mysql, чтобы запустить старый MySQL CLI. Вместо этого вы вводите mysqlsh, чтобы запустить новый MySQL CLI от имени пользователя root. Команда для запуска оболочки MySQL от имени пользователя root:
mysqlsh -uroot -p
Он должен вернуть следующее и запросить ввод одного символа для сохранения пароля для пользователя операционной системы. Как правило, в случае разработки это хорошая идея и практика.
MySQL Shell 8.0.21 Copyright (c) 2016, 2020, Oracle and/or its affiliates. All rights reserved. Oracle is a registered trademark of Oracle Corporation and/or its affiliates. Other names may be trademarks of their respective owners. Type '\help' or '\?' for help; '\quit' to exit. Creating a session to 'root@localhost' Please provide the password for 'root@localhost:33060': ******** Save password for 'root@localhost:33060'? [Y]es/[N]o/Ne[v]er (default No): y Fetching schema names for autocompletion... Press ^C to stop. Your MySQL connection id is 9 (X protocol) Server version: 8.0.21 MySQL Community Server - GPL No default schema selected; type \use <schema> to set one. MySQL localhost:33060+ ssl JS >
Приглашение не будет принимать команды SQL, поскольку оно всегда инициализируется в контексте JavaScript(JS). Оболочка MySQL поддерживает три интерактивных интерфейса: JavaScript, Python и SQL.
Вы можете проверить целостность оболочки из контекста JavaScript(JS) как пользователь root с помощью следующей команды:
MySQL localhost:33060+ ssl JS > shell.status()
Как пользователь root, он должен вернуть что-то вроде этого:
MySQL Shell version 8.0.21 Connection Id: 9 Default schema: Current schema: Current user: root@localhost SSL: Cipher in use: TLS_AES_256_GCM_SHA384 TLSv1.3 Using delimiter: ; Server version: 8.0.21 MySQL Community Server - GPL Protocol version: X protocol Client library: 8.0.21 Connection: localhost via TCP/IP TCP port: 33060 Server characterset: utf8mb4 Schema characterset: utf8mb4 Client characterset: utf8mb4 Conn. characterset: utf8mb4 Result characterset: utf8mb4 Compression: Enabled (DEFLATE_STREAM) Uptime: 20 hours 4 min 19.0000 sec
Вы можете переключиться в контекст SQL как пользователь root или любой другой с помощью этой команды. Переключатель только изменяет вашу форму взаимодействия с сервером, и вы остаетесь на связи как пользователь root:
MySQL localhost:33060+ ssl JS > \sql
Вы можете проверить, что ваш сеанс по-прежнему принадлежит пользователю root, с помощью следующего утверждения SELECT:
MySQL localhost:33060+ ssl SQL > SELECT user();
Он возвращает:
+----------------+ | user() | +----------------+ | root@localhost | +----------------+ 1 row in set (0.0005 sec)
На следующем шаге показано, как настроить образец базы данных andreyexdb. Некоторый синтаксис изменился по сравнению с предыдущими выпусками MySQL. Вот три шага:
MySQL localhost:33060+ ssl SQL > CREATE DATABASE andreyexdb;
MySQL localhost:33060+ ssl SQL > GRANT ALL ON *.* TO 'root'@'localhost';
MySQL localhost:33060+ ssl SQL > CREATE USER 'andreyex'@'localhost' IDENTIFIED WITH mysql_native_password BY 'andreyex'; MySQL localhost:33060+ ssl SQL > GRANT ALL ON andreyexdb.* TO 'andreyex'@'localhost';
MySQL localhost:33060+ ssl SQL > GRANT FILE ON *.* TO 'andreyex'@'localhost';
Привилегия FILE в MySQL — это глобальная привилегия для чтения и записи файлов на локальном сервере. Установка MySQL 8 в Windows 10 устанавливает следующий каталог в качестве цели для загрузки файлов в файл my.ini:
# Secure File Priv. secure-file-priv="C:/ProgramData/MySQL/MySQL Server 8.0/Uploads"
Вы можете найти настройку в файле C:\ProgramData\MySQL\MySQL Server 8.0\my.ini. Вы можете найти это значение, не обращаясь к файлу my.ini, запросив данные:
show variables like 'secure_file_priv';
Новая установка должна вернуться:
+------------------+------------------------------------------------+ | Variable_name | Value | +------------------+------------------------------------------------+ | secure_file_priv | C:\ProgramData\MySQL\MySQL Server 8.0\Uploads\ | +------------------+------------------------------------------------+ 1 row in set (0.2253 sec)
Вы можете проверить возможность использования команды LOAD с помощью следующего тестового файла avenger.csv. Скопируйте его в каталог C:\ProgramData\MySQL\MySQL Server 8.0\Uploads и убедитесь, что права доступа к каталогу установлены только для чтения для всех.
1,'Andrey','Ex','Delphi' 2,'MasterMen','Dolgov','Titan' 3,'Alex','Smirnov','Shrek'
Откройте другой (командный) интерфейс командной строки cmd и поместите следующий код в файл, который вы сохраните как avenger.sql в каталоге c:\Users\username.
-- Conditionally drop objects. SELECT 'AVENGER' AS "Drop Table"; DROP TABLE IF EXISTS avenger; -- Create an avenger table. CREATE TABLE avenger ( avenger_id INT UNSIGNED PRIMARY KEY AUTO_INCREMENT , first_name VARCHAR(20) , last_name VARCHAR(20) , character_name VARCHAR(20)) ENGINE=InnoDB DEFAULT=utf8; -- Load the data from a file, don't forget the \n after the \r on Windows or it won't work. LOAD DATA INFILE 'C:/ProgramData/MySQL/MySQL Server 8.0/Uploads/avenger.csv' -- LOAD DATA INFILE 'avenger.csv' INTO TABLE avenger FIELDS TERMINATED BY ',' ENCLOSED BY '"' ESCAPED BY '/' LINES TERMINATED BY '\r\n'; -- Select the uploaded records. SELECT * FROM avenger;
Из cmd (командной) оболочки запустите оболочку MySQL от имени пользователя andreyex со следующим синтаксисом:
mysqlsh -uandreyex -p -Dandreyexdb
В командной строке в MySQL Shell(mysqlsh) переключитесь с контекста JavaScript(JS) по умолчанию на контекст SQL и выполните следующий запрос:
MySQL localhost:33060+ ssl andreyexdb SQL > \sql MySQL localhost:33060+ ssl andreyexdb SQL > SELECT user(), database();
Если вы все сделали правильно, вывод будет примерно следующий:
+-------------------+-------------+ | user() | database() | +-------------------+-------------+ | andreyex@localhost | andreyexdb | +-------------------+-------------+ 1 row in set (0.0003 sec)
Опять же, предполагая, что вы все сделали правильно, вы сможете запустить файл сценария avenger.sql из командной строки в MySQL Shell(mysqlsh), например:
MySQL localhost:33060+ ssl andreyexdb SQL > source avenger.sql
Должен вернуть следующий вывод:
Query OK, 0 rows affected (0.0003 sec) +------------+ | Drop Table | +------------+ | AVENGER | +------------+ 1 row in set (0.0003 sec) Query OK, 0 rows affected (0.0595 sec) Query OK, 0 rows affected (0.0002 sec) Query OK, 0 rows affected (0.1293 sec) Query OK, 0 rows affected (0.0002 sec) Query OK, 3 rows affected (0.0046 sec) Records: 3 Deleted: 0 Skipped: 0 Warnings: 0 Query OK, 0 rows affected (0.0004 sec) +------------+--------------+------------+-------------------+ | avenger_id | first_name | last_name | character_name | +------------+--------------+------------+-------------------+ | 1 | 'AndreyEx' | 'Delphi' | 'Delphi' | | 2 | 'MasterMen' | 'Dolgov' | 'Titan' | | 3 | 'Alex' | 'Smirnov' | 'Shrek' | +------------+--------------+------------+-------------------+ 3 rows in set (0.0005 sec)
Теперь у вас есть пользователь andreyex и база данных andreyexdb. Надеюсь, строить было весело.
Вы можете найти файл my.ini в каталоге C:\ProgramData\MySQL\MySQL Server 8.0 стандартной файловой системы Windows 10. Хорошая идея — ничего не менять, если вы не знаете, что делаете, и помните, что вам нужно перезапустить службу Microsoft MySQL80, чтобы любые изменения вступили в силу в операциях с базой данных.