Различия
Здесь показаны различия между двумя версиями данной страницы.
Предыдущая версия справа и слева Предыдущая версия Следующая версия | Предыдущая версия | ||
wiki:mysql [2010/10/13 10:00] |
wiki:mysql [2020/12/29 02:15] (текущий) [Администрирование] |
||
---|---|---|---|
Строка 1: | Строка 1: | ||
====== MySQL ====== | ====== MySQL ====== | ||
- | MySQL — свободная СУБД для малых и средних приложений. Входит в состав [[LAMP]]. | + | **MySQL** — свободная СУБД для малых и средних приложений. Входит в состав [[LAMP]] и [[XAMPP]]. |
- | ===== Восстановление забытого пароля для root'a ===== | + | ===== Версии MySQL в Ubuntu ===== |
- | 1. Надо остановить ''mysqld''. | + | ^ 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 | | ||
- | 2. Запустите ''mysqld'' с параметрами ''--skip-grant-tables --user=root''. | ||
- | <code>mysqld --skip-grant-tables --user=root</code> | ||
- | 3. Подключитесь к mysql серверу этой командой: | + | ===== Установка ===== |
- | <code>mysql -u root</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> | ||
- | 4. Обновите запись для root'a | + | ===== Настройка ===== |
- | <code>UPDATE mysql.user SET Password=PASSWORD('<новый пароль>') WHERE User='root'; | + | Конфигурация сервера 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 | ||
+ | character_set_connection latin1 | ||
+ | character_set_database latin1 | ||
+ | character_set_filesystem binary | ||
+ | character_set_results latin1 | ||
+ | character_set_server latin1 | ||
+ | character_set_system utf8 | ||
+ | character_sets_dir /usr/share/mysql/charsets/</file> | ||
+ | |||
+ | В связи с этим, даже используя при работе с сервером команду | ||
+ | <code mysql>SET names utf8;</code> | ||
+ | и используя при создании таблиц | ||
+ | <code mysql>...DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;</code> | ||
+ | невозможно добиться полной поддержки кодировки utf8: | ||
+ | <file>character_set_client utf8 | ||
+ | character_set_connection utf8 | ||
+ | ... | ||
+ | character_set_server latin1 | ||
+ | ... | ||
+ | character_sets_dir /usr/share/mysql/charsets/</file> | ||
+ | |||
+ | Кодировка по-умолчанию все равно останется latin1, что неудобно и может привести к ошибкам. | ||
+ | |||
+ | Чтобы сервер сразу загружался с нужной кодировкой, необходимо отредактировать файл ///etc/mysql/my.cnf//: | ||
+ | <code bash>sudo nano -w /etc/mysql/my.cnf</code> | ||
+ | В секцию ''[mysqld]'' добавьте следующие строки: | ||
+ | <code ini>skip-character-set-client-handshake | ||
+ | character-set-server = utf8 | ||
+ | init-connect='SET NAMES utf8' | ||
+ | collation-server=utf8_general_ci</code> | ||
+ | Так же желательно установить кодировку для клиента и [[#Резервное копирование|mysqldump]]. Для этого в секциях ''[client]'' и ''[mysqldump]'' необходимо добавить строчку: | ||
+ | <file ini>default-character-set=utf8</file> | ||
+ | |||
+ | Перезагрузите сервер MySQL: | ||
+ | <code bash>sudo service mysql restart</code> | ||
+ | |||
+ | После этого список переменных будет выглядеть так: | ||
+ | <file>character_set_client utf8 | ||
+ | character_set_connection utf8 | ||
+ | character_set_database utf8 | ||
+ | character_set_filesystem binary | ||
+ | character_set_results utf8 | ||
+ | character_set_server utf8 | ||
+ | character_set_system utf8 | ||
+ | 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> | 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''' | | ||
+ | |||
+ | ==== Отключение и включение автозагрузки сервиса ==== | ||
+ | Начиная с версии 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 существует в двух вариантах: | ||
+ | * Community Edition -- бесплатная версия, распространяемая под лицензией [[GPL|GPL3]] | ||
+ | * Standard Edition -- платная версия, включающая в себя некоторые дополнительные возможности. | ||
+ | MySQL Workbench можно скачать с официального сайта [[http://www.mysql.com/downloads/workbench/]]. | ||
+ | <note>Пакет вложенный на официальном сайте не подходит для Ubuntu 12.04 и выше. Это связано с тем, что пакет libzip1, прописанный в зависимостях был исключен из репозиториев. Как временное решение используйте [[PPA]] ''ppa:olivier-berten/misc'' .</note> | ||
+ | |||
+ | ===== Ссылки ===== | ||
+ | * [[wpru>MySQL|Статья на русской Википедии]] | ||
+ | * [[http://forum.ubuntu.ru/index.php?topic=15210.0|Обсуждение на форуме]] | ||
- | Теперь можете логиниться под root с новым паролем. | + | {{tag>Администрирование mysql mysqldump workbench lamp}} |