MySQL: различия между версиями
Илья Н. (обсуждение | вклад) (Удалена битая ссылка, размещена ссылка на документацию) |
|||
(не показаны 4 промежуточные версии 2 участников) | |||
Строка 1: | Строка 1: | ||
{{ | {{Stub}} | ||
'''MySQL''' — это многопользовательский, многопоточный SQL-сервер ('''SQL''' — структурированный язык запросов) баз данных. '''MySQL''' построен по технологии клиент/сервер и включает в себя сервер '''mysqld''' и набор различных клиентских программ и библиотек разработчиков. | |||
{{Note|смотрите также статью '''[[MySQL start]]'''.}} | |||
apt-get install MySQL-server | ==Установка сервера MySQL== | ||
===Установка и запуск=== | |||
Выполните команды (понадобятся права '''root'''): | |||
su - | |||
apt-get update && apt-get install MySQL-server | |||
systemctl enable --now mysqld | |||
Проверьте статус сервера '''MySQL''': | |||
systemctl status mysqld | |||
===Установка пароля root=== | |||
В '''MySQL''' суперпользователь '''root''' имеет все привилегии и может делать все, что угодно. По умолчанию пароль '''root''' пустой. Вы можете подключиться к серверу '''MySQL''' с помощью команды: | |||
mysql -u root | mysql -u root | ||
Затем | |||
Или просто: | |||
mysql> ALTER USER 'root'@'localhost' IDENTIFIED BY ' | |||
mysql | |||
Затем в консоли '''MySQL''' введите команду для установки пароля: | |||
Query OK, 0 rows affected (0.00 sec). | |||
mysql> ALTER USER 'root'@'localhost' IDENTIFIED BY 'Пароль'; | |||
Точка с запятой в конце обязательны. Если опечаток не было и все правильно, сервер выдаст строку: | |||
Query OK, 0 rows affected (0.00 sec). | |||
После установки пароля '''root''' (или любого другого пользователя), для входа в консоль '''MySQL''' с паролем используется команда: | |||
mysql -u root -p | mysql -u root -p | ||
Где вместо '''root''' может быть указано имя другого пользователя сервера '''MySQL'''. | |||
===Разрешение работы по сети=== | |||
{{Attention|В целях безопасности работа сервера '''MySQL''' по сети (TCP/IP) по умолчанию отключена!}} | |||
Для включения работы по сети сервера '''mysqld''' отредактируйте конфигурационный файл {{path|/etc/my.cnf.d/server.cnf}} от имени пользователя '''root''' и закомментируйте строку <code>skip-networking</code>: | |||
#skip-networking | |||
Или используйте команду {{cmd|control}} для разрешения работы сервера '''MySQL''' по сети: | |||
control mysqld server | |||
После этого перезапустите сервис '''mysqld''': | |||
systemctl restart mysqld | |||
Убедитесь, что сервер '''mysqld''' слушает TCP-порт '''3306''': | |||
netstat -lnpt | grep mysqld | |||
Также нужно убедиться, что ваш '''брандмауэр''' пропускает соединения на порт '''3306'''. | |||
===Создаем базу:=== | ===Создаем базу:=== | ||
Строка 36: | Строка 73: | ||
и | и | ||
mysqladmin -u root -p create my_database | mysqladmin -u root -p create my_database | ||
===Конфигурационные файлы=== | |||
Расположение конфигурационных файлов '''MySQL''': | |||
;{{path|/etc/my.cnf}} | |||
:Конфигурационный файл для сервера и клиента. | |||
;{{path|/etc/my.cnf.d/client.cnf}} | |||
:Конфигурационный файл для клиента. | |||
;{{path|/etc/my.cnf.d/mysql-clients.cnf}} | |||
:Конфигурационный файл для утилиты MariaDB. | |||
;{{path|/etc/my.cnf.d/server.cnf}} | |||
:Конфигурационный файл для сервера. | |||
;{{path|/etc/my.cnf.server/chroot.cnf}} | |||
;{{path|/etc/my.cnf.server/no-chroot.cnf}} | |||
:Конфигурационные файлы для настройки chroot и no-chroot соответственно. | |||
==Далее о нюансах== | ==Далее о нюансах== | ||
1 | 1. Подключения к базе данных. При обычных параметрах, подключения идут к базе локально (localhost, 127.0.0.1, 0.0.0.0). Но если нам требуется подключится к базе из другого места, нужно думать заранее. | ||
Потому, что из соображений безопасности доступа к базе все подключения из вне отрублены. Такие необходимости возникают при необходимости подключится допустим из среды разработки NetBeans. | Потому, что из соображений безопасности доступа к базе все подключения из вне отрублены. Такие необходимости возникают при необходимости подключится допустим из среды разработки NetBeans. | ||
При попытке подключения нам будет выдано сообщение: | При попытке подключения нам будет выдано сообщение: | ||
Строка 50: | Строка 97: | ||
или | или | ||
GRANT ALL PRIVILEGES ON *.* TO 'swopster'@'192.168.0.2' IDENTIFIED BY 'you_own_pass' WITH GRANT OPTION; | GRANT ALL PRIVILEGES ON *.* TO 'swopster'@'192.168.0.2' IDENTIFIED BY 'you_own_pass' WITH GRANT OPTION; | ||
=== О кодировках в MySQL 5.x === | === О кодировках в MySQL 5.x === | ||
Строка 104: | Строка 138: | ||
== Ссылки == | == Ссылки == | ||
[ | *[https://dev.mysql.com/doc/ MySQL Документация] | ||
[[Категория:Admin]] | [[Категория:Admin]] | ||
{{Category navigation|title=Системному администратору|category=Admin|sortkey={{SUBPAGENAME}}}} | {{Category navigation|title=Системному администратору|category=Admin|sortkey={{SUBPAGENAME}}}} | ||
[[Category:MySQL]] | [[Category:MySQL]] | ||
{{Category navigation|title=MySQL|category=MySQL|sortkey={{SUBPAGENAME}}}} | {{Category navigation|title=MySQL|category=MySQL|sortkey={{SUBPAGENAME}}}} |
Текущая версия от 14:42, 18 июня 2025
MySQL — это многопользовательский, многопоточный SQL-сервер (SQL — структурированный язык запросов) баз данных. MySQL построен по технологии клиент/сервер и включает в себя сервер mysqld и набор различных клиентских программ и библиотек разработчиков.
Установка сервера MySQL
Установка и запуск
Выполните команды (понадобятся права root):
su - apt-get update && apt-get install MySQL-server systemctl enable --now mysqld
Проверьте статус сервера MySQL:
systemctl status mysqld
Установка пароля root
В MySQL суперпользователь root имеет все привилегии и может делать все, что угодно. По умолчанию пароль root пустой. Вы можете подключиться к серверу MySQL с помощью команды:
mysql -u root
Или просто:
mysql
Затем в консоли MySQL введите команду для установки пароля:
mysql> ALTER USER 'root'@'localhost' IDENTIFIED BY 'Пароль';
Точка с запятой в конце обязательны. Если опечаток не было и все правильно, сервер выдаст строку:
Query OK, 0 rows affected (0.00 sec).
После установки пароля root (или любого другого пользователя), для входа в консоль MySQL с паролем используется команда:
mysql -u root -p
Где вместо root может быть указано имя другого пользователя сервера MySQL.
Разрешение работы по сети
Для включения работы по сети сервера mysqld отредактируйте конфигурационный файл /etc/my.cnf.d/server.cnf от имени пользователя root и закомментируйте строку skip-networking
:
#skip-networking
Или используйте команду control для разрешения работы сервера MySQL по сети:
control mysqld server
После этого перезапустите сервис mysqld:
systemctl restart mysqld
Убедитесь, что сервер mysqld слушает TCP-порт 3306:
netstat -lnpt | grep mysqld
Также нужно убедиться, что ваш брандмауэр пропускает соединения на порт 3306.
Создаем базу:
mysql> CREATE DATABASE my_database;
Создаем пользователей:
1.Для создания пользователя со ВСЕМИ правами. Пишут, что использовать только для устранения неполадок.
mysql> GRANT ALL PRIVILEGES ON *.* TO 'yourusername'@'localhost' IDENTIFIED BY 'you_own_pass' WITH GRANT OPTION;
2. Для создания нового пользователя с меньшими привилегиями (должно работать для большинства веб-приложений), который может использовать только базу данных с именем "my_database", в MySQL строке введите:
mysql> GRANT SELECT, INSERT, UPDATE, DELETE, CREATE, DROP, INDEX, ALTER, CREATE TEMPORARY TABLES, LOCK TABLES ON my_database.* TO 'yourusername'@'localhost' IDENTIFIED BY 'you_own_pass';
Для выхода из консоли MySQL:
mysql> \q
Для создания пароля рута и баз как АЛЬТЕРНАТИВУ можно использовать mysqladmin:
mysqladmin -u root -p password yourpassword и mysqladmin -u root -p create my_database
Конфигурационные файлы
Расположение конфигурационных файлов MySQL:
- /etc/my.cnf
- Конфигурационный файл для сервера и клиента.
- /etc/my.cnf.d/client.cnf
- Конфигурационный файл для клиента.
- /etc/my.cnf.d/mysql-clients.cnf
- Конфигурационный файл для утилиты MariaDB.
- /etc/my.cnf.d/server.cnf
- Конфигурационный файл для сервера.
- /etc/my.cnf.server/chroot.cnf
- /etc/my.cnf.server/no-chroot.cnf
- Конфигурационные файлы для настройки chroot и no-chroot соответственно.
Далее о нюансах
1. Подключения к базе данных. При обычных параметрах, подключения идут к базе локально (localhost, 127.0.0.1, 0.0.0.0). Но если нам требуется подключится к базе из другого места, нужно думать заранее. Потому, что из соображений безопасности доступа к базе все подключения из вне отрублены. Такие необходимости возникают при необходимости подключится допустим из среды разработки NetBeans. При попытке подключения нам будет выдано сообщение:
"Host '192.168.0.2' is not allowed to connect to this MySQL server"
Решением будет, только указание расположения подключающегося клиента при его создании.
GRANT ALL PRIVILEGES ON *.* TO 'igor'@'10.3.3.23' IDENTIFIED BY 'you_own_pass' WITH GRANT OPTION; или GRANT ALL PRIVILEGES ON *.* TO 'swopster'@'192.168.0.2' IDENTIFIED BY 'you_own_pass' WITH GRANT OPTION;
О кодировках в MySQL 5.x
В ALT Linux кодировка, передаваемая через параметр -C в mysqld, задаётся через CHSET в /etc/sysconfig/mysqld, либо определяется по системной локали. Это --character-set-server — кодировка, используемая сервером по умолчанию. Как нужно настроить сервер, чтобы по умолчанию кодировка была cp1251, но это можно было переопределять на utf8?
Кодировку и таблицу сортировки, используемые по умолчанию в сервере, лучше задавать в my.cnf:
character_set_server = utf8 collation_server = utf8_general_ci
Для клиентов (например, команды mysql) кодировка указывается в секции [client] файла my.cnf:
[client] default-character-set=cp1251
При открытии соединения с базой нужно указывать кодировку, в которой клиент будет работать с базой. Это можно сделать строкой
init-connect="SET NAMES cp1251"
в my.cnf. Команда set names устанавливает при подсоединении такие переменные как set_client, set_result, collaction_client, что позволяет серверу корректно воспринимать запросы и возвращать ответы.
Обратите внимание, что имена (таблиц и полей) хранятся в сервере в кодировке utf8 и это неизменяемо. Что насчёт их кодировки в запросе?
Включение логирования каждого запроса:
Отредактируем файл настроек:
mcedit /var/lib/mysql/my.cnf # for logging general_log_file = /log/query general_log = 1
Логи будут тут:
/var/lib/mysql/log/query
Важно отметить, что пути отсчитываются от корня чрута, то есть от
/var/lib/mysql/
по-умолчанию.