web-dev-qa-db-ja.com

MySQLデータベースを非ルートとして初期化し、テスト用にSQLサーバーを実行します

MySQL固有のテストを実行したいので、root以外のユーザーとして新しいMySQLデータベースを実行する必要があります。私はDebianLinuxを使用しており、適切なオプションと書き込み可能な場所を使用して、通常のユーザーとしてmysql_install_dbおよびその他のコマンドを開始できると期待しています。

  1. これは機能しますか?

  2. どうやるか?

MySQLのWebサイトからソフトウェアをダウンロードしたくありません。代わりに、すでにインストールされているOSパッケージによって提供される実行可能ファイルを使用したいと思います。理由はこれです:

  1. ソフトウェアはすでにインストールされています。ネットから新しいソフトウェアをインストールするのは無意味で、時間がかかり、失敗する可能性があり、セキュリティリスクなどがあります。私の知る限り、KDEはデータストレージに対して同様のことを行っています。

  2. それが最終的に機能する場合は、mysql_install_dbなどが利用可能な任意のコンピューターで実行されるポータブルスクリプトでテストをラップしたいと思います。

チュートリアル/ヒントをWebで検索しましたが、ソフトウェアを最初からインストールする方法についての説明がたくさん見つかりました。私が読んだものからの情報で、私はそれからこれを試しました:

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

PDATE:出力をエラーメッセージに制限するための解決策がまだ見つかりませんでした。タグ[Note]の行がたくさんありますが、デバッグ出力レベルを設定するための引数が見つかりませんでした。

2
Daniel Böhmer

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
0
Daniel Böhmer