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

Различия

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

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

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