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

Материал из ALT Linux Wiki
(викификация)
 
(не показано 8 промежуточных версий 6 участников)
Строка 1: Строка 1:
[[Категория:Admin]]
{{stub}}
{{stub}}
==Попробуем ознакомиться и по минимуму настроить MySQL==
=== Установка и запуск ===
apt-get install MySQL-server
chkconfig mysqld on
service mysqld start
===Для начала, укажем для MySQL пароль рута (привилегированного пользователя):===
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> SET PASSWORD FOR 'root'@'localhost' = PASSWORD('you_own_pass');
точка с запятой в конце обязательны. Если опечаток не было и все правильно, сервер выдаст строку:
Query OK, 0 rows affected (0.00 sec).
Если у Вас уже был установлен пароль рута или какого-либо другого пользователя, для входа в консоль MySQL используется команда:
mysql -u swopster -p
или
mysql -u root -p
===Создаем базу:===
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
==Далее о нюансах==
1. Конфигурационный файл расположен:
/var/lib/mysql/my.cnf
После правок перезагружать сервис: service mysqld restart.
2. Подключения к базе данных. При обычных параметрах, подключения идут к базе локально (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;
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 ===


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


Строка 23: Строка 85:
''Что насчёт их кодировки в запросе?''
''Что насчёт их кодировки в запросе?''


=== Ссылки ===
=== Включение логирования каждого запроса: ===
 
Отредактируем файл настроек:
<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/
по-умолчанию.
 
== Ссылки ==
[http://linuxgangster.org/modules.php?name=Content&file=printout&id=8 Оптимизация настроек MySQL + Apache для нагруженного сервера]
[http://linuxgangster.org/modules.php?name=Content&file=printout&id=8 Оптимизация настроек MySQL + Apache для нагруженного сервера]
[[Категория:Admin]]
{{Category navigation|title=Системному администратору|category=Admin|sortkey={{SUBPAGENAME}}}}
[[Category:MySQL]]
{{Category navigation|title=MySQL|category=MySQL|sortkey={{SUBPAGENAME}}}}

Текущая версия от 12:49, 10 марта 2023

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

Попробуем ознакомиться и по минимуму настроить MySQL

Установка и запуск

apt-get install MySQL-server
chkconfig mysqld on
service mysqld start

Для начала, укажем для MySQL пароль рута (привилегированного пользователя):

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> SET PASSWORD FOR 'root'@'localhost' = PASSWORD('you_own_pass');

точка с запятой в конце обязательны. Если опечаток не было и все правильно, сервер выдаст строку: Query OK, 0 rows affected (0.00 sec). Если у Вас уже был установлен пароль рута или какого-либо другого пользователя, для входа в консоль MySQL используется команда:

mysql -u swopster -p
или
mysql -u root -p

Создаем базу:

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

Далее о нюансах

1. Конфигурационный файл расположен:

/var/lib/mysql/my.cnf

После правок перезагружать сервис: service mysqld restart.

2. Подключения к базе данных. При обычных параметрах, подключения идут к базе локально (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;

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

В 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/

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

Ссылки

Оптимизация настроек MySQL + Apache для нагруженного сервера