一、简单了解MySQL数据库的体系结构
(一)MySQL架构图
(二)MySQL体系结构:连接层、服务层、引擎层、存储层
1、连接层--主要职责:身份认证,连接管理,获取权限信息
(1)客户端访问MySQL第一件事就是通过三次握手与服务端建立TCP连接。服务端会有TCP线程池,当收到连接请求后会分配一个线程专门对接这个客户端。
(2)连接成功后,MySQL服务器对TCP中客户端传输过来的账号密码进行身份认证、权限获取。
(3)若是用户名/密码不对,服务端会收到Access denied for user 错误,客户端则执行结束;
2、服务层--服务层主要完成大多数的核心服务功能:
(1)SQL接口(Interface):接收SQL指令,返回查询结果;
(2)解析器(Parser):解析输入的SQL语句,将SQL语句解析成MySQL服务器能认识的语言;
(3)优化器(Optimizer):优化SQL,MySQL会选择自己认为最优的方式(不是程序员认为最优的方式)执行解析后的SQL语句;
(4)缓存(Caches):缓存执行的SQL的查询等结果,不同客户端之间可共享查询缓存。(缓存包括:表缓存、记录缓存、key缓存、权限缓存等)
3、引擎层面
存储引擎真正的负责了MySQL中数据的存储和提取,服务器通过AP和存储引擎进行通信。不同的存储引擎具有不同的功能,这样我们可以根据自己的需要选择合适的存储引擎。
4、储存层
主要是将数据储存在文件系统之上,并完成与储存引擎的交互,所有的数据、数据库、表的定义,表的内容、索引,都是存储在文件系统上,以文件的方式存在并完成与存储引擎的交互。
二、MySQL数据库的安装方法
(一)RPM包安装--测试开发环境
1 离线安装
1.1 下载RPM安装包,上传至服务器
[root@node1 ~]# ll mysql*
-rw-r--r-- 1 root root 584652800 Jul 5 11:12 mysql-5.7.18-1.el7.x86_64.rpm-bundle.tar
1.2 解压RPM软件包
#创建存放解压文件的目录
[root@node01 ~]# mkdir mysql#解压文件
[root@node01 ~]# tar xf mysql-5.7.18-1.el7.x86_64.rpm-bundle.tar -C mysql
1.3 查看解压过后的软件包内容
[root@node01 ~]# cd mysql/[root@node01 mysql]# ll
total 570956
-rw-r--r-- 1 7155 31415 25079412 Mar 20 2017 mysql-community-client-5.7.18-1.el7.x86_64.rpm
-rw-r--r-- 1 7155 31415 277784 Mar 20 2017 mysql-community-common-5.7.18-1.el7.x86_64.rpm
-rw-r--r-- 1 7155 31415 3777808 Mar 20 2017 mysql-community-devel-5.7.18-1.el7.x86_64.rpm
-rw-r--r-- 1 7155 31415 45493312 Mar 20 2017 mysql-community-embedded-5.7.18-1.el7.x86_64.rpm
-rw-r--r-- 1 7155 31415 23924496 Mar 20 2017 mysql-community-embedded-compat-5.7.18-1.el7.x86_64.rpm
-rw-r--r-- 1 7155 31415 126060264 Mar 20 2017 mysql-community-embedded-devel-5.7.18-1.el7.x86_64.rpm
-rw-r--r-- 1 7155 31415 2237888 Mar 20 2017 mysql-community-libs-5.7.18-1.el7.x86_64.rpm
-rw-r--r-- 1 7155 31415 2113196 Mar 20 2017 mysql-community-libs-compat-5.7.18-1.el7.x86_64.rpm
-rw-r--r-- 1 7155 31415 54661812 Mar 20 2017 mysql-community-minimal-debuginfo-5.7.18-1.el7.x86_64.rpm
-rw-r--r-- 1 7155 31415 169622200 Mar 20 2017 mysql-community-server-5.7.18-1.el7.x86_64.rpm
-rw-r--r-- 1 7155 31415 14501488 Mar 20 2017 mysql-community-server-minimal-5.7.18-1.el7.x86_64.rpm
-rw-r--r-- 1 7155 31415 116887988 Mar 20 2017 mysql-community-test-5.7.18-1.el7.x86_64.rpm
#注意
mysql-community-client 客户端
mysql-community-devel 开发库
mysql-community-common 服务端和客户端的公共文件
mysql-community-embedded 嵌入式
mysql-community-server 服务端
mysql-community-test 测试组件
mysql-community-libs 共享库
mysql-community-libs-compat MySQL之前版本的共享兼容库
1.4 安装解压过后的RPM软件包
#由于本机的mariadb-libs与需要安装的软件包冲突,所以先卸载原有的包再重新安装
[root@node01 mysql]# rpm -e mariadb-libs postfix
#安装MySQL软件包
[root@node01 mysql]# yum localinstall -y mysql-community-server-5.7.18-1.el7.x86_64.rpm mysql-community-client-5.7.18-1.el7.x86_64.rpm mysql-community-common-5.7.18-1.el7.x86_64.rpm mysql-community-libs-5.7.18-1.el7.x86_64.rpm
2 在线安装
2.1 配置一个YUM仓库(源)
#Adding the MySQL Yum Repository
[root@node01 mysql]# yum install http://dev.mysql.com/get/mysql57-community-release-el7-10.noarch.rpm#手动配置yum源
[root@node01 mysql]# vim /etc/yum.repos.d/mysql.repo
[mysql]
name=mysql5.7
baseurl=http://mirrors.tuna.tsinghua.edu.cn/mysql/yum/mysql-5.7-community-el7-x86_64/
gpgcheck=0
2.2 安装MySQL数据库
[root@node01 mysql]# yum install -y mysql-community-server
2.3 开机自启动MySQL服务
[root@node01 mysql]# systemctl enable --now mysqld
2.4 查询临时登录密码
[root@node01 mysql]# awk '/temporary password/ {print $NF}' /var/log/mysqld.log#下面是返回的临时密码
Z+!qPI;=s0Zf
2.5 登录MySQL数据库
[root@node01 mysql]# mysql -u root -p
Enter password:Z+!qPI;=s0Zf
2.6 修改用户密码
mysql> alter user root@localhost identified by 'CentOS@123';
Query OK, 0 rows affected (0.00 sec)
(二)通用二进制方式--生产环境
1.1 下载RPM安装包,上传至服务器
[root@node02 ~]# ll
total 656960
-rw-r--r-- 1 root root 672716800 Jul 5 15:42 mysql-5.7.14-linux-glibc2.5-x86_64.tar
-rw-------. 1 root root 1675 Jul 5 14:43 anaconda-ks.cfg
drwxr-xr-x. 2 root root 6 Jul 5 14:45 Desktop
drwxr-xr-x. 2 root root 6 Jul 5 14:45 Documents
drwxr-xr-x. 2 root root 6 Jul 5 14:45 Downloads
-rw-r--r--. 1 root root 1723 Jul 5 14:45 initial-setup-ks.cfg
drwxr-xr-x. 2 root root 6 Jul 5 14:45 Music
drwxr-xr-x. 2 root root 6 Jul 5 14:45 Pictures
drwxr-xr-x. 2 root root 6 Jul 5 14:45 Public
drwxr-xr-x. 2 root root 6 Jul 5 14:45 Templates
drwxr-xr-x. 2 root root 6 Jul 5 14:45 Videos
1.2 创建用户及用户组
[root@node02 ~]# groupadd -r mysql[root@node02 ~]# useradd mysql -r -g mysql -c "MySQL Server" -s /bin/false
1.3 解压软件包
#由于软件包经过了2次压缩,所以这里解压两次
[root@node02 ~]#tar xf mysql-5.7.14-linux-glibc2.5-x86_64.tar -C /usr/local
[root@node02 ~]#tar xf /usr/local/mysql-5.7.14-linux-glibc2.5-x86_64.tar.gz -C /usr/local/
1.4 创建软链接
[root@node02 ~]# ln -sv /usr/local/mysql-5.7.14-linux-glibc2.5-x86_64 /usr/local/mysql
‘/usr/local/mysql’ -> ‘/usr/local/mysql-5.7.14-linux-glibc2.5-x86_64’
1.5 初始化MySQL服务
[root@node02 ~]# /usr/local/mysql/bin/mysqld --initialize --user=mysql --basedir=/usr/local/mysql/ --datadir=/usr/local/mysql/data
1.6 创建配置文件
[root@node02 ~]# cp /usr/local/mysql/support-files/my-default.cnf /etc/my.cnf[root@node02 ~]# vim /etc/my.cnf
#在 [mysqld] 后添加以下内容
basedir = /usr/local/mysql
datadir = /usr/local/mysql/data
1.7 创建服务脚本
#拷贝服务脚本
[root@node02 ~]# cp /usr/local/mysql/support-files/mysql.server /etc/init.d/mysqld#添加系统服务,并设置开机自启动
[root@node02 ~]# chkconfig --add mysqld
[root@node02 ~]# chkconfig mysqld on
1.8 启动MySQL服务器
#启动MySQL服务
[root@node02 ~]# /usr/local/mysql/bin/mysqld_safe --user=mysql &#配置环境变量
[root@node02 ~]# vim /etc/profile.d/mysql.sh
export PATH=/usr/local/mysql/bin:$PATH#加载使其生效。
[root@node02 ~]# systemctl restart mysqld
(三)容器方式安装--临时或测试
1.1 安装必要的系统工具
[root@node03 ~]# yum install -y yum-utils device-mapper-persistent-data lvm2
1.2 添加软件源信息
[root@node03 ~]# yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
1.3 配置yum源
sed -i 's+download.docker.com+mirrors.aliyun.com/docker-ce+' /etc/yum.repos.d/docker-ce.repo
1.4 配置镜像加速器--针对Docker客户端版本大于 1.10.0 的用户
[root@node03 ~]# mkdir -p /etc/docker[root@node03 ~]# tee /etc/docker/daemon.json <<-'EOF'
> {
> "registry-mirrors": ["https://0dvpva9j.mirror.aliyuncs.com"]
> }
> EOF
1.5 更新并安装Docker-CE
#更新安装容器
[root@node03 ~]# yum makecache fast
[root@node03 ~]# yum -y install docker-ce#重新启动容器
[root@node03 ~]# systemctl daemon-reload
[root@node03 ~]# systemctl enable --now docker
1.6 使用容器方式启动MySQL
[root@node03 ~]# docker run --name mysql -d -e MYSQL_ROOT_PASSWORD=123456 mysql:5.7
1.7 登录Docker容器
[root@node03 ~]# docker exec -it mysql bash
root@f00fd8cc3fc4:/# mysql -uroot -p123456