MySQL数据库介绍

目录

一,数据库的基本概念

二,数据库的发展

1, 文件管理系统的缺点

2, 数据库系统发展阶段

3,数据库管理系统

1,DBMS 数据库管理系统

2,数据库管理系统的优点

3,数据库管理系统的基本功能

4,数据库系统的架构

5,关系型数据库

6,关系型数据库理论

三,安装mysql

四,数据库多实例


一,数据库的基本概念

数据

描述事物的符号记录

包括数字,文字,图形,图像,声音,档案记录等

以“记录”形式按统一的格式进行存储

将不同的记录组织在一起

用来存储具体数据

数据库

表的集合,是存储数据的仓库。

以一定的组织方式存储的相互有关的数据集合

数据库管理系统(DBMS)

是实现对数据库资源有效组织,管理和存取的系统软件

数据库系统

是一个人机系统,由硬件,OS,数据库,DBMS,应用软件和数据库组成

用户可以通过DBMS或应用程序操作数据库

MySQL数据库介绍_第1张图片

数据的分类

  • 结构化的数据:即有固定格式和有限长度的数据。例如填的表格就是结构化的数据,国籍:中华人民共和国,民族:汉,性别:男,这都叫结构化数据

  • 非结构化的数据:非结构化的数据越来越多,就是不定长、无固定格式的数据,例如网页,有时候非常长,有时候几句话就没了;例如语音,视频都是非结构化的数据

  • 半结构化数据:比如:XML或者HTML的格式的数据

二,数据库的发展

1, 文件管理系统的缺点

编写应用程序不方便

数据冗余不可避免

应用程序依赖性

不支持对文件的并发访问

数据间联系弱

难以按用户视图表示数据

无安全控制功能

2, 数据库系统发展阶段

萌芽阶段:文件系统

使用磁盘文件来存储数据

初级阶段:第一代数据库

出现了网状模型、层次模型的数据库

中级阶段:第二代数据库

关系型数据库和结构化查询语言

高级阶段:新一代数据库

“关系-对象”型数据库

3,数据库管理系统

1,DBMS 数据库管理系统

  • Database:数据库是数据的汇集,它以一定的组织形式存于存储介质上

  • DBMS:是管理数据库的系统软件,它实现数据库系统的各种功能。是数据库系统的核心

  • DBA:负责数据库的规划、设计、协调、维护和管理等工作

  • 应用程序:指以数据库为基础的应用程序

2,数据库管理系统的优点

  • 相互关联的数据的集合

  • 较少的数据冗余

  • 程序与数据相互独立

  • 保证数据的安全、可靠

  • 最大限度地保证数据的正确性

  • 数据可以并发使用并能同时保证一致性

3,数据库管理系统的基本功能

  • 数据定义

  • 数据处理

  • 数据安全

  • 数据备份

4,数据库系统的架构

  • 单机架构

  • 大型主机/终端架构

  • 主从式架构(C/S)

  • 分布式架构

层次数据库

MySQL数据库介绍_第2张图片

网状数据库

MySQL数据库介绍_第3张图片

关系型数据库

MySQL数据库介绍_第4张图片

5,关系型数据库

RDBMS 关系型数据库

Relational Database Management System,关系模型最初由IBM公司的英国计算机科学家埃德加·科德(Edgar F. Codd)于1969年描述,1974年,IBM开始开发系统R,这是一个开发RDBMS原型的研究项目。然而,第一个商业上可用的RDBMS是甲骨文,于1979年由关系软件(现为甲骨文公司)发布。

关系统型数据库相关概念

  • 关系Relational :关系就是二维表,其中:表中的行、列次序并不重要

  • 行row:表中的每一行,又称为一条记录record

  • 列column:表中的每一列,称为属性,字段,域field

  • 主键Primary key:PK , 用于惟一确定一个记录的字段,一张表只有一个主键

  • 域domain:属性的取值范围,如,性别只能是'男'和'女'两个值,人类的年龄只能0-150

常用关系数据库

MySQL: MySQL, MariaDB, Percona Server

PostgreSQL: 简称为pgsql,EnterpriseDB

Oracle

MSSQL

DB2

6,关系型数据库理论

实体联系模型E-R

实体Entity:客观存在并可以相互区分的客观事物或抽象事件称为实体,在E-R图中用矩形框表示实

