DEV Community

Oyolola toni
Oyolola toni

Posted on

Step-by-step guide for how to install an SQL server on Ubuntu 22.04

Step-by-step guide for how to install an SQL server on Ubuntu 22.04

Installing the SQL server

Firstly update your desktop and install the SQL server

sudo apt-get update

sudo apt-get install mysql-server
Enter fullscreen mode Exit fullscreen mode

Verify that the server is running with the following command

sudo systemctl start mysql.service

sudo systemctl status mysql.service
Enter fullscreen mode Exit fullscreen mode

The result should look like this:

live MySQL server

Configure MySQL

You will need to set the password for the root account if you are running the installation on an Ubuntu machine because authentication is deactivated on Ubuntu by default. So as to avoid an error, you’ll need to configure the root account authentication method

sudo mysql
Enter fullscreen mode Exit fullscreen mode

Change the password for root using ALTER USER:

mysql> ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'password';
Enter fullscreen mode Exit fullscreen mode

Exit after making this change

mysql> exit
Enter fullscreen mode Exit fullscreen mode

Secure your MySQL root user account

In securing your server, you will need to execute the following command to setup your password policy

sudo mysql_secure_installation
Enter fullscreen mode Exit fullscreen mode

The password policy given will apply to subsequent users accounts created.

The next is to authenticate using the root user’s password:

mysql -u root -p
Enter fullscreen mode Exit fullscreen mode

This command gives the root user access to the MySQL cli, and also to interact directly with the MySQL server.

Then go back to using the default authentication method using this command:

mysql> ALTER USER 'root'@'localhost' IDENTIFIED WITH auth_socket;
Enter fullscreen mode Exit fullscreen mode

This will allow you connect using the sudo mysql command again.

Creating default/new MySQL user and its privileges

It is bad OpSec to use the root account to perform regular day-to-day action on the database. The best option is to create a user account with limited privileges.

This is first done by logging in as root with the following command:

sudo mysql
Enter fullscreen mode Exit fullscreen mode

Alternatively, if you have previously set a password for the root account use this instead:

mysql -u root -p
Enter fullscreen mode Exit fullscreen mode

Next create a new user:

mysql> CREATE USER 'username'@'host' IDENTIFIED WITH authentication_plugin BY 'password';
Enter fullscreen mode Exit fullscreen mode

After entering the command, follow the prompt and fill in your username, hostname (localhost if you’re using Ubuntu).

For authentication, you have the options of using auth_socket plugin which provides string security without requiring a password but has a shortcoming of preventing remote connections,authentication_plugin plugin, caching_sha2_password which is the default MySQL plugin, but its shortfall is that some versions of PHP are not compatible with it or mysql_native_password plugin.

mysql> CREATE USER 'jack'@'localhost' IDENTIFIED WITH mysql_native_password BY 'password';
Enter fullscreen mode Exit fullscreen mode

You can also alter an existing user using:

mysql> ALTER 'jack'@'hostname' IDENTIFIED WITH mysql_native_password BY 'password';
Enter fullscreen mode Exit fullscreen mode

Assigning privileges

After creating the user, you can assign it with privileges with the following syntax.

mysql> GRANT PRIVILEGE ON database.table TO 'username'@'host';
Enter fullscreen mode Exit fullscreen mode

Using GRANT ALL PRIVILEGES instead will give the user superuser privileges similar to that of root. Such flag will otherwise defeat the purpose of creating a separate user account from root.

The PRIVILEGE variable represents what action a user is allowed to perform. Global privileges can also be granted by replacing database.table with *.

Below we will be granting user permissions to create, modify, delete, insert, select, update and delete data from a table by using CREATE, ALTER, DROP, INSERT, SELECT, UPDATE and DELETE respectively.

mysql> GRANT CREATE, ALTER, DROP, INSERT, UPDATE, DELETE, SELECT on *.* TO 'jack'@'hostname' WITH GRANT OPTION;
Enter fullscreen mode Exit fullscreen mode

The WITH GRANT OPTION flag allows the user to grant privileges it has to other users.

Next we will use the FLUSH PRIVILEGES command to empty the cache and free up memory:

mysql> FLUSH PRIVILEGES;
Enter fullscreen mode Exit fullscreen mode

After you can exit the MySQL cli

mysql> exit
Enter fullscreen mode Exit fullscreen mode

You can now log in back using your credentials

mysql -u jack -p
Enter fullscreen mode Exit fullscreen mode

Testing the MySQL server

You can now verify that the MySQL server is running with the following command:

systemctl status mysql.service
Enter fullscreen mode Exit fullscreen mode

Alternatively, you can connect to the MySQL database using the administrative command tool mysqladmin.

sudo mysqladmin -p -u jack version
Enter fullscreen mode Exit fullscreen mode

Top comments (0)