web-dev-qa-db-ja.com

MySQLのデータベースディレクトリ構造を作成する方法

私はこのチュートリアルに従っていました:

https://www.digitalocean.com/community/tutorials/how-to-use-mysql-with-your-Ruby-on-Rails-application-on-ubuntu-14-04

これまで、mysql-servermysql-client libmysqlclient-devをインストールしました、そして、MySQLにSudo mysql_install_dbを使用して情報を保存するデータベースディレクトリ構造を作成するように指示することになっていた。

$ Sudo mysql_install_db

[WARNING] mysql_install_db is deprecated. Please consider switching to mysqld --initialize
[ERROR]   The data directory needs to be specified.

mysqld --initializeを実行すると問題が解決すると思いました:

$ mysqld --initialize 

mysqld: Can't create directory '/var/lib/mysql/' (Errcode: 17 - File exists)
[Warning] TIMESTAMP with implicit DEFAULT value is deprecated. Please use --explicit_defaults_for_timestamp server option (see documentation for more details).
[ERROR] Aborting

MySQLに情報を保存するデータベースディレクトリ構造を作成するように指示するにはどうすればよいですか?

3
hussam

以前に回答した質問 buntu 16.04にmysqlをインストールする方法 を使用して問題を解決できましたが、解決策を修正する必要がありました。

/var/lib/mysqlディレクトリを削除/移動すると、mysqld --initialize/var/lib/mysqlの代わりに必要なデータベースディレクトリを作成できず、Sudoを前に付けていてもErrcode: 13 - Permission deniedを取得しました。

/var/lib/mysql/のコンテンツを削除/移動しましたが、ディレクトリ自体は削除しませんでした。私はもう一度Sudo mysql --initializeを実行しようとしましたが、動作し、/var/lib/mysql/ディレクトリ内に新しいコンテンツを作成しました。 mysql --initializeによって生成されたコンテンツは、削除または移動した以前のコンテンツとは異なります。

チュートリアルの残りの手順を続けて、完全に機能しました。

追伸Sudo -iにアクセスするには/var/lib/mysqlを使用する必要がありました。

2
hussam

これが問題の完全な解決策です。

fromdual によると、提案はエラーのアドバイスに従うだけです。一部の機能は廃止されています。

テストシステムで変数explicit_defaults_for_timestampを有効にして、アプリケーションが正常に動作するかどうかを確認し、この機能がデフォルトになる次のリリースに備えてください。

短期的には、この警告は危険ではありません。長期的には、非推奨の機能に備える必要があります。 my.cnf [mysqld]セクションの警告my設定explicit_defaults_for_timestamp = 1を取り除きます。

次の場所で my.cnfを見つける ファイルを見つけることができ、この順序で値が互いにオーバーライドします。

  • /etc/my.cnf
  • /etc/mysql/my.cnf
  • $ MYSQL_HOME/my.cnf
  • [datadir] /my.cnf
  • 〜/ .my.cnf

ファイルを見つける

find / -name my.cnf

/etc/mysql/my.cnfに以下を追加しました

[mysqld]
explicit_defaults_for_timestamp = 1

今すぐ試してください

mysqld --initialize

そして、タイムスタンプを使わずにエラーを減らしました

mysqld: Can't create directory '/var/lib/mysql/' (Errcode: 17 - File exists)
2018-11-12T20:13:45.024116Z 0 [ERROR] Aborting

これはいいですか?よくわからないので、私はもっと深く見ます。上記によると エラーに対する受け入れられたスタックの答え

Sudo -i #log into root
cd /var/lib/mysql
rm -r *

su username  # get back to the original user

mysqld --initialize 

これにより、まったく同じエラーが発生しました。変化なし!

mysqld: Can't create directory '/var/lib/mysql/' (Errcode: 17 - File exists)
2018-11-12T20:13:45.024116Z 0 [ERROR] Aborting

上記の回答が/var/lib/mysqlの削除に役立っているかどうかはわかりませんが、Sudoは役立っています。

Sudo mysqld --initialize

働いた...エラーはまったくありません!

0
Thej Kiran