Spec-Zone.ru › MySQL 5.7

2.9.1 Инициализация каталога данных

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

  • Для некоторых методов установки MySQL инициализация каталога данных выполняется автоматически, как описано в разделе 2.9, «Настройка и тестирование после установки».

  • Для других методов установки необходимо инициализировать каталог данных вручную. Это включает установку из общих бинарных и исходных дистрибутивов на системах Unix и Unix-подобных системах, а также из пакета ZIP-архива на Windows.

В этом разделе описывается, как вручную инициализировать каталог данных для методов установки MySQL, для которых автоматическая инициализация каталога данных не предусмотрена. Некоторые примеры команд, которые позволяют проверить доступность и работоспособность сервера, см. в разделе 2.9.3, «Тестирование сервера».

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

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

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

  • Назначение пароля 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. (Для обновления существующей установки выполните процедуру обновления; см. раздел 2.10, «Обновление MySQL»). Однако команда, которая инициализирует каталог данных, не перезаписывает существующие таблицы базы данных mysql, поэтому её можно безопасно запустить в любых обстоятельствах.

    Примечание

    Инициализация каталога данных может завершиться неудачно, если отсутствуют необходимые системные библиотеки. Например, вы можете увидеть ошибку такого типа:

    bin/mysqld: error while loading shared libraries:
    libnuma.so.1: cannot open shared object file:
    No such file or directory
    

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

  4. Если вы хотите развернуть сервер с автоматической поддержкой защищенных подключений, используйте утилиту mysql_ssl_rsa_setup для создания файлов SSL и RSA по умолчанию:

    bin/mysql_ssl_rsa_setup
    

    Дополнительную информацию см. в разделе 4.4.5, «mysql_ssl_rsa_setup — Создать SSL/RSA файлы».

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

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

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

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

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

cd /usr/local/mysql

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

  • Используйте --initialize для установки по умолчанию с обеспечением безопасности (то есть, включая генерацию случайного начального пароля root). В этом случае пароль отмечается как просроченный, и вам необходимо выбрать новый.

  • С помощью --initialize-insecure пароль root не генерируется. Это небезопасно; предполагается, что вы назначите пароль учетной записи своевременно, прежде чем ввести сервер в эксплуатацию.

Инструкции по назначению нового пароля 'root'@'localhost' см. в разделе Назначение пароля root после инициализации.

Примечание

Сервер записывает все сообщения (включая любой начальный пароль) в стандартный вывод ошибок. Это может быть перенаправлено в журнал ошибок, поэтому проверьте его, если вы не видите сообщений на экране. Сведения о журнале ошибок, включая его расположение, см. в разделе 5.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 5.7
datadir=D:\\MySQLdata

Затем вызовите mysqld следующим образом (ещё раз, вы должны ввести команду в одну строку, начиная с параметра --defaults-file):

bin\mysqld --defaults-file=C:\my.ini
   --initialize --console
Важно

При инициализации каталога данных не следует указывать какие-либо параметры, кроме тех, которые используются для установки расположения каталогов, таких как --basedir или --datadir, и параметр --user, если это необходимо. Параметры, которые будут использоваться сервером MySQL во время обычного использования, могут быть установлены при его перезапуске после инициализации. См. описание параметра --initialize для получения дополнительной информации.

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

Примечание

Последовательность инициализации каталога данных, выполняемая сервером, не заменяет действия, выполняемые командами mysql_secure_installation и mysql_ssl_rsa_setup. См. Раздел 4.4.4, «mysql_secure_installation — Улучшение безопасности установки MySQL» и Раздел 4.4.5, «mysql_ssl_rsa_setup — Создание файлов SSL/RSA».

При вызове с опцией --initialize или --initialize-insecure, mysqld выполняет следующие действия во время последовательности инициализации каталога данных:

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

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

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

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

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

      Начиная с MySQL 5.7.11, разрешается, чтобы существующий каталог данных был непустым, если каждый элемент либо имеет имя, начинающееся с точки (.), либо имя задано с помощью опции --ignore-db-dir.

      Примечание

      Избегайте использования опции --ignore-db-dir, которая устарела начиная с MySQL 5.7.16.

  2. Внутри каталога данных сервер создает базу данных системной базы данных mysql и ее таблицы, включая таблицы разрешений, таблицы часовых поясов и таблицы справочной информации сервера. См. Раздел 5.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' и другие зарезервированные учётные записи (см. Раздел 6.2.8, «Зарезервированные учётные записи»). Некоторые зарезервированные учётные записи заблокированы и не могут быть использованы клиентами, но '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 (см. Раздел 13.8.3, «Команда HELP»). Сервер не заполняет таблицы часовых поясов. Чтобы сделать это вручную, см. Раздел 5.1.13, «Поддержка часовых поясов сервером MySQL».

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

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

  7. Сервер завершается.

Назначение пароля для корневого пользователя после инициализации

После инициализации каталога данных, запуская сервер с --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-5.7-en/data-directory-initialization.html

Spec-Zone.ru

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