База данных — это фундамент любого динамического веб-приложения. Сайты на WordPress, интернет-магазины, CRM-системы, форумы — все они хранят информацию в базах данных MySQL. Правильное создание и настройка базы данных с самого начала избавит от проблем в будущем.
Разберём все способы создания баз данных MySQL: от командной строки до графических интерфейсов, с практическими примерами и рекомендациями.
Прежде чем создавать базу данных, подключитесь к серверу MySQL. Есть два основных способа.
mysql -u root -p
Система запросит пароль root-пользователя. После успешного входа появится приглашение mysql>.
Если MySQL установлен на удалённом сервере:
mysql -h hostname -u username -p
Где hostname — адрес сервера, username — имя пользователя с правами на создание баз данных.
phpMyAdmin — веб-интерфейс для управления MySQL. Обычно доступен по адресу:
http://your_domain/phpmyadmin
После авторизации все операции выполняются через графический интерфейс без ввода SQL-команд.
Базовая команда создания базы данных:
CREATE DATABASE database_name;
Пример:
CREATE DATABASE shop;
Эта команда создаст базу данных с именем shop и настройками по умолчанию.
MySQL накладывает определённые ограничения на имена:
_ и доллара $SELECT, TABLE, INDEX и т.д.)Хорошие примеры имён:
CREATE DATABASE my_store;
CREATE DATABASE blog_production;
CREATE DATABASE analytics_2024;
Плохие примеры:
CREATE DATABASE 123store; -- начинается с цифры
CREATE DATABASE my-database; -- дефис не разрешён
CREATE DATABASE select; -- зарезервированное слово
Кодировка определяет, какие символы можно хранить в базе. Collation — правила сортировки и сравнения этих символов.
Полный синтаксис:
CREATE DATABASE database_name
CHARACTER SET charset_name
COLLATE collation_name;
Для поддержки всех языков мира, включая emoji, используйте:
CREATE DATABASE my_app
CHARACTER SET utf8mb4
COLLATE utf8mb4_unicode_ci;
Разбор параметров:
utf8mb4 — полная поддержка UTF-8, включая 4-байтные символы (emoji, редкие иероглифы)utf8mb4_unicode_ci — сортировка без учёта регистра (case-insensitive), корректная для большинства языковДля русского языка с учётом регистра:
CREATE DATABASE russian_site
CHARACTER SET utf8mb4
COLLATE utf8mb4_russian_ci;
Для максимальной производительности (если регистр важен):
CREATE DATABASE fast_db
CHARACTER SET utf8mb4
COLLATE utf8mb4_bin;
Бинарная collation (_bin) сравнивает символы побайтово — это быстрее, но А и а будут разными символами.
Устаревший вариант utf8:
CREATE DATABASE old_style
CHARACTER SET utf8
COLLATE utf8_general_ci;
⚠️ Важно: utf8 в MySQL — это не полный UTF-8, а 3-байтная версия без поддержки emoji. Всегда используйте utf8mb4.
После создания базы убедитесь, что всё прошло успешно.
SHOW DATABASES;
Результат покажет все базы данных, к которым у вашего пользователя есть доступ:
+--------------------+
| Database |
+--------------------+
| information_schema |
| mysql |
| performance_schema |
| shop |
| my_app |
+--------------------+
SHOW DATABASES LIKE 'shop%';
Покажет только базы, начинающиеся с "shop".
SHOW CREATE DATABASE my_app;
Выведет точную команду, которая была использована для создания базы, включая кодировку и collation.
Перед выполнением операций с таблицами нужно выбрать активную базу данных:
USE database_name;
Пример:
USE shop;
После выполнения этой команды все последующие SQL-запросы будут выполняться в контексте базы shop.
Проверить текущую активную базу:
SELECT DATABASE();
Иногда нужно создать базу, только если она ещё не существует:
CREATE DATABASE IF NOT EXISTS my_app
CHARACTER SET utf8mb4
COLLATE utf8mb4_unicode_ci;
Если база my_app уже существует, команда не выполнится и не выдаст ошибку — это удобно для скриптов автоматизации.
⚠️ Критически важно: удаление базы данных необратимо. Все таблицы и данные будут потеряны.
Базовая команда:
DROP DATABASE database_name;
С условием:
DROP DATABASE IF EXISTS old_database;
Если база не существует, ошибки не будет.
Пример:
DROP DATABASE test_db;
Перед удалением продакшн-баз всегда делайте резервную копию!
CREATE DATABASE wordpress_site
CHARACTER SET utf8mb4
COLLATE utf8mb4_unicode_ci;
Затем создайте пользователя и назначьте права:
CREATE USER 'wp_user'@'localhost' IDENTIFIED BY 'secure_password_123';
GRANT ALL PRIVILEGES ON wordpress_site.* TO 'wp_user'@'localhost';
FLUSH PRIVILEGES;
CREATE DATABASE myapp_production CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
CREATE DATABASE myapp_staging CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
CREATE DATABASE myapp_development CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
Это позволяет изолировать данные между продакшн, тестовой и разработческой средами.
CREATE DATABASE multilang_cms
CHARACTER SET utf8mb4
COLLATE utf8mb4_unicode_ci;
utf8mb4_unicode_ci корректно обрабатывает текст на любом языке: кириллица, китайские иероглифы, арабская письменность.
utf8mb4_unicode_ci)Файл .sql будет загружен на ваш компьютер.
phpMyAdmin загрузит и выполнит все команды из файла.
Одна база данных:
mysqldump -u username -p database_name > backup.sql
Все базы данных:
mysqldump -u root -p --all-databases > all_databases_backup.sql
С сжатием:
mysqldump -u username -p database_name | gzip > backup.sql.gz
Обычный файл:
mysql -u username -p database_name < backup.sql
Сжатый файл:
gunzip < backup.sql.gz | mysql -u username -p database_name
Важно: база данных должна существовать перед восстановлением. Если нужно создать её заново:
mysql -u root -p -e "CREATE DATABASE new_database CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;"
mysql -u username -p new_database < backup.sql
Если база уже создана, но с неправильной кодировкой, можно изменить настройки:
ALTER DATABASE my_app
CHARACTER SET utf8mb4
COLLATE utf8mb4_unicode_ci;
⚠️ Внимание: это изменит настройки по умолчанию только для новых таблиц. Существующие таблицы нужно конвертировать отдельно:
ALTER TABLE table_name CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
Узнать, сколько места занимает каждая база:
SELECT
table_schema AS 'Database',
ROUND(SUM(data_length + index_length) / 1024 / 1024, 2) AS 'Size (MB)'
FROM information_schema.tables
GROUP BY table_schema
ORDER BY SUM(data_length + index_length) DESC;
Эта команда выведет список баз данных с их размером в мегабайтах.
USE my_database;
CHECK TABLE table_name;
REPAIR TABLE table_name;
OPTIMIZE TABLE table_name;
Эта команда дефрагментирует таблицу и освобождает неиспользуемое пространство.
Ошибка: ERROR 1007 (HY000): Can't create database 'dbname'; database exists
Причина: база данных с таким именем уже существует.
Решение: используйте CREATE DATABASE IF NOT EXISTS или выберите другое имя.
Ошибка: ERROR 1044 (42000): Access denied for user 'user'@'localhost' to database 'dbname'
Причина: у пользователя нет прав на создание баз данных.
Решение: войдите под root и выдайте права:
GRANT CREATE ON *.* TO 'user'@'localhost';
FLUSH PRIVILEGES;
Ошибка: после импорта кириллица отображается как "�����"
Причина: несовпадение кодировок базы данных, таблиц и клиента.
Решение: убедитесь, что база создана с utf8mb4. Перед импортом выполните:
SET NAMES utf8mb4;
Ошибка: ERROR 1064 (42000): You have an error in your SQL syntax
Причина: опечатка в команде или использование зарезервированного слова без обратных кавычек.
Решение: проверьте синтаксис. Если имя базы — зарезервированное слово, оберните его в обратные кавычки:
CREATE DATABASE `select`;
Хотя лучше просто выбрать другое имя.
Чтобы все новые базы создавались с правильной кодировкой, отредактируйте конфигурационный файл MySQL.
Для Linux: /etc/mysql/my.cnf или /etc/my.cnf
Добавьте в секцию [mysqld]:
[mysqld]
character-set-server = utf8mb4
collation-server = utf8mb4_unicode_ci
Для Windows: C:\ProgramData\MySQL\MySQL Server X.X\my.ini
После изменений перезапустите MySQL:
sudo systemctl restart mysql
Проверить текущие настройки:
SHOW VARIABLES LIKE 'character_set%';
SHOW VARIABLES LIKE 'collation%';
Для автоматического создания баз в скриптах используйте:
#!/bin/bash
DB_NAME="my_new_database"
DB_USER="root"
DB_PASS="password"
mysql -u $DB_USER -p$DB_PASS <<EOF
CREATE DATABASE IF NOT EXISTS $DB_NAME
CHARACTER SET utf8mb4
COLLATE utf8mb4_unicode_ci;
EOF
echo "Database $DB_NAME created successfully"
Такой скрипт полезен при развёртывании приложений или миграции между серверами.
Создание базы данных MySQL — простая операция, но правильная настройка кодировки и collation с самого начала избавит от головной боли в будущем. Всегда используйте utf8mb4 для новых проектов — это гарантирует совместимость с любыми языками и современными стандартами.
Основные правила: выбирайте понятные имена для баз, используйте правильную кодировку, регулярно делайте резервные копии и не забывайте про права пользователей. База данных — сердце вашего приложения, и она заслуживает внимательного отношения.