MySQL (Русский)

From ArchWiki
Jump to: navigation, search

Tango-preferences-desktop-locale.pngЭта страница нуждается в сопроводителеTango-preferences-desktop-locale.png

Статья не гарантирует актуальность информации. Помогите русскоязычному сообществу поддержкой подобных страниц. См. Команда переводчиков ArchWiki

MySQL - это широко применяемая свободная многопоточная многопользовательская система управления реляционными базами данных. MySQL использует один из диалектов языка SQL для управления базами данных. Более подробную информацию об особенностях MySQL можно посмотреть на официальном сайте.

Примечание: На сегодняшний день в Archlinux к использованию по умолчанию предлагается MariaDB - официальный форк сервера MySQL. Настоятельно рекомендуется всем пользователям обновиться до MariaDB. Oracle MySQL был перемещен из официальных репозиториев Archlinux в AUR. Для получения более подробной информации прочтите объявление.

Установка

MariaDB - так именуется форк популярного сервера баз данных MySQL, выбранный сообществом Archlinux. Установите пакет mariadb из официальных репозиториев. В качестве альтернативы вы можете установить, например:

  • Oracle MySQL — Официальный релиз от компании Oracle.
https://www.mysql.com/ || mysqlAUR
  • Percona Server — Альтернатива, которая обещает высокую производительность и разные широкие возможности.
http://www.percona.com/software/percona-server/ || percona-server
Tip: Если база данных, размещаемая в каталоге /var/lib/mysql, расположена на разделе с файловой системой btrfs, то необходимо отключить механизм Copy-on-Write для этого каталога перед тем как создавать новую базу данных:

# chattr +C /var/lib/mysql

Перед запуском демона mysqld обязательно необходимо выполнить команду для создания таблиц по умолчанию:

# mysql_install_db --user=mysql --basedir=/usr --datadir=/var/lib/mysql

Запустите[broken link: invalid section] демон mysqld и выполните настроечный скрипт:

# mysql_secure_installation

и перезапустите mysqld.

При MariaDB по стандарту запустится только так:

Warning: For security reasons, the Systemd service file for this package will prevent MariaDB from using a datadir under the $HOME hierarchy

Now the mariadb.service can be started and/or enabled with systemd.

Если есть необходимость во фронтендах к MariaDB, то можете использовать mysql-gui-toolsAUR[ссылка недействительна: сохранено в aur-mirror] или mysql-workbench.

Автоматический запуск при загрузке системы

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

# systemctl enable mysqld
# systemctl start mysqld

Апгрейд с Oracle MySQL до MariaDB

Примечание: Перед перезапуском демона mysqld на следующем шаге, возможно, понадобится удалить следующие файлы из каталога /var/lib/mysql, а именно: ib_logfile0, ib_logfile1 и aria_log_control.

Пользователи, желающие произвести переход, должны остановить процесс mysqld, установить mariadb, libmariadbclient или mariadb-clients, после чего перезапустить mysqld и выполнить:

# mysql_upgrade -p

После обновления

После обновления MySQL можно запустить полезную утилиту mysql_upgrade для автоматической проверки и обновления MySQL-таблиц на предмет совместимости структур данных с текущей версией MySQL.

# mysql_upgrade -u root -p

Настройка

После установки и запуска MySQL необходимо настроить учетную запись root для администрирования MySQL. Задайте пароль для пользователя root. Это можно осуществить вручную или автоматически на стадии выполнения предыдущего скрипта. Ручная установка пароля для root возможна при помощи утилиты mysqladmin

mysqladmin -u root password newpass

MySQL построен по клиент-серверной архитектуре. Это значит, что систему управления базами данных MySQL можно трактовать как сервер, обменивающийся сообщениями с MySQL-клиентами. Консольный клиент, запускаемый в терминале при помощи команды mysql, позволяет подключиться к серверу баз данных MySQL. Осуществим такое подключение от имени пользователя root:

$ mysql -p -u root

Добавление пользователя

Создание нового пользователя состоит из двух действий: создание пользователя; установка прав. Пример: создадим пользователя monty с паролем some_pass.

$ mysql -u root -p
MariaDB> CREATE USER 'monty'@'localhost' IDENTIFIED BY 'some_pass';
MariaDB> GRANT ALL PRIVILEGES ON *.* TO 'monty'@'localhost'
   ->     WITH GRANT OPTION;
MariaDB> quit

Включение удалённого доступа

