Skip to content

Instantly share code, notes, and snippets.

@sheikhwaqas
Last active April 1, 2025 18:16
Show Gist options
  • Select an option

  • Save sheikhwaqas/9088872 to your computer and use it in GitHub Desktop.

Select an option

Save sheikhwaqas/9088872 to your computer and use it in GitHub Desktop.
Install MySQL Server on Ubuntu (Non-Interactive Installation)
# Download and Install the Latest Updates for the OS
apt-get update && apt-get upgrade -y
# Set the Server Timezone to CST
echo "America/Chicago" > /etc/timezone
dpkg-reconfigure -f noninteractive tzdata
# Enable Ubuntu Firewall and allow SSH & MySQL Ports
ufw enable
ufw allow 22
ufw allow 3306
# Install essential packages
apt-get -y install zsh htop
# Install MySQL Server in a Non-Interactive mode. Default root password will be "root"
echo "mysql-server-5.6 mysql-server/root_password password root" | sudo debconf-set-selections
echo "mysql-server-5.6 mysql-server/root_password_again password root" | sudo debconf-set-selections
apt-get -y install mysql-server-5.6
# Run the MySQL Secure Installation wizard
mysql_secure_installation
sed -i 's/127\.0\.0\.1/0\.0\.0\.0/g' /etc/mysql/my.cnf
mysql -uroot -p -e 'USE mysql; UPDATE `user` SET `Host`="%" WHERE `User`="root" AND `Host`="localhost"; DELETE FROM `user` WHERE `Host` != "%" AND `User`="root"; FLUSH PRIVILEGES;'
service mysql restart
@mcampbell

Copy link
Copy Markdown

This is brilliant. Seriously. Saved me tons of time.

@joprice

joprice commented Jan 6, 2015

Copy link
Copy Markdown

mysql_secure_installation asks for root pass.

@sheikhwaqas

Copy link
Copy Markdown
Author

@mcampbell: Thanks

@joprice: if you notice on line 17 & 18, we're setting the default mysql root password to "root" so when mysql_secure_installation asks for root password you can simply type in root and hit return. That will proceed further.

@jorjao81

Copy link
Copy Markdown

If you have to type "root" and enter then it's not "non-interactive" anymore... Nice snippet anyway though.

@g-pavlik

Copy link
Copy Markdown

Great! Also works with MariaDB 5.5 on Ubuntu (lines 16 and 17). Thanks a lot!

@mhawila

mhawila commented Aug 11, 2015

Copy link
Copy Markdown

Where do I get mysql_secure_installation script?

@mhawila

mhawila commented Aug 11, 2015

Copy link
Copy Markdown

Found it. It is in /usr/bin/mysql_secure_installation. It is already in the path.

@itsazzad

Copy link
Copy Markdown

Will the password be 'root' or blank if I do not use debconf-set-selections?

@ReneFroger

Copy link
Copy Markdown

@itsazzad it will asking you for a password when installing mysql_secure_installation

@sathishvj

Copy link
Copy Markdown

Apparently mysq_secure_installation commands can be rolled into your own script to avoid entering anything. I combined this script with the reference below and it works cleanly for me.

reference: http://stackoverflow.com/questions/24270733/automate-mysql-secure-installation-with-echo-command-via-a-shell-script

@rizalio

rizalio commented Feb 10, 2017

Copy link
Copy Markdown

how to put a variable to give root password? I tried using $password, $(password), $(echo $password), ($password), "'"$password"'" but no any luck :/

@suraj2410

Copy link
Copy Markdown

In Ubuntu 16.04 particularly with MySQL 5.7 it was getting hard to set a root password directly by editing the password field.

I had to change the root password later in my LAMP + Wordpress auto install script

You can check the MySQL unattended installation for Ubuntu 16 if you are facing problems under my repo

@deleted0account

deleted0account commented Jul 29, 2017

Copy link
Copy Markdown

echo -e "root\nn\nY\nY\nY\nY\n" | mysql_secure_installation

I think this will solve the non-interactive part of the script.

@VGerris

VGerris commented Apr 30, 2018

Copy link
Copy Markdown

