Как создать базу данных MySQL и подключить ее к сайту

Создать базу данных MySQL можно через консоль или phpMyAdmin. Для сайта выберите utf8mb4, заведите отдельного пользователя и выдайте ему права только на свою базу. После этого создайте таблицу, проверьте подключение и сохраните резервную копию.

Что понадобится перед созданием базы

Подготовьте сервер MySQL и учетную запись с правом создавать базы. Сервер может работать локально, на VPS или у хостинг-провайдера.

  • Сервер MySQL. Узнайте его хост, порт и доступность удаленных подключений.
  • Администратор. Локально для создания базы часто используют учетную запись root.
  • Способ подключения. Подойдут клиент mysql, phpMyAdmin или панель хостинга.

Для локальной установки скачайте MySQL Community Server. На хостинге возьмите имя сервера, порт, логин и пароль в панели управления.

Откройте терминал и войдите под администратором:

mysql -u root -p

Введите пароль после приглашения клиента. При успешном входе появится строка mysql>. Для удаленного сервера добавьте -h <хост>, а для другого порта – -P <порт>.

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

Создание базы данных через командную строку

Командная строка подходит для локальной разработки, VPS и повторяемой настройки сервера. Выполните запрос в клиенте MySQL под администратором.

CREATE DATABASE IF NOT EXISTS `my_db`
  CHARACTER SET utf8mb4
  COLLATE utf8mb4_0900_ai_ci;

Параметр IF NOT EXISTS не прерывает запрос, если база уже создана. Явные параметры кодировки сохраняют одинаковые настройки при переносе проекта.

Проверьте список баз:

SHOW DATABASES;

В результате найдите строку my_db. Затем выберите базу и проверьте текущий контекст:

USE `my_db`;
SELECT DATABASE();

Запрос SELECT DATABASE() должен вернуть my_db. После этого новые таблицы будут создаваться внутри выбранной базы.

Имя базы может содержать до 64 символов. Для нового проекта берите латинские буквы, цифры и подчеркивания, например shop_data. Дефис требует обратных кавычек:

CREATE DATABASE `shop-data`;

Такое имя придется заключать в обратные кавычки в каждом запросе. Двойные кавычки для имени базы не используйте.

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

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

  1. Откройте раздел, где перечислены базы данных.
  2. Введите my_db в поле имени базы.
  3. Выберите сравнение для кодировки utf8mb4.
  4. Нажмите кнопку создания базы.

После сохранения имя базы появится в дереве слева. Откройте его и убедитесь, что список таблиц пуст.

Если форма не предлагает подходящее сравнение или нужного действия нет в интерфейсе, откройте редактор SQL и выполните запрос из предыдущего раздела. Появление my_db в списке баз подтвердит результат.

Кодировка и сравнение: почему utf8mb4

Кодировка задает набор символов, а сравнение определяет сортировку и правила сравнения строк. Для нового сайта выбирайте utf8mb4 и совместимое с ним сравнение.

КодировкаЧто хранитКогда выбирать
utf8mb4Полный Unicode, включая четырехбайтовые символыДля новых сайтов и приложений
utf8mb3Подмножество Unicode без части четырехбайтовых символовТолько для совместимости со старым проектом

В MySQL имя utf8 исторически обозначает utf8mb3. Такая кодировка не хранит часть символов и может заменить эмодзи вопросительными знаками.

В MySQL 8.x для новых баз используется utf8mb4 с сопоставлением utf8mb4_0900_ai_ci по умолчанию. Явные параметры в запросе сохраняют ожидаемый результат при переносе базы между серверами.

Посмотрите параметры созданной базы:

SELECT DEFAULT_CHARACTER_SET_NAME, DEFAULT_COLLATION_NAME
FROM information_schema.SCHEMATA
WHERE SCHEMA_NAME = 'my_db';

Измените настройки по умолчанию для новых таблиц так:

ALTER DATABASE `my_db`
  CHARACTER SET utf8mb4
  COLLATE utf8mb4_0900_ai_ci;

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

Создание пользователя и выдача прав

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

Выполните команды под администратором:

CREATE USER 'site'@'localhost' IDENTIFIED BY 'замените_этот_пароль';
GRANT ALL PRIVILEGES ON `my_db`.* TO 'site'@'localhost';
SHOW GRANTS FOR 'site'@'localhost';

Команда GRANT выдает доступ к объектам my_db. Пользователь не получает права на соседние базы. Замените пароль на собственный и не храните его в публичном репозитории.

Значение localhost разрешает вход с того же сервера. Значение % разрешает подключения с разных адресов и расширяет поверхность атаки. Используйте его только при реальной потребности и ограничивайте доступ правилами сети.

Если сайт и MySQL работают на разных серверах, создайте учетную запись с нужным хостом вместо localhost. В результате SHOW GRANTS появится строка с разрешением для my_db.*.

В phpMyAdmin откройте раздел учетных записей пользователей. Создайте учетную запись site с хостом localhost и паролем. В блоке прав выберите базу my_db, отключите глобальные права и сохраните изменения. Если нужного пункта нет, выполните приведенные SQL-команды под администратором.

Создание первой таблицы

Выберите базу командой USE, затем создайте таблицу пользователей. Пример показывает первичный ключ, автоинкремент и типы INT, VARCHAR и DATETIME.

USE `my_db`;