体,把实体名写在框内

属性:实体所具有的特征或性质

联系:联系是数据之间的关联集合,是客观存在的应用语义链

• 实体内部的联系:指组成实体的各属性之间的联系。如职工实体中,职工号和部门经理号之间

有一种关联关系

• 实体之间的联系:指不同实体之间联系。例:学生选课实体和学生基本信息实体之间

• 实体之间的联系用菱形框表示

联系类型

  • 一对一联系(1:1)

  • 一对多联系(1:n):外键

  • 多对多联系(m:n):增加第三张表

数据的操作

  • 数据提取:在数据集合中提取感兴趣的内容。SELECT

  • 数据更新:变更数据库中的数据。INSERT、DELETE、UPDATE

数据库规划流程

收集数据,得到字段。收集必要且完整的数据项。转换成数据表的字段。

三,安装mysql

mysql的组成

客户端程序:

  • mysql: 交互式的CLI工具

  • mysqladmin:基于mysql协议管理mysqld

  • mysqlimport:数据导入工具

    MyISAM存储引擎的管理工具:

  • myisamchk:检查MyISAM库

  • myisampack:打包MyISAM表,只读

服务端程序:

  • mysqld_safe

  • mysqld

  • mysqld_multi 多实例 ,示例:mysqld_multi

本文介绍一下yum安装的步骤(编译安装在之前的文章LAMP安装有讲解):

MySQL数据库介绍_第5张图片

 本地源自带的版本有点低,今天安装5.7

关闭防火墙和setenforce

[root@localhost ~]# systemctl stop firewalld.service 
[root@localhost ~]# setenforce 0

配置数据库yum源

MySQL数据库介绍_第6张图片

yum安装数据库

[root@localhost ~]# yum -y install mysql-community-server

开启数据库,检查

[root@localhost ~]# systemctl start mysqld
[root@localhost ~]#  ss -ntap |grep 3306
LISTEN     0      80          :::3306                    :::*                   users:(("mysqld",pid=13697,fd=21))

yum安装会生成一个随机的密码

登录数据库

MySQL数据库介绍_第7张图片

更改密码

MySQL数据库介绍_第8张图片

数据库中可以使用系统命令

mysql> system hostname
localhost.localdomain
mysql> quit
Bye
[root@localhost ~]#

mysql命令

mysql [OPTIONS] [database]
命令格式

-A, --no-auto-rehash 禁止补全
-u, --user= 用户名,默认为root
-h, --host= 服务器主机,默认为localhost
-p, --passowrd= 用户密码,建议使用-p,默认为空密码
-P, --port= 服务器端口
-S, --socket= 指定连接socket文件路径
-D, --database= 指定默认数据库
-C, --compress 启用压缩
-e   "SQL" 执行SQL命令
-V, --version 显示版本
-v  --verbose 显示详细信息
--print-defaults 获取程序默认使用的配置

#默认空密码登录
mysql  -uroot  -p
mysql>use mysql #切换数据库
mysql> select database();   #查看当前数据库
mysql>select user(); #查看当前用户
mysql>SELECT User,Host,Password FROM user;
mysql>system clear #清屏
mysql> ^DBye       #ctrl+d 退出

mysqladmin命令

mysqladmin [OPTIONS] command command...

#查看mysql服务是否正常,如果正常提示mysqld is alive
mysqladmin -u用户 -p密码   ping
mysqladmin -uroot -p123123  ping
#关闭mysql服务,但mysqladmin命令无法开启
mysqladmin -uroot -pcentos shutdown
#创建数据库testdb
mysqladmin -uroot -pcentos   create testdb 
#删除数据库testdb
mysqladmin -uroot -pcentos   drop testdb
#修改root密码
mysqladmin -uroot -pcentos password 'magedu'
#日志滚动,生成新文件/var/lib/mysql/mariadb-bin.00000N
mysqladmin -uroot -pcentos flush-logs

安装mycli客户端工具

基于Python的软件,

安装环境依赖包

[root@localhost ~]# yum -y install zlib-devel bzip2-devel openssl-devel ncurses-devel sqlite-devel readline-devel tk-devel gdbm-devel db4-devel libpcap-devel xz-devel libffi-devel gcc*

解压安装包,编译安装

