Spec-Zone.ru › MariaDB

mariadb-install-db

MariaDB начиная с 10.4.6

С MariaDB 10.4.6, mariadb-install-db является символической ссылкой на mysql_install_db. инструмент для инициализации каталога данных MariaDB и создания таблиц системы

MariaDB начиная с 10.5.2

С MariaDB 10.5.2, mysql_install_db является символической ссылкой, а mariadb-install-db — именем двоичного файла.

Эта страница предназначена для скрипта mariadb-install-db только для Linux/Unix

Для инструмента Windows с похожим именем и назначением см. mysql_install_db.exe.

Версия для Windows сохраняет общую тему (создание таблиц системы), но обладает многими функциями, специфичными для систем Windows, например, создание службы Windows. Версия для Windows *не* поддерживает параметры командной строки с командной оболочкой Unix.

mariadb-install-db инициализирует каталог данных MariaDB и создаёт системные таблицы в базе данных mysql, если они не существуют. MariaDB использует эти таблицы для управления привилегиями, ролями и плагинами. Также они используются для предоставления данных для команды help в клиенте mariadb.

mariadb-install-db работает, запуская процесс mysqld сервера MariaDB в режиме --bootstrap и отправляя команды для создания системных таблиц и их содержимого.

Использование mariadb-install-db

Для вызова mariadb-install-db используйте следующий синтаксис:

$ mariadb-install-db [options]

Поскольку сервер MariaDB, mysqld, позже должен получить доступ к каталогу данных, вам следует запустить mariadb-install-db от того же пользователя, который будет использоваться для запуска mysqld, или запустить его как root и использовать опцию --user для указания имени пользователя, от которого будет работать mysqld. Возможно, потребуется указать другие опции, такие как --basedir или --datadir, если mariadb-install-db не использует правильные расположения для каталога установки или каталога данных. Например:

$ scripts/mariadb-install-db --user=mysql \
   --basedir=/opt/mysql/mysql \
   --datadir=/opt/mysql/mysql/data

Параметры

mariadb-install-db поддерживает следующие параметры:

Параметр Описание
--auth-root-authentication-method={normal | socket} Если установлено значение normal, создаётся учётная запись root@localhost, которая аутентифицируется с помощью плагина аутентификации mysql_native_password и у которой нет начального пароля, что может быть небезопасно. Если установлено значение socket, создаётся учётная запись root@localhost, которая аутентифицируется с помощью плагина аутентификации unix_socket. По умолчанию установлено значение socket с MariaDB 10.4 (см. Аутентификация с MariaDB 10.4), или normal по умолчанию в более ранних версиях. Доступно с MariaDB 10.1.
--auth-root-socket-user=USER Используется с --auth-root-authentication-method=socket. Указывает имя второй учётной записи для создания с привилегиями SUPER в дополнение к root, а также имя системной учётной записи, имеющей доступ к ней. По умолчанию используется значение --user.
--basedir=path Путь к каталогу установки MariaDB.
--builddir=path При использовании --srcdir с построением вне каталога, необходимо установить это значение в расположение каталога построения, где находятся построенные файлы.
--catalogs=["list"] Инициализировать MariaDB для каталогов. Аргумент — список каталогов для создания, разделённых пробелом. Каталог def создаётся автоматически. Добавлен в MariaDB 11.3.
--catalog-user=user Пользователь при добавлении каталогов к работающему серверу. Добавлен в MariaDB 11.3.
--catalog-password[=password] Пароль для пользователя каталога. Добавлен в MariaDB 11.3.
--catalog-client-arg=arg Другие аргументы для 'mariadb' при добавлении новых каталогов. Добавлен в MariaDB 11.3.
--cross-bootstrap Для внутреннего использования. Используется при построении системных таблиц MariaDB на другом хосте, чем целевой.
--datadir=path, --ldata=path Путь к каталогу данных MariaDB.
--debug=path Записать команды для выполнения в 'path'. Добавлен в MariaDB 11.3.
--defaults-extra-file=name Прочитать этот файл после чтения глобальных файлов. Должен быть указан первым параметром.
--defaults-file=name Прочитать только параметры по умолчанию из заданного файла name. Должен быть указан первым параметром.
--defaults-group-suffix=name В дополнение к заданным группам, также прочитать группы с этим суффиксом. С MariaDB 10.1.31, MariaDB 10.2.13 и MariaDB 10.3.5.
--force Принудительно запустить mariadb-install-db, даже если DNS не работает. В этом случае записи в таблице привилегий, которые обычно используют имена хостов, будут использовать IP-адреса.
--no-defaults Не читать параметры по умолчанию ни из одного файла параметров. Должен быть указан первым параметром.
--print-defaults Вывести список аргументов программы и выйти. Должен быть указан первым параметром.
--rpm Для внутреннего использования. Этот параметр используется файлами RPM во время процесса установки MariaDB.
--skip-name-resolve Использовать IP-адреса вместо имён хостов при создании записей в таблице привилегий. Этот параметр может быть полезен, если ваш DNS не работает.
--skip-test-db Не устанавливать тестовую базу данных
--srcdir=path Для внутреннего использования. Путь к каталогу исходного кода MariaDB. Этот параметр использует скомпилированные двоичные файлы и файлы поддержки внутри дерева исходного кода, что полезно, если вы не хотите устанавливать MariaDB, а только хотите создать таблицы системы. Каталог, в котором mariadb-install-db ищет файлы поддержки, такие как файл сообщений об ошибках и файл для заполнения таблиц справки.
--user=user_name Имя пользователя для входа, которое следует использовать для запуска mysqld. Файлы и каталоги, созданные mysqld, будут принадлежать этому пользователю. Вам необходимо иметь соответствующие root для использования этого параметра. По умолчанию mysqld запускается с вашим текущим именем входа, а созданные им файлы и каталоги будут принадлежать вам.
--verbose Режим подробной информации. Выводить больше информации о действиях программы.
--windows Для внутреннего использования. Этот параметр используется для создания дистрибутивов Windows.

