MySQL Сравнение версий

Различия

Здесь показаны различия между двумя версиями данной страницы.

Ссылка на это сравнение

Предыдущая версия справа и слева Предыдущая версия
Следующая версия
Предыдущая версия
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}}