MySQL介绍

什么是数据?
数据(data)是事实或观察的结果,是对客观事物的逻辑归纳,是用于表示客观事物的未经加工的的原始
素材。
数据可以是连续的值,比如声音、图像,称为模拟数据。也可以是离散的,如符号、文字,称为数字
数据。
在计算机系统中,数据以二进制信息单元0,1的形式表示。
数据的定义: 数据是指对客观事件进行记录并可以鉴别的符号,是对客观事物的性质、状态以及相互关
系等进行记载的物理符号或这些物理符号的组合。它是可识别的、抽象的符号。*

什么是数据库管理系统
DBMS(Database Management System)针对数据,库,表的增删改查

数据库管理系统的种类
关系型数据库(RDBMS Relational Database Management System):

  • MySQL
  • MSSQL(SQLserver)windows
  • Oracle
  • PosgreSQL(PSQL、PG)

非关系型数据库(NoSQL):

  • MongoDB 文档型数据库 Document
  • Redis 键值对数据库 key-value
  • Elasticsearch 搜索引擎数据库 search Engine
  • ETCD 键值对数据库 key-value
    时序数据库:TSDB(Time Series Database)
  • InfluxDB
  • Prometheus
    ORM:开发语言 add_table
    create table

MySQL安装

安装方式

版本选择(潜规则)

  • 5.6:GA6-12个月,小版本号为偶数版
  • 5.7:GA6-12个月,小版本号为偶数版,版本要高于5.7.20(MGR自带高可用功能)

Img
Img
Img
直接选下载归档
Img
Img

源码安装MySQL5.6版本

## 安装依赖
[root@db01 mysql-5.6.50]# yum install -y cmake openssl-devel ncurses-devel

## 下载MySQL
[root@db01 ~]# wget https://downloads.mysql.com/archives/get/p/23/file/mysql-5.6.50.tar.gz

## 解压
[root@db01 ~]# tar xf mysql-5.6.50.tar.gz 

## 生成
# nginx程序存放位置 ./configure --prefix=/app/nginx
# MySQL程序存放目录 BASEDIR

[root@db01 mysql-5.6.50]# cmake . -DCMAKE_INSTALL_PREFIX=/app/mysql-5.6.50 \
#数据存放位置DATADIR /var/lib/mysql
-DMYSQL_DATADIR=/app/mysql-5.6.50/data \
#socket文件存放位置
-DMYSQL_UNIX_ADDR=/app/mysql-5.6.50/tmp/mysql.sock \
#使用utf8字符集
-DDEFAULT_CHARSET=utf8 \
#校验规则
-DDEFAULT_COLLATION=utf8_general_ci \
#使用其他额外的字符集
-DWITH_EXTRA_CHARSETS=all \
#支持的存储引擎
-DWITH_INNOBASE_STORAGE_ENGINE=1 \
-DWITH_FEDERATED_STORAGE_ENGINE=1 \
-DWITH_BLACKHOLE_STORAGE_ENGINE=1 \
#禁用的存储引擎
-DWITHOUT_EXAMPLE_STORAGE_ENGINE=1 \
#启用zlib库支持(zib、gzib相关)
-DWITH_ZLIB=bundled \
#启用SSL库支持(安全套接层)
-DWITH_SSL=system \
#启用本地数据导入支持
-DENABLED_LOCAL_INFILE=1 \
#编译嵌入式服务器支持
-DWITH_EMBEDDED_SERVER=1 \
# mysql5.6支持了google的c++mock框架了,允许下载,否则会安装报错。
-DENABLE_DOWNLOADS=1 \
#禁用debug(默认为禁用)
-DWITH_DEBUG=0
--------------------------------------------------------------------
cmake . -DCMAKE_INSTALL_PREFIX=/app/mysql-5.6.50 \
-DMYSQL_DATADIR=/app/mysql-5.6.50/data \
-DMYSQL_UNIX_ADDR=/app/mysql-5.6.50/tmp/mysql.sock \
-DDEFAULT_CHARSET=utf8 \
-DDEFAULT_COLLATION=utf8_general_ci \
-DWITH_EXTRA_CHARSETS=all \
-DWITH_INNOBASE_STORAGE_ENGINE=1 \
-DWITH_FEDERATED_STORAGE_ENGINE=1 \
-DWITH_BLACKHOLE_STORAGE_ENGINE=1 \
-DWITHOUT_EXAMPLE_STORAGE_ENGINE=1 \
-DWITH_ZLIB=bundled \
-DWITH_SSL=system \
-DENABLED_LOCAL_INFILE=1 \
-DWITH_EMBEDDED_SERVER=1 \
-DENABLE_DOWNLOADS=1 \
-DWITH_DEBUG=0