[root@localhost opt]# rz -E
rz waiting to receive.
[root@localhost opt]# tar zxf Python-3.7.7_.tgz 
[root@localhost opt]# cd Python-3.7.7/
[root@localhost Python-3.7.7]# ./configure --prefix=/usr/local/Python-3.7.7/
[root@localhost Python-3.7.7]# make && make install

做软链接设置全局可用

[root@localhost Python-3.7.7]# ln -s  /usr/local/Python-3.7.7/bin/python3.7  /usr/bin/python37
[root@localhost Python-3.7.7]# ln -s /usr/local/Python-3.7.7/bin/pip3.7 /usr/bin/pip37

pip3安装

[root@localhost Python-3.7.7]#  pip37 install mycli -i http://mirrors.aliyun.com/pypi/simple --trusted-host mirrors.aliyun.com

设置软链接

[root@localhost Python-3.7.7]# ln -s /usr/local/Python-3.7.7/bin/mycli /usr/bin/mycli

登录(显示用户,可以补全命令)

MySQL数据库介绍_第9张图片

MySQL数据库介绍_第10张图片

MySQL数据库介绍_第11张图片

四,数据库多实例

多实例介绍

  • 什么是数据库多实例

多实例类似微信双开,端口号类比微信账号,数据库类比聊天窗口,表类比聊天记录

MySQL多实例就是在一台服务器上同时开启多个不同的服务端口(如:3306、3307、3308等),同时运行多个MySQL服务进程,这些服务进程通过不同的Socket监听不同的服务端口来提供服务。多实例可能是MySQL的不同版本,也可能是MySQL的同一版本实现

  • 多实例的好处

可有效利用服务器资源。当单个服务器资源有剩余时,可以充分利用剩余资源提供更多的服务,且

可以实现资源的逻辑隔离节约服务器资源。例如公司服务器资源紧张,但是数据库又需要各自尽量

独立的提供服务,并且还需要到主从复制等技术,多实例就是最佳选择

  • 多实例弊端

存在资源互相抢占的问题。比如:当某个数据库实例并发很高或者SQL查询慢时,整个实例会消耗

大量的CPU、磁盘I/O等资源,导致服务器上面其他的数据库实例在提供服务的质量也会下降,所以

具体的需求要根据自己的实际情况而定。

这里用yum自带的源做一下。

关闭防火墙和setenforce

[root@localhost ~]# systemctl stop firewalld.service 
[root@localhost ~]# setenforce 0

安装manriadb

MySQL数据库介绍_第12张图片

创建数据库文件,设置属主属组

[root@localhost ~]# mkdir -pv /mysql/{3306,3307,3308}/{data,etc,socket,log,bin,pid}
mkdir: 已创建目录 "/mysql"
mkdir: 已创建目录 "/mysql/3306"
mkdir: 已创建目录 "/mysql/3306/data"
mkdir: 已创建目录 "/mysql/3306/etc"
mkdir: 已创建目录 "/mysql/3306/socket"
mkdir: 已创建目录 "/mysql/3306/log"
mkdir: 已创建目录 "/mysql/3306/bin"
mkdir: 已创建目录 "/mysql/3306/pid"
mkdir: 已创建目录 "/mysql/3307"
mkdir: 已创建目录 "/mysql/3307/data"
mkdir: 已创建目录 "/mysql/3307/etc"
mkdir: 已创建目录 "/mysql/3307/socket"
mkdir: 已创建目录 "/mysql/3307/log"
mkdir: 已创建目录 "/mysql/3307/bin"
mkdir: 已创建目录 "/mysql/3307/pid"
mkdir: 已创建目录 "/mysql/3308"
mkdir: 已创建目录 "/mysql/3308/data"
mkdir: 已创建目录 "/mysql/3308/etc"
mkdir: 已创建目录 "/mysql/3308/socket"
mkdir: 已创建目录 "/mysql/3308/log"
mkdir: 已创建目录 "/mysql/3308/bin"
mkdir: 已创建目录 "/mysql/3308/pid"
[root@localhost ~]# chown -R mysql.mysql /mysql

生成数据库文件

[root@localhost ~]# mysql_install_db --user=mysql --datadir=/mysql/3306/data
[root@localhost ~]# mysql_install_db --user=mysql --datadir=/mysql/3307/data
[root@localhost ~]# mysql_install_db --user=mysql --datadir=/mysql/3308/data

