2016-03-29 16 views
0

シェフのmysqlのレシピ順で、mysqlのrootユーザ用のパスワードを設定するために、すべてのステップを自動化するbashスクリプトを実行するためのレシピで "bash"その過程でポップアップします。しかし、コンバージェンスを実行した後にエラーが発生しました。シェフでmysql_secure_installationを自動化する方法

"ERROR 1045(28000):ユーザー 'root' @ 'localhost'(パスワードは使用しています)のアクセスが拒否されました。

私はそれが最初に一時パスワードがmysqld.logファイルで生成され、mysql_secure_installationを実行するためにこの一時パスワードを提供する必要があることを理解しています。しかし、私はログからこの一時パスワードを持ってきて、スクリプトでそれを使うことができるスクリプトにステップを含める方法を見つけることができませんでした。以下は、私が現在レシピで実行しているスクリプトです。

root_password = node.set['mysql_user']['root']['password'] 
bash "mysql_secure_installation" do 
    code <<-EOH 
    mysql -u root -e "DELETE FROM mysql.user WHERE User='';" 
    mysql -u root -e "DROP DATABASE test;" 
    mysql -u root -e "DELETE FROM mysql.db WHERE Db='test' OR Db='test\\_%';" 
    mysql -u root -e "DELETE FROM mysql.user WHERE User='root' AND Host NOT IN ('localhost', '127.0.0.1', '::1');" 
    mysql -u root -e "SET PASSWORD FOR 'root'@'localhost' = PASSWORD('#{root_password}');" -D mysql 
    mysql -u root -p#{root_password} -e "SET PASSWORD FOR 'root'@'127.0.0.1' = PASSWORD('#{root_password}');" -D mysql 
    mysql -u root -p#{root_password} -e "SET PASSWORD FOR 'root'@'::1' = PASSWORD('#{root_password}');" -D mysql 
    mysql -u root -p#{root_password} -e "FLUSH PRIVILEGES;" 
    EOH 
end 
+0

は何 'mysql'の料理のバージョンと' mysql_server'リソースを使用していますLサーバー? AFAIK最新版の料理本では、 'initial_root_password'を使ってrootパスワードを設定するべきです。 – zuazo

+0

私はmysqlコミュニティの料理本を使用していません。私はcentos 6の通常のインストールプロセスに基づいて私のカスタム料理の本を開発しました。 – RahulK

答えて

1

まず、スクリプトは最初のコンバージェンスでのみ動作します。

第2に、bashリソースは、最後のコマンド(FLUSH PRIVILEGES)のエラーのみを返します。他のコマンドエラーはリソースによって無視され、シェフの実行は続行されます。これを避けるには、set -eを使用するか、mysqlコマンドの間に&&を追加する必要があります。

とにかく、私はあなたの仕事のために公式mysql公式を使用しようとすることをお勧めします。それはより簡単になります。その後

UPDATE mysql.user SET #{password_column_name}=PASSWORD('#{root_password}')#{password_expired} WHERE user = 'root'; 
DELETE FROM mysql.user WHERE USER LIKE ''; 
DELETE FROM mysql.user WHERE user = 'root' and host NOT IN ('127.0.0.1', 'localhost'); 
FLUSH PRIVILEGES; 
DELETE FROM mysql.db WHERE db LIKE 'test%'; 
DROP DATABASE IF EXISTS test ; 

、あなたもあなた自身を実行することができます。

mysql_service 'default' do 
    port '3306' 
    initial_root_password root_password 
    action [:create, :start] 
end 

ボックスのうち、この料理already takes many of your security measuresがあることに留意してください:あなたは、インストールしてrootのパスワードを設定するには、次のようなものを使用することができますあなたがしたい場合databasemysql2_chef_gem料理本を使用してSQLスクリプト:あなたはMySQをインストールする

# Required by `database` cookbook MySQL resources: 
mysql2_chef_gem 'default' 

connection_info = { 
    :host  => '127.0.0.1', 
    :username => 'root', 
    :password => root_password 
} 

mysql_database 'mysql_secure_installation' do 
    connection connection_info 
    database_name 'mysql' 
    sql <<-EOH 
    -- MY MYSQL SCRIPT HERE; 
    EOH 
    action :query 
end