How To Install MySQL on CentOS 8

This tutorial explains how to install MySQL version 8 on a CentOS 8 server.

The origin of this tutorial/article was written by Mark Drake from DigitalOcean.com (Updated on March 19, 2020) at https://www.digitalocean.com/community/tutorials/how-to-install-mysql-on-centos-8

Introduction

MySQL is an open-source database management system, commonly installed as part of the popular LEMP (Linux, Nginx, MySQL/MariaDB, PHP/Python/Perl) stack. It implements the relational model and Structured Query Language (SQL) to manage and query data.

This tutorial explains how to install MySQL version 8 on a CentOS 8 server.

Prerequisites

To complete this tutorial, you will need a server running CentOS 8. This server should have a non-root user with administrative privileges and a firewall configured with firewalld. To set this up, see our Initial Server Setup guide for CentOS 8.

Step 1 — Installing MySQL

On CentOS 8, MySQL version 8 is available from the default repositories.

Run the following command to install the mysql-server package and a number of its dependencies:

sudo dnf install mysql-server

When prompted, press y and then ENTER to confirm that you want to proceed:

Output. . .
Install  49 Packages

Total download size: 46 M
Installed size: 252 M
Is this ok [y/N]: <mark>y</mark>

With that, MySQL is installed on your server but it isn’t yet operational. The package you just installed configures MySQL to run as a systemd service named mysqld.service. In order to use MySQL, you will need to start it with the systemctl command:

sudo systemctl start mysqld.service

To check that the service is running correctly, run the following command. Note that for many systemctl commands — including start and, as shown here, status — you don’t need to include .service after the service name:

sudo systemctl status mysqld

If MySQL was successfully started, the output will show that the MySQL service is active:

Outputmysqld.service - MySQL 8.0 database server
   Loaded: loaded (/usr/lib/systemd/system/mysqld.service; enabled; vendor preset: disabled)
   Active: <mark>active</mark> (running) since Thu 2020-03-12 14:07:41 UTC; 1min 7s ago
 Main PID: 15723 (mysqld)
   Status: "Server is operational"
    Tasks: 38 (limit: 5056)
   Memory: 474.2M
   CGroup: /system.slice/mysqld.service
           └─15723 /usr/libexec/mysqld --basedir=/usr

Mar 12 14:07:32 cent-mysql-3 systemd[1]: Starting MySQL 8.0 database server...
Mar 12 14:07:32 cent-mysql-3 mysql-prepare-db-dir[15639]: Initializing MySQL database
Mar 12 14:07:41 cent-mysql-3 systemd[1]: Started MySQL 8.0 database server.

Next, set MySQL to start whenever the server boots up with the following command:

sudo systemctl enable mysqld

Note: If you ever want to change this behavior and disable MySQL from starting up at boot, you can do so by running:

sudo systemctl disable mysqld

MySQL is now installed, running, and enabled on your server. Next, we’ll go over how to harden your database’s security using a shell script that came preinstalled with your MySQL instance.

Step 2 — Securing MySQL

MySQL includes a security script that allows you to change some default configuration options in order to improve MySQL’s security.

To use the security script, run the following command:

sudo mysql_secure_installation

This will take you through a series of prompts asking if you want to make certain changes to your MySQL installation’s security options. The first prompt will ask whether you’d like to set up the Validate Password Plugin, which you can use to test the strength of your MySQL password.

If you elect to set up the Validate Password Plugin, the script will ask you to choose a password validation level. The strongest level — which you select by entering 2 — will require your password to be at least eight characters long and include a mix of uppercase, lowercase, numeric, and special characters:

OutputSecuring the MySQL server deployment.

Connecting to MySQL using a blank password.

VALIDATE PASSWORD COMPONENT can be used to test passwords
and improve security. It checks the strength of password
and allows the users to set only those passwords which are
secure enough. Would you like to setup VALIDATE PASSWORD component?

Press y|Y for Yes, any other key for No: <mark>Y</mark>

There are three levels of password validation policy:

LOW    Length >= 8
MEDIUM Length >= 8, numeric, mixed case, and special characters
STRONG Length >= 8, numeric, mixed case, special characters and dictionary                  file

Please enter 0 = LOW, 1 = MEDIUM and 2 = STRONG: <mark>2</mark>

Regardless of whether you choose to set up the Validate Password Plugin, the next prompt will be to set a password for the MySQL root user. Enter and then confirm a secure password of your choice:

OutputPlease set the password for root here.


New password: 

Re-enter new password: 

If you used the Validate Password Plugin, you’ll receive feedback on the strength of your new password. Then the script will ask if you want to continue with the password you just entered or if you want to enter a new one. Assuming you’re satisfied with the strength of the password you just entered, enter Y to continue the script:

OutputEstimated strength of the password: 100 
Do you wish to continue with the password provided?(Press y|Y for Yes, any other key for No) : <mark>Y</mark>

Following that, you can press Y and then ENTER to accept the defaults for all the subsequent questions. This will remove some anonymous users and the test database, disable remote root logins, and load these new rules so that MySQL immediately respects the changes you have made.

With that, you’ve installed and secured MySQL on your CentOS 8 server. As a final step, we will test that the database is accessible and working as expected.

Step 3 — Testing MySQL

You can verify your installation and get information about it by connecting with the mysqladmin tool, a client that lets you run administrative commands. Use the following command to connect to MySQL as root (-u root), prompt for a password (-p), and return the installation’s version:

mysqladmin -u root -p version

You will see output similar to this:Output

mysqladmin  Ver 8.0.17 for Linux on x86_64 (Source distribution)
Copyright (c) 2000, 2019, Oracle and/or its affiliates. All rights reserved.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Server version		8.0.17
Protocol version	10
Connection		Localhost via UNIX socket
UNIX socket		/var/lib/mysql/mysql.sock
Uptime:			2 hours 52 min 37 sec

Threads: 2  Questions: 20  Slow queries: 0  Opens: 131  Flush tables: 3  Open tables: 48  Queries per second avg: 0.001

This indicates your installation was successful.

If you’d like to connect to MySQL and begin adding data to it, run the following:

mysql -u root -p

Like the previous mysqladmin command, this command includes the -u option, which allows you to specify the user you’d like to connect as (root in this case), and the -p option, which tells the command to prompt you for the user password you set in the previous step.

After you enter your root MySQL user’s password, you will see the MySQL prompt:

mysql>

From there, you can begin using your MySQL installation to create and load databases and start running queries.

Conclusion

By following this tutorial, you’ve installed and secured MySQL on a CentOS 8 server. From here, you could install Nginx and PHP to have a fully operational LEMP stack on your server.

To learn more about using MySQL, we encourage you to review the official documentation.