Я использую эту кулинарную книгу повара mysql. Предполагается, что кулинарная книга позволит вам установить пароль пользователя mysql. Он делает это через следующее
def init_records_script
# Note: shell-escaping passwords in a SQL file may cause corruption - eg
# mysql will read \& as &, but \% as \%. Just escape bare-minimum \ and '
sql_escaped_password = root_password.gsub('\\') { '\\\\' }.gsub("'") { '\\\'' }
Chef::Log.info("passxyz" + sql_escaped_password)
<<-EOS
set -e
rm -rf /tmp/#{mysql_name}
mkdir /tmp/#{mysql_name}
cat > /tmp/#{mysql_name}/my.sql <<-'EOSQL'
UPDATE mysql.user SET #{password_column_name}=PASSWORD('#{root_password}')#{password_expired} WHERE user = 'root';
DELETE FROM mysql.user WHERE USER LIKE '';
FLUSH PRIVILEGES;
DELETE FROM mysql.db WHERE db LIKE 'test%';
DROP DATABASE IF EXISTS test ;
EOSQL
#{db_init}
#{record_init}
while [ ! -f #{pid_file} ] ; do sleep 1 ; done
kill 'cat #{pid_file}'
while [ -f #{pid_file} ] ; do sleep 1 ; done
EOS
end
А также
def record_init
cmd = v56plus ? mysqld_bin : mysqld_safe_bin
cmd << " --defaults-file=#{etc_dir}/my.cnf"
cmd << " --init-file=/tmp/#{mysql_name}/my.sql"
cmd << ' --explicit_defaults_for_timestamp' if v56plus
cmd << ' &'
return "scl enable #{scl_name} \"#{cmd}\"" if scl_package?
cmd
end
выше, похоже, пытается выполнить команду: /usr/bin/mysqld_safe --defaults-file=/etc/mysql/my.cnf --init-file=/tmp/mysql/my.sql &
Я пробовал искать файл для проверки, но не смог найти его. Так что, похоже, это не работает. В конце концов, используя эту поваренную книгу, пароль пользователя mysql не будет установлен вообще. Есть ли очевидная ошибка выше? Как его отладить?
Похоже, что ресурс chef resource bash
принимающий init_records_script
качестве входного параметра, нуждался в user "root"
атрибуте. См. Этот PR: https://github.com/chef-cookbooks/mysql/pull/541