Linux 中使用压缩包方式安装 MySQL 数据库

原创 mysqllinux

使用压缩包安装 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 文件中开头的 basedirdatadir,和 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;

重启服务,就可以远程连接了。

如果觉得这对你有用,请随意赞赏,给与作者支持
评论 0
最新评论