gpt4 book ai didi

mysql - 如何在 Chef 中自动化 mysql_secure_installation

转载 作者:行者123 更新时间:2023-11-29 07:20:35 26 4
gpt4 key购买 nike

Chef mysql 配方 - 为了在 mysql 中为 root 用户设置永久密码,我确实找到了一个进程,该进程在配方中使用“bash”资源来运行 bash 脚本,该脚本会自动执行在 mysql 中弹出的所有步骤过程。但运行收敛后出现错误

"ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: YES)".

我理解这是因为最初临时密码是在 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

最佳答案

首先,您的脚本仅在第一次收敛时有效。

其次,您的 bash 资源将仅返回最后一个命令的错误(FLUSH PRIVILEGES)。其他命令错误将被资源忽略,并且 Chef 执行将继续。您需要使用set -e或者在 mysql 命令之间添加 && 以避免这种情况。

不管怎样,我非常推荐你尝试使用官方的mysql适合您任务的 Recipe 。这会让事情变得更简单。您可以使用类似以下内容来安装并设置 root 密码:

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

请记住,这本 Recipe already takes many of your security measures开箱即用:

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 ;

之后,您还可以使用 database 运行自己的 SQL 脚本。和 mysql2_chef_gem如果你想要 Recipe :

# 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

关于mysql - 如何在 Chef 中自动化 mysql_secure_installation,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36287997/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com