May 05, 2020 · Article · 2 min, 544 words
In this tutorial, I’m going to show how to allow remote access to MariaDB server on RHEL / CentOS. Let’s get started:
Как подключиться к базе данных MySQL: инструкция
Подключение к удаленной базе данных MySQL позволяет работать с ее содержимым аналогично локальным БД. Такой подход позволяет редактировать, считывать информацию через интернет с любого компьютера независимо от расположения пользователя.
В этом материале мы рассмотрим, как подключиться к MySQL несколькими способами. В качестве тестовой базы можно применять облачные базы данных провайдера Timeweb Cloud. Запуск БД там займет пару минут.
Как создать базу данных и нового пользователя в MySQL: инструкция
В этой инструкции мы рассмотрим, как в MySQL создать пользователя и базу, как удалить базу, как выдать пользователям привилегии.
По умолчанию вам будет доступен пользователь root. Используйте его, чтобы выполнить первоначальную настройку: создать первую БД и других пользователей.
Приведенные команды подойдут для управления MySQL, развернутой на сервере. Если же вы пользуетесь облачной базой данных, пользователь и сама база будут созданы автоматически при создании БД в панели управления.
Как установить и использовать MySQL Workbench
Для создания небольшой базы данных достаточно составить небольшой SQL-скрипт. Но такие базы данных редко покидают категорию «учебных» и переходят в разряд «реальных». Базы данных, пусть даже в небольших проектах, состоят из десятков таблиц и представлений, с которыми очень сложно работать только с помощью SQL. Удержать в голове десятки сущностей и не запутаться — очень сложно. Одно из решений этой проблемы — MySQL Workbench.
MySql Workbench — это программное обеспечение для создания и проектирования баз данных с помощью схем и других визуальных средств. Сегодня мы покажем, что это такое, как установить Workbench и подключиться к кластеру, как создавать таблицы и модели, как делать импорт и экспорт данных.
Для установки необходимо перейти на официальный сайт и среди продуктов выбрать MySQL Enterprise Edition ->Workbench. Или можно перейти по этой ссылке.
Кликаем на «Download Now» и переходим на страницу с выбором параметров:
Здесь мы выбираем операционную систему и её разрядность. В нашем случае это Windows 10 64-bit. После загрузки и установки приложение готово к работе.
По умолчанию сервер MySQL настроен таким образом, что к нему разрешены подключения только с локальной машины, следовательно, подключиться из-вне (по интернет или локальной сети) не получится.
Убедиться в этом можно набрав на сервере команду:
sudo netstat -tlp
В результате получите что-то типа этого:
Активные соединения с интернетом (only servers) Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name tcp 0 0 localhost:mysql *:* LISTEN 634/mysqld tcp 0 0 *:http *:* LISTEN 987/nginx -g daemon tcp 0 0 *:ssh *:* LISTEN 375/sshd tcp6 0 0 [::]:http [::]:* LISTEN 987/nginx -g daemon tcp6 0 0 [::]:ssh [::]:* LISTEN 375/sshd
Отсюда видно, что mysql слушает только интерфейс localhost (127.0.0.1). Это не всегда удобно, особенно когда есть необходимость выделить под сервер mysql отдельный сервер. А в рамках корпоративной локальной сети такое бывает очень часто.
Чтобы разрешить серверу MySQL принимать запросы из-вне необходимо предпринять несколько несложных шагов:
- Поменять одну строчку в конфигурационном файле MySQL;
- Создать сетевого пользователя с необходимыми правами.
Открываем конфигурационный файл любимы редактором, например nano, из под привилегированного пользователя:
sudo nano /etc/mysql/my.cnf
Если у вас установлен сервер mariaDB, то конфигурационный файл находится в другом месте:
sudo nano /etc/mysql/mariadb.conf.d/50-server.cnf
# Instead of skip-networking the default is now to listen only on # localhost which is more compatible and is not less secure. bind-address = 127.0.0.1
# Instead of skip-networking the default is now to listen only on # localhost which is more compatible and is not less secure. bind-address = 0.0.0.0
Теперь остается только перезапустить сервис MySQL:
sudo service mysql restart
Теперь осталось только завести пользователя, которому разрешено обращаться к серверу MySQL извне.
2. Стартовая установка порадует нас вот таким вот окошком:
В которым вылезет Internet Explorer с окошком, которое необходимо закрыть для дальнейшей установки. Далее всё ещё проще, т.к. написано что делать.
3. Мы дошли до пункта
> Имя директории или буква флеш-накопителя [С:\WebServers]:
Тут просто можно нажать Enter, если устраивает путь по умолчанию, если нет, читаем информацию окна выше (самой установки). Для согласия вводим букву «y» (естественно без кавычек (вводим игрек, на латинице)).
4. Далее видим сообщение:
> Введите букву будущего виртуального диска [Z]:
Лично я ввёл букву «Z», Вы можете ввести любую, кроме имеющихся букв относящихся к локальным дискам (Получается Букву «C» мы не можем использовать, т.к. такой локальный диск есть у всех по умолчанию).
В принципе все «непонятные» пункты установки я описал. Трудностей возникнуть не должно.
5. После успешной установки на рабочем столе появятся 3 ярлыка Денвера:
Запускаем «Start Denwer».
6. Вводим в браузерной строке «localhost» (Без кавычек) и нажимаем Enter
7. Вот что мы видим:
8. А теперь наступило «самое главное и вкусное». Наконец то будем подключать саму БД (Базу Данных).
Кликаем по вкладке «Базы данных»
Вписываем абсолютно любое название для будущей БД, я решил назвать «PawnWikiRu».
Уменьшено на 100% (1280 x 397) — Нажмите для увеличения
И так, успешно создано! Затем смотрим влево и кликаем по нашей свежесозданной Базе Данных
Уменьшено на 100% (1280 x 344) — Нажмите для увеличения
Угу, и с этим мы справились. Чтобы не писать таблицу SQL самому тупо возьмём и импортируем её вот так:
Уменьшено на 100% (1280 x 317) — Нажмите для увеличения
Выбираем Вашу БД, открываем и нажимаем «ОК» поэтапно, как показано на скриншоте ниже:
Уменьшено на 100% (1280 x 899) — Нажмите для увеличения
Успех! Вот мы и загрузили всё необходимое. Что мы видим? Слева расположены файлики, в которых записана та или иная информация об игроке, бизнесе, доме и прочем (В каждых модах по разному). При необходимости, если разбираешься в этом, можешь редактировать информацию просто кликнув на названием файлика.
Уменьшено на 100% (1280 x 498) — Нажмите для увеличения
9. Последний и самый важный шаг заключается в том, чтобы подключить нашу Базу Данных к самому моду.
Открываем мод через Pawno (Надеюсь это объяснять не нужно) и ищем такие строки:
Изменяем только строку
#define SQL_DATABASE "DataBaze"
А именно «DataBaze». Помните, мы давали название нашей БД в самом начале? Так вот, это название нужно написать вместо DataBaze (Может стоять любое другое название, просто измените на своё, которое указывали ранее).
Моя строка тогда будет выглядеть так:
#define SQL_DATABASE "pawnwikiru"
З.Ы.: Не забудь изменить название самого файла .sql, который мы импортировали на 8 шаге (который лежит в папке с модом). Осталось скомпилировать и наш мод полностью готов к работе.
- Операционная система сервера MySQL (MariaDB) — CentOS 7
- Сервер MySQL (MariaDB) IP: 172.16.230.15
- Клиентская операционная система Windows 2008 R2
- IP хоста клиента: 172.16.230.200
В реальном проекте или разработке проекта, если сервер базы данных размещен в машинном отделении или в кабинете машинного отделения, персонал по разработке или разработке может использовать только контент, который я представляю ниже, только когда он может только удаленно подключаться к базе данных через сеть для работы. Диаграмма топологии выглядит следующим образом:
1. Для подключения удаленного клиента к базе данных требуется установить клиентский инструмент mysql. В Интернете есть много клиентских инструментов mysql. Вы можете Baidu.
:\\> конфигурация Адаптер Ethernet Локальное соединение: Подключите конкретный Суффикс......: Локальная ссылка Адрес......: %11
Адрес .......: 172 Маска подсети .........: 255 Шлюз по умолчанию .........: 172
3. Проверьте соединение с сервером базы данных на клиенте:
C:\mysql5628\bin>ping 172.16.230.15 Пинг 172.16.230.15 с 32 байтами данных: Ответ от 172.16.230.15: байт = 32 раз< = От Ответ Байт = Время < = От Ответ Байт = Время < = От Ответ Байт = Время < = из Статистика пакет данных Отправлено = Получил = Отсутствует = (% Потерял), Расчетное время поездки туда и обратно (в миллисекундах) Кратчайший = , Самый длинный = , Среднее =
Приведенная выше информация обратной связи показывает, что в сетевом соединении между клиентом и сервером нет проблем.
4. Клиент использует имя пользователя и пароль, чтобы попытаться подключиться к базе данных удаленно через сеть
C:mysql5628binmysql root
Enter password:
ERROR (HY000): Can't connect to MySQL server on '
Эта ошибка указывает на то, что база данных не позволяет любому хосту, кроме этого компьютера, подключаться к базе данных. Чтобы решить эту проблему, нам нужно изменить права доступа на сервере, чтобы другие узлы могли обращаться к базе данных.
5. Следующие два шага должны быть выполнены на сервере
(1) В целях безопасности установите пароль для пользователя root базы данных.
[[email protected] ~]# mysql -u root -p // Использование пользователя root для входа в базу данныхEnter password: // Недавно установленная база данных не имеет пароля, просто нажмите Enter здесьWelcome the MariaDB monitor. Commands ; \g.
Your MariaDB connection id
Server version: .-MariaDB MariaDB Server
Copyright (c) , , Oracle, MariaDB Corporation Ab others. help. clear the current input statement.
MariaDB [(none)]> password @ = password(); // Пароль для пользователя root установлен mycisco.cc. Примечание: между вторым паролем и левой скобкой не должно быть пробела.Query OK, rows affected ( sec)
MariaDB [(none)]>
(2) Откройте права доступа для других хостов для удаленного подключения к базе данных и снова войдите в базу данных:
[(none)]> use mysql; // выберите базу данных mysql для работы table information for completion of table and column names can turn off this feature to get a quicker startup with - changed [mysql]> выберите пользователя, пароль, хост от пользователя; // Просмотреть распределение разрешений трех полей пользователь, пароль, хост
+------+-------------------------------------------+-----------------------+
+------+-------------------------------------------+-----------------------+ *EBD293A149D3C25DBD676D882BCBA5A00223E | localhost | | localhost.localdomain | | | | :: |
| | | localhost |
| | | localhost.localdomain |
+------+-------------------------------------------+-----------------------+ rows in set ( sec) // Из приведенных выше результатов видно, что база данных позволяет только пользователю root входить в систему на локальном сервере (localhost) по умолчанию и не позволяет другим хостам подключаться удаленно. [mysql]> grant all privileges on *.* to [email protected] identified by ; // Вышеуказанный оператор позволит пользователю root подключаться к базе данных на любом хосте с помощью пароля (mycisco.cc) и предоставлять пользователю все разрешения. , rows affected ( sec) После настройки разрешений, вы не должны забывать обновить, чтобы сделать его эффективным [mysql]> flush privileges; , rows affected ( sec) [mysql]> select user,password,host from user;
+------+-------------------------------------------+-----------------------+
+------+-------------------------------------------+-----------------------+ *EBD293A149D3C25DBD676D882BCBA5A00223E | localhost | | localhost.localdomain | | | | :: |
| | | localhost |
| | | localhost.localdomain | *EBD293A149D3C25DBD676D882BCBA5A00223E |% | // «%» в этой строке означает, что любому хосту разрешено подключаться к базе данных
+------+-------------------------------------------+-----------------------+ rows in set ( sec) [mysql]>
Таким образом, права доступа к базе данных устанавливаются.
6. Вернитесь к клиенту и попробуйте подключиться, как показано на рисунке 1, который показывает, что соединение с базой данных успешно.
Примечание. Если соединение не установлено, брандмауэр на сервере может не закрыться.systemctl disable firewalld
Закройте firewalld и перезапустите систему.
Одно из отличий между MariaDB и обычной базой данных MySQL состоит в том, что в ней имеется более одного файла конфигурации, который помещает разные данные в разные файлы конфигурации. Предыдущее содержимое /etc/mysql/my.cnf таково:
Судя по комментариям в файле, в нем так много конфигурационных файлов
- /etc/mysql/mariadb.cnf файл конфигурации по умолчанию,
- /etc/mysql/conf.d/*.cnf файл для настройки глобальных элементов
- «/Etc/mysql/mariadb.conf.d/*.cnf» Установить информацию, связанную с MariaDB
- «~ / .my.cnf» Установить информацию, соответствующую учетной записи
Вот почему иногда связанные настройки в my.cnf не работают (могут иметь те же элементы в других файлах конфигурации, MySQL, наконец, использует настройки в другом файле).
Согласно официальному заявлению, MariaDB отслеживает только порт 3306 в 127.0.0.1 и отключает удаленное TCP-соединение по умолчанию для повышения безопасности. Мы можем включить MySQL remote через следующие два шага служба
- Закомментируйте параметр пропуска сети, чтобы включить удаленный доступ.
- Обратите внимание на элемент адреса привязки. Этот элемент указывает, какие машины с IP-адресами работают, и позволяет подключаться всем удаленным машинам, но файлов конфигурации так много. Где эти две опции? В настоящее время используйте grep для рекурсивного поиска во всех файлах в каталоге / etc / mysql /, чтобы увидеть, какой файл содержит эту строку
Вводим:
-rn *
Результаты приведены ниже:
К счастью, эти два элемента находятся в одном и том же файле (мой собственный не является элементом пропуска сети)
Открываем файл/etc/mysql/mariadb.conf.d/50-server.cnf
Закомментируйте элемент адреса привязки следующим образом:
Только этого недостаточно. Мы просто включили опцию MySQL для мониторинга удаленных подключений. Далее нам нужно назначить разрешения соответствующей учетной записи MySQL, чтобы разрешить удаленное подключение к MySQL с использованием этой учетной записи.
ввод
Просмотр информации об учетной записи пользователя:
Элементом хоста в корневой учетной записи является localhost, что означает, что учетная запись может входить только локально. Нам нужно изменить разрешения и ввести команду:
Изменить пароль удаленного подключения
Сначала введите mysql
use mysql
Примечание. В настоящее время пароль для удаленного подключения может отличаться от вашего пароля при локальном входе в систему, в основном зависит от того, какой пароль вы указали после IDENTIFIED BY
Подробности см. в команде GRANT.
После настройки разрешений, вы не должны забывать обновить, чтобы сделать его эффективным
FLUSH PRIVILEGES;
Сохранить изменения. Посмотрите на информацию о пользователе еще раз:
В это время было обнаружено, что существует еще один элемент, чем раньше, и его хост-элемент был%. На этот раз конфигурация прошла успешно, и мы можем использовать эту учетную запись для удаленного доступа.
ввод shell service mysql restart
Перезагрузите удаленный сервер и протестируйте его:
Если все это сделано и все еще не может подключиться, вы можете увидеть, заблокирован ли порт брандмауэром
ссылка:https://blog.csdn.net/lnboxue/article/details/74275928
https://www.cnblogs.com/lanuage/p/8179589.html
- Восстановление базы данных из скрипта.
- Подключение к базе данных (MySQL)
- Используя MySQL Workbench
- Формирование DDL-скрипта по диаграмме
- Используя dBeaver
- Создание подключения
- Импорт данных.
- Что такое CSV-файлы
- Как Excel портит данные: из классики
- Побеждаем порчу данных правильным импортом
- Разбор импорта данных на примере прошлогоднего демо-экзамена
- Создание таблиц из скрипта
- Импорт данных
- Импорт материалов
- Подключение к кластеру
- Способы, доступные пользователю
- Note
- Импорт и экспорт базы данных
- Configure MariaDB
- Сколько подключений к БД доступно
- Connect to Database
- Создание пользователя
- Создание внешнего пользователя MySQL
- Удаление учётной записи
- Подключение через phpMyAdmin
- Add New User
- Ключевые команды, которые нужно знать
- Как сделать дамп базы данных MySql WorkBench
- Выдача привилегий
- Open MySQL Port
- Удаление базы данных
- MySQL Workbench. Как создать базу данных
- Создание базы данных
- Table of Contents
- Подключение из разных операционных систем
- Выводы
- Отзыв привилегий
- Заключение
Восстановление базы данных из скрипта.
Мы получаем скрипты для генерации структуры БД либо в задании на демо-экзамене, либо формируем из ER-диаграммы. Создание самой БД мы не рассматриваем (ни на демо-экзамене, ни на моем сервере у вас нет на это прав), но там ничего сложного и при желании вы можете установить локальную БД дома и с ней делать что угодно.
Подключение к базе данных (MySQL)
Прежде чем что-то сделать с базой данных нужно к ней подключиться:
Используя MySQL Workbench
Запустите программу MySQL Workbench
На стартовом окне программы кликните по значку «+»
В параметрах подключения заполните поля:
Store in vault — открывает окно для ввода и СОХРАНЕНИЯ пароля. Дома можете настроить, чтобы каждый раз не вводить пароль, но в классе лучше не использовать.
Test connection — тест соединения. Программа запросит пароль и попытается подключиться к серверу используя введенные параметры. Если все параметры введены правильно, то появится окно подтверждения.
Если при попытке подключения ругается на сертификат, то перейдите в закладку Advanced и в блоке Others напишите строку
useSSL=0
В окне настроек соединения жмите «OK»
Формирование DDL-скрипта по диаграмме
Сформируйте скрипт для создания БД: File -> Export -> Forward Engineer SQL CREATE Script. В окнах настроек и объектов пока всё оставляем по-умолчанию. Скопируйте скрипт в буфер обмена.
Откройте ранее созданное подключение к БД. Обычно при открытии БД одновременно открывается окно Query (запросы). Если его нет, но откройте новое:
Вставьте в окно запросов скрипт из буфера обмена и закомментируйте строку с созданием схемы (у вас нет прав на создание новых схем)
Если всё нормально, то будут созданы все таблицы и связи, которые вы описали в EER
На демо-экзамене в ресурсах будет аналогичный файл скрипта базы данных, но в нём не укзана база данных. Нужно в начале скрипта вписать команду
use <название вашей базы>;
Используя dBeaver
dBeaver — кроссплатформенный бесплатный менеджер баз данных (список поддерживаемых БД большой, есть и MySQL и MSSQL)
Создание подключения
В списке проектов открываем пункт General и в контекстном меню пункта Connections выбираем Создать -> Соединение
В открывшемся окне выберите тип соедиения (используемую БД)
У меня на сервере установлена mysql Ver 14.14 Distrib 5.7.39, for Linux (x86_64)
, поэтому выбираем MySQL. Если у вас другой тип БД, то выбираете соответсвующий.
В настройках соединения указываем доменное имя или IP сервера, название базы данных и имя пользователя (выдаст преподаватель или сами знаете какие в вашей БД), пароль.
Затем нажимаете тест соединения и, если всё введено правильно, и соединение устанавливается то жмёте Готово
В списке соединений появится созданое соединение, название состоит из имени базы и имени сервера и имеющиеся базы данных.
Импорт данных.
Стандартом де-факто для импорта/экспорта данных является формат CSV.
Что такое CSV-файлы
Формат CSV используют, чтобы хранить таблицы в текстовых файлах. Данные очень часто упаковывают именно в таблицы, поэтому CSV-файлы очень популярны.
CSV расшифровывается как comma-separated values — «значения, разделенные запятыми». Но разделителями столбцов в CSV-файле могут служить и точки с запятой, и знаки табуляции. Это все равно будет CSV-файл.
У CSV куча плюсов перед тем же форматом Excel: текстовые файлы просты как пуговица, открываются быстро, читаются на любом устройстве и в любой среде без дополнительных инструментов.
Из-за своих преимуществ CSV — сверхпопулярный формат обмена данными, хотя ему уже лет 40. CSV используют прикладные промышленные программы, в него выгружают данные из баз.
Одна беда — текстового редактора для работы с CSV мало. Еще ничего, если таблица простая: в первом поле ID одной длины, во втором дата одного формата, а в третьем какой-нибудь адрес. Но когда поля разной длины и их больше трех, начинаются мучения.
Еще хуже с анализом данных — попробуй «Блокнотом» хотя бы сложить все числа в столбце. Я уж не говорю о красивых графиках.
Поэтому CSV-файлы анализируют и редактируют в Excel и аналогах: Open Office, LibreOffice и прочих.
Как Excel портит данные: из классики
Все бы ничего, но Excel, едва открыв CSV-файл, начинает свои лукавые выкрутасы. Он без спроса меняет данные так, что те приходят в негодность. Причем делает это совершенно незаметно. Из-за этого в свое время мы схватили ворох проблем.
Большинство казусов связано с тем, что программа без спроса преобразует строки с набором цифр в числа.
Округляет. Например, в исходной ячейке два телефона хранятся через запятую без пробелов: «5235834,5235835». Что сделает Excel? Лихо превратит номера́ в одно число и округлит до двух цифр после запятой: «5235834,52». Так мы потеряем второй телефон.
Приводит к экспоненциальной форме. Excel заботливо преобразует «123456789012345» в число «1,2E+15». Исходное значение потеряем напрочь.
Проблема актуальна для длинных, символов по пятнадцать, цифровых строк. Например, КЛАДР-кодов (это такой государственный идентификатор адресного объекта: го́рода, у́лицы, до́ма).
Удаляет лидирующие плюсы. Excel считает, что плюс в начале строки с цифрами — совершенно лишний символ. Мол, и так ясно, что число положительное, коль перед ним не стоит минус. Поэтому лидирующий плюс в номере «+74955235834» будет отброшен за ненадобностью — получится «74955235834». (В реальности номер пострадает еще сильнее, но для наглядности обойдусь плюсом).
Потеря плюса критична, например, если данные пойдут в стороннюю систему, а та при импорте жестко проверяет формат.
Разбивает по три цифры. Цифровую строку длиннее трех символов Excel, добрая душа, аккуратно разберет. Например, «8 495 5235834» превратит в «84 955 235 834».
Форматирование важно как минимум для телефонных номеров: пробелы отделяют коды страны и города от остального номера и друг от друга. Excel запросто нарушает правильное членение телефона.
Удаляет лидирующие нули. Строку «00523446» Excel превратит в «523446».
А в ИНН, например, первые две цифры — это код региона. Для Республики Алтай он начинается с нуля — «04». Без нуля смысл номера исказится, а проверку формата ИНН вообще не пройдет.
Меняет даты под локальные настройки. Excel с удовольствием исправит номер дома «1/2» на «01.фев». Потому что Windows подсказал, что в таком виде вам удобнее считывать даты.
Побеждаем порчу данных правильным импортом
Если серьезно, в бедах виноват не Excel целиком, а неочевидный способ импорта данных в программу.
По умолчанию Excel применяет к данным в загруженном CSV-файле тип «General» — общий. Из-за него программа распознает цифровые строки как числа. Такой порядок можно победить, используя встроенный инструмент импорта.
Запускаем встроенный в Excel механизм импорта.
Выбирем CSV-файл с данными, открывается диалог. В диалоге кликем на тип файла Delimited (с разделителями). Кодировка — та, что в файле, обычно определяется автоматом. Если первая строка файла — шапка, отмечем «My Data Has Headers».
На третьем шаге выбираем формат полей, ради него все и затевалось. Для всех столбцов выставляем тип «Text». Кстати, если кликнуть на первую колонку, зажать шифт и кликнуть на последнюю, выделятся сразу все столбцы. Удобно.
Дальше Excel спросит, куда вставлять данные из CSV — можно просто нажать «OK», и данные появятся в открытом листе.
Но! Если мы планируем экспортировать данные в CSV из Excel, придется сделать еще кое-что.
После импорта нужно принудительно привести все-все ячейки на листе к формату «Text». Иначе новые поля приобретут все тот же тип «General».
- Нажимаем два раза Ctrl+A, Excel выбирает все ячейки на листе;
- кликаем правой кнопкой мыши;
- выбираем в контекстном меню «Format Cells»;
- в открывшемся диалоге выбираем слева тип данных «Text».
Разбор импорта данных на примере прошлогоднего демо-экзамена
Файлы, используемые в этом разборе, лежат в каталоге data этого репозитория (
variant1.zip
иvariant2.zip
)
Создание таблиц из скрипта
Откройте соединение с БД
Откройте вкладку SQL-скрипта, если её ещё нет
Скопируйте в буфер обмена содержимое файла
my.sql
(на демо-экзамене в ресурсах будет два файла:my.sql
для MySQL иms.sql
для MSSQL) и вставьте его во вкладку SQL-скрипта, открытую в предыдущем пункте.Добавьте в начало скрипта команду
USE <название вашей базы данных>;
(обращаю внимание, в MySQL команды должны завершаться точкой с запятой) и выполните скрипт (кликните по значку молнии)После выполнения скрипта в вашей БД должны появиться новые таблицы (пустые)
Импорт данных
В ресурсах у нас есть три файла для импорта:
materials_short_k_import.txt
products_k_import.csv
productmaterial_k_import.xlsx
При реальной разработке вам придется самостоятельно разбираться в какую таблицу импортировать данные, но в рамках демо-экзамена имена импортируемых файлов обычно соответсвуют таблицам БД
Импорт материалов
Процесс импорта состоит из нескольких этапов:
- подготовка данных
- импорт во временную таблицу
- перенос данных из временной таблицы в нужную таблицу(ы)
Подготовка данных
Открываем или импортируем файл с исходными данными
Файл материалов у нас в формате TXT. Такой формат напрямую из Excel открыть нельзя — загружайте через импорт данных (в разных версиях Excel меню может называться по-разному)
Выберите файл для импорта
В мастере импорта на первом шаге выберите правильную кодировку (в предварительном просмотре должен быть читаемый текст) и поставьте, если нужно, галочку «мои данные содержат заголовки»
Выберите разделитель (обычно используется запятая или точка с запятой, но могут втретиться и более экзотические символы)
После импорта данных смотрим всё-ли нормально с данными (Смотрим на структуру БД и просто включаем логику). В этой таблице в колонке «стоимость» явно лишние слова «руб.» и «рублей»
выделяем редактируемую колонку
открываем диалог «Найти и заменить» (
Ctrl+F
)и вырезаем всё лишнее
меняем формат ячейки на «числовой»
Видим, что некоторые строки не распознались как числа.
Дело в том, что в русской локали разделителем разрядов является запятая, а в исходном файле резделитель точка — меняем точки на запятые
в одном из демо-экзаменов в базе названия картинок с расширением
.jpg
, а реальные файлы были с расширением.jpeg
— обращайте внимание, в Excel-e это исправить проще, чем в базе
MySQL может импортировать данные только в CSV-формате. Файл либо «сохраняем как», либо «экспортируем»
Проверка кодировки
ВАЖНО!!! Кодировка импортируемых данных должна быть такой же, как кодировка базы данных (сейчас практически везде используется UTF-8)
Excel экспортирует текстовые данные в кодировке ANSI (1251)
Для перекодировки файла можно воспользоваться программой Notepad++ — она будет на демо-экзамене
Обращаем внимание на кодировку файла. У меня, например, с какого-то перепугу решило что Macintosh.
Меняем на «Windows-1251»
Кодировка теперь нормальная, но по содержимому видно, что у некоторых столбцов есть лидирующий пробел. Это не есть хорошо.
Сдесь же в Notepad++ заменим
"; "
на";"
Если визуально всё нормально, то меняем кодировку файла на UTF-8
и сохраняем файл
Импорт во временную таблицу
В контекстном меню базы данных запускаем «мастер импорта данных»
Импортируем в новую таблицу с уникальным именем
Смотрим, всё ли правильно определилось. Судя по тому, что цену как число не распознало MySQL по-умолчанию ждёт точку в качестве разделителя.
Меняем тип поля на double и в появившемся поле «Decimal Separator» пишем запятую.
После импорта открываем таблицу и смотрим всё-ли нормально
перенос данных из временной таблицы в нужную таблицу(ы)
По структуре таблицы Material видно, что одно поле словарное (MaterialTypeID)
т.е. нам сначала нужно заполнить таблицу MaterialType уникальными значениями типов материалов.
Вспомиаем, что для выбора уникальных значений используется ключевое слово DISTINCT
Но, кроме названия метериала (Title) в таблице MaterialType есть ещё какой-то DefectedPercent. Смотрим структуру данных:
и видим, что поле это обязательное.
Тут есть два варианта:
- добавить фиксированное значение, взятое «с потолка»
- отменить обязательность этого поля (NN = Not NULL)
Мы будем использовать первый вариант.
Открываем окно с SQL-запросами (возможно оно ещё открыто после импорта структуры базы)
Пишем запрос для вставки уникальных значений типов материалов из временной таблицы.
Современные клиенты СУБД позволяют облегчить написание этих запросов:
в контекстном меню таблицы MaterialType выбираем «Send to SQL Editor» -> «Insert Statement»
В акивное окно SQL-запросов вставится следующий запрос:
<div dir="auto" data-snippet-clipboard-copy-content="INSERT INTO `ekolesnikov`.`MaterialType`
(`ID`,
`Title`,
`DefectedPercent`)
VALUES
(,
,
);»>. (, , ) ({ID: }, {Title: }, {DefectedPercent: });