文章目录
1. MySQL学习路线
第一章 介绍及安装
第二章 体系结构和基础管理
第三章 SQL基础
第四章 索引及 执行计划
第五章 存储引擎
第六章 日志管理
第七章 备份与恢复
第八章 主从复制及架构演变
第九章 高可用及读写分离架构
第十章 分布式架构
第十章 全面优化
第十一章 NoSQL-redis/mongodb/ES
搜索引擎数据库排行榜:https://db-engines.com/en/ranking
2. MySQL介绍
2.1 数据形式
数据:文字、图片、视频。。。人类认知的数据表现方式
计算机:二进制、16进制的机器语言
基于数据的重要性和复杂性的不同,我们可能有不同的管理方式。
哪些数据是适合存储到数据库的呢?
重要性比较高的
关系较复杂的数据
2.2 数据库管理系统DBMS
RDBMS: 关系型数据库管理系统
比较适合于,安全级别要求高的数据以及关系较复杂的数据
NoSQL:非关系型数据库管理系统
适合于高性能存取数据,一般是配合RDBMS进行使用的
针对大数据处理分析,分布式架构更加擅长
2.3 数据库管理系统种类
RDBMS :
MySQL 、Oracle、MSSQL(SQL Server)、PG
NoSQL:Not Only SQL
键-值(key-value):Redis, memcached
文档(document):Mongodb(存放历史订单、流水)、ES(搜索框)
3. MySQL产品线
3.1 MySQL厂家
Oracle: MySQL官方版
Redhat: MariaDB
Percona: PerconaDB
3.2 MySQL版本选择
5.6 :2021年2月份停止更新了。马上退出历史舞台。
5.7 :5.7.31+
8.0 :8.0.20+
版本号叫法:
核心系统 5731
边缘系统 8020
3.3 MySQL软件获取
www.mysql.com ---> downloads
企业版:Enterprise , 互联网行业一般不选择.
社区版本:选择,企业使用和学习使用
源码包:source code .tar.gz,一般看源码的时候看装
二进制包:
源码包:
3.4 MySQL安装方式
通用二进制版: 解压即用(绿色版)
rpm、yum版本: 下载rpm包或者配置yum源
源码包: 编译安装,非常慢
4. MySQL-5.7.28二进制包安装
4.1 环境准备
(1) 准备Centos 7.6虚拟机
[root@db01 ~]# hostname -I
10.0.0.61
[root@db01 ~]# hostname
db01
(2) 清理历史环境
[root@db01 ~]# rpm -qa | grep mariadb
mariadb-libs-5.5.68-1.el7.x86_64
mariadb-server-5.5.68-1.el7.x86_64
mariadb-5.5.68-1.el7.x86_64
[root@db01 ~]# yum remove mariadb-libs.x86_64 -y
(3) 创建用户和组
[root@db01 ~]# useradd mysql -s /sbin/nologin
[root@db01 ~]# id mysql
uid=1001(mysql) gid=1001(mysql) groups=1001(mysql)
(4) 创建相关目录
# 创建软件目录
[root@db01 ~]# mkdir -p /app/database/
# 创建数据目录
[root@db01 ~]# mkdir -p /data/3306/
# 创建日志目录
[root@db01 ~]# mkdir -p /binlog/3306/
(5) 设置权限
[root@db01 ~]# chown -R mysql.mysql /app/ /data/ /binlog/
4.2 上传并解压MySQL软件
[root@db01 ~]# cd /app/database/
[root@db01 database]# tar xf mysql-5.7.30-linux-glibc2.12-x86_64.tar.gz
[root@db01 database]# ln -s mysql-5.7.30-linux-glibc2.12-x86_64 mysql
4.3 设置环境变量
[root@db01 ~]# vim /etc/profile
#添加以下行:
export PATH=/app/database/mysql/bin:$PATH
# 生效配置
[root@db01 ~]# source /etc/profile
4.4 初始化系统库表
提示:rmp包自动完成了初始化操作
# 安装依赖,防止初始化报错
[root@db01 ~]# yum install -y libaio-devel
# 进行初始化
[root@db01 ~]# mysqld --initialize-insecure --user=mysql --basedir=/app/database/mysql --datadir=/data/3306/
# 缺少libaio-devel依赖,初始化报错:
mysqld: error while loading shared libraries: libaio.so.1: cannot open shared object file: No such file or directory
# 容易报的错误:
[root@db01 ~]# mysqld --initialize-insecure --user=mysql --basedir=/app/database/mysql --datadir=/data/3306/
2022-06-08T14:03:39.492759Z 0 [Warning] TIMESTAMP with implicit DEFAULT value is deprecated. Please use --explicit_defaults_for_timestamp server option (see documentation for more details).
2022-06-08T14:03:39.494239Z 0 [ERROR] --initialize specified but the data directory has files in it. Aborting.
2022-06-08T14:03:39.494260Z 0 [ERROR] Aborting
# 原因+解决:如果第一次初始化报错了,第二次初始化有可能报这个错误
[root@db01 ~]# rm -rf /data/3306/*
[root@db01 ~]# mysqld --initialize-insecure --user=mysql --basedir=/app/database/mysql --datadir=/data/3306/
扩展:
# 5.7之后版本初始化方式
# mysqld --initialize-insecure --user=mysql --basedir=软件路径 --datadir=数据路径
(1) mysqld --initialize
会生成12位的随机临时密码(管理员用户),四种密码复杂度。
临时生成密码,只可以用来登录。不能用来管理数据库。第一次登录时将他重置
[root@db01 data]# mysql -uroot -p'Uh0*xe(eLw(W'
mysql> create database test;
ERROR 1820 (HY000): You must reset your password using ALTER USER statement before executing this statement
mysql> alter user root@'localhost' identified by '123';
mysql> create database test;
或者这样修改密码:
[root@db01 data]# mysqladmin -uroot -p password dong@123.com
# 输入初始化密码
Enter password:
(2) mysqld --initialize-insecure
管理员密码是空
# 5.7之前版本初始化方式(例如5.6)
# /usr/local/mysql/scripts/mysql_install_db --user=mysql --basedir=软件安装路径 --datadir=数据目录
/usr/local/mysql/scripts/mysql_install_db --user=mysql --basedir=/app/database/mysql --datadir=/data/3306/
4.5 配置文件设置
[root@db01 ~]# cat > /etc/my.cnf <<EOF
[mysqld]
user=mysql
basedir=/app/database/mysql
datadir=/data/3306/
server_id=6
port=3306
socket=/tmp/mysql.sock
[mysql]
socket=/tmp/mysql.sock
EOF
4.6 准备MySQL启动脚本
[root@m01 ~]# cd /app/database/mysql/support-files/
# 拷贝mysql的启动脚本至系统软件管理目录中
[root@m01 support-files]# cp mysql.server /etc/init.d/mysqld
# centos6
[root@m01 ~]# service mysqld start
Starting MySQL.Logging to '/data/3306/m01.err'.
SUCCESS!
# centos7
# 将/etc/init.d/mysqld添加到systemd管理当中
[root@m01 ~]# chkconfig --add mysqld
[root@m01 ~]# service mysqld stop
Shutting down MySQL.. SUCCESS!
[root@m01 ~]# systemctl start mysqld