MySQL: различия между версиями

Материал из ALT Linux Wiki
Нет описания правки
(Удалена битая ссылка, размещена ссылка на документацию)
 
(не показано 14 промежуточных версий 10 участников)
Строка 1: Строка 1:
[[Category:Admin]]
{{Stub}}
{{stub}}
'''MySQL''' — это многопользовательский, многопоточный SQL-сервер ('''SQL''' — структурированный язык запросов) баз данных. '''MySQL''' построен по технологии клиент/сервер и включает в себя сервер '''mysqld''' и набор различных клиентских программ и библиотек разработчиков.
{{викифицировать}}
{{Note|смотрите также статью '''[[MySQL start]]'''.}}


== MySQL ==
==Установка сервера MySQL==
[http://linuxgangster.org/modules.php?name=Content&file=printout&id=8 Оптимизация настроек MySQL + Apache для нагруженного сервера]
===Установка и запуск===
Выполните команды (понадобятся права '''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'''.
 
===Разрешение работы по сети===
{{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'''.
 
===Создаем базу:===
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''':
;{{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. Подключения к базе данных. При обычных параметрах, подключения идут к базе локально (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 ===
=== О кодировках в MySQL 5.x ===


В ALT:
В ALT Linux кодировка, передаваемая через параметр -C в mysqld, задаётся через CHSET в /etc/sysconfig/mysqld, либо определяется по системной локали.
1. Кодировка, передаваемая через параметр -C в mysqld, задаётся через CHSET в /etc/sysconfig/mysqld, либо определяется по системной локали.
Это --character-set-server кодировка, используемая '''сервером''' по умолчанию.
Это --character-set-server - кодировка, используемая _сервером_ по умолчанию.
Как нужно настроить сервер, чтобы по умолчанию кодировка была cp1251, но это можно было переопределять на utf8?
Как нужно настроить сервер, чтобы по умолчанию кодировка была cp1251, но это можно было переопределять на utf8?


Кодировку и таблицу сортировки, используемые по умолчанию в сервере, лучше задавать в my.cnf:
Кодировку и таблицу сортировки, используемые по умолчанию в сервере, лучше задавать в my.cnf:
character_set_server = utf8
character_set_server = utf8
collation_server = utf8_general_ci
collation_server = utf8_general_ci


Для клиентов (например, команды mysql) кодировка указывается в секции [client] файла my.cnf:
Для клиентов (например, команды mysql) кодировка указывается в секции [client] файла my.cnf:
[client]
[client]
default-character-set=cp1251
default-character-set=cp1251


При открытии соединения с базой нужно указывать кодировку, в которой клиент будет работать с базой. Это можно сделать строкой
При открытии соединения с базой нужно указывать кодировку, в которой клиент будет работать с базой. Это можно сделать строкой
init-connect="SET NAMES cp1251"
init-connect="SET NAMES cp1251"
в my.cnf. Команда set names устанавливает при подсоединении такие переменные как set_client, set_result, collaction_client
в my.cnf. Команда set names устанавливает при подсоединении такие переменные как set_client, set_result, collaction_client, что позволяет серверу корректно воспринимать запросы и возвращать ответы.
Что позволяет серверу корректно воспринимать запросы и возвращать ответы.


Обратите внимание, что имена (таблиц и полей) хранятся в сервере в кодировке utf8 и это неизменяемо.
Обратите внимание, что имена (таблиц и полей) хранятся в сервере в кодировке utf8 и это неизменяемо.
''Что насчёт их кодировки в запросе?''
''Что насчёт их кодировки в запросе?''
=== Включение логирования каждого запроса: ===
Отредактируем файл настроек:
<pre>
mcedit /var/lib/mysql/my.cnf
# for logging
general_log_file = /log/query
general_log = 1
</pre>
Логи будут тут:
/var/lib/mysql/log/query
Важно отметить, что пути отсчитываются от корня чрута, то есть от
/var/lib/mysql/
по-умолчанию.
== Ссылки ==
*[https://dev.mysql.com/doc/ MySQL Документация]
[[Категория:Admin]]
{{Category navigation|title=Системному администратору|category=Admin|sortkey={{SUBPAGENAME}}}}
[[Category:MySQL]]
{{Category navigation|title=MySQL|category=MySQL|sortkey={{SUBPAGENAME}}}}

Текущая версия от 14:42, 18 июня 2025

Stub.png
Данная страница находится в разработке.
Эта страница ещё не закончена. Информация, представленная здесь, может оказаться неполной или неверной.

MySQL — это многопользовательский, многопоточный SQL-сервер (SQL — структурированный язык запросов) баз данных. MySQL построен по технологии клиент/сервер и включает в себя сервер mysqld и набор различных клиентских программ и библиотек разработчиков.

Примечание: смотрите также статью MySQL start.


Установка сервера 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.

Разрешение работы по сети

Внимание! В целях безопасности работа сервера MySQL по сети (TCP/IP) по умолчанию отключена!

Для включения работы по сети сервера 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/

по-умолчанию.

Ссылки