Spec-Zone.ru › MySQL 8.4

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_native_password (модуль аутентификации по умолчанию до MySQL 8.0) по-прежнему поддерживается, но по умолчанию отключён начиная с MySQL 8.4.0 и удалён начиная с MySQL 9.0.0.

  • Обзор инициализации каталога данных

  • Процедура инициализации каталога данных

  • Действия сервера во время инициализации каталога данных

  • Назначение пароля root после инициализации

Обзор инициализации каталога данных

В приведенных примерах предполагается, что сервер будет запущен под идентификатором пользователя учетной записи входа mysql. Создайте эту учетную запись, если она не существует (см. Создание пользователя и группы mysql), или замените имя другой существующей учетной записи входа, которую вы планируете использовать для запуска сервера.

  1. Перейдите в корневой каталог вашей установки MySQL, который обычно является /usr/local/mysql (при необходимости скорректируйте путь для вашей системы):

    cd /usr/local/mysql
    

    В этом каталоге вы найдете несколько файлов и подкаталогов, включая подкаталог bin, который содержит сервер, а также клиентские и утилиты.

  2. Переменная системы secure_file_priv ограничивает операции импорта и экспорта определенным каталогом. Создайте каталог, путь к которому можно указать в качестве значения этой переменной:

    mkdir mysql-files
    

    Назначьте права доступа к каталогу пользователю и группе mysql и mysql соответственно и установите соответствующие разрешения на каталог:

    chown mysql:mysql mysql-files
    chmod 750 mysql-files
    
  3. Используйте сервер для инициализации каталога данных, включая схему mysql, содержащую начальные таблицы разрешений MySQL, которые определяют разрешения пользователей на подключение к серверу. Например:

    bin/mysqld --initialize --user=mysql
    

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

    Обычно инициализация каталога данных требуется только после первой установки MySQL. (Для обновлений существующей установки выполните процедуру обновления; см. Главу 3, Обновление MySQL.) Однако команда инициализации каталога данных не перезаписывает существующие таблицы схемы mysql, поэтому ее можно безопасно запускать в любых обстоятельствах.

  4. В отсутствие каких-либо файлов параметров сервер запускается с настройками по умолчанию. (См. раздел 7.1.2, «Настройки конфигурации сервера по умолчанию».) Чтобы явно указать параметры, которые должен использовать сервер MySQL при запуске, поместите их в файл параметров, такой как /etc/my.cnf или /etc/mysql/my.cnf. (См. раздел 6.2.2.2, «Использование файлов параметров».) Например, вы можете использовать файл параметров для установки переменной системы secure_file_priv.

  5. Чтобы настроить запуск MySQL без ручного вмешательства во время загрузки системы, см. раздел 2.9.5, «Автоматический запуск и остановка MySQL».

  6. Инициализация каталога данных создает таблицы часовых поясов в схеме mysql, но не заполняет их. Для этого используйте инструкции в разделе 7.1.15, «Поддержка часовых поясов MySQL Server».

END_OF_DOCUMENT_MARKER

Процедура инициализации каталога данных

Измените текущую директорию на корневую директорию вашей установки 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 8.4
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 выполняет следующие действия во время последовательности инициализации каталога данных:

  1. Сервер проверяет существование каталога данных следующим образом:

    • Если каталог данных не существует, сервер создает его.

    • Если каталог данных существует, но не пуст (то есть содержит файлы или подкаталоги), сервер завершается с сообщением об ошибке:

      [ERROR] --initialize specified but the data directory exists. Aborting.
      

      В этом случае удалите или переименуйте каталог данных и повторите попытку.

      Допускается, чтобы существующий каталог данных был не пустым, если каждый элемент имеет имя, начинающееся с точки (.).

  2. Внутри каталога данных сервер создает схему системы mysql и её таблицы, включая таблицы словаря данных, таблицы разрешений, таблицы часовых поясов и таблицы справочной помощи сервера. См. Раздел 7.3, «Схема базы данных mysql».

  3. Сервер инициализирует и связанные структуры данных, необходимые для управления таблицами 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.

  4. Сервер создаёт учётную запись суперпользователя '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 после инициализации».

  5. Сервер заполняет таблицы справочной помощи сервера, используемые для оператора HELP (см. раздел 15.8.3, «Оператор HELP»). Сервер не заполняет таблицы часовых поясов. Чтобы сделать это вручную, см. раздел 7.1.15, «Поддержка часовых поясов сервером MySQL».

  6. Если переменная системы init_file указала на файл с SQL-запросами, сервер выполняет запросы в этом файле. Эта опция позволяет выполнять пользовательские последовательности подготовки.

    При работе сервера в режиме подготовки некоторые функции недоступны, что ограничивает запросы, разрешённые в файле. Это включает в себя запросы, связанные с управлением учётными записями (например, CREATE USER или GRANT), репликацией и глобальными идентификаторами транзакций.

  7. Сервер завершает работу.

Установка пароля root после инициализации

После инициализации каталога данных запуском сервера с параметрами --initialize или --initialize-insecure, запустите сервер в обычном режиме (то есть без этих параметров) и задайте новый пароль для учётной записи 'root'@'localhost':

  1. Запустите сервер. Инструкции см. в разделе 2.9.2, «Запуск сервера».

  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
      
  3. После подключения используйте оператор 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.
https://docs.oracle.com/cd/E17952_01/mysql-8.4-en/data-directory-initialization.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API