Файлы параметров

В дополнение к чтению параметров из командной строки, mariadb-install-db также может читать параметры из файлов параметров. Если в файле параметров будет предоставлен неизвестный параметр для mariadb-install-db, он будет проигнорирован.

Следующие параметры относятся к тому, как утилиты командной строки MariaDB обрабатывают файлы параметров. Они должны быть указаны в качестве первого аргумента в командной строке:

Параметр Описание
--print-defaults Вывести список аргументов программы и выйти.
--no-defaults Не читать параметры по умолчанию ни из одного файла параметров.
--defaults-file=# Прочитать только параметры по умолчанию из заданного файла #.
--defaults-extra-file=# Прочитать этот файл после глобальных файлов.
--defaults-group-suffix=# В дополнение к группам параметров по умолчанию, также прочитать группы параметров с этим суффиксом.

Группы параметров

mariadb-install-db читает параметры из следующих групп параметров из файлов параметров:

Группа Описание
[mysql_install_db] Параметры, считываемые mysqld_safe, которые включают как MariaDB Server, так и MySQL Server.

mariadb-install-db также считывает параметры из следующих групп параметров сервера из файлов параметров:

Группа Описание
[mysqld] Параметры, считываемые mysqld, которые включают как сервер MariaDB, так и сервер MySQL.
[server] Параметры, считываемые сервером MariaDB.
[mysqld-X.Y] Параметры, считываемые конкретной версией mysqld, которая включает как сервер MariaDB, так и сервер MySQL. Например, [mysqld-5.5].
[mariadb] Параметры, считываемые сервером MariaDB.
[mariadb-X.Y] Параметры, считываемые конкретной версией сервера MariaDB.
[client-server] Параметры, считываемые всеми клиентскими программами MariaDB и сервером MariaDB. Это полезно для параметров, таких как сокет и порт, которые общие для сервера и клиентов.
[galera] Параметры, считываемые сервером MariaDB, способным работать с Galera. Доступно на системах, скомпилированных с поддержкой Galera.

Установка системных таблиц

Установка системных таблиц из исходного дерева

Если вы только что скомпилировали MariaDB из исходного кода и хотите использовать mariadb-install-db из вашего исходного дерева, это можно сделать, не устанавливая сам MariaDB. Это очень полезно, если вы хотите протестировать свои изменения в MariaDB, не затрагивая существующие установки.

Для этого необходимо указать параметр --srcdir. Например:

./scripts/mariadb-install-db --srcdir=. --datadir=path-to-temporary-data-dir

Установка системных таблиц из двоичного архива