可以查看文件生成

[root@localhost ~]# tree /mysql/

编辑配置文件

[root@localhost ~]# vim /mysql/3306/etc/my.cnf

[mysqld]
port=3306
datadir=/mysql/3306/data
socket=/mysql/3306/socket/mysql.sock
log-error=/mysql/3306/log/mysql.log
pid-file=/mysql/3306/pid/mysql.pid
[root@localhost ~]# vim /mysql/3307/etc/my.cnf

[mysqld]
port=3307
datadir=/mysql/3307/data
socket=/mysql/3307/socket/mysql.sock
log-error=/mysql/3307/log/mysql.log
pid-file=/mysql/3307/pid/mysql.pid
[root@localhost ~]# vim /mysql/3307/etc/my.cnf

[mysqld]
port=3308
datadir=/mysql/3308/data
socket=/mysql/3308/socket/mysql.sock
log-error=/mysql/3308/log/mysql.log
pid-file=/mysql/3308/pid/mysql.pid

准备启动脚本(3306,3307,3308)同样的操作

[root@localhost ~]# vim /mysql/3306/bin/mysqld
#!/bin/bash

port=3306
mysql_user="root"
mysql_pwd=""
cmd_path="/usr/bin"
mysql_basedir="/mysql"
mysql_sock="${mysql_basedir}/${port}/socket/mysql.sock"

function_start_mysql()
{
    if [ ! -e "$mysql_sock" ];then
      printf "Starting MySQL...\n"
      ${cmd_path}/mysqld_safe --defaults-file=${mysql_basedir}/${port}/etc/my.cnf  &> /dev/null  &
    else
      printf "MySQL is running...\n"
      exit
    fi
}


function_stop_mysql()
{
    if [ ! -e "$mysql_sock" ];then
       printf "MySQL is stopped...\n"
       exit
    else
       printf "Stoping MySQL...\n"
       ${cmd_path}/mysqladmin -u ${mysql_user} -p${mysql_pwd} -S ${mysql_sock} shutdown
   fi
}


function_restart_mysql()
{
    printf "Restarting MySQL...\n"
    function_stop_mysql
    sleep 2
    function_start_mysql
}

case $1 in
start)
    function_start_mysql
;;
stop)
    function_stop_mysql
;;
restart)
    function_restart_mysql
;;
*)
    printf "Usage: ${mysql_basedir}/${port}/bin/mysqld {start|stop|restart}\n"
esac

给脚本执行权限

[root@localhost ~]# chmod +x /mysql/3306/bin/mysqld
[root@localhost ~]# chmod +x /mysql/3307/bin/mysqld
[root@localhost ~]# chmod +x /mysql/3308/bin/mysqld

开启服务

[root@localhost ~]# /mysql/3306/bin/mysqld start
Starting MySQL...
[root@localhost ~]# /mysql/3307/bin/mysqld start
Starting MySQL...
[root@localhost ~]# /mysql/3308/bin/mysqld start
Starting MySQL...
[root@localhost ~]# ss -natp|grep 330
LISTEN     0      50           *:3307                     *:*                   users:(("mysqld",pid=3549,fd=14))
LISTEN     0      50           *:3308                     *:*                   users:(("mysqld",pid=3706,fd=14))
LISTEN     0      50           *:3306                     *:*                   users:(("mysqld",pid=3392,fd=14))

登录数据库两种方法

MySQL数据库介绍_第13张图片

MySQL数据库介绍_第14张图片

现在数据库还没有密码不安全,可以设置密码

[root@localhost ~]# mysqladmin -uroot -S /mysql/3306/socket/mysql.sock password '123123'

登录需要输入密码

[root@localhost ~]# mysql -uroot -p -S /mysql/3306/socket/mysql.sock
Enter password:     #需要输入密码才能登录
Welcome to the MariaDB monitor.  Commands end with ; or \g.
Your MariaDB connection id is 8
Server version: 5.5.56-MariaDB MariaDB Server

Copyright (c) 2000, 2017, Oracle, MariaDB Corporation Ab and others.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

MariaDB [(none)]>

你可能感兴趣的:(负载均衡,运维,mysql,数据库)