Linux 中使用压缩包方式安装 MySQL 数据库
使用压缩包安装 mysql 的好处是很多的,我们的安装文件存放的位置,数据文件和配置文件存放的位置都可以自定义,并且可控,不像使用源安装的时候安装文件、配置文件和数据文件散落在系统的各处。
下载 MySQL tar.gz 包
选当前 5.7 最新版本 MySQL Community Server 5.7.23 用作演示。
下载地址:https://dev.mysql.com/downloads/mysql/5.7.html#downloads
注意 "Select Operating System" 这些选项,如果是选择特定的 Linux 操作系统,实际上下载的是安装源,我们要使用 tar.gz 压缩包的方式来安装,选择与特定 Linux 发行版无关的 Linux Generic,然后选择 64 位的包。下载 "Compressed TAR Archive"。

点击 Download 之后跳转页面,直接拉到下面,点击链接 No thanks, just start my download. 即开始下载。
解压拷贝至 /opt
演示中把 MySQL 安装在 /opt/mysql 下。
cd /opt
tar -zxvf mysql-5.7.23-linux-glibc2.12-x86_64.tar.gz
mv mysql-5.7.23-linux-glibc2.12-x86_64 mysql
安装 MySQL 的依赖库 libaio
一般服务器版或最小化安装可能没有 MySQL 必需的 libaio 库。
Ubuntu 下
使用命令 apt-cache search libaio 搜索库,如果搜索没有显示结果,就安装。
安装命令:
apt-get install libaio1
ubuntu 下这个库名叫 libaio1。
注:如果报错,则需要使用更新命令 apt-get update 更新系统缓存。
CentOS 下
yum install libaio -y
卸载系统自带的 MariaDB
CentOS 7 默认带了 MariaDB 的源和配置文件,如果要安装 MySQL,必须先把系统自带的这些清理干净,不然后面会有一些冲突。
rpm -qa | grep mariadb
会列出一个 mariadb-libs-5.5.56-2.el7.x86_64 包,使用 rpm -e --nodeps 卸载。

rpm -e --nodeps mariadb-libs-5.5.56-2.el7.x86_64
添加 mysql 用户组和用户
groupadd mysql
useradd -r -g mysql -s /bin/false mysql
授权文件
在 /opt/mysql 下创建数据文件夹 data。
mkdir /opt/mysql/data
然后修改 mysql 文件夹的所属用户组和用户。
cd /opt
chmod 755 mysql
chown -R mysql:mysql mysql
配置 /etc/my.cnf
上面我们把系统清理干净了,并且 Linux 上 MySQL 的压缩包里没有 my.cnf 文件,我们直接在 /opt/mysql/ 下新建一个文件:touch my.cnf
或者我们从其它正常的服务上拷贝一份过来,这里提供一个样本。
# For advice on how to change settings please see
# http://dev.mysql.com/doc/refman/5.7/en/server-configuration-defaults.html
# *** DO NOT EDIT THIS FILE. It's a template which will be copied to the
# *** default location during install, and will be replaced if you
# *** upgrade to a newer version of MySQL.
[client]
default-character-set=utf8mb4
[mysql]
default-character-set=utf8mb4
[mysqld]
# Remove leading # and set to the amount of RAM for the most important data
# cache in MySQL. Start at 70% of total RAM for dedicated server, else 10%.
# innodb_buffer_pool_size = 128M
# Remove leading # to turn on a very important data integrity option: logging
# changes to the binary log between backups.
# log_bin
# These are commonly set, remove the # and set as required.
# basedir = .....
# datadir = .....
# port = .....
# server_id = .....
basedir = /opt/mysql
datadir = /opt/mysql/data
port = 3306
socket        = /tmp/mysql.sock
character-set-server=utf8mb4
collation-server=utf8mb4_general_ci
init_connect='SET NAMES utf8mb4'
skip-character-set-client-handshake=true
default-storage-engine=INNODB
# Remove leading # to set options mainly useful for reporting servers.
# The server defaults are faster for transactions and fast SELECTs.
# Adjust sizes as needed, experiment to find the optimal values.
# join_buffer_size = 128M
# sort_buffer_size = 2M
# read_rnd_buffer_size = 2M 
sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES 
max_connections = 100
max_allowed_packet = 1024M
注意配置 basedir 指向 mysql 文件夹,datadir 指向我们创建的 MySQL 数据存储目录。
因为我要存储 emoji 表情,所以把默认的编码都设置成 utf8mb4 了,你可能只想要 utf8。
MySQL 5.7 的更多配置项可以参考 http://dev.mysql.com/doc/refman/5.7/en/server-configuration-defaults.html
初始化数据库
/opt/mysql/bin/mysqld --initialize --user=mysql --basedir=/opt/mysql --datadir=/opt/mysql/data
- --user 启动 mysql 的用户
- --basedir mysql 安装目录
- --datadir mysql 数据仓库目录
初始化之后,会在最后一行看到 root 账号的初始密码,先复制记住,一会要登录修改密码,注意前面没有空格。

创建 SSL 证书
/opt/mysql/bin/mysql_ssl_rsa_setup --datadir=/opt/mysql/data

注册开机启动服务
拷贝操作之前,先修改 /opt/mysql/support-files/mysql.server 文件中开头的 basedir 和 datadir,和 my.cnf 中的目录一样。
basedir = /opt/mysql
datadir = /opt/mysql/data

如果只想注册服务,不想开机启动,可以不执行 chkconfig。
cp /opt/mysql/support-files/mysql.server /etc/init.d/mysql
chmod +x /etc/init.d/mysql
chkconfig mysql on

然后就可以使用 systemctl {start|stop|restart} mysql 命令来操作 MySQL 了。
如果是用 service 命令就是 service mysql {start|stop|restart} 了。
可以把 /opt/mysql/bin 目录配置到环境变量中,这样就可以全局使用 mysql 命令了。
# vim /etc/profile
export PATH=$PATH:/opt/mysql/bin
# source /etc/profile
修改密码
启动 MySQL 服务,使用初始化时生成的随机密码登录,然后修改默认密码。
ALTER USER 'root'@'localhost' IDENTIFIED BY '123456'
很倒霉的,如果你忘记了初始化时候生成的随机密码,请参考 《mysql5.7.13忘记root密码解决办法》
设置远程登录(可选)
一般开发环境需要远程连接数据库,除了防火墙的阻挡,MySQL 默认只接受本地连接。
mysql> use mysql;
mysql> update user set host='%' where user='root';
mysql> select host,user from user;
重启服务,就可以远程连接了。