Если вы установили пакет двоичного архива в нестандартном пути, например, в домашнем каталоге, и у вас уже установлен пакет MariaDB / MySQL, могут возникнуть конфликты с параметрами по умолчанию /etc/my.cnf. Это часто приводит к ошибкам прав доступа.

Возможным решением является использование параметра --no-defaults, чтобы не считывать файлы конфигурации

./scripts/mariadb-install-db --no-defaults --basedir=. --datadir=data
. Например:

./scripts/mariadb-install-db --no-defaults --basedir=. --datadir=data

Другим возможным решением является использование параметра defaults-file, чтобы указать свой собственный файл конфигурации

./scripts/mariadb-install-db --defaults-file=~/.my.cnf
.

Пользовательские учётные записи, созданные по умолчанию

MariaDB, начиная с 10.4

В MariaDB 10.4 и выше, mariadb-install-db по умолчанию устанавливает --auth-root-authentication-method=socket. При этом создается пользовательская учётная запись по умолчанию root@localhost с возможностью использования двух подключаемых модулей аутентификации:

  • Во-первых, она настроена на попытку использования модуля аутентификации unix_socket. Это позволяет пользователю root@localhost войти без пароля через локальный файл сокета Unix, определенный системной переменной socket, при условии, что вход осуществляется из процесса, принадлежащего учётной записи операционной системы root.
  • Во-вторых, если аутентификация не удалась с помощью модуля аутентификации unix_socket, она настроена на попытку использования модуля аутентификации mysql_native_password.

Определение учётной записи пользователя по умолчанию root@localhost:

CREATE USER 'root'@'localhost' IDENTIFIED VIA unix_socket 
  OR mysql_native_password USING 'invalid';
GRANT ALL PRIVILEGES ON *.* TO 'root'@'localhost' WITH GRANT OPTION;
GRANT PROXY ON ''@'%' TO 'root'@'localhost' WITH GRANT OPTION;

Поскольку mariadb-install-db по умолчанию устанавливает --auth-root-authentication-method=socket, следующие дополнительные пользовательские учётные записи не создаются по умолчанию:

  • root@127.0.0.1
  • root@::1
  • root@${current_hostname}

Однако создается дополнительная учётная запись, определяемая параметром --auth-root-socket-user. Если этот параметр не задан, он принимает значение параметра --user. На большинстве систем параметр --user по умолчанию использует значение mysql, поэтому эта дополнительная учётная запись будет называться mysql@localhost.

Определение этой учётной записи mysql@localhost пользователя аналогично учётной записи пользователя root@localhost:

CREATE USER 'mysql'@'localhost' IDENTIFIED VIA unix_socket 
  OR mysql_native_password USING 'invalid';
GRANT ALL PRIVILEGES ON *.* TO 'mysql'@'localhost' WITH GRANT OPTION;

Для обеих учётных записей изначально устанавливается некорректный пароль. Это означает, что прежде чем использовать пароль для аутентификации под этими учётными записями, необходимо сначала задать им действительный пароль, выполнив оператор SET PASSWORD.

Например, вот пример установки пароля для учётной записи root@localhost сразу после установки:

$ sudo yum install MariaDB-server
$ sudo systemctl start mariadb
$ sudo mariadb
...
MariaDB> SET PASSWORD = PASSWORD('XH4VmT3_jt');

Вы можете заметить в примере выше, что клиентская программа командной строки mariadb выполняется через sudo. Это позволяет учётной записи пользователя root@localhost успешно пройти аутентификацию с помощью модуля аутентификации unix_socket.

MariaDB до 10.3

В MariaDB 10.3 и ранее, mariadb-install-db по умолчанию устанавливает --auth-root-authentication-method=normal. При этом создаются следующие учётные записи по умолчанию без пароля:

  • root@localhost
  • root@127.0.0.1
  • root@::1
  • root@${current_hostname}

Определение учётной записи пользователя по умолчанию root@localhost:

CREATE USER 'root'@'localhost';
GRANT ALL PRIVILEGES ON *.* TO 'root'@'localhost' WITH GRANT OPTION;
GRANT PROXY ON ''@'%' TO 'root'@'localhost' WITH GRANT OPTION;

Определения других учётных записей пользователей по умолчанию root аналогичны.

