Различия
Здесь показаны различия между двумя версиями данной страницы.
Предыдущая версия справа и слева Предыдущая версия Следующая версия | Предыдущая версия | ||
wiki:mysql [2010/10/14 09:11] |
wiki:mysql [2020/12/29 02:15] (текущий) [Администрирование] |
||
---|---|---|---|
Строка 1: | Строка 1: | ||
====== MySQL ====== | ====== MySQL ====== | ||
- | MySQL — свободная СУБД для малых и средних приложений. Входит в состав [[LAMP]]. | + | **MySQL** — свободная СУБД для малых и средних приложений. Входит в состав [[LAMP]] и [[XAMPP]]. |
- | ===== Настройка кодировок ===== | + | ===== Версии MySQL в Ubuntu ===== |
- | Мне было необходимо, чтобы сервер MySQL работал с кодировкой ''utf8''. | + | ^ Ubuntu ^ MySQL ^ |
- | По-умолчанию в Ubuntu MySQL устанавливается с кодировкой ''latin1''. | + | | 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 | | ||
- | <code>mysql> show variables like 'char%';</code> | ||
- | в результате получим вот такой вывод: | + | ===== Установка ===== |
+ | MySQL есть в репозиториях Ubuntu. Он разбит на несколько пакетов. | ||
+ | ** Для того чтобы установить MySQL сервер выполните команду: | ||
+ | .. <code bash>sudo apt-get install mysql-server</code> | ||
+ | .. При установке конфигурационный скрипт запросит пароль для администратора (root) базы данных. | ||
+ | ** Для того чтобы установить консольный клиент MySQL выполните команду: | ||
+ | .. <code bash>sudo apt-get install mysql-client</code> | ||
+ | ** Для того чтобы установить модуль для работы с MySQL в PHP выполните команду: | ||
+ | .. <code bash>sudo apt-get install php5-mysql</code> | ||
+ | |||
+ | ===== Настройка ===== | ||
+ | Конфигурация сервера MySQL содержится в файле ///etc/mysql/my.cnf//. | ||
+ | |||
+ | ==== Доступ к серверу из сети ==== | ||
+ | По умолчанию сервер MySQL принимает соединения только с локальной машины. Для того, чтобы разрешить подключаться к нему с других машин замените строку | ||
+ | <file ini>bind-address = 127.0.0.1</file> | ||
+ | на | ||
+ | <file ini>#разрешить подключатся с любого хоста | ||
+ | bind-address = 0.0.0.0 | ||
+ | #разрешить подключатся только с указанного IP | ||
+ | bind-address = 192.168.1.23</file> | ||
+ | |||
+ | ==== Кодировки ==== | ||
+ | <note important> | ||
+ | В данном разделе используется распространённое решение проблемы с кодировкой. Стоит помнить, что данное решение не является правильным, хоть и помогает временно решить проблему. Для правильного использования кодировки создавайте или храните таблицы в любой удобной для хранения в СУБД кодировке, а вот клиент должен подключаться к СУБД с указанием той кодировки, с которй выводится текст или производится обработка данных. | ||
+ | </note> | ||
+ | |||
+ | По-умолчанию в Ubuntu MySQL устанавливается с кодировкой ''latin1''. В этом можно убедиться посмотрев вывод запроса: | ||
+ | <code mysql>SHOW VARIABLES LIKE 'char%';</code> | ||
<file>character_set_client latin1 | <file>character_set_client latin1 | ||
Строка 23: | Строка 52: | ||
В связи с этим, даже используя при работе с сервером команду | В связи с этим, даже используя при работе с сервером команду | ||
- | + | <code mysql>SET names utf8;</code> | |
- | <code>set names utf8;</code> | + | |
и используя при создании таблиц | и используя при создании таблиц | ||
- | + | <code mysql>...DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;</code> | |
- | <code>...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 | ||
Строка 39: | Строка 63: | ||
character_sets_dir /usr/share/mysql/charsets/</file> | character_sets_dir /usr/share/mysql/charsets/</file> | ||
- | Кодировка по-умолчанию все равно останется latin1, что неудобно. | + | Кодировка по-умолчанию все равно останется latin1, что неудобно и может привести к ошибкам. |
- | Чтобы сервер сразу загружался с нужной нам кодировкой, необходимо в файл ''my.cnf'' добавить несколько строк: | + | Чтобы сервер сразу загружался с нужной кодировкой, необходимо отредактировать файл ///etc/mysql/my.cnf//: |
- | + | <code bash>sudo nano -w /etc/mysql/my.cnf</code> | |
- | <code>nano -w /etc/mysql/my.cnf</code> | + | В секцию ''[mysqld]'' добавьте следующие строки: |
- | + | <code ini>skip-character-set-client-handshake | |
- | в секцию ''[mysqld]'' добавим следующий код: | + | character-set-server = utf8 |
- | + | ||
- | <code>skip-character-set-client-handshake | + | |
- | default-character-set=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: | + | <file ini>default-character-set=utf8</file> |
- | + | ||
- | <code>/etc/init.d/mysql restart</code> | + | |
- | FIXME //использовать services?// | + | Перезагрузите сервер MySQL: |
+ | <code bash>sudo service mysql restart</code> | ||
После этого список переменных будет выглядеть так: | После этого список переменных будет выглядеть так: | ||
- | |||
<file>character_set_client utf8 | <file>character_set_client utf8 | ||
character_set_connection utf8 | character_set_connection utf8 | ||
Строка 69: | Строка 88: | ||
character_sets_dir /usr/share/mysql/charsets/</file> | character_sets_dir /usr/share/mysql/charsets/</file> | ||
- | Чего мы и добивались. | + | <note important>Если на момент изменения настроек кодировки в базе уже присутствовали записи содержащие кириллицу, то они будут иметь неверную кодировку. Перед изменением кодировки убедитесь что в базе нет таблиц и данных, либо сделайте дамп всех данных из базы до внесения изменений настроек и восстановите после внесения изменений и перезагрузки MySQL.</note> |
+ | ===== Администрирование ===== | ||
+ | ==== Установка root пароля ==== | ||
+ | <code>sudo mysql_secure_installation</code> | ||
+ | ==== Восстановление забытого пароля для root'a ==== | ||
+ | Схожая проблема возникает если не задать пароль при установке MySQL, в этом случае mysql [[https://dev.mysql.com/doc/mysql-apt-repo-quick-guide/en/index.html#apt-repo-fresh-install|использует]] плагин unix-socket. | ||
+ | -- Остановите ''mysqld'': | ||
+ | .. <code bash>sudo service mysql stop</code> | ||
+ | -- Запустите ''mysqld'' с параметрами ''%%--skip-grant-tables --user=root%%'': | ||
+ | .. <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-серверу командой: | ||
+ | .. <code bash>mysql -u root</code> | ||
+ | -- Обновите пароль для 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'; | ||
+ | FLUSH PRIVILEGES;</code> | ||
+ | -- Перезапустите демона: <code bash>sudo service mysql restart</code> | ||
+ | Теперь можете проверить вход под root с новым паролем: <code bash>mysql -u root -p</code> | ||
+ | ==== Резервное копирование ==== | ||
+ | Для создания резервных копий существует специальная утилита ''mysqldump''. Основные ее параметры приведены в таблице: | ||
+ | ^ Параметр ^ Описание ^ Пример ^ | ||
+ | | ''-u<user>'' | Пользователь, от лица которого будет производится дамп баз данных. | ''-uroot'' | | ||
+ | | ''-p<password>'' | Пароль пользователя. Пароль необязательно указывать, достаточно упомянуть этот параметр для того, чтобы утилита знала что подключение требует пароля. | ''-ppassword''\\ ''-p'' | | ||
+ | | ''-h<host>'' | Хост, на котором расположена база данных. | ''-h127.0.0.1'' | | ||
+ | | ''-A'' | Создать бекап всех баз данных. | ''-A'' | | ||
+ | | ''-B <databases>'' | Базы данных, которые нужно забэкапить. | ''-B db1 db2 db3'' | | ||
+ | | ''%%--%%tables <tables>'' | Таблицы, которые нужно забэкапить. Перекрывает действие ключа -B | ''%%--%%tables db1.table1 db1.table2 db2.table3'' | | ||
+ | | ''-d'' | Создать бекап структуры таблиц. Содержимое таблиц скопировано не будет. | ''-d'' | | ||
+ | | ''%%--%%skip-extended-insert'' | Не использовать многострочные INSERT-записи при создании дампа. | ''%%--%%skip-extended-insert'' | | ||
+ | | ''-w'where_clause''' | Создавать дамп только тех строк, которые попадают под условие. | ''-w'Id > 10 AND Id < 100''' | | ||
- | ===== Восстановление забытого пароля для root'a ===== | + | ==== Отключение и включение автозагрузки сервиса ==== |
+ | Начиная с версии Ubuntu 15.04 отключение и включение сервисов возможно одной командой, без редактирования конфигов. В примерах команд ниже слово "SERVICE" следует заменить на "mysql". | ||
- | 1. Надо остановить ''mysqld''. | + | Узнать стоит ли сервис в автозагрузке: |
+ | <code>$ systemctl is-enabled SERVICE</code> | ||
+ | Убрать сервис из автозагрузки в Ubuntu-16.04: | ||
+ | <code>$ sudo systemctl disable SERVICE</code> | ||
+ | Добавить сервис в автозагрузку в Ubuntu-16.04: | ||
+ | <code>$ sudo systemctl enable SERVICE</code> | ||
- | 2. Запустите ''mysqld'' с параметрами ''--skip-grant-tables --user=root''. | ||
- | <code>mysqld --skip-grant-tables --user=root</code> | ||
- | 3. Подключитесь к mysql серверу этой командой: | + | ===== MySQL Workbench ===== |
- | <code>mysql -u root</code> | + | **MySQL Workbench** -- инструмент для визуального проектирования баз данных. MySQL Workbench существует в двух вариантах: |
- | + | * Community Edition -- бесплатная версия, распространяемая под лицензией [[GPL|GPL3]] | |
- | 4. Обновите запись для root'a | + | * Standard Edition -- платная версия, включающая в себя некоторые дополнительные возможности. |
- | <code>UPDATE mysql.user SET Password=PASSWORD('<новый пароль>') WHERE User='root'; | + | MySQL Workbench можно скачать с официального сайта [[http://www.mysql.com/downloads/workbench/]]. |
- | FLUSH PRIVILEGES;</code> | + | <note>Пакет вложенный на официальном сайте не подходит для Ubuntu 12.04 и выше. Это связано с тем, что пакет libzip1, прописанный в зависимостях был исключен из репозиториев. Как временное решение используйте [[PPA]] ''ppa:olivier-berten/misc'' .</note> |
- | + | ||
- | Теперь можете логиниться под root с новым паролем. | + | |
- | + | ||
- | {{tag>NEW FIXME}} | + | |
===== Ссылки ===== | ===== Ссылки ===== | ||
- | + | * [[wpru>MySQL|Статья на русской Википедии]] | |
- | * [[wpru>MySQL|Статья на русской Википедии.]] | + | |
* [[http://forum.ubuntu.ru/index.php?topic=15210.0|Обсуждение на форуме]] | * [[http://forum.ubuntu.ru/index.php?topic=15210.0|Обсуждение на форуме]] | ||
- | {{tag> NEW Можно_улучшить}} | + | {{tag>Администрирование mysql mysqldump workbench lamp}} |