You can do it like this:
sudo DEBIAN_FRONTEND=noninteractive apt-get install -y percona-xtradb-cluster-server-5.7
It seems you need to set to root password in 5.7 (that didn't seem needed in 5.6).

You can find some info on how to script that here:
https://dba.stackexchange.com/questions/127537/setting-root-password-in-fresh-mysql-5-7-installation

@yogeshdass

Copy link
Copy Markdown

you can use:
mysqld --initialize-insecure --user=mysql

then login using
mysql -u root --skip-password

and set password by running these two queries
GRANT ALL PRIVILEGES ON . TO 'root'@'%' IDENTIFIED BY 'changeme' WITH GRANT OPTION;
FLUSH PRIVILEGES;

@saklyayoub

Copy link
Copy Markdown

RUN echo "mysql-server-5.7 mysql-server/root_password password root" | debconf-set-selections
RUN echo "mysql-server-5.7 mysql-server/root_password_again password root" | debconf-set-selections
RUN DEBIAN_FRONTEND=noninteractive apt-get install -y mysql-server-5.7

Worked for me on Dockerfile

@29aparna

Copy link
Copy Markdown

@saklyayoub Could you provide the complete docker file for with the mentioned configuration.

@saklyayoub

saklyayoub commented Aug 29, 2018

Copy link
Copy Markdown

@Kira9204

Kira9204 commented Jan 4, 2019

Copy link
Copy Markdown

I couldn't get it to work unless i added "usermod -d"
My dockerfile (remember to add \):
`
RUN echo "Installing MYSQL..."
RUN { \
echo "mysql-server mysql-server/root_password password root" ; \
echo "mysql-server mysql-server/root_password_again password root" ; \
} | debconf-set-selections \
&& apt-get update && apt-get install -y mysql-server \
&& sed -i 's/127.0.0.1/0.0.0.0/g' /etc/mysql/mysql.conf.d/mysqld.cnf \
&& chown -R mysql:mysql /var/lib/mysql \
&& usermod -d /var/lib/mysql mysql \
&& /etc/init.d/mysql restart

COPY ./docker_files/mysql_restart.sh /root/mysql_restart.sh
RUN /root/mysql_restart.sh \
&& mysql --user=root --password=root --execute="CREATE USER 'admin'@'%' IDENTIFIED BY 'admin';" \
&& mysql --user=root --password=root --execute="CREATE DATABASE testdb CHARACTER SET utf8 COLLATE utf8_bin;" \
&& mysql --user=root --password=root --execute="GRANT SELECT,INSERT,UPDATE,DELETE,CREATE,DROP,ALTER,INDEX on testdb.* TO 'admin'@'%' IDENTIFIED BY 'admin';" \
&& mysql --user=root --password=root --execute="flush privileges;"
`

@fcarrero

Copy link
Copy Markdown

hey, any example for installing mysql8 Non-Interactive Installation over ubuntu 18.8. ??

@grzegorznowak

Copy link
Copy Markdown

hey, any example for installing mysql8 Non-Interactive Installation over ubuntu 18.8. ??

Yeah we've been looking for that as well @fcarrero and fortunately there's a sample that almost works out of the box, that I found literally yesterday evening and have folded it out a bit more since then:

https://geert.vanderkelen.org/2018/mysql8-unattended-dpkg/

For our molecule automation we've assembled Ubuntu Bionic working-confirmed version of that into:

https://github.com/spottmedia/shareable-ansible-toolkit/tree/master

And for completeness the crucial bit that did make it go over the line on Ubuntu was proper GPG key registration that the original wasn't coming through with (probably due to software-abrasive passage of time), see:

https://github.com/spottmedia/shareable-ansible-toolkit/blob/master/roles/dev-mysql8/tasks/main.yml

the rest is smart usage of debconf that Geert figured out there.

@sheikhwaqas

Copy link
Copy Markdown
Author

hey, any example for installing mysql8 Non-Interactive Installation over ubuntu 18.8. ??

Hey @fcarrero, I haven't tested MySQL 8 with Ubuntu 18.8 yet. But as soon as I do, there will definitely be either a new gist coming or will update this to take care of both installations :).

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment