3

Я хочу провести тестирование для MySQL, и мне нужно запустить новую базу данных MySQL от имени пользователя без полномочий root. Я использую Debian Linux и ожидаю, что можно запустить mysql_install_db и другие команды как обычный пользователь с правильными параметрами и доступным для записи местоположением.

  1. Это работает?

  2. Как это сделать?

Я не хочу загружать программное обеспечение с веб-сайта MySQL. Вместо этого я хочу использовать исполняемые файлы, предоставленные уже установленными пакетами ОС. Аргументация такая:

  1. Программное обеспечение уже установлено - установка нового программного обеспечения из сети бессмысленна, медленна, может привести к сбою, возможной угрозе безопасности и т.д. Насколько мне известно, KDE делает нечто подобное для своего хранилища данных.

  2. Если это в конечном итоге сработает, я хочу обернуть тест в переносимый скрипт, который выполняется на любом компьютере, где есть mysql_install_db и т.д.

Я искал в Интернете учебники / подсказки, но нашел только массу описаний того, как установить программное обеспечение с нуля. С информацией из того, что я прочитал, я тогда попробовал это:

mkdir ~/tmp/mysql/
mkdir ~/tmp/mysql/mysql/
mkdir ~/tmp/mysql/sql_data/

mysql_install_db \
    --defaults-file=my.cnf
    --user=daniel
    --basedir=/home/daniel/tmp/mysql/mysql/
    --datadir=/home/daniel/tmp/mysql/sql_data/
    --socket=/home/daniel/tmp/mysql/socket

Но это жалуется

FATAL ERROR: Could not find my_print_defaults

The following directories were searched:

   /home/daniel/tmp/mysql/mysql//bin
   /home/daniel/tmp/mysql/mysql//extra

ОБНОВЛЕНИЕ: я все еще не нашел решение ограничить вывод сообщениями об ошибках. Я получил много строк с тегом [Note] но не нашел аргумента для установки уровня вывода отладки.

1 ответ1

0

Я нашел похожие вызовы в коде Akonadi и начал создавать команды с нуля, просматривая соответствующие справочные тексты. Похоже, я только что включил бесполезные / контрпродуктивные варианты раньше. Теперь это работает для меня:

mysql_install_db                    \
  --defaults-file=/dev/null         \ # don't user my.cnf in /etc/ or ~/
  --datadir=/home/daniel/tmp/mysql/ \ # use given directory for data
  --force                             # make mysqld work without /usr/bin/resolveip

Кажется, мне нужен только 1 каталог для данных. Настройка basedir работает только при условии полной установки MySQL.

После этого я мог запустить сервер MySQL:

mysqld                              \
  --defaults-file=/dev/null         \ # as above
  --datadir=/home/daniel/tmp/mysql/ \ # as above
  --socket=/home/daniel/tmp/socket  \ # use writable socket
  --skip-networking                   # for my purposes: only socket connections

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .