目录
一,数据库的基本概念
二,数据库的发展
1, 文件管理系统的缺点
2, 数据库系统发展阶段
3,数据库管理系统
1,DBMS 数据库管理系统
2,数据库管理系统的优点
3,数据库管理系统的基本功能
4,数据库系统的架构
5,关系型数据库
6,关系型数据库理论
三,安装mysql
四,数据库多实例
数据
描述事物的符号记录
包括数字,文字,图形,图像,声音,档案记录等
以“记录”形式按统一的格式进行存储
表
将不同的记录组织在一起
用来存储具体数据
数据库
表的集合,是存储数据的仓库。
以一定的组织方式存储的相互有关的数据集合
数据库管理系统(DBMS)
是实现对数据库资源有效组织,管理和存取的系统软件
数据库系统
是一个人机系统,由硬件,OS,数据库,DBMS,应用软件和数据库组成
用户可以通过DBMS或应用程序操作数据库
数据的分类
结构化的数据:即有固定格式和有限长度的数据。例如填的表格就是结构化的数据,国籍:中华人民共和国,民族:汉,性别:男,这都叫结构化数据
非结构化的数据:非结构化的数据越来越多,就是不定长、无固定格式的数据,例如网页,有时候非常长,有时候几句话就没了;例如语音,视频都是非结构化的数据
半结构化数据:比如:XML或者HTML的格式的数据
编写应用程序不方便
数据冗余不可避免
应用程序依赖性
不支持对文件的并发访问
数据间联系弱
难以按用户视图表示数据
无安全控制功能
萌芽阶段:文件系统
使用磁盘文件来存储数据
初级阶段:第一代数据库
出现了网状模型、层次模型的数据库
中级阶段:第二代数据库
关系型数据库和结构化查询语言
高级阶段:新一代数据库
“关系-对象”型数据库
Database:数据库是数据的汇集,它以一定的组织形式存于存储介质上
DBMS:是管理数据库的系统软件,它实现数据库系统的各种功能。是数据库系统的核心
DBA:负责数据库的规划、设计、协调、维护和管理等工作
应用程序:指以数据库为基础的应用程序
相互关联的数据的集合
较少的数据冗余
程序与数据相互独立
保证数据的安全、可靠
最大限度地保证数据的正确性
数据可以并发使用并能同时保证一致性
数据定义
数据处理
数据安全
数据备份
单机架构
大型主机/终端架构
主从式架构(C/S)
分布式架构
层次数据库
网状数据库
关系型数据库
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
实体联系模型E-R
实体Entity:客观存在并可以相互区分的客观事物或抽象事件称为实体,在E-R图中用矩形框表示实
体,把实体名写在框内
属性:实体所具有的特征或性质
联系:联系是数据之间的关联集合,是客观存在的应用语义链
• 实体内部的联系:指组成实体的各属性之间的联系。如职工实体中,职工号和部门经理号之间
有一种关联关系
• 实体之间的联系:指不同实体之间联系。例:学生选课实体和学生基本信息实体之间
• 实体之间的联系用菱形框表示
联系类型
一对一联系(1:1)
一对多联系(1:n):外键
多对多联系(m:n):增加第三张表
数据的操作
数据提取:在数据集合中提取感兴趣的内容。SELECT
数据更新:变更数据库中的数据。INSERT、DELETE、UPDATE
数据库规划流程
收集数据,得到字段。收集必要且完整的数据项。转换成数据表的字段。
mysql的组成
客户端程序:
mysql: 交互式的CLI工具
mysqladmin:基于mysql协议管理mysqld
mysqlimport:数据导入工具
MyISAM存储引擎的管理工具:
myisamchk:检查MyISAM库
myisampack:打包MyISAM表,只读
服务端程序:
mysqld_safe
mysqld
mysqld_multi 多实例 ,示例:mysqld_multi
本文介绍一下yum安装的步骤(编译安装在之前的文章LAMP安装有讲解):
本地源自带的版本有点低,今天安装5.7
关闭防火墙和setenforce
[root@localhost ~]# systemctl stop firewalld.service
[root@localhost ~]# setenforce 0
配置数据库yum源
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> 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多实例就是在一台服务器上同时开启多个不同的服务端口(如:3306、3307、3308等),同时运行多个MySQL服务进程,这些服务进程通过不同的Socket监听不同的服务端口来提供服务。多实例可能是MySQL的不同版本,也可能是MySQL的同一版本实现
多实例的好处
可有效利用服务器资源。当单个服务器资源有剩余时,可以充分利用剩余资源提供更多的服务,且
可以实现资源的逻辑隔离节约服务器资源。例如公司服务器资源紧张,但是数据库又需要各自尽量
独立的提供服务,并且还需要到主从复制等技术,多实例就是最佳选择
多实例弊端
存在资源互相抢占的问题。比如:当某个数据库实例并发很高或者SQL查询慢时,整个实例会消耗
大量的CPU、磁盘I/O等资源,导致服务器上面其他的数据库实例在提供服务的质量也会下降,所以
具体的需求要根据自己的实际情况而定。
这里用yum自带的源做一下。
关闭防火墙和setenforce
[root@localhost ~]# systemctl stop firewalld.service
[root@localhost ~]# setenforce 0
安装manriadb
创建数据库文件,设置属主属组
[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))
登录数据库两种方法
现在数据库还没有密码不安全,可以设置密码
[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)]>