## 编译&&安装
[root@db01 mysql-5.6.50]# make && make install
[root@db01 mysql-5.6.50]# ll /app/mysql-5.6.50/
total 220
drwxr-xr-x 2 root root 4096 Jul 18 21:10 bin
drwxr-xr-x 3 root root 18 Jul 18 21:10 data
drwxr-xr-x 2 root root 55 Jul 18 21:10 docs
drwxr-xr-x 3 root root 4096 Jul 18 21:10 include
drwxr-xr-x 3 root root 291 Jul 18 21:10 lib
-rw-r--r-- 1 root root 198041 Sep 23 2020 LICENSE
drwxr-xr-x 4 root root 30 Jul 18 21:10 man
drwxr-xr-x 10 root root 4096 Jul 18 21:10 mysql-test
-rw-r--r-- 1 root root 587 Sep 23 2020 README
drwxr-xr-x 2 root root 30 Jul 18 21:10 scripts
drwxr-xr-x 28 root root 4096 Jul 18 21:10 share
drwxr-xr-x 4 root root 4096 Jul 18 21:10 sql-bench
drwxr-xr-x 2 root root 136 Jul 18 21:10 support-files
[root@db03 mysql-5.6.50]# cd /app/mysql-5.6.50/

## 做软连接
[root@db01 mysql-5.6.50]#  ln -s /app/mysql-5.6.50/ /app/mysql

## 创建用户
[root@db01 mysql-5.6.50]# useradd mysql -s /sbin/nologin -M

## 6.进入初始化脚本目录
[root@db01 ~]# cd /app/mysql/scripts/

## 安装依赖
[root@db01 scripts]# yum install -y autoconf

## 初始化,需要指定,程序安装目录,数据目录,用户
[root@db01 scripts]# ./mysql_install_db --user=mysql --basedir=/app/mysql --datadir=/app/mysql/data

## 拷贝启动脚本
[root@db01 mysql]# cp /app/mysql/support-files/mysql.server /etc/init.d/mysqld

## 拷贝MySQL配置文件
[root@db01 mysql]# cp /app/mysql/support-files/my-default.cnf /etc/my.cnf

## 修改配置文件
[root@db02 mysql]# vim /etc/my.cnf
[mysqld]
(↑只剩下这一个就行)

# 源码安装创建目录
[root@db01 mysql]# mkdir /app/mysql-5.6.50/tmp

# 源码安装授权
[root@db01 ~]# chown -R mysql.mysql /app/mysql*

## 启动
[root@db01 support-files]# /etc/init.d/mysqld start
Starting MySQL. SUCCESS!

## 添加环境变量
[root@db01 support-files]# echo 'PATH="/app/mysql/bin:$PATH"' > /etc/profile.d/mysql.sh

## 生效环境变量
[root@db01 ~]# source /etc/profile

二进制安装MySQL

## 安装依赖
[root@db02 mysql-5.6.50-linux-glibc2.12-x86_64]# yum install -y autoconf libaio-devel

## 下载二进制包
[root@db02 mysql-5.6.50-linux-glibc2.12-x86_64]# wget https://downloads.mysql.com/archives/get/p/23/file/mysql-5.6.50-linux-glibc2.12-x86_64.tar.gz

## 解压
[root@db02 ~]# tar xf mysql-5.6.50-linux-glibc2.12-x86_64.tar.gz 

## 创建app目录
[root@db02 ~]# mkdir /app

## 移动目录
[root@db02 ~]#  mv /root/mysql-5.6.50-linux-glibc2.12-x86_64 /app/mysql-5.6.50

## 做软连接
[root@db02 ~]# ln -s /app/mysql-5.6.50/ /app/mysql

## 创建MySQL用户
[root@db02 ~]# useradd mysql -s /sbin/nologin -M

## 进入初始化脚本目录
[root@db02 ~]# cd /app/mysql/scripts/

