- MySQL
- Версии MySQL в Ubuntu
- Установка
- Настройка
- Доступ к серверу из сети
- Кодировки
- Администрирование
- Установка root пароля
- Восстановление забытого пароля для root’a
- Резервное копирование
- Отключение и включение автозагрузки сервиса
- MySQL Workbench
- MySQL начало работы
- Основы работы с MySQL
- Создание базы данных MySQL и ее наполнение данными
- Загрузка данных в таблицы MySQL
MySQL
MySQL — свободная СУБД для малых и средних приложений. Входит в состав LAMP и XAMPP.
Версии MySQL в Ubuntu
Установка
MySQL есть в репозиториях Ubuntu. Он разбит на несколько пакетов.
sudo apt-get install mysql-server
sudo apt-get install mysql-client
sudo apt-get install php5-mysql
Настройка
Конфигурация сервера MySQL содержится в файле /etc/mysql/my.cnf.
Доступ к серверу из сети
По умолчанию сервер MySQL принимает соединения только с локальной машины. Для того, чтобы разрешить подключаться к нему с других машин замените строку
#разрешить подключатся с любого хоста bind-address = 0.0.0.0 #разрешить подключатся только с указанного IP bind-address = 192.168.1.23
Кодировки
В данном разделе используется распространённое решение проблемы с кодировкой. Стоит помнить, что данное решение не является правильным, хоть и помогает временно решить проблему. Для правильного использования кодировки создавайте или храните таблицы в любой удобной для хранения в СУБД кодировке, а вот клиент должен подключаться к СУБД с указанием той кодировки, с которй выводится текст или производится обработка данных.
По-умолчанию в Ubuntu MySQL устанавливается с кодировкой latin1 . В этом можно убедиться посмотрев вывод запроса:
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/
В связи с этим, даже используя при работе с сервером команду
и используя при создании таблиц
. 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] необходимо добавить строчку:
Перезагрузите сервер 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 пароля
sudo mysql_secure_installation
Восстановление забытого пароля для root’a
Схожая проблема возникает если не задать пароль при установке MySQL, в этом случае mysql использует плагин unix-socket.
sudo mysqld --skip-grant-tables --user=root
Если команда не сработает, добавьте строку « skip-grant-tables » в секцию « [mysqld] » файла /etc/mysql/mysql.conf.d/mysqld.cnf . Затем выполните sudo service mysql restart . После выполнения операций удалите эту строку.
UPDATE mysql.user SET authentication_string=PASSWORD(''), plugin='mysql_native_password' WHERE User='root' AND Host='localhost'; FLUSH PRIVILEGES;
UPDATE mysql.user SET Password=PASSWORD('') WHERE User='root'; FLUSH PRIVILEGES;
sudo service mysql restart
Теперь можете проверить вход под root с новым паролем:
Резервное копирование
Для создания резервных копий существует специальная утилита mysqldump . Основные ее параметры приведены в таблице:
Параметр | Описание | Пример |
---|---|---|
-u | Пользователь, от лица которого будет производится дамп баз данных. | -uroot |
-p | Пароль пользователя. Пароль необязательно указывать, достаточно упомянуть этот параметр для того, чтобы утилита знала что подключение требует пароля. | -ppassword -p |
-h | Хост, на котором расположена база данных. | -h127.0.0.1 |
-A | Создать бекап всех баз данных. | -A |
-B | Базы данных, которые нужно забэкапить. | -B db1 db2 db3 |
—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 существует в двух вариантах:
MySQL Workbench можно скачать с официального сайта http://www.mysql.com/downloads/workbench/.
Пакет вложенный на официальном сайте не подходит для Ubuntu 12.04 и выше. Это связано с тем, что пакет libzip1, прописанный в зависимостях был исключен из репозиториев. Как временное решение используйте PPA ppa:olivier-berten/misc .
MySQL начало работы
В MySQL начало работы это: авторизация, создание базы данных и таблиц, а также наполнение таблиц данными. Изначально информацию можно добавлять выполняя запросы к серверу баз данных или, например, импортируя данные из текстовых документов. Таким образом будут загружены данные из документов в тестовые таблицы REAL_ESTATE и PEOPLE.
Авторизовавшись в консоли сервера нужно подключиться к mysql введя имя пользователя, пароль и указав имя хоста (FQDN или IP адрес — по умолчанию если не указано значение -h используется localhost)
Enter password: ********
Также можно вводить пароль сразу
Между ключом -p и самим паролем при этом не должно быть пробела, иначе пароль будет воспринят как имя базы данных. Этот вариант плох тем, что пароль останется в history и его можно будет посмотреть в дальнейшем.
Основы работы с MySQL
Любой запрос (за исключением USE, QUIT и еще нескольких) должен завершаться точкой с запятой. Запрос может быть разнесен на несколько строк и будет выполнен только после введения точки с запятой
От выполнения запроса можно отказаться после введения введения нескольких строк выполнив \c
По тому каким образом выглядит приглашение MySQL можно понять состояние выполнения запроса и то, что именно ожидает сервер от администратора
( или вариации: mysql>, MariaDB> ) Ожидается ввод
Ожидается следующая строка запроса длиной в несколько строк
Ожидается следующая строка запроса длиной в несколько строк в случае если запрос начат с одинарной кавычки
Ожидается следующая строка запроса длиной в несколько строк в случае если запрос начат с двойной кавычки
Ожидается следующая строка запроса длиной в несколько строк в случае если запрос начат с backtick (“`”)
6) /*>
Ожидается следующая строка запроса длиной в несколько строк в случае если запрос начат со знака комментария /*
Создание базы данных MySQL и ее наполнение данными
Работать от имени пользователя root не желательно, лучшим решением является создание пользователя с ограниченным доступом
Например, добавим пользователя user (в тестовой среде можно работать и от имени root). Авторизовавшись в консоли MySQL создаем базу данных и таблицы
CREATE DATABASE REAL_ESTATE_AGENCY;
Query OK, 1 row affected (0.00 sec)
+——————————+
| Database |
+——————————+
| information_schema |
| mysql |
| performance_schema |
| REAL_ESTATE_AGENCY |
+——————————+
4 rows in set (0.03 sec)
Database change
CREATE TABLE REAL_ESTATE (type VARCHAR(20), city VARCHAR(20), floorspace INT, district VARCHAR(20), street VARCHAR(20), rentorsale VARCHAR(20), PRICE VARCHAR (20));
Query OK, 0 rows affected (0.01 sec)
CREATE TABLE PEOPLE (name VARCHAR(20), profession VARCHAR(20), age INT, city VARCHAR(20), district VARCHAR(20), rentorsale VARCHAR(20), PRICE VARCHAR (20));
Query OK, 0 rows affected (0.01 sec)
Информацию о структуре таблицы и всех существующих столбцах и колонках можно получить выполнив команду DESCRIBE
+————+————-+——+——+———+——-+
| Field | Type | Null | Key | Default | Extra |
+————+————-+——+——+———+——-+
| type | varchar(20) | YES | | NULL | |
| city | varchar(20) | YES | | NULL | |
| floorspace | int(11) | YES | | NULL | |
| district | varchar(20) | YES | | NULL | |
| street | varchar(20) | YES | | NULL | |,
| rentorsale | varchar(20) | YES | | NULL | |
| PRICE | varchar(20) | YES | | NULL | |
+————+————-+——+——+———+——-+
7 rows in set (0.00 sec)
Вывести все содержимое таблицы можно с помощью самого общего SELECT запроса (этот вид запросов используется чаще всего и будет подробно рассмотрен в дальнейшем)
Empty set (0.00 sec)
Данных сейчас нет — наполним таблицы. Делать это можно выполняя UPDATE-ы с необходимыми значениями или загружая данные из текстовых документов. На этапе первоначальной загрузки второй способ гораздо удобнее. Воспользуемся им.
Загрузка данных в таблицы MySQL
Сохраняем информацию в /tmp/real_estate.txt — значения в столбцах разделяем табуляцией. После этого в консоли загружаем данные предварительно выбрав таблицу.
LOAD DATA LOCAL INFILE ‘/tmp/real_estate.txt’ INTO TABLE REAL_ESTATE;
Может возникнуть следующая ошибка.
ERROR 1148 (42000): The used command is not allowed with this MySQL version
Если ошибка возникает к MySQL нужно подключаться с опцией —local-infile=1 :
LOAD DATA LOCAL INFILE ‘/tmp/real_estate.txt’ INTO TABLE REAL_ESTATE;
Query OK, 13 rows affected (0.00 sec)
Records: 13 Deleted: 0 Skipped: 0 Warnings: 0
Результаты SELECT теперь выглядят иначе:
Если для какого-то столбца и ряда нужно значение NULL в текстовом документе оно должно быть представлено как \N. В MySQL начало работы с базами и таблицами выглядит именно так. Далее рассмотрим основы использования SELECT.