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;
重启服务,就可以远程连接了。