Различия
Здесь показаны различия между двумя версиями данной страницы.
Предыдущая версия справа и слева Предыдущая версия Следующая версия | Предыдущая версия | ||
wiki:mysql [2013/01/21 08:27] [Кодировки] |
wiki:mysql [2020/12/29 02:15] (текущий) [Администрирование] |
||
---|---|---|---|
Строка 3: | Строка 3: | ||
**MySQL** — свободная СУБД для малых и средних приложений. Входит в состав [[LAMP]] и [[XAMPP]]. | **MySQL** — свободная СУБД для малых и средних приложений. Входит в состав [[LAMP]] и [[XAMPP]]. | ||
- | ===== Установка ===== | + | ===== Версии MySQL в Ubuntu ===== |
+ | ^ Ubuntu ^ MySQL ^ | ||
+ | | 12.04 LTS (Precise) | 5.5 | | ||
+ | | 14.04 LTS (Trusty) | 5.5, 5.6 | | ||
+ | | 15.10 (Wily) | 5.6 | | ||
+ | | 16.04 LTS (Xenial) | 5.7 | | ||
+ | |||
+ | |||
+ | ===== Установка ===== | ||
MySQL есть в репозиториях Ubuntu. Он разбит на несколько пакетов. | MySQL есть в репозиториях Ubuntu. Он разбит на несколько пакетов. | ||
** Для того чтобы установить MySQL сервер выполните команду: | ** Для того чтобы установить MySQL сервер выполните команду: | ||
Строка 15: | Строка 23: | ||
===== Настройка ===== | ===== Настройка ===== | ||
- | + | Конфигурация сервера MySQL содержится в файле ///etc/mysql/my.cnf//. | |
- | Конфигурация сервера MySQL содержится в файле ''/etc/mysql/my.cnf''. | + | |
==== Доступ к серверу из сети ==== | ==== Доступ к серверу из сети ==== | ||
- | |||
По умолчанию сервер MySQL принимает соединения только с локальной машины. Для того, чтобы разрешить подключаться к нему с других машин замените строку | По умолчанию сервер MySQL принимает соединения только с локальной машины. Для того, чтобы разрешить подключаться к нему с других машин замените строку | ||
<file ini>bind-address = 127.0.0.1</file> | <file ini>bind-address = 127.0.0.1</file> | ||
на | на | ||
- | <file ini> | + | <file ini>#разрешить подключатся с любого хоста |
- | #разрешить подключатся с любого хоста | + | |
bind-address = 0.0.0.0 | bind-address = 0.0.0.0 | ||
#разрешить подключатся только с указанного IP | #разрешить подключатся только с указанного IP | ||
Строка 30: | Строка 35: | ||
==== Кодировки ==== | ==== Кодировки ==== | ||
+ | <note important> | ||
+ | В данном разделе используется распространённое решение проблемы с кодировкой. Стоит помнить, что данное решение не является правильным, хоть и помогает временно решить проблему. Для правильного использования кодировки создавайте или храните таблицы в любой удобной для хранения в СУБД кодировке, а вот клиент должен подключаться к СУБД с указанием той кодировки, с которй выводится текст или производится обработка данных. | ||
+ | </note> | ||
По-умолчанию в Ubuntu MySQL устанавливается с кодировкой ''latin1''. В этом можно убедиться посмотрев вывод запроса: | По-умолчанию в Ubuntu MySQL устанавливается с кодировкой ''latin1''. В этом можно убедиться посмотрев вывод запроса: | ||
Строка 47: | Строка 55: | ||
и используя при создании таблиц | и используя при создании таблиц | ||
<code mysql>...DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;</code> | <code mysql>...DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;</code> | ||
- | мы не добьёмся полной поддержки кодировки utf8: | + | невозможно добиться полной поддержки кодировки utf8: |
<file>character_set_client utf8 | <file>character_set_client utf8 | ||
character_set_connection utf8 | character_set_connection utf8 | ||
Строка 57: | Строка 65: | ||
Кодировка по-умолчанию все равно останется latin1, что неудобно и может привести к ошибкам. | Кодировка по-умолчанию все равно останется latin1, что неудобно и может привести к ошибкам. | ||
- | Чтобы сервер сразу загружался с нужной нам кодировкой, необходимо отредактировать файл ''my.cnf'': | + | Чтобы сервер сразу загружался с нужной кодировкой, необходимо отредактировать файл ///etc/mysql/my.cnf//: |
<code bash>sudo nano -w /etc/mysql/my.cnf</code> | <code bash>sudo nano -w /etc/mysql/my.cnf</code> | ||
В секцию ''[mysqld]'' добавьте следующие строки: | В секцию ''[mysqld]'' добавьте следующие строки: | ||
<code ini>skip-character-set-client-handshake | <code ini>skip-character-set-client-handshake | ||
- | default-character-set=utf8 | + | character-set-server = utf8 |
init-connect='SET NAMES utf8' | init-connect='SET NAMES utf8' | ||
- | default-collation=utf8_general_ci</code> | + | collation-server=utf8_general_ci</code> |
- | + | Так же желательно установить кодировку для клиента и [[#Резервное копирование|mysqldump]]. Для этого в секциях ''[client]'' и ''[mysqldump]'' необходимо добавить строчку: | |
- | в зависимости от версии MySQL..... ниже для новой Версия MySQL-клиента: 5.5.28 | + | <file ini>default-character-set=utf8</file> |
- | + | ||
- | + | ||
- | + | ||
- | <code bash>[mysqld] | + | |
- | character-set-server=utf8 | + | |
- | collation-server=utf8_general_ci | + | |
- | init_connect='SET collation_connection = utf8_general_ci' | + | |
- | init_connect='SET NAMES utf8' | + | |
- | skip-character-set-client-handshake | + | |
- | + | ||
- | [client] | + | |
- | default-character-set=utf8 | + | |
- | + | ||
- | [mysqldump] | + | |
- | default-character-set=utf8</code> | + | |
- | + | ||
Перезагрузите сервер MySQL: | Перезагрузите сервер MySQL: | ||
Строка 97: | Строка 88: | ||
character_sets_dir /usr/share/mysql/charsets/</file> | character_sets_dir /usr/share/mysql/charsets/</file> | ||
- | + | <note important>Если на момент изменения настроек кодировки в базе уже присутствовали записи содержащие кириллицу, то они будут иметь неверную кодировку. Перед изменением кодировки убедитесь что в базе нет таблиц и данных, либо сделайте дамп всех данных из базы до внесения изменений настроек и восстановите после внесения изменений и перезагрузки MySQL.</note> | |
- | Примечание: Если на момент изменения настроек кодировки в базе уже присутствовали записи содержащие кирилицу то они будут иметь неверную кодировку, перед изменением кодировки убедитесь что в базе нет таблиц и данных, либо сделайте дамп всех данных из базы до внесения изменений настроек и восстановите после внесения изменений и перезагрузки MySQL. | + | |
- | + | ||
===== Администрирование ===== | ===== Администрирование ===== | ||
+ | ==== Установка root пароля ==== | ||
+ | <code>sudo mysql_secure_installation</code> | ||
==== Восстановление забытого пароля для root'a ==== | ==== Восстановление забытого пароля для root'a ==== | ||
- | + | Схожая проблема возникает если не задать пароль при установке MySQL, в этом случае mysql [[https://dev.mysql.com/doc/mysql-apt-repo-quick-guide/en/index.html#apt-repo-fresh-install|использует]] плагин unix-socket. | |
- | -- Остановите ''mysqld'' | + | -- Остановите ''mysqld'': |
.. <code bash>sudo service mysql stop</code> | .. <code bash>sudo service mysql stop</code> | ||
-- Запустите ''mysqld'' с параметрами ''%%--skip-grant-tables --user=root%%'': | -- Запустите ''mysqld'' с параметрами ''%%--skip-grant-tables --user=root%%'': | ||
- | .. <code bash>sudo mysqld --skip-grant-tables --user=root</code> | + | .. <code bash>sudo mysqld --skip-grant-tables --user=root</code> Если команда не сработает, добавьте строку «''skip-grant-tables''» в секцию «''[mysqld]''» файла ''/etc/mysql/mysql.conf.d/mysqld.cnf''. Затем выполните ''sudo service mysql restart''. После выполнения операций удалите эту строку. |
-- Подключитесь к MySQL-серверу командой: | -- Подключитесь к MySQL-серверу командой: | ||
.. <code bash>mysql -u root</code> | .. <code bash>mysql -u root</code> | ||
-- Обновите пароль для root'a: | -- Обновите пароль для root'a: | ||
+ | .. <code mysql>UPDATE mysql.user SET authentication_string=PASSWORD('<новый пароль>'), plugin='mysql_native_password' WHERE User='root' AND Host='localhost'; | ||
+ | FLUSH PRIVILEGES;</code> Для MySQL версий < 5.7: | ||
.. <code mysql>UPDATE mysql.user SET Password=PASSWORD('<новый пароль>') WHERE User='root'; | .. <code mysql>UPDATE mysql.user SET Password=PASSWORD('<новый пароль>') WHERE User='root'; | ||
FLUSH PRIVILEGES;</code> | FLUSH PRIVILEGES;</code> | ||
- | Теперь можете войти под root с новым паролем. | + | -- Перезапустите демона: <code bash>sudo service mysql restart</code> |
+ | Теперь можете проверить вход под root с новым паролем: <code bash>mysql -u root -p</code> | ||
==== Резервное копирование ==== | ==== Резервное копирование ==== | ||
- | |||
Для создания резервных копий существует специальная утилита ''mysqldump''. Основные ее параметры приведены в таблице: | Для создания резервных копий существует специальная утилита ''mysqldump''. Основные ее параметры приведены в таблице: | ||
^ Параметр ^ Описание ^ Пример ^ | ^ Параметр ^ Описание ^ Пример ^ | ||
| ''-u<user>'' | Пользователь, от лица которого будет производится дамп баз данных. | ''-uroot'' | | | ''-u<user>'' | Пользователь, от лица которого будет производится дамп баз данных. | ''-uroot'' | | ||
| ''-p<password>'' | Пароль пользователя. Пароль необязательно указывать, достаточно упомянуть этот параметр для того, чтобы утилита знала что подключение требует пароля. | ''-ppassword''\\ ''-p'' | | | ''-p<password>'' | Пароль пользователя. Пароль необязательно указывать, достаточно упомянуть этот параметр для того, чтобы утилита знала что подключение требует пароля. | ''-ppassword''\\ ''-p'' | | ||
- | | ''-h<host>'' | Хост, но котором расположена база данных. | ''-h127.0.0.1'' | | + | | ''-h<host>'' | Хост, на котором расположена база данных. | ''-h127.0.0.1'' | |
| ''-A'' | Создать бекап всех баз данных. | ''-A'' | | | ''-A'' | Создать бекап всех баз данных. | ''-A'' | | ||
| ''-B <databases>'' | Базы данных, которые нужно забэкапить. | ''-B db1 db2 db3'' | | | ''-B <databases>'' | Базы данных, которые нужно забэкапить. | ''-B db1 db2 db3'' | | ||
- | | ''%%--%%tables <tables>'' | Таблицы, которые нужно забэкапить. Перекрывает действие ключа -B | ''%%--%%tables db1.table1 db1.table3 db2.table3'' | | + | | ''%%--%%tables <tables>'' | Таблицы, которые нужно забэкапить. Перекрывает действие ключа -B | ''%%--%%tables db1.table1 db1.table2 db2.table3'' | |
| ''-d'' | Создать бекап структуры таблиц. Содержимое таблиц скопировано не будет. | ''-d'' | | | ''-d'' | Создать бекап структуры таблиц. Содержимое таблиц скопировано не будет. | ''-d'' | | ||
+ | | ''%%--%%skip-extended-insert'' | Не использовать многострочные INSERT-записи при создании дампа. | ''%%--%%skip-extended-insert'' | | ||
+ | | ''-w'where_clause''' | Создавать дамп только тех строк, которые попадают под условие. | ''-w'Id > 10 AND Id < 100''' | | ||
- | ===== MySQL Workbench ===== | + | ==== Отключение и включение автозагрузки сервиса ==== |
+ | Начиная с версии Ubuntu 15.04 отключение и включение сервисов возможно одной командой, без редактирования конфигов. В примерах команд ниже слово "SERVICE" следует заменить на "mysql". | ||
+ | Узнать стоит ли сервис в автозагрузке: | ||
+ | <code>$ systemctl is-enabled SERVICE</code> | ||
+ | Убрать сервис из автозагрузки в Ubuntu-16.04: | ||
+ | <code>$ sudo systemctl disable SERVICE</code> | ||
+ | Добавить сервис в автозагрузку в Ubuntu-16.04: | ||
+ | <code>$ sudo systemctl enable SERVICE</code> | ||
+ | |||
+ | |||
+ | ===== MySQL Workbench ===== | ||
**MySQL Workbench** -- инструмент для визуального проектирования баз данных. MySQL Workbench существует в двух вариантах: | **MySQL Workbench** -- инструмент для визуального проектирования баз данных. MySQL Workbench существует в двух вариантах: | ||
* Community Edition -- бесплатная версия, распространяемая под лицензией [[GPL|GPL3]] | * Community Edition -- бесплатная версия, распространяемая под лицензией [[GPL|GPL3]] | ||
Строка 137: | Строка 139: | ||
===== Ссылки ===== | ===== Ссылки ===== | ||
- | |||
* [[wpru>MySQL|Статья на русской Википедии]] | * [[wpru>MySQL|Статья на русской Википедии]] | ||
* [[http://forum.ubuntu.ru/index.php?topic=15210.0|Обсуждение на форуме]] | * [[http://forum.ubuntu.ru/index.php?topic=15210.0|Обсуждение на форуме]] | ||
- | {{tag> Администрирование Можно_улучшить}} | + | {{tag>Администрирование mysql mysqldump workbench lamp}} |