## 初始化,需要指定,程序安装目录,数据目录,用户
[root@db02 scripts]# ./mysql_install_db --user=mysql --basedir=/app/mysql --datadir=/app/mysql/data
[root@db02 scripts]# cd /app/mysql

## 拷贝启动脚本
[root@db02 mysql]# cp /app/mysql/support-files/mysql.server /etc/init.d/mysqld

## 拷贝MySQL配置文件
[root@db02 mysql]# cp /app/mysql/support-files/my-default.cnf /etc/my.cnf

[root@db02 mysql]# vim /etc/my.cnf
[mysqld]
basedir=/app/mysql
datadir=/app/mysql/data

# 源码安装创建目录
[root@db02 mysql]# mkdir /app/mysql-5.6.50/tmp

# 源码安装授权
[root@db02 ~]# chown -R mysql.mysql /app/mysql*

## 启动
[root@db02 support-files]# /etc/init.d/mysqld start
Starting MySQL. SUCCESS!

## 添加环境变量
[root@db02 support-files]# echo 'PATH="/app/mysql/bin:$PATH"' > /etc/profile.d/mysql.sh

## 生效环境变量
[root@db02 ~]# source /etc/profile

yum安装MySQL

## 下载yum源的rpm包
wget https://dev.mysql.com/get/mysql80-community-release-el7-8.noarch.rpm

## 直接安装yum源的rpm包
[root@db03 ~]# rpm -ivh https://dev.mysql.com/get/mysql80-community-release-el7-8.noarch.rpm

## 创建MySQL仓库
vim /etc/yum.repos.d/mysql.repo
[mysql57-community]
name=MySQL 5.7 Community Server
baseurl=http://repo.mysql.com/yum/mysql-5.7-community/el/7/$basearch
enabled=1
gpgcheck=0
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-mysql-2022
file:///etc/pki/rpm-gpg/RPM-GPG-KEY-mysql
## 安装:
yum install -y mysql-server

优化

## 查看MySQL用户
mysql> select user,host from mysql.user;
+------+-----------+
| user | host      |
+------+-----------+
| root | 127.0.0.1 |
| root | ::1       |
|      | localhost |
| root | localhost |
|      | m01       |
| root | m01       |
+------+-----------+

## 优化MySQL用户
mysql> truncate mysql.user;

## 退出重启
[root@db01 scripts]# /etc/init.d/mysqld restart
Shutting down MySQL. SUCCESS! 
Starting MySQL.. SUCCESS! 

误删除root用户解决方法

# 1.停mysql
[root@db01 ~]# /etc/init.d/mysqld stop

# 2.跳过授权表,只能本地连接启动数据库
[root@db01 bin]# mysqld_safe --skip-grant-tables --skip-network &

# 3.刷新授权表
mysql> flush privileges;
Query OK, 0 rows affected (0.00 sec)

# 4.创建root用户
mysql> grant all on *.* to root@'localhost' identified by '123' with grant option;
Query OK, 0 rows affected (0.00 sec)

# 5.重启mysql
[root@db01 ~]# /etc/init.d/mysqld restart
[root@db02 ~]# mysql -uroot -p123
mysql> select user,host from mysql.user;
+------+-----------+
| user | host      |
+------+-----------+
| root | localhost |
+------+-----------+
1 row in set (0.00 sec)

源码安装MySQL(5.7)

## 安装MySQL依赖
[root@db02 ~]# yum install -y cmake zlib-devel openssl-devel autoconf automake bison-devel ncurses-devel libaio-devel make

## 解压
[root@db02 ~]# tar xf mysql-boost-5.7.42.tar.gz
[root@db02 ~]# cd mysql-5.7.42/

## 生成
[root@db03 mysql-5.7.42]# cmake . -DCMAKE_INSTALL_PREFIX=/app/mysql-5.7.42 \
> -DMYSQL_DATADIR=/app/mysql-5.7.42/data \
> -DMYSQL_UNIX_ADDR=/tmp/mysql.sock \
> -DWITH_BOOST=/app/mysql/boost/boost_1_59_0 \
> -DDEFAULT_CHARSET=utf8 \
> -DDEFAULT_COLLATION=utf8_general_ci \
> -DWITH_EXTRA_CHARSETS=all \
> -DWITH_INNOBASE_STORAGE_ENGINE=1 \
> -DWITH_FEDERATED_STORAGE_ENGINE=1 \
> -DWITH_BLACKHOLE_STORAGE_ENGINE=1 \
> -DWITHOUT_EXAMPLE_STORAGE_ENGINE=1 \
> -DWITH_ZLIB=bundled \
> -DWITH_SSL=system \
> -DENABLED_LOCAL_INFILE=1 \
> -DWITH_EMBEDDED_SERVER=1 \
> -DENABLE_DOWNLOADS=1 \
> -DWITH_DEBUG=0