CREATE TABLE `users` (
  `id` INT UNSIGNED NOT NULL AUTO_INCREMENT,
  `name` VARCHAR(100) NOT NULL,
  `email` VARCHAR(190) NOT NULL,
  `created_at` DATETIME NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

InnoDB поддерживает первичный ключ и транзакции. Поле id получает новое число автоматически, а NOT NULL запрещает пустое значение.

Проверьте структуру таблицы:

DESCRIBE `users`;

Результат должен содержать поля id, name, email и created_at.

В phpMyAdmin откройте базу и выберите действие создания таблицы. Введите имя users и число столбцов. Для id включите первичный ключ и автоинкремент, затем задайте типы остальных полей. После сохранения таблица появится в дереве базы.

Подключение базы к сайту

Приложению нужны четыре параметра: хост, имя базы, пользователь и пароль. В примере это localhost, my_db, site и пароль из команды CREATE USER.

  • Хост. Адрес сервера MySQL.
  • Имя базы. my_db.
  • Пользователь. site.
  • Пароль. Значение, заданное для пользователя.

В WordPress укажите эти значения в файле wp-config.php. Фреймворки часто читают их из файла .env. Не добавляйте файл с паролем в Git и не выводите пароль в сообщениях об ошибках.

Проверьте подключение теми же данными в терминале:

mysql -u site -p -h localhost my_db

Введите пароль и выполните SHOW TABLES;. В списке должна появиться таблица users. Такой вход подтверждает имя базы, пользователя, пароль и хост.

В MySQL 8.x сервер по умолчанию использует плагин caching_sha2_password. Старые PHP-клиенты и драйверы могут не поддерживать этот способ аутентификации. Обновите драйвер или библиотеку подключения, если приложение получает ошибку входа.

Резервная копия и восстановление

Дамп сохраняет структуру и данные в SQL-файле. Сделайте копию перед удалением базы, переносом проекта и изменением схемы.

Дамп одной базы создается командой:

mysqldump -u root -p --single-transaction my_db > my_db.sql

Для одной таблицы добавьте ее имя:

mysqldump -u root -p my_db users > users.sql

Сжатый файл создайте через gzip:

mysqldump -u root -p --single-transaction my_db | gzip > my_db.sql.gz

Восстановите обычный файл в пустую базу:

mysql -u root -p my_db < my_db.sql

Сжатый дамп передайте клиенту через gzip:

gzip -dc my_db.sql.gz | mysql -u root -p my_db

После импорта проверьте таблицы и структуру:

USE `my_db`;
SHOW TABLES;
DESCRIBE `users`;
SELECT COUNT(*) AS `rows_count` FROM `users`;

В списке должна быть users, а DESCRIBE должен показать четыре столбца. Нулевое число строк допустимо, если таблица была пустой до создания дампа.

В phpMyAdmin выберите базу и откройте раздел экспорта. Режим «Быстрый» показывает минимум настроек, а режим «Обычный» – все доступные настройки. Выберите SQL и запустите выгрузку.

Для восстановления откройте нужную базу и перейдите к импорту. Выберите SQL-файл и запустите загрузку. После завершения откройте список таблиц и просмотрите users. Наличие таблицы и ожидаемых столбцов подтверждает рабочий импорт.

Большой файл может превысить лимит загрузки PHP или панели хостинга. В таком случае используйте команду mysql из терминала.

Ежедневный дамп можно запускать через cron:

0 3 * * * mysqldump --defaults-extra-file=/путь/к/.my.cnf --single-transaction my_db | gzip > /путь/к/резервным-копиям/my_db-$(date +\%Y-\%m-\%d).sql.gz

Параметр --defaults-extra-file стоит сразу после имени команды. Файл настроек хранит учетные данные, поэтому ограничьте права на него и на каталог резервных копий.

Храните хотя бы одну копию дампа отдельно от сервера. Так сбой хостинга не уничтожит единственный файл восстановления.

Удаление базы данных и пользователя

Перед удалением сохраните дамп. Команда DROP DATABASE удаляет таблицы и данные без корзины.

DROP DATABASE IF EXISTS `my_db`;

После удаления базы удалите пользователя, если он больше не нужен:

DROP USER IF EXISTS 'site'@'localhost';

Имя базы заключайте в обратные кавычки. Двойные кавычки могут вызвать ошибку идентификатора.

Ошибки при создании базы и подключении к ней

ОшибкаПричинаДействие
ERROR 1007База с таким именем уже существуетВыполните SHOW DATABASES; или добавьте IF NOT EXISTS.
ERROR 1044Пользователь не получил права на базуВыдайте GRANT ALL PRIVILEGES ON `my_db`.* TO 'site'@'localhost';.
ERROR 1045Не совпали пароль, пользователь или хостСверьте пару 'site'@'localhost' и задайте пароль через ALTER USER.
Unknown collationСервер не знает сравнение из дампаЗамените в копии дампа сравнение на поддерживаемое сервером и повторите импорт.
Ошибка аутентификации PHPСтарый драйвер не поддерживает caching_sha2_passwordОбновите драйвер или библиотеку подключения.
Вместо кириллицы вопросикиКлиент, таблица или соединение используют другую кодировкуЗадайте utf8mb4 для базы, таблиц и соединения.

Если база существует, но сайт не подключается, повторите вход от имени site. Затем сравните четыре параметра подключения с настройками приложения и проверьте хост учетной записи.

Комментарии

Оставьте свой комментарий
Пока никто не оставил комментариев