2.9.1 Инициализация каталога данных
После установки MySQL необходимо инициализировать каталог данных, включая таблицы в базе данных системы mysql:
Для некоторых методов установки MySQL инициализация каталога данных выполняется автоматически, как описано в разделе 2.9, «Настройка и тестирование после установки».
Для других методов установки необходимо инициализировать каталог данных вручную. Это включает установку из общих бинарных и исходных дистрибутивов на системах Unix и Unix-подобных системах, а также из пакета ZIP-архива на Windows.
В этом разделе описывается, как вручную инициализировать каталог данных для методов установки MySQL, для которых автоматическая инициализация каталога данных не предусмотрена. Некоторые примеры команд, которые позволяют проверить доступность и работоспособность сервера, см. в разделе 2.9.3, «Тестирование сервера».
Обзор инициализации каталога данных
В приведенных примерах предполагается, что сервер будет работать под учетной записью пользователя 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. (Для обновления существующей установки выполните процедуру обновления; см. раздел 2.10, «Обновление MySQL»). Однако команда, которая инициализирует каталог данных, не перезаписывает существующие таблицы базы данных
mysql, поэтому её можно безопасно запустить в любых обстоятельствах.ПримечаниеИнициализация каталога данных может завершиться неудачно, если отсутствуют необходимые системные библиотеки. Например, вы можете увидеть ошибку такого типа:
bin/mysqld: error while loading shared libraries: libnuma.so.1: cannot open shared object file: No such file or directory
В таком случае необходимо вручную установить недостающие библиотеки или воспользоваться менеджером пакетов вашей системы. После этого повторите команду инициализации каталога данных.
-
Если вы хотите развернуть сервер с автоматической поддержкой защищенных подключений, используйте утилиту mysql_ssl_rsa_setup для создания файлов SSL и RSA по умолчанию:
bin/mysql_ssl_rsa_setup
Дополнительную информацию см. в разделе 4.4.5, «mysql_ssl_rsa_setup — Создать SSL/RSA файлы».
В отсутствие файлов конфигурации сервер запускается с настройками по умолчанию. (См. раздел 5.1.2, «Настройки сервера по умолчанию»). Чтобы явно указать параметры, которые должен использовать сервер MySQL при запуске, поместите их в файл параметров, такой как
/etc/my.cnfили/etc/mysql/my.cnf. (См. раздел 4.2.2.2, «Использование файлов параметров»). Например, вы можете использовать файл параметров для установки переменной системыsecure_file_priv.Чтобы настроить MySQL на автоматический запуск при запуске системы, см. раздел 2.9.5, «Автоматический запуск и остановка MySQL».
Инициализация каталога данных создаёт таблицы часовых поясов в базе данных
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 выполняет следующие действия во время последовательности инициализации каталога данных:
-
Сервер проверяет существование каталога данных следующим образом:
Если каталог данных не существует, сервер создает его.
-
Если каталог данных существует, но не пуст (то есть содержит файлы или подкаталоги), сервер завершается с сообщением об ошибке:
[ERROR] --initialize specified but the data directory exists. Aborting.
В этом случае удалите или переименуйте каталог данных и повторите попытку.
Начиная с MySQL 5.7.11, разрешается, чтобы существующий каталог данных был непустым, если каждый элемент либо имеет имя, начинающееся с точки (
.), либо имя задано с помощью опции--ignore-db-dir.ПримечаниеИзбегайте использования опции
--ignore-db-dir, которая устарела начиная с MySQL 5.7.16.
Внутри каталога данных сервер создает базу данных системной базы данных
mysqlи ее таблицы, включая таблицы разрешений, таблицы часовых поясов и таблицы справочной информации сервера. См. Раздел 5.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'и другие зарезервированные учётные записи (см. Раздел 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 после инициализации». -
Сервер заполняет таблицы справочной информации сервера, используемые для оператора
HELP(см. Раздел 13.8.3, «Команда HELP»). Сервер не заполняет таблицы часовых поясов. Чтобы сделать это вручную, см. Раздел 5.1.13, «Поддержка часовых поясов сервером MySQL».-
Если системная переменная
init_fileуказала имя файла со SQL-запросами, сервер выполняет запросы в файле. Эта опция позволяет выполнять пользовательские последовательности инициализации.В режиме инициализации некоторые функции недоступны, что ограничивает допустимые запросы в файле. К ним относятся запросы, связанные с управлением учётными записями (такие как
CREATE USERилиGRANT), репликация и глобальные идентификаторы транзакций. Сервер завершается.
Назначение пароля для корневого пользователя после инициализации
После инициализации каталога данных, запуская сервер с --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.