CMake Error at cmake/boost.cmake:88 (MESSAGE):
  You can download it with -DDOWNLOAD_BOOST=1 -DWITH_BOOST=<directory>

  This CMake script will look for boost in <directory>.  If it is not there,
  it will download and unpack it (in that directory) for you.

  If you are inside a firewall, you may need to use an http proxy:

  export http_proxy=http://example.com:80

Call Stack (most recent call first):
  cmake/boost.cmake:174 (COULD_NOT_FIND_BOOST)
  CMakeLists.txt:568 (INCLUDE)

-- Configuring incomplete, errors occurred!
See also "/root/mysql-5.7.42/CMakeFiles/CMakeOutput.log".
See also "/root/mysql-5.7.42/CMakeFiles/CMakeError.log".
## 报错解决方法
[root@db03 mysql-5.7.42]# cmake . -DDOWNLOAD_BOOST=1 
## 重新生成
[root@db03 mysql-5.7.42]# cmake . -DCMAKE_INSTALL_PREFIX=/app/mysql-5.7.42 \
> -DMYSQL_DATADIR=/app/mysql-5.7.42/data \
> -DMYSQL_UNIX_ADDR=/tmp/mysql.sock \
> -DWITH_BOOST=/app/mysql/boost/boost_1_59_0 \
> -DDEFAULT_CHARSET=utf8 \
> -DDEFAULT_COLLATION=utf8_general_ci \
> -DWITH_EXTRA_CHARSETS=all \
> -DWITH_INNOBASE_STORAGE_ENGINE=1 \
> -DWITH_FEDERATED_STORAGE_ENGINE=1 \
> -DWITH_BLACKHOLE_STORAGE_ENGINE=1 \
> -DWITHOUT_EXAMPLE_STORAGE_ENGINE=1 \
> -DWITH_ZLIB=bundled \
> -DWITH_SSL=system \
> -DENABLED_LOCAL_INFILE=1 \
> -DWITH_EMBEDDED_SERVER=1 \
> -DENABLE_DOWNLOADS=1 \
> -DWITH_DEBUG=0

## 编译 && 安装
[root@db03 mysql-5.7.42]# make && make install

## 做软链接
[root@db03 mysql-5.7.42]# ln -s /app/mysql-5.7.42/ /app/mysql

## 创建用户
[root@db03 mysql-5.7.42]# useradd mysql -s /sbin/nologin -M

## 授权
[root@db03 mysql]# chown -R mysql.mysql /app/mysql

## 拷贝启动脚本
[root@db03 mysql]# cp support-files/mysql.server /etc/init.d/mysqld

## 修改配置文件
[root@db03 mysql]# vim /etc/my.cnf
[mysqld]

## 初始化
[root@db03 bin]# ./mysqld --initialize-insecure --user=mysql --basedir=/app/mysql --datadir=/app/mysql/data

## 启动
[root@db03 bin]# /etc/init.d/mysqld start
Starting MySQL.Logging to '/app/mysql-5.7.42/data/db03.err'.
 SUCCESS! 

 ## 添加环境变量
 [root@db03 bin]# echo 'PATH="/app/mysql/bin:$PATH"' > /etc/profile.d/mysql.sh

 ## 生效环境变量
[root@db03 ~]# source /etc/profile

systemctl管理MySQL

vim /usr/lib/systemd/system/mysqld.service
[Unit]
Description=mysqld

[Service]
#Type=notify
ExecStart=/app/mysql/bin/mysqld --defaults-file=/etc/my.cnf --user=mysql
KillMode=process
Restart=on-failure
RestartSec=42s

[Install]
WantedBy=multi-user.target

# 重新加载
systemctl daemon-reload

# 加入开机自启
systemctl enable mysqld