首先这里我来介绍下MySQL的几种安装方式:
一共三种,RPM安装包、二进制包安装以及源码安装
当然,不同的安装方式也有优缺点,下面分别介绍下:
优点: 安装简单,适合初学者学习使用
缺点: 需要单独下载客户端和服务器;安装路径不灵活,默认路径不能修改,一台服务器只能安装一个版本的MySQL软件。
文件布局:
/usr/bin (客户端程序和脚本)
/usr/sbin (mysqld服务器)
/var/lib/mysql (日志文件和数据库)
/usr/share/man (Linux 文档页)
/usr/include/mysql (包含(头)文件)
/usr/lib/mysql (库文件)
/usr/share/mysql (错误信息和字符集文件)
优点: 安装简单;灵活性好;单台服务器可以安装多个版本的 MySQL 软件。
缺点: 已经经过编译,性能不如源码编译得好;不能灵活定制编译参数。
文件布局:
bin (客户端程序、mysqld服务器和实用程序)
docs (文档)
man (Linux 文档页)
include (包含(头)文件)
lib (库文件)
share (错误消息和字典、安装数据库的SQL文件)
support-files (其他支持文件)
优点: 与平台无关,可按需定制编译,最灵活;性能最好;单台服务器可以安装多个版本的 MySQL 软件。
缺点: 安装过程较复杂;编译时间长
文件布局:
bin (客户端程序、mysqld服务器和实用程序)
docs (文档)
man (Linux 文档页)
include (包含(头)文件)
lib (库文件)
share (错误消息和字典、安装数据库的SQL文件)
support-files (其他支持文件)
这里如果想要使用RPM或者二进制安装方式,可以参考如下链接文章:https://blog.csdn.net/weixin_63172698/article/details/132559298?spm=1001.2014.3001.5501
二进制与源码的本质安装区别在于,源码安装多了:源代码程序编译参数配置、编译和安装二进制的过程,然而最耗时的就是这三步,下面我们来介绍源码安装方式。
首先咱们介绍下源码安装方式与其他两种安装方式的区别,即为什么要使用源码安装方式?
按需定制编译,最灵活;性能最好,这三点是最重要的原因之一,以及可以安装到自己想要安装的目录、并且支持单台服务器安装多个版本的MySQL。
就比如官网直接下载下来的二进制安装包是按照一般情况下配置好了编译的默认参数,有些默认编译配置可能并不是想要的,这时就要在编译阶段按需自定义编译参数,制定符合自己需求的二进制MySQL安装包,如:只编译支持utf8mb4编码。
对于安装方式的选择:
这里不想安装最简单却不够灵活的RPM包,又不想暗黄复杂费时的源码包的情况下建议选择二进制安装。
当然对数据库性能要求高,同时能够灵活地定制编码参数选项地情况建议选择源码安装。
首先我介绍下我目前演示地安装环境:
这里建议硬盘40G以上,运存4G,具体看自己电脑情况而定,20G大概率不够用。
首先,将Mysql对应版本的源码包下载下来:
网站地址:https://downloads.mysql.com/archives/community/
这里建议使用迅雷进行下载安装。
这里我使用的是termius远程连接工具,当然,这里也可以使用其他的,比如:xshell、moba等等,这里就不一一介绍了,主要是为了通过xftp将本机与虚拟机进行连接,然后实现文件的传输。
这里为termius上传文件过程:
首先更改路径找到自己的包
找到要进行文件传输的虚拟机进行建立连接:
这里即可看到已经成功建立了连接。
这里等待下面进度条完成。
这里可以看到文件传输完毕。
当然使用别的远程连接工具进行文件传输的原理是一样的,同样是先使用xftp建立连接,这里就不具体细讲了。
这里我们就可以看到已经上传好的文件。
接着我们进行解压文件:
[root@localhost src]# tar -zxvf mysql-boost-8.0.18.tar.gz
这里可以看到解压之后文件特别多:
接下来在进行编译之前我们首先下载它的依赖:
[root@localhost ~]# yum install -y cmake3 git gcc-c++ ncurses-devel perl-Data-Dumper boost boost-doc boost-devel bzip2 openssl-devel libtirpc-devel.x86_64
由于编译MySQL时对gcc的版本要求是5.3以上,所以我们需要先升级一下gcc的版本,因为yum安装目前最新版本只到4.8.5。
升级gcc版本的方式主要有两种,一种是下载源码包进行编译安装,一种是使用yum安装devtoolset包,目前devtoolset包里的gcc版本为5.3.1。
而源码安装的方式比较灵活可以选择任意版本,但非常耗时。这里两种方式都会介绍,可以自行视情况选择。这里我们即可看到:
这里使用源码进行安装gcc新版:
这里直接自带了gcc的9.2.0的源码包,所以直接用,如果没有自带,则自行进行下载:
wget http://ftp.gnu.org/gnu/gcc/gcc-9.1.0/gcc-9.1.0.tar.gz
如果自带了,直接进行解压即可:
[root@localhost /usr/local/src]# tar -xzvf gcc-9.1.0.tar.gz
这里即可看到源码解压完毕:
下一步我们进入解压后的目录,运行download_prerequisites脚本,该脚本会自动下载编译时所需要的依赖文件和库:
[root@localhost /usr/local/src]# cd gcc-9.2.0
[root@localhost /usr/local/src/gcc-9.2.0]# ./contrib/download_prerequisites
这里即可看到执行完毕。
接下来我们建立输出目录,将所有的中间文件都放到该目录下:
[root@localhost /usr/local/src/gcc-9.2.0]# mkdir gcc-build-9.2.0
下面我们进入新建的目录,并完成编译配置:
[root@localhost /usr/local/src/gcc-9.2.0]# cd gcc-build-9.2.0
[root@localhost /usr/local/src/gcc-9.2.0/gcc-build-9.2.0]# ../configure -enable-checking=release -enable-languages=c,c++ -disable-multilib
下面进行接着就可以进行编译安装了:
[root@localhost /usr/local/src/gcc-9.2.0/gcc-build-9.2.0]# make && make install
这一步耗时会比较久,大概1-2个小时······
倒数第二步:创建软件链接,覆盖/usr/bin下的gcc相关命令,因为编译MySQL时默认会去/usr/bin目录下找gcc相关的命令:
[root@localhost ~]# ln -sf /usr/local/bin/* /usr/bin/
最后验证一下gcc版本是否为9.2.0,如下代表安装成功:
[root@localhost ~]# gcc -v
Using built-in specs.
COLLECT_GCC=gcc
COLLECT_LTO_WRAPPER=/usr/local/libexec/gcc/x86_64-pc-linux-gnu/9.1.0/lto-wrapper
Target: x86_64-pc-linux-gnu
Configured with: ../configure -enable-checking=release -enable-languages=c,c++ -disable-multilib
Thread model: posix
gcc version 9.2.0 (GCC)
[root@localhost ~]#
# 创建数据文件存放目录
[root@localhost /usr/local/src]# mkdir -p /data/mysql
[root@localhost /usr/local/src]# cd mysql-8.0.18/
# 新建目录,存放编译产生的中间文件。因为不允许在源码目录下进行编译
[root@localhost /usr/local/src/mysql-8.0.18]# mkdir builder
[root@localhost /usr/local/src/mysql-8.0.18]# cd builder/
[root@localhost /usr/local/src/mysql-8.0.18/builder]# cmake3 ../ -DCMAKE_INSTALL_PREFIX=/usr/local/mysql -DMYSQL_DATADIR=/data/mysql -DSYSCONFDIR=/etc -DMYSQL_USER=mysql -DWITH_MYISAM_STORAGE_ENGINE=1 -DWITH_INNOBASE_STORAGE_ENGINE=1 -DMYSQL_UNIX_ADDR=/tmp/mysql.sock -DMYSQL_TCP_PORT=3306 -DEXTRA_CHARSETS=all -DDEFAULT_CHARSET=utf8mb4 -DDEFAULT_COLLATION=utf8mb4_general_ci -DWITH_DEBUG=0 -DMYSQL_MAINTAINER_MODE=0 -DWITH_SYSTEMD=1 -DDOWNLOAD_BOOST=1 -DWITH_BOOST=../boost
[root@localhost /usr/local/src/mysql-8.0.18/builder]# make && make install
编译安装会比较耗时,大概1-2个小时······
cmake3命令所使用的参数说明:
具体参考官方文档:
https://dev.mysql.com/doc/refman/8.0/en/source-configuration-options.html
[root@localhost ~]# groupadd mysql
[root@localhost ~]# useradd -M -g mysql -s /sbin/nologin mysql
[root@localhost ~]# chown -R mysql:mysql /usr/local/mysql/
[root@localhost ~]# chown -R mysql:mysql /data/mysql/
[root@localhost ~]# vim /etc/my.cnf
[mysqld]
basedir=/usr/local/mysql
datadir=/data/mysql
socket=/tmp/mysql.sock
[mysqld_safe]
log-error=/var/log/mysqld/mysqld.log
pid-file=/var/run/mysqld/mysql.pid
[root@localhost ~]# mkdir -p /var/log/mysqld /var/run/mysqld
[root@localhost ~]# chown -R mysql:mysql /var/log/mysqld
[root@localhost ~]# chown -R mysql:mysql /var/run/mysqld
[root@localhost ~]# vim /etc/profile
export MYSQL_HOME=/usr/local/mysql
export PATH=$PATH:$MYSQL_HOME/bin
[root@localhost ~]# source /etc/profile
[root@localhost ~]# mysql --version # 验证配置是否成功
mysql Ver 8.0.18 for Linux on x86_64 (Source distribution)
[root@localhost ~]#
[root@localhost ~]# mysqld --initialize --user=mysql --basedir=/usr/local/mysql/ --datadir=/data/mysql
初始化成功后会生成root账户的默认密码。
将该密码复制并保存,因为后面需要使用该密码登录到MySQL中修改密码。
[root@localhost ~]# cp /usr/local/src/mysql-8.0.18/builder/scripts/mysqld.service /usr/lib/systemd/system/
[root@localhost ~]# chown 775 /usr/lib/systemd/system/mysqld.service
[root@localhost ~]# netstat -lntp |grep 3306
tcp6 0 0 :::33060 :::* LISTEN 27363/mysqld
tcp6 0 0 :::3306 :::* LISTEN 27363/mysqld
[root@localhost ~]#
[root@localhost ~]# mysql -uroot -pmXyfy/g8\)aus
mysql> ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'your_password'; # 重置密码
mysql> use mysql;
mysql> update user set host ='%' where user='root'; # 开放远程登录
mysql> FLUSH PRIVILEGES; # 刷新修改
到这里,那么MySQL源码安装已经配置完毕即可使用。
这里我们需要使用MySQL命令客户端或图形化界面工具来完成,这里我们主要讲解SQL语句:
CREATE DATABASE school CHARACTER SET utf8;
USE school;
CREATE TABLE Student (
Id INT(10) PRIMARY KEY AUTO_INCREMENT,
Name VARCHAR(20) NOT NULL UNIQUE,
Sex VARCHAR(4),
Birth YEAR,
Department VARCHAR(20),
Address VARCHAR(50)
);
CREATE TABLE Score (
Id INT(10) PRIMARY KEY AUTO_INCREMENT,
StuId INT(10) NOT NULL,
CName VARCHAR(20),
Grade INT(10)
);
CREATE USER 'tom'@'%' IDENTIFIED BY 'Mysql@123';
GRANT ALL PRIVILEGES ON school.* TO 'tom'@'%';
FLUSH PRIVILEGES;
这里授予tom用户对school数据库的所有权限,并设置允许从任何地方登录。
vim /etc/my.cnf
systemctl restart mysqld
mysql>use mysql;
mysql>update user set authentication_string='ZY@123666' where user='root';
mysql>exit
systemctl restart mysqld