MySQL Installation


#1

Hi Experts,
I have installed the Mysql via chef.
As all the mysql cookbook are deprecated and
mysql_service 'default' do
version '5.7'
bind_address '0.0.0.0'
port '3306'
data_dir '/data'
initial_root_password 'Ch4ng3me'
action [:create, :start]
end
The above does not work for me , is there any other way to change the initial password .Any help will be very helpful.


#2

Look at the current MySQL cookbook maintained by the sous-chefs team

Yes you can set the initial root password


#3

Thanks i have a strange issue iam changing the password , The password is getting changed successfully but i get this error.

from the kitchen converge

Running handlers:
First chef run should have reached a converged state.
Resources updated in a second chef-client run:
- bash[create databass]
[2019-02-25T13:45:58+00:00] FATAL: Chef::Exceptions::ChildConvergeError: Chef run process terminated by signal 9 (KILL)
[2019-02-25T13:45:58+00:00] FATAL: Chef::Exceptions::ChildConvergeError: Chef run process terminated by signal 9 (KILL)

am using simple command to change root password after MySql installation ,But getting the Above error (signal 9 kill)

script "change password" do

interpreter "bash"

user "root"

cwd "/tmp"

code <<-EOH

#MYSQL

root_temp_pass=$(grep 'A temporary password' /mysql/log/mysqld.log |tail -1 |awk '{split($0,a,": "); print a[2]}')

#Login as root change password

mysql -uroot -p"$root_temp_pass" -Be "ALTER USER 'root'@'localhost' IDENTIFIED BY 'Czt732ck#';" --connect-expired-password

EOH

end


#4

Thank you , Iam able to change the password while creating database iam getting the error

  • bash[create databasss]
    [2019-02-25T18:00:00+00:00] FATAL: Chef::Exceptions::ChildConvergeError: Chef run process terminated by signal 9 (KILL)
    [2019-02-25T18:00:00+00:00] FATAL: Chef::Exceptions::ChildConvergeError: Chef run process terminated by signal 9 (KILL)

Any pointers will be very helpful on this .


#5

So first I'll preface this. I use the mysql cookbook for installing mysql percona - despite there being a percona cookbook. Your milage may vary.

defaults.rb

default['mysql_wrapper']['pins'] = {
  server:     '5.7.17-13.1.el7',
  xtrabackup: '2.4.11-1.el7',
  toolkit:    '3.0.10-1.el7',
}

default['mysql_wrapper']['packages'] = {
  "Percona-Server-client-#{node['mysql_wrapper']['pins']['server'].split('.').first(2).join('')}" =>            node['mysql_wrapper']['pins']['server'],
  "Percona-Server-devel-#{node['mysql_wrapper']['pins']['server'].split('.').first(2).join('')}" =>             node['mysql_wrapper']['pins']['server'],
  "Percona-Server-server-#{node['mysql_wrapper']['pins']['server'].split('.').first(2).join('')}" =>            node['mysql_wrapper']['pins']['server'],
  "Percona-Server-shared-#{node['mysql_wrapper']['pins']['server'].split('.').first(2).join('')}" =>            node['mysql_wrapper']['pins']['server'],
  "Percona-Server-shared-compat-#{node['mysql_wrapper']['pins']['server'].split('.').first(2).join('')}" =>     node['mysql_wrapper']['pins']['server'],
  "Percona-Server-#{node['mysql_wrapper']['pins']['server'].split('.').first(2).join('')}-debuginfo" =>         node['mysql_wrapper']['pins']['server'],
  "percona-xtrabackup-#{node['mysql_wrapper']['pins']['xtrabackup'].split('.').first(2).join('')}" =>           node['mysql_wrapper']['pins']['xtrabackup'],
  "percona-xtrabackup-#{node['mysql_wrapper']['pins']['xtrabackup'].split('.').first(2).join('')}-debuginfo" => node['mysql_wrapper']['pins']['xtrabackup'],
  'percona-nagios-plugins' =>                                                                                   '1.1.8-1',
  'percona-toolkit' =>                                                                                          node['mysql_wrapper']['pins']['toolkit'],
  'percona-toolkit-debuginfo' =>                                                                                node['mysql_wrapper']['pins']['toolkit'],
  'nfs-utils' =>                                                                                                nil,
  'qpress' =>                                                                                                   '11-1.el7',
  'rsync' =>                                                                                                    nil,
  expect:                                                                                                       nil,
  mailx:                                                                                                        nil,
}

service.rb

require 'securerandom'
percona_client = node['mysql_wrapper']['packages'].select { |key, _val| key.include? 'Percona-Server-client' }.keys[0]
percona_sauce = SecureRandom.base64(32)
percona_server = node['mysql_wrapper']['packages'].select { |key, _val| key.include? 'Percona-Server-server' }.keys[0]

mysql_service node['mysql_wrapper']['service']['name'] do
  version               node['mysql_wrapper']['packages'][percona_server]
  bind_address          node['mysql_wrapper']['service']['ip']
  package_name          percona_server
  port                  node['mysql_wrapper']['service']['port']
  data_dir              node['mysql_wrapper']['service']['paths']['dbdata']
  error_log             ::File.join(node['mysql_wrapper']['service']['paths']['log'], 'mysql-error.log')
  initial_root_password percona_sauce
  subscribes            :restart, "template[#{::File.join('/etc/systemd/system/', "mysql-#{name}.d", 'limits.conf')}]", :delayed
  action                [:create, :start]
end

bash 'mylogin.cnf' do
  code <<-MLC
    expect -c '
    set timeout 10
    spawn mysql_config_editor set --login-path=#{node['mysql_wrapper']['service']['name']} --host=localhost --user=root --port=#{node['mysql_wrapper']['service']['port']} --socket=#{::File.join('/var/run', "mysql-#{node['mysql_wrapper']['service']['name']}", 'mysqld.sock')} --password
    expect "password:"
    send "#{percona_sauce}\r"
    expect eof'
  MLC
  cwd       '/root'
  creates   '/root/.mylogin.cnf'
  sensitive true
  user      'root'
end

# ... a few other things

mysql_config node['mysql_wrapper']['service']['name'] do
  instance node['mysql_wrapper']['service']['name']
  source   'my.cnf.erb'
  variables mysql: node['mysql_wrapper']['config']
  notifies :restart, "mysql_service[#{name}]", :delayed
end

So what's all this code achieve? Well we call securerandom so that we can generate a secure password. Now even I don't know the password here, and this is the point of the bash block. It generates the encrypted login file using MySQL's encrypted profile format. The profile (known here by the login-path command option), is the name of the instance declared by my node['mysql_wrapper']['service']['name'] attribute. So if node['mysql_wrapper']['service']['name'] = 'myserver1', you'd log into the mysql instance with mysql --login-path=myserver1 from the root user.

I do not use the default mysql server instance, and always use a named instance. That might be where you're getting some issues, because a named instance uses a different socket file.

This is how I've been spawning MySQL instances for a while now.