8i | 9i | 10g | 11g | 12c | 13c | 18c | 19c | 21c | 23ai | 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.
- Installation
- Start the MySQL Service (mysqld)
- Basic Configuration
- Secure the Installation
- Create Database
- SELinux
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:
- Linux : Using a Yum Repository to Install MySQL
- MySQL Documentation: MySQL Reference Manuals
- How to Run MySQL as a Normal User
- Secure Deployment Guide
Hope this helps. Regards Tim...