Необходимо установить пароль для этих учётных записей сразу после установки. Это можно сделать, выполнив оператор SET PASSWORD или запустив mysql_secure_installation.

Например, вот пример установки пароля для учётной записи root@localhost сразу после установки:

$ sudo yum install MariaDB-server
$ sudo systemctl start mariadb
$ mysql -u root
...
MariaDB> SET PASSWORD = PASSWORD('XH4VmT3_jt');

Поскольку mariadb-install-db по умолчанию устанавливает --auth-root-authentication-method=normal, параметр --auth-root-socket-user по умолчанию игнорируется.

Устранение проблем

Проверка файла журнала ошибок

Если mariadb-install-db завершится неудачно, необходимо проверить файл журнала ошибок error log в каталоге данных, указанном параметром --datadir. Это должно помочь выявить причину ошибки.

Тестирование с mysqld

Также можно проверить, что это не общая ошибка сервера MariaDB, запустив процесс mysqld. Параметр -skip-grant-tables указывает ему пропустить проверку таблиц системных таблиц. Включение журнала запросов поможет определить, какие запросы выполняются на сервере. Например:

mysqld --skip-grant-tables --general-log

В этот момент можно использовать клиент mariadb для подключения к базе данных mysql и просмотра системных таблиц. Например:

$ /usr/local/mysql/bin/mysql -u root mysql
MariaDB [mysql]> show tables

Использование сервера, скомпилированного с --disable-grant-options

Следующее применимо только в том исключительном случае, если вы используете сервер mysqld, настроенный с параметром --disable-grant-options:

mariadb-install-db необходимо вызвать mysqld с параметрами --bootstrap и --skip-grant-tables. MariaDB, скомпилированный с параметром --disable-grant-options, имеет параметры --bootstrap и --skip-grant-tables отключены. Для решения этой проблемы установите переменную среды MYSQLD_BOOTSTRAP в полном пути к серверу mysqld, настроенному без --disable-grant-options. mariadb-install-db будет использовать этот сервер.

Базы данных test и test_%

При вызове скрипта mariadb-install-db в каталоге данных создается новый каталог test. В нём находится единственный файл db.opt, который устанавливает параметры клиента default-character-set и default-collation.

Если запустить mysql как анонимный пользователь mysql -u''@localhost и посмотреть на предоставленные права и доступные базы данных, вы получите следующее:

SELECT current_user;
+--------------+
| current_user |
+--------------+
| @localhost   |
+--------------+

SHOW GRANTS FOR current_user;
+--------------------------------------+
| Grants for @localhost                |
+--------------------------------------+
| GRANT USAGE ON *.* TO ``@`localhost` |
+--------------------------------------+

SHOW DATABASES;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| test               |
+--------------------+

Отображаются information_schema, а также test встроенных баз данных. Но при использовании SHOW GRANTS возникает парадокс: как текущий пользователь может видеть что-то, если у него нет прав?

Давайте пойдем дальше.
Теперь воспользуемся пользователем root/unix, у которого есть все права, чтобы создать новую базу данных с префиксом test_, например:

CREATE DATABASE test_electricity;

После внесения изменения в каталоге данных будет создан новый каталог.
Теперь снова войдите как анонимный пользователь и выполните SHOW DATABASES:

SHOW DATABASES
+--------------------+
| Database           |
+--------------------+
| information_schema |
| test               |
| test_electricity   |
+--------------------+

Мы снова можем видеть вновь созданную базу данных, не имея прав? У нас есть анонимный пользователь без прав, но он всё ещё может видеть базы данных test и test_electricity.
Откуда это?


Войдите как пользователем root/unix, чтобы узнать все права анонимного пользователя:

SELECT * FROM mysql.user WHERE user='' AND host='localhost'\G
*************************** 1. row ***************************
                  Host: localhost
                  User: 
              Password: 
           Select_priv: N
           Insert_priv: N
           Update_priv: N
           Delete_priv: N
           Create_priv: N
             Drop_priv: N
           Reload_priv: N
         Shutdown_priv: N
          Process_priv: N
             File_priv: N
            Grant_priv: N
       References_priv: N
            Index_priv: N
            Alter_priv: N
          Show_db_priv: N
            Super_priv: N
 Create_tmp_table_priv: N
      Lock_tables_priv: N
          Execute_priv: N
       Repl_slave_priv: N
      Repl_client_priv: N
      Create_view_priv: N
        Show_view_priv: N
   Create_routine_priv: N
    Alter_routine_priv: N
      Create_user_priv: N
            Event_priv: N
          Trigger_priv: N
