In this article, we’ll discuss binary tarball MySQL installation. We will discuss MySQL 8 installation using binary tarballs and install MySQL 8 on CentOS 7 using binary tarballs. Binary tarballs based installation has its own pros and cons, we will go through that. Installation from binary tarballs is independent of the Linux distribution or the init system the distribution uses. This means the same installation method works on RPM and dead based systems for example, but it will also work on more exotic distributions like Gen 2 as well. There is a binary tarball for macOS available too and the installation procedure is not much different, this method needs a more manual word. The mysql_install_db script was deprecated in MySQL 5.7 and is removed from MySQL 8. The initial database creation can be done with mysqld –initialize command. Now that we will install MySQL be manually we will use mysqld –initialize command to create an empty database.
First let’s do some cleanup. We will remove the very old version of mariadb-libs which provides my.cnf which would conflict with ours.
Remove Mariadb libs:
[root@localhost ~]# sudo yum remove -y mariadb-libs
Download the source tarball of MySQL community survey 8.0
[root@localhost ~]# curl -L -O https://dev.mysql.com/get/Downloads/MySQL-8.0/mysql-8.0.11-linux-glibc2.12-x86_64.tar.gz % Total % Received % Xferd Average Speed Time Time Time Current Dload Upload Total Spent Left Speed 0 0 0 0 0 0 0 0 --:--:-- 0:00:01 --:--:-- 0 100 575M 100 575M 0 0 7726k 0 0:01:16 0:01:16 --:--:-- 8516k
[root@localhost ~]# ll -rw-r--r--. 1 root root 603019898 Jul 23 10:31 mysql-8.0.11-linux-glibc2.12-x86_64.tar.gz
The tarball is not downloaded so let’s unpack it to usr/local
[root@localhost ~]# sudo tar xvfz mysql-8.0.11-linux-glibc2.12-x86_64.tar.gz -C /usr/local/
Completing the pre-reqs
let’s install libaio.
[root@localhost ~]# sudo yum -y install libaio
Create a MySQL group, this is normally done by the packages but because we are installing it manually from binary tarball now we need to do it.
[root@localhost ~]# sudo groupadd mysql
Let’s create a MySQL user you
[root@localhost ~]# sudo useradd -r -g mysql -s /bin/false mysql
verify mysql user is there
[root@localhost ~]# getent passwd | grep mysql mysql:x:988:1001::/home/mysql:/bin/false
got /usr/local and create a symlink and then check it
[root@localhost ~]# cd /usr/local [root@localhost local]# sudo ln -s mysql-8.0.11-linux-glibc2.12-x86_64 mysql [root@localhost local]# ls -la mysql lrwxrwxrwx. 1 root root 35 Jul 23 15:08 mysql -> mysql-8.0.11-linux-glibc2.12-x86_64
create MySQL files directory which will hold the data set ownership and permissions while standing in /usr/local/
[root@localhost local]# sudo mkdir mysql-files [root@localhost local]# sudo chown mysql:mysql mysql-files [root@localhost local]# sudo chmod 750 mysql-files
Initialize MySQL
Go to mysql directory and Initialize mysqld, on earlier versions this was called mysql_installed_db
[root@localhost local]# cd mysql [root@localhost mysql]# sudo ./bin/mysqld --initialize --user=mysql 2020-07-23T12:12:10.028247Z 0 [System] [MY-013169] [Server] /usr/local/mysql-8.0.11-linux-glibc2.12-x86_64/bin/mysqld (mysqld 8.0.11) initializing of server in progress as process 25014 2020-07-23T12:12:15.470538Z 5 [Note] [MY-010454] [Server] A temporary password is generated for root@localhost: Hqn+jK6lfzNS 2020-07-23T12:12:18.875370Z 0 [System] [MY-013170] [Server] /usr/local/mysql-8.0.11-linux-glibc2.12-x86_64/bin/mysqld (mysqld 8.0.11) initializing of server has completed
Note that the temporary root password is generated which in my case is (root@localhost: Hqn+jK6lfzNS)
Copy the init script from support-files to /etc/init.d
[root@localhost mysql]# sudo cp ./support-files/mysql.server /etc/init.d/
start mysql server with init file we just copied
[root@localhost mysql]# sudo /etc/init.d/mysql.server start Starting MySQL.Logging to '/usr/local/mysql/data/localhost.localdomain.err'. . SUCCESS!
Now connect ro mysql by providing the temporary passwd generated earlier
[root@localhost mysql]# ./bin/mysql -uroot -p Enter password: Welcome to the MySQL monitor. Commands end with ; or \g. Your MySQL connection id is 8 Server version: 8.0.11 Copyright (c) 2000, 2018, 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. Type 'help;' or '\h' for help. Type '\c' to clear the current input statement. mysql>
Let’s chenge the temporary passwd for the root user.
mysql> alter user 'root'@'localhost' identified by 'My_root_pass1!'; Query OK, 0 rows affected (0.07 sec)
Check socket file location:
mysql> show variables like 'socket'; +---------------+-----------------+ | Variable_name | Value | +---------------+-----------------+ | socket | /tmp/mysql.sock | +---------------+-----------------+ 1 row in set (0.01 sec)
To avoid having to type the path name of client programs always when you are working with MySQL, you can add the /usr/local/mysql/bin directory to your PATH variable:
[root@localhost mysql]# export PATH=$PATH:/usr/local/mysql/bin
[root@localhost mysql]# ps -ef | grep mysql root 25130 1 0 15:16 pts/1 00:00:00 /bin/sh /usr/local/mysql/bin/mysqld_safe --datadir=/usr/local/mysql/data --pid-file=/usr/local/mysql/data/localhost.localdomain.pid mysql 25215 25130 1 15:16 pts/1 00:00:42 /usr/local/mysql/bin/mysqld --basedir=/usr/local/mysql --datadir=/usr/local/mysql/data --plugin-dir=/usr/local/mysql/lib/plugin --user=mysql --log-error=localhost.localdomain.err --pid-file=/usr/local/mysql/data/localhost.localdomain.pid root 26171 21375 0 16:21 pts/1 00:00:00 mysql -uroot -px xxxxxxxxxxxx root 26191 25365 0 16:23 pts/2 00:00:00 grep --color=auto mysq