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

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


  apt-get install MySQL-server
==Установка сервера MySQL==
  chkconfig mysqld on
===Установка и запуск===
  service mysqld start
Выполните команды (понадобятся права '''root'''):
 
  su -
apt-get update && apt-get install MySQL-server
  systemctl enable --now mysqld
 
Проверьте статус сервера '''MySQL''':
 
  systemctl status mysqld
 
===Установка пароля root===
В '''MySQL''' суперпользователь '''root''' имеет все привилегии и может делать все, что угодно. По умолчанию пароль '''root''' пустой. Вы можете подключиться к серверу '''MySQL''' с помощью команды:


===Для начала, укажем для MySQL пароль рута (привилегированного пользователя):===
  mysql -u root
  mysql -u root
Затем, в консоли MySQL ввести следующую команду:
 
Для MySQL версий 5.7.6 и новее (5.7.7, 5.7.8...)
Или просто:
  mysql> ALTER USER 'root'@'localhost' IDENTIFIED BY 'you_own_pass';
 
Для MySQL версий 5.7.5 и старее (5.7.4, 5.7.3...)
mysql
mysql> SET PASSWORD FOR 'root'@'localhost' = PASSWORD('you_own_pass');
 
точка с запятой в конце обязательны. Если опечаток не было и все правильно, сервер выдаст строку:
Затем в консоли '''MySQL''' введите команду для установки пароля:
Query OK, 0 rows affected (0.00 sec).
 
Если у Вас уже был установлен пароль рута или какого-либо другого пользователя, для входа в консоль MySQL используется команда:
  mysql> ALTER USER 'root'@'localhost' IDENTIFIED BY 'Пароль';
mysql -u swopster -p
 
или
Точка с запятой в конце обязательны. Если опечаток не было и все правильно, сервер выдаст строку:
 
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). Но если нам требуется подключится к базе из другого места, нужно думать заранее.
/var/lib/mysql/my.cnf
После правок перезагружать сервис: service mysqld restart.
 
2. Подключения к базе данных. При обычных параметрах, подключения идут к базе локально (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;
3.Как получить доступ к MySQL из сети? Если действительно необходимо и доступ ограничивается внешними средствами — закомментируйте (поставьте знак # в начале строки) параметр
skip-networking
в файле /var/lib/mysql/my.cnf, с последующим перезапуском службы mysqld.
Штатным средством включения внешнего доступа является команда
control mysqld server
4. Посмотреть на каком порту, для каких интерфейсов работает mysqld демон, командой:
netlist -tap
-----
в выводе будет, что-то наподобие:
root    13449 mysqld        3 tcp        0.0.0.0:3306          0.0.0.0:0    LISTEN
Видно, что mysql работает для всех интерфейсов и слушает 3306 порт.


=== О кодировках в MySQL 5.x ===
=== О кодировках в MySQL 5.x ===
Строка 104: Строка 138:


== Ссылки ==
== Ссылки ==
[http://linuxgangster.org/modules.php?name=Content&file=printout&id=8 Оптимизация настроек MySQL + Apache для нагруженного сервера]
*[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

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/

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

Ссылки