Create_tablespace_priv: N
   Delete_history_priv: N
              ssl_type: 
            ssl_cipher: 
           x509_issuer: 
          x509_subject: 
         max_questions: 0
           max_updates: 0
       max_connections: 0
  max_user_connections: 0
                plugin: 
 authentication_string: 
      password_expired: N
               is_role: N
          default_role: 
    max_statement_time: 0.000000

Как видно из таблицы mysql.user, анонимный пользователь не имеет глобальных прав. Тем не менее, анонимный пользователь может видеть базы данных, поэтому должен быть способ, позволяющий анонимному пользователю видеть базы данных test и test_electricity.

Давайте проверим предоставленные права на уровне базы данных. Эта информация находится в таблице mysql.db. В таблице mysql.db уже содержатся 2 строки, созданные при вызове скрипта mariadb-install-db.

Анонимный пользователь имеет права доступа к базе данных (без grant, alter_routine и execute) в базах данных test и test_%:

SELECT * FROM mysql.db\G
*************************** 1. row ***************************
                 Host: %
                   Db: test
                 User: 
          Select_priv: Y
          Insert_priv: Y
          Update_priv: Y
          Delete_priv: Y
          Create_priv: Y
            Drop_priv: Y
           Grant_priv: N
      References_priv: Y
           Index_priv: Y
           Alter_priv: Y
Create_tmp_table_priv: Y
     Lock_tables_priv: Y
     Create_view_priv: Y
       Show_view_priv: Y
  Create_routine_priv: Y
   Alter_routine_priv: N
         Execute_priv: N
           Event_priv: Y
         Trigger_priv: Y
  Delete_history_priv: Y
*************************** 2. row ***************************
                 Host: %
                   Db: test\_%
                 User: 
          Select_priv: Y
          Insert_priv: Y
          Update_priv: Y
          Delete_priv: Y
          Create_priv: Y
            Drop_priv: Y
           Grant_priv: N
      References_priv: Y
           Index_priv: Y
           Alter_priv: Y
Create_tmp_table_priv: Y
     Lock_tables_priv: Y
     Create_view_priv: Y
       Show_view_priv: Y
  Create_routine_priv: Y
   Alter_routine_priv: N
         Execute_priv: N
           Event_priv: Y
         Trigger_priv: Y
  Delete_history_priv: Y

Первая строка зарезервирована для явного использования для базы данных test, которая автоматически создается с помощью mariadb-install-db.

Поскольку база данных test_electricity соответствует шаблону test_%, где test_ является префиксом, мы можем понять, почему пользователь имеет право работать с вновь созданной базой данных.

До тех пор, пока в mysql.db для анонимного пользователя существуют записи, каждый новый созданный пользователь будет иметь права доступа к базам данных test и test_%.

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

Не создание тестовой базы данных и анонимного пользователя

Если вы запускаете mariadb-install-db с опцией --skip-test-db, база данных test не будет создана, что мы можем видеть следующим образом:

SHOW DATABASES;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
+--------------------+

SELECT * FROM mysql.db;
Empty set (0.001 sec)

Также не создается анонимный пользователь (только пользователи unix/mariadb.sys/root):

SELECT user,host FROM mysql.user;
+-------------+-----------+
| User        | Host      |
+-------------+-----------+
| anel        | localhost |
| mariadb.sys | localhost |
| root        | localhost |
+-------------+-----------+

См. также

  • Настройка MariaDB с поддержкой каталогов
  • Установка системных таблиц (mariadb-install-db)
  • Версия mariadb-install-db для Windows: mysql_install_db.exe
Содержимое, воспроизведенное на этом сайте, является собственностью его соответствующих владельцев, и это содержимое не предварительно просматривается компанией MariaDB. Мнения, информация и мнения, выраженные в этом содержании, не обязательно отражают точку зрения MariaDB или любой другой стороны.

© 2023 MariaDB
Licensed under the Creative Commons Attribution 3.0 Unported License and the GNU Free Documentation License.
https://mariadb.com/kb/en/mariadb-install-db/

Spec-Zone.ru

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