2.9.1 Инициализация каталога данных
После установки MySQL необходимо инициализировать каталог данных, включая таблицы в схеме mysql системы:
Для некоторых методов установки MySQL инициализация каталога данных выполняется автоматически, как описано в разделе 2.9, «Настройка и тестирование после установки».
Для других методов установки каталог данных необходимо инициализировать вручную. К ним относятся установка из универсальных бинарных и исходных дистрибутивов на системах Unix и Unix-подобных системах и установка из архива ZIP на Windows.
В этом разделе описано, как вручную инициализировать каталог данных для методов установки MySQL, для которых инициализация каталога данных не выполняется автоматически. Для получения предложенных команд, позволяющих проверить доступность и работоспособность сервера, см. раздел 2.9.3, «Тестирование сервера».
По умолчанию используется плагин аутентификации caching_sha2_password, и административная учётная запись 'root'@'localhost' использует caching_sha2_password по умолчанию.
Обзор инициализации каталога данных
В представленных примерах предполагается, что сервер будет работать под идентификатором пользователя учётной записи входа mysql. Либо создайте учётную запись, если она не существует (см. Создание пользователя и группы mysql), либо замените имя на имя другой существующей учётной записи входа, которую вы планируете использовать для запуска сервера.
-
Перейдите в верхний уровень каталога вашей установки MySQL, который обычно является
/usr/local/mysql(при необходимости скорректируйте имя пути для вашей системы):cd /usr/local/mysql
Внутри этого каталога вы найдёте несколько файлов и подкаталогов, включая подкаталог
bin, содержащий сервер, а также клиентские и утилиты. -
Переменная системы
secure_file_privограничивает операции импорта и экспорта определённым каталогом. Создайте каталог, чьё расположение может быть указано в качестве значения этой переменной:mkdir mysql-files
Предоставьте права владельца каталога пользователю
mysqlи группеmysql, а также установите соответствующие права доступа к каталогу:chown mysql:mysql mysql-files chmod 750 mysql-files
-
Используйте сервер для инициализации каталога данных, включая схему
mysql, содержащую начальные таблицы разрешений MySQL, определяющие, как пользователи могут подключаться к серверу. Например:bin/mysqld --initialize --user=mysql
Важная информация о команде, особенно относительно используемых опций, приведена в Процедуре инициализации каталога данных. Подробная информация о том, как сервер выполняет инициализацию, представлена в Действиях сервера во время инициализации каталога данных.
Как правило, инициализация каталога данных требуется только после первой установки MySQL. (Для обновления существующей установки выполните процедуру обновления; см. Главу 3, «Обновление MySQL».) Однако команда, которая инициализирует каталог данных, не перезаписывает какие-либо существующие таблицы схемы
mysql, поэтому её можно безопасно запускать в любых обстоятельствах. При отсутствии файлов параметров сервер запускается с настройками по умолчанию. (См. раздел 7.1.2, «Настройки конфигурации сервера по умолчанию».) Чтобы явно указать параметры, которые должен использовать сервер MySQL при запуске, поместите их в файл параметров, например, в
/etc/my.cnfили/etc/mysql/my.cnf. (См. раздел 6.2.2.2, «Использование файлов параметров».) Например, вы можете использовать файл параметров для установки переменной системыsecure_file_priv.Чтобы настроить автоматический запуск MySQL при запуске системы, см. раздел 2.9.5, «Автоматический запуск и остановка MySQL».
Инициализация каталога данных создаёт таблицы часовых поясов в схеме
mysql, но не заполняет их. Для этого используйте инструкции из раздела 7.1.15, «Поддержка часовых поясов сервера MySQL».
Процедура инициализации каталога данных
Измените текущую директорию на корневую директорию вашей установки MySQL, которая обычно находится в /usr/local/mysql (скорректируйте путь, если необходимо):
cd /usr/local/mysql
Для инициализации каталога данных вызовите mysqld с параметром --initialize или --initialize-insecure, в зависимости от того, хотите ли вы, чтобы сервер сгенерировал случайный начальный пароль для учетной записи 'root'@'localhost', или создать эту учетную запись без пароля:
Используйте
--initializeдля установки по умолчанию “безопасной” (то есть с генерацией случайного начальногоrootпароля). В этом случае пароль будет помечен как просроченный, и вам нужно будет выбрать новый.При использовании
--initialize-insecureпароль для учетной записиrootне генерируется. Это небезопасно; предполагается, что вы намерены назначить пароль для учетной записи в кратчайшие сроки перед запуском сервера в рабочей среде.
Инструкции по назначению нового 'root'@'localhost' пароля см. в разделе Назначение пароля root после инициализации.
Сервер записывает все сообщения (включая начальный пароль) в стандартный поток ошибок. Это может быть перенаправлено в лог ошибок, поэтому проверьте его, если вы не видите сообщений на экране. Сведения о логе ошибок, включая место его расположения, см. в разделе Раздел 7.4.2, «Лог ошибок».
В Windows используйте параметр --console для перенаправления сообщений на консоль.
В системах Unix и Unix-подобных системах важно, чтобы каталоги и файлы базы данных принадлежали учетной записи mysql входа, чтобы сервер имел доступ для чтения и записи к ним при его последующем запуске. Для этого запустите mysqld от учетной записи системы root и включите параметр --user, как показано ниже:
bin/mysqld --initialize --user=mysql
bin/mysqld --initialize-insecure --user=mysql
В качестве альтернативы, выполните mysqld, будучи авторизованным как mysql, в этом случае вы можете опустить параметр --user из команды.
В Windows используйте одну из этих команд:
bin\mysqld --initialize --console
bin\mysqld --initialize-insecure --console
Инициализация каталога данных может завершиться неудачей, если отсутствуют необходимые системные библиотеки. Например, вы можете увидеть ошибку такого типа:
bin/mysqld: error while loading shared libraries:
libnuma.so.1: cannot open shared object file:
No such file or directory
Если это произойдёт, вам необходимо вручную установить недостающие библиотеки или с помощью менеджера пакетов вашей системы. Затем повторите команду инициализации каталога данных.
Возможно, потребуется указать другие параметры, такие как --basedir или --datadir, если mysqld не может определить правильные расположения каталога установки или каталога данных. Например (введите команду в одну строку):
bin/mysqld --initialize --user=mysql
--basedir=/opt/mysql/mysql
--datadir=/opt/mysql/mysql/data
В качестве альтернативы, поместите соответствующие параметры в файл настроек и передайте имя этого файла в mysqld. Для систем Unix и Unix-подобных систем предположим, что имя файла настроек – /opt/mysql/mysql/etc/my.cnf. Вставьте эти строки в файл:
[mysqld]
basedir=/opt/mysql/mysql
datadir=/opt/mysql/mysql/data
Затем вызовите mysqld следующим образом (введите команду в одну строку, с параметром --defaults-file вначале):
bin/mysqld --defaults-file=/opt/mysql/mysql/etc/my.cnf
--initialize --user=mysql
В Windows, предположим, что C:\my.ini содержит эти строки:
[mysqld]
basedir=C:\\Program Files\\MySQL\\MySQL Server 9.2
datadir=D:\\MySQLdata
Затем вызовите mysqld следующим образом (еще раз, вы должны ввести команду в одну строку, с параметром --defaults-file вначале):
bin\mysqld --defaults-file=C:\my.ini
--initialize --console
При инициализации каталога данных не следует указывать какие-либо параметры, кроме тех, которые используются для установки расположения каталогов, таких как --basedir или --datadir, и параметр --user, если это необходимо. Параметры, которые будут использоваться сервером MySQL во время нормальной работы, можно установить при его перезапуске после инициализации. См. описание параметра --initialize для получения дополнительной информации.
Действия сервера во время инициализации каталога данных
Последовательность инициализации каталога данных, выполняемая сервером, не заменяет действия, выполняемые командой mysql_secure_installation.
При вызове с параметром --initialize или --initialize-insecure, mysqld выполняет следующие действия во время последовательности инициализации каталога данных:
-
Сервер проверяет существование каталога данных следующим образом:
Если каталог данных не существует, сервер создает его.
-
Если каталог данных существует, но не пуст (то есть содержит файлы или подкаталоги), сервер завершается с сообщением об ошибке:
[ERROR] --initialize specified but the data directory exists. Aborting.
В этом случае удалите или переименуйте каталог данных и повторите попытку.
Допускается, чтобы существующий каталог данных был не пустым, если каждый элемент имеет имя, начинающееся с точки (
.).
Внутри каталога данных сервер создает схему системы
mysqlи её таблицы, включая таблицы словаря данных, таблицы разрешений, таблицы часовых поясов и таблицы справочной помощи сервера. См. Раздел 7.3, «Схема базы данных mysql».-
Сервер инициализирует и связанные структуры данных, необходимые для управления таблицами
InnoDB.ПримечаниеПосле того, как mysqld настраивает
InnoDB, некоторые изменения характеристик табличного пространства требуют создания нового. К таким изменениям относятся имя первого файла в системном табличном пространстве и количество журналов отката. Если вы не хотите использовать значения по умолчанию, убедитесь, что параметрыinnodb_data_file_pathиinnodb_log_file_sizeконфигурации указаны в файле конфигурации MySQL до запуска mysqld. Также убедитесь, что указаны необходимые параметры, влияющие на создание и расположение файловInnoDB, такие какinnodb_data_home_dirиinnodb_log_group_home_dir.Если эти опции присутствуют в вашем файле конфигурации, но этот файл не находится в расположении, которое считывает MySQL по умолчанию, укажите расположение файла с помощью параметра
--defaults-extra-fileпри запуске mysqld. -
Сервер создаёт учётную запись суперпользователя
'root'@'localhost'и другие защищённые учётные записи (см. Раздел 8.2.9, «Зарезервированные учётные записи»). Некоторые зарезервированные учётные записи заблокированы и не могут использоваться клиентами, но учётная запись'root'@'localhost'предназначена для административного использования, и вы должны задать ей пароль.Действия сервера относительно пароля для учётной записи
'root'@'localhost'зависят от способа его вызова:-
С параметром
--initialize, но без--initialize-insecure, сервер генерирует случайный пароль, помечает его как просроченный и выводит сообщение с паролем:[Warning] A temporary password is generated for root@localhost: iTag*AfrH5ej
-
С параметром
--initialize-insecure(с или без--initialize, потому что--initialize-insecureподразумевает--initialize), сервер не генерирует пароль или не помечает его как просроченный и выводит сообщение об ошибке:[Warning] root@localhost is created with an empty password ! Please consider switching off the --initialize-insecure option.
Инструкции по установке нового пароля для учётной записи
'root'@'localhost'см. в разделе «Установка пароля root после инициализации». -
Сервер заполняет таблицы справочной помощи сервера, используемые для оператора
HELP(см. раздел 15.8.3, «Оператор HELP»). Сервер не заполняет таблицы часовых поясов. Чтобы сделать это вручную, см. раздел 7.1.15, «Поддержка часовых поясов сервером MySQL».-
Если переменная системы
init_fileуказала на файл с SQL-запросами, сервер выполняет запросы в этом файле. Эта опция позволяет выполнять пользовательские последовательности подготовки.При работе сервера в режиме подготовки некоторые функции недоступны, что ограничивает запросы, разрешённые в файле. Это включает в себя запросы, связанные с управлением учётными записями (например,
CREATE USERилиGRANT), репликацией и глобальными идентификаторами транзакций. Сервер завершает работу.
Установка пароля root после инициализации
После инициализации каталога данных запуском сервера с параметрами --initialize или --initialize-insecure, запустите сервер в обычном режиме (то есть без этих параметров) и задайте новый пароль для учётной записи 'root'@'localhost':
Запустите сервер. Инструкции см. в разделе 2.9.2, «Запуск сервера».
-
Подключитесь к серверу:
-
Если вы использовали
--initialize, но не--initialize-insecureдля инициализации каталога данных, подключитесь к серверу какroot:mysql -u root -p
Затем введите случайный пароль, сгенерированный сервером во время последовательности инициализации, в запросе на ввод пароля:
Enter password:
(enter the random root password here)Если вы не знаете этот пароль, обратитесь к журналу ошибок сервера.
-
Если вы использовали
--initialize-insecureдля инициализации каталога данных, подключитесь к серверу какrootбез пароля:mysql -u root --skip-password
-
-
После подключения используйте оператор
ALTER USERдля задания нового пароля для учётной записиroot:ALTER USER 'root'@'localhost' IDENTIFIED BY '
root-password';
См. также раздел 2.9.4, «Безопасность начальной учётной записи MySQL».
Попытки подключения к хосту 127.0.0.1 обычно обращаются к учётной записи localhost. Однако это не удается, если сервер запущен с включенной опцией skip_name_resolve. Если вы планируете это сделать, убедитесь, что существует учётная запись, которая может принимать подключения. Например, чтобы иметь возможность подключиться как root с помощью --host=127.0.0.1 или --host=::1, создайте эти учётные записи:
CREATE USER 'root'@'127.0.0.1' IDENTIFIED BY 'root-password';
CREATE USER 'root'@'::1' IDENTIFIED BY 'root-password';
Возможна запись этих операторов в файл для выполнения с помощью переменной системы init_file, как описано в разделе «Действия сервера во время инициализации каталога данных».
© 2025 Oracle
Licensed under the GPLv2 License.