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 сервер выполните команду:

    sudo apt-get install mysql-server

    При установке конфигурационный скрипт запросит пароль для администратора (root) базы данных.

  • Для того чтобы установить консольный клиент MySQL выполните команду:

    sudo apt-get install mysql-client
  • Для того чтобы установить модуль для работы с MySQL в PHP выполните команду:

    sudo apt-get install php5-mysql

Настройка

Конфигурация сервера MySQL содержится в файле /etc/mysql/my.cnf.

Доступ к серверу из сети

По умолчанию сервер MySQL принимает соединения только с локальной машины. Для того, чтобы разрешить подключаться к нему с других машин замените строку

bind-address            = 127.0.0.1

на

#разрешить подключатся с любого хоста
bind-address            = 0.0.0.0
#разрешить подключатся только с указанного IP
bind-address            = 192.168.1.23

Кодировки

В данном разделе используется распространённое решение проблемы с кодировкой. Стоит помнить, что данное решение не является правильным, хоть и помогает временно решить проблему. Для правильного использования кодировки создавайте или храните таблицы в любой удобной для хранения в СУБД кодировке, а вот клиент должен подключаться к СУБД с указанием той кодировки, с которй выводится текст или производится обработка данных.

По-умолчанию в Ubuntu MySQL устанавливается с кодировкой latin1. В этом можно убедиться посмотрев вывод запроса:

SHOW VARIABLES LIKE 'char%';
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/

В связи с этим, даже используя при работе с сервером команду

SET names utf8;

и используя при создании таблиц

...DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;

невозможно добиться полной поддержки кодировки utf8:

character_set_client    utf8                        
character_set_connection  utf8                       
...                    
character_set_server        latin1                  
...            
character_sets_dir         /usr/share/mysql/charsets/

Кодировка по-умолчанию все равно останется latin1, что неудобно и может привести к ошибкам.

Чтобы сервер сразу загружался с нужной кодировкой, необходимо отредактировать файл /etc/mysql/my.cnf:

sudo nano -w /etc/mysql/my.cnf

В секцию [mysqld] добавьте следующие строки:

skip-character-set-client-handshake
character-set-server = utf8
init-connect='SET NAMES utf8'
collation-server=utf8_general_ci

Так же желательно установить кодировку для клиента и mysqldump. Для этого в секциях [client] и [mysqldump] необходимо добавить строчку:

default-character-set=utf8

Перезагрузите сервер MySQL:

sudo service mysql restart

После этого список переменных будет выглядеть так:

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/
Если на момент изменения настроек кодировки в базе уже присутствовали записи содержащие кириллицу, то они будут иметь неверную кодировку. Перед изменением кодировки убедитесь что в базе нет таблиц и данных, либо сделайте дамп всех данных из базы до внесения изменений настроек и восстановите после внесения изменений и перезагрузки MySQL.

Администрирование

Восстановление забытого пароля для root'a

Схожая проблема возникает если не задать пароль при установке MySQL, в этом случае mysql использует плагин unix-socket.

  1. Остановите mysqld:

    sudo service mysql stop
  2. Запустите mysqld с параметрами --skip-grant-tables --user=root:

    sudo mysqld --skip-grant-tables --user=root

    Если команда не сработает, добавьте строку «skip-grant-tables» в секцию «[mysqld]» файла /etc/mysql/mysql.conf.d/mysqld.cnf. Затем выполните sudo service mysql restart. После выполнения операций удалите эту строку.

  3. Подключитесь к MySQL-серверу командой:

    mysql -u root
  4. Обновите пароль для root'a:

    UPDATE mysql.user SET authentication_string=PASSWORD('<новый пароль>'), plugin='mysql_native_password' WHERE User='root' AND Host='localhost';    
    FLUSH PRIVILEGES;

    Для MySQL версий < 5.7:

    UPDATE mysql.user SET Password=PASSWORD('<новый пароль>') WHERE User='root';
    FLUSH PRIVILEGES;
  5. Перезапустите демона:

    sudo service mysql restart

Теперь можете проверить вход под root с новым паролем:

mysql -u root -p

Резервное копирование

Для создания резервных копий существует специальная утилита 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».

Узнать стоит ли сервис в автозагрузке:

$ systemctl is-enabled SERVICE

Убрать сервис из автозагрузки в Ubuntu-16.04:

$ sudo systemctl disable SERVICE

Добавить сервис в автозагрузку в Ubuntu-16.04:

$ sudo systemctl enable SERVICE

MySQL Workbench

MySQL Workbench – инструмент для визуального проектирования баз данных. MySQL Workbench существует в двух вариантах:

  • Community Edition – бесплатная версия, распространяемая под лицензией GPL3
  • Standard Edition – платная версия, включающая в себя некоторые дополнительные возможности.

MySQL Workbench можно скачать с официального сайта http://www.mysql.com/downloads/workbench/.

Пакет вложенный на официальном сайте не подходит для Ubuntu 12.04 и выше. Это связано с тем, что пакет libzip1, прописанный в зависимостях был исключен из репозиториев. Как временное решение используйте PPA ppa:olivier-berten/misc .

Ссылки