Если Вы хотите подключаться к Вашему серверу MySQL удалённо с других хостов, то Вам необходимо раскомментировать (убрать символ #) следующие строки в файле /etc/mysql/my.cnf:

[mysqld]
   ...
   #skip-networking
   #bind-address = <some ip-address>
   ...

Таким образом Вы позволите удалённо подключаться любом пользователю (в том числе и root): Подключить к базе с правами пользователя root:

$ mysql -u root -p -h IPorHOSTNAME

Проверка прав пользователей на удаленное подключение:

SELECT User, Host FROM mysql.user WHERE Host <> 'localhost';

Предоставить права удаленного доступа пользователю (в данном случе root):

GRANT ALL PRIVILEGES ON *.* TO 'root'@'192.168.1.%' IDENTIFIED BY 'my_optional_remote_password' WITH GRANT OPTION;

При необходимости шаблон '%' можно заменить на конкретное значение хоста. Пароль пользователя в базе может отличаться от пароля пользователя в системе.

Отключение удаленного доступа

MySQL-сервер по умолчанию доступен из внешней сети. Если вы используете MySQL локально, то можно усилить безопасность, отключив прослушивание TCP-порта 3306. Для отключения удаленного доступа раскомментируйте в файле /etc/mysql/my.cnf строку:

skip-networking

Теперь вы сможете соединиться с MySQL-сервером только через localhost.

Режим автодополнения

Примечание: Активация этого режима может увеличить время инициализации MySQL-клиента.

По умолчанию механизм автодополнения команд и имен в клиенте mysql отключен. Для включения автоматического дополнения отредактируйте общий конфигурационный файл /etc/mysql/my.cnf, заменив параметр no-auto-rehash на параметр auto-rehash. Автодополнение вступит в силу после очередного запуска клиента mysql.

Использование кодировки UTF-8

В файле /etc/mysql/my.cnf добавьте к настройкам секции mysqld следующие параметры:

[mysqld]
init_connect                = 'SET collation_connection = utf8_general_ci,NAMES utf8'
collation_server            = utf8_general_ci
character_set_client        = utf8
character_set_server        = utf8

Использование файловой системы TMPFS для каталога tmpdir

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

Создаем этот каталог с соответствующими правами доступа:

# mkdir -pv /var/lib/mysqltmp
# chown mysql:mysql /var/lib/mysqltmp

Определим UID и GID для пользователя mysql:

$ id mysql
uid=27(mysql) gid=27(mysql) groups=27(mysql)

Добавим в файл /etc/fstab строку вида:

 tmpfs   /var/lib/mysqltmp   tmpfs   rw,gid=27,uid=27,size=100m,mode=0750,noatime   0 0

Не забудем в файле /etc/mysql/my.cnf связать алиас tmpdir с реальным каталогом. Добавьте к группе настроек секции mysqld строчку:

 tmpdir      = /var/lib/mysqltmp

Перезагрузитесь или ( остановите сервер MySQL, примонтируйте tmpdir, запустите сервер MySQL ).

Бэкап

Легкий бэкап баз данных можно осуществить с помощью утилиты mysqldump. Нижеследующий скрипт помещает дамп всех баз данных в файл db_backup.gz, который будет расположен в той же папке, что и сам скрипт, и удаляет все бинарные логи старше одной недели:

#!/bin/bash

THISDIR=$(dirname $(readlink -f "$0"))

mysqldump --single-transaction --flush-logs --master-data=2 --all-databases -u root -p | gzip > $THISDIR/db_backup.gz
mysql -u root -p -e 'purge master logs before date_sub(now(), interval 7 day);'

Смотрите также страницу официального руководства по работе с mysqldump.

Поиск и устранение неисправностей

Не запускается демон MySQL

Если MySQL не запускается, а в логах отсутствуют записи, то можно проверить содержимое каталогов /var/lib/mysql и /var/lib/mysql/mysql на предмет прав доступа. Если владельцами файлов в этих директориях является не пользователь mysql из одноименной группы, то проделайте следующее:

 # chown mysql:mysql /var/lib/mysql -R

Ежели у вас остаются проблемы, связанные с доступом, несмотря на вышеозначенную рекомендацию, попробуйте скопировать my.cnf в /etc/. Для этого выполните команду:

 # cp /etc/mysql/my.cnf /etc/my.cnf

Теперь попробуйте запустить[broken link: invalid section] mysqld.

Ежели вы получите в файле /var/lib/mysql/hostname.err такие строки:

 [ERROR] Can't start server : Bind on unix socket: Permission denied
 [ERROR] Do you already have another mysqld server running on socket: /var/run/mysqld/mysqld.sock ?
 [ERROR] Aborting

Виной этому могут быть некорректные права доступа на /var/run/mysqld. Выполните:

 # chown mysql:mysql /var/run/mysqld -R

Если вы запустили mysqld, но получили следующее сообщение об ошибке:

 Fatal error: Can’t open and lock privilege tables: Table ‘mysql.host’ doesn’t exist

Выполните следующую команду из каталога /usr для создания таблиц по умолчанию:

 # cd /usr
 # mysql_install_db --user=mysql --ldata=/var/lib/mysql/

Не могу запустить mysql_upgrade из-за невозможности запуска MySQL

Попытайтесь запустить MySQL в безопасном режиме:

# mysqld_safe --datadir=/var/lib/mysql/

После этого выполните:

# mysql_upgrade -u root -p

Сброс пароля для root

Остановите[broken link: invalid section] демона mysqld и выполните:

# mysqld_safe --skip-grant-tables &

Подсоединитесь к серверу MySQL:

# mysql -u root mysql

Измените пароль для пользователя root:

 mysql> UPDATE mysql.user SET Password=PASSWORD('MyNewPass') WHERE User='root';
 mysql> FLUSH PRIVILEGES;
 mysql> exit

Запустите[broken link: invalid section] mysqld.

Проверка и восстановление всех таблиц

Можно выполнить автоматическую проверку и восстановление всех таблиц во всех базах данных. Более подробно смотрите здесь.

# mysqlcheck -A --auto-repair -u root -p

Оптимизация всех таблиц

Для принудительной оптимизации всех таблиц с автоматической фиксацией возникающих ошибок, выполните:

# mysqlcheck -A --auto-repair -f -o -u root -p

Смотрите также

  • LAMP - статья на ArchWiki, описывающая установку и базовую настройку LAMP-сервера (Linux, Apache, MySQL, PHP).
  • PhpMyAdmin - статья на ArchWiki, описывающая веб-ориентированный фронтенд для управления базами данных MySQL.
  • PHP - статья на ArchWiki, посвященная установке и настройке интерпретатора PHP.
  • MySQL Performance Tuning Scripts and Know-How - англоязычная статья про MySQL.