8i | 9i | 10g | 11g | 12c | 13c | 18c | 19c | 21c | 23c | Misc | PL/SQL | SQL | RAC | WebLogic | Linux

Home » Articles » Mysql » Here

MySQL : Installation on Linux

This article gives examples of installing MySQL on both Oracle Linux 6 (RHEL6/CentOS6) and Oracle Linux 7 (RHEL7/CentOS7). It also includes examples of MySQL 5.6 and 5.7 installations. Pick the combination that you need.

Related articles.

Installation

The Secure Deployment Guide suggests installing using the Generic Binary distribution, not the Yum repositories as we do here. It's worth checking out that guide and making a decision for yourself what works best for you.

If you want to run the most recent versions, you can use the MySQL Yum repository available here. Download and install the repository package.

# # Example from installing 5.6 on Oracle Linux 6.
# rpm -Uvh mysql-community-release-el6-4.noarch.rpm

# # Example from installing 5.7 on Oracle Linux 7.
# rpm -Uvh mysql57-community-release-el7-7.noarch.rpm

# # Example from installing 8 on Oracle Linux 7.
# rpm -Uvh mysql80-community-release-el8-3.noarch.rpm

# # Example from installing 8 on Oracle Linux 8.
# rpm -Uvh mysql80-community-release-el8-3.noarch.rpm

# # Example from installing 8 on Oracle Linux 9.
# rpm -Uvh mysql80-community-release-el9-1.noarch.rpm

With the repository in place, you can install the latest version using the same command shown previously.

# # Example from installing 5.6 on Oracle Linux 6.
# yum install -y mysql mysql-server

# # Example from installing 5.7 on Oracle Linux 7.
# yum install -y mysql-community-server

# # Example from installing 8 on Oracle Linux 8 or 9.
# dnf module disable mysql
# dnf install -y mysql-community-server

Start the MySQL Service (mysqld)

Make sure the mysqld service is set to start on reboot and start the service.

# # Oracle Linux 6.
# chkconfig mysqld on
# service mysqld start

# # Oracle Linux 7, 8 and 9.
# systemctl enable mysqld
# systemctl start mysqld

Basic Configuration

Make sure SELinux is running in permissive mode, so you can change the locations of the MySQL files.

# setenforce Permissive

Make the setting permanent, by editing the "/etc/selinux/config" file, setting the following value.

SELINUX=permissive

Create directories to hold data and binary logs.

# mkdir -p /u01/data
# mkdir -p /u01/log_bin
# mkdir -p /u01/tmpdir
# chown -R mysql:mysql /u01
# chmod -R 755 /u01

Stop the mysqld service.

# # Oracle Linux 6
# service mysqld stop

# # Oracle Linux 7, 8 and 9
# systemctl stop mysqld

Edit the "/etc/my.cnf" file, setting the following values in the "[mysqld]" section. Be sure to reflect any path changes you require in these settings.

user=mysql
log_bin=/u01/log_bin/myDB
datadir=/u01/data
tmpdir=/u01/tmpdir

Start the mysqld service.

# # Oracle Linux 6
# service mysqld start

# # Oracle Linux 7, 8 and 9
# systemctl start mysqld

Secure the Installation

As suggested by the startup output, run the "/usr/bin/mysql_secure_installation" script to secure the installation.

# /usr/bin/mysql_secure_installation

The process is a little different depending on the version you are using. For MySQL 5.6 hit return when prompted for the root password and pick all the default options, specifying the new root password along the way.

If you are securing MySQL 5.7 onward, there is a random root password defined by default. You can see what it is by issuing the following command. If there are multiple lines, assume it is the last.

# grep 'temporary password' /var/log/mysqld.log

Once you run the "/usr/bin/mysql_secure_installation" script, you will be asked to supply the root password. Use the password displayed by the previous command. In this version, the default answer to every question is "N", so you will have to explicitly answer "Y/y" for every prompt.

You are now ready to start using MySQL.

There are additional hardening steps you should consider, as described here.

Create Database

The first thing you will probably want to do is create a database. First you must connect to MySQL.

$ mysql --user=root --password
Enter password: 
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 12
Server version: 8.0.30 MySQL Community Server - GPL

Copyright (c) 2000, 2022, Oracle and/or its affiliates.

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

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql>

Create a new database using the following command.

mysql> create database mydatabase;
Query OK, 1 row affected (0.01 sec)

mysql>

You can see the current databases using the following command.

mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mydatabase         |
| mysql              |
+--------------------+
3 rows in set (0.00 sec)

mysql>

To switch between databases using the following command.

mysql> use mydatabase;
Database changed
mysql>

You can make new connections directly to the database as follows.

$ mysql --user=root --database=mydatabase --password
Enter password: 
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 13
Server version: 8.0.30 MySQL Community Server - GPL

Copyright (c) 2000, 2022, Oracle and/or its affiliates.

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

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql> select database();
+------------+
| database() |
+------------+
| mydatabase |
+------------+
1 row in set (0.00 sec)

mysql>

SELinux

If you are using SELinux in "enforcing" mode on the server, moving the datadir and log_bin directories can cause SELinux to complain. You will either need to set it to permissive, explained here, or put the correct policies in place.

Policies already in place due to default installation.

# semanage port -a -t mysqld_port_t -p tcp 3306
# semanage fcontext -a -t mysqld_etc_t "/etc/my.cnf"
# semanage fcontext -a -t mysqld_log_t "/etc/mysqld.log"

The following policies will need to be applied if you've altered the datadir and log_bin directories.

# semanage fcontext -a -t mysqld_db_t "/u01/data(/.*)?"
# restorecon -Rv /u01/data

# semanage fcontext -a -t mysqld_db_t "/u01/log_bin(/.*)?"
# restorecon -Rv /u01/log_bin

For more information see:

Hope this helps. Regards Tim...

Back to the Top.