Difference between revisions of "MySQL (Русский)"

From ArchWiki
Jump to: navigation, search
m
Line 54: Line 54:
  
 
== Бэкап ==
 
== Бэкап ==
Легкий бэкап баз данных можно осуществить с помощью утилиты mysqldump. Нижеследующий скрипт помещает дамп всех баз данных в файл {{ic|db_backup.gz}}, который будет расположен в той же папке, что и сам скрипт и удаляет все бинарные логи недельной давности:
+
Легкий бэкап баз данных можно осуществить с помощью утилиты mysqldump. Нижеследующий скрипт помещает дамп всех баз данных в файл {{ic|db_backup.gz}}, который будет расположен в той же папке, что и сам скрипт, и удаляет все бинарные логи старше одной недели:
  
 
{{bc|1=
 
{{bc|1=

Revision as of 04:18, 30 March 2013

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

Note: На сегодняшний день вместо MySQL сообщество archlinux будет официально поддерживать систему управления базами данных MariaDB, которая является форком MySQL. Всем пользователям рекомендуется обновитьтся до MariaDB. MySQL будет перемещен из официальных репозиториев в AUR не позднее 26 апреля 2013 г. Для получения более подробной информации прочтите объявление.

Обновление до MariaDB

Для тех кто желает обновиться до MariaDB необходимо установить mariadb, libmariadbclient, mariadb-clients и выполнить mysql_upgrade. Последовательность команд такова:

# systemctl stop mysqld
# pacman -S mariadb libmariadbclient mariadb-clients
# systemctl start mysqld
# mysql_upgrade -p

Установка

Установите пакет mysql из официальных репозиториев.

После установки MySQL, запустите демона mysqld.

Выполните настроечный скрипт и перезапустите демона:

# mysql_secure_installation
# systemctl restart mysqld

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

Настройка

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

mysqladmin -u root password newpass

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

$ mysql -p -u root

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

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

skip-networking

Если вы хотите, чтобы сервер MySQL работал только локально, игнорируя удаленные соединения, необходимо раскомментировать параметр skip-networking.

Note: По умолчанию сервер MySQL принимает удаленные соединения через TCP-порт с номером 3306. При желании его можно изменить.

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

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

Обновление MySQL

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

# mysql_upgrade -u root -p

Бэкап

Легкий бэкап баз данных можно осуществить с помощью утилиты 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

Если вы увидите что-то наподобие:

 :: Starting MySQL  [FAIL]

а в логах 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

Теперь попробуйте запустить 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

Остановите демона 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

Запустите mysqld.

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