Linux —mysql数据库配置服务(一)

本章内容

 

  • 关系型数据库基础
  • 安装MySQL
  • 管理数据库和表
  • 用户和权限管理
  • 函数和存储过程
  • MySQL架构
  • 存储引擎
  • 服务器选项,系统和状态变量
  • 优化查询和索引管理
  • 锁和事务管理
  • 日志管理 ###必须掌握
  • 备份还原 ###必须掌握
  • MySQL集群

 

数据库的发展史

  • 萌芽阶段:文件系统

使用磁盘文件来存储数据

  • 初级阶段:第一代数据库

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

  • 中级阶段:第二代数据库

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

  • 高级阶段:新一代数据库

“关系-对象”型数据库

数据库管理系统(DBMS)

  • 数据库是数据的汇集,它以一定的组织形式存于存储介质上
  • DBMS是管理数据库的系统软件,它实现数据库系统的各种功能。是数据库系统的核心
  • DBA:负责数据库的规划、设计、协调、维护和管理等工作
  • 应用程序指以数据库为基础的应用程序

DBMS采取S/C结构;DBMS为客户端建立了与数据库之间的连接,在DBMS中管理员可以对数据进行权限的设置和数据库数据的备份和安全的管理等。

DBMS与客户端之间通过网络连接,客户端需要访问数据库时会通过API

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

  • 数据定义 ###创建数据库---->横行、纵列 属性等
  • 数据处理 ###增、删、改、查
  • 数据安全 ###设置数据的读写执行、用户访问等
  • 数据备份 ###数据及时备份

数据库系统的架构

  • 单机架构
  • 大型主机/终端架构
  • 主从式架构( C/S)
  • 分布式架构

关系型数据库

  • 关系 :关系就是二维表。并满足如下性质:表中的行、列次序并不重要
  • 行row:表中的每一行,又称为一条记录
  • 列column:表中的每一列,称为属性,字段
  • 主键( Primary key):用于惟一确定一个记录的字段
  • 域domain:属性的取值范围,如,性别只能是‘男’和‘女’两个值

students table

id                 name                sex                 phone

1                   zhang                m                    110 ###这就时一条记录

1                   zhang                m                    110 ###重复的记录,使用主键来解决

2                   wang                  f                     120

scores table

id          score

1              99

2              98

学员表和考试成绩表中学员编号之间是有联系的。

关系数据库

RDBMS:

  • MySQL: MySQL, MariaDB, Percona Server
  • PostgreSQL: 简称为pgsql, EnterpriseDB
  • Oracle
  • MSSQL
  • DB2

数据库排名:

  • https://db-engines.com/en/ranking

Linux —mysql数据库配置服务(一)_第1张图片

acid特性保证数据库的安全和稳定

NoSQL : redis高性能 高并发

实体-联系模型E-R

  • 实体Entity:客观存在并可以相互区分的客观事物或抽象事件称为实体
  • 属性:实体所具有的特征或性质
  • 联系:联系是数据之间的关联集合,是客观存在的应用语义链
  1. 实体内部的联系:指组成实体的各属性之间的联系。如职工实体中,职工号和部门经理号之 间有一种关联关系
  2. 实体之间的联系:指不同实体之间联系。 例: 学生选课实体和学生基本信息实体之间
  3. 实体之间的联系用菱形框表示

联系的类型

  1. 一对一联系(1:1)
  2. 一对多联系(1:n)
  3. 多对多联系(m:n)

数据的操作:

  • 数据提取:在数据集合中提取感兴趣的内容。 SELECT
  • 数据更新:变更数据库中的数据。 INSERT、 DELETE、 UPDATE

数据的约束条件 :是一组完整性规则的集合

  • 实体(行)完整性 Entity integrity
  • 域(列)完整性 Domain Integrity
  • 参考完整性 Referential Integrity

students table ##主键表

primary key(主键)

id             name               sex            phone

1               zhang               m              110 ###这就时一条记录

2                wang                f                120

scores table

id              score

foreign key(外键)---->students.d

1                99

1                98 ###学员考试成一对多关系

一对多的关系使用主外键。


sutdents 基本信息 主键表

pk

id           name              sex

1               a                    f

2               b                   m

3               c                    f

class 课程信息

id           classname

1              linux

2              go

3              python

students_classes

id 	student_id (fk--->students.id)	class id (fk-->class.id)
1		1							1	
2		1							2
3		2							2

范式

1NF: 就是列的标题不能重复

无重复的列, 每一列都是不可分割的基本数据项,同一列中不能有多个值,即实体中的某个属性不能有多个值或者不能有重复的属性。

2NF:

属性完全依赖于主键,第二范式必须先满足第一范式,要求表中的每个行必须可以被唯一地区分。通常为表加上一个列,以存储各个实例的唯一标识PK,非PK的字段需要与整个PK有直接相关性

3NF:

属性不依赖于其它非主属性,满足第三范式必须先满足第二范式。第三范式要求一个数据库表中不包含已在其它表中已包含的非主关键字信息,非PK的字段间不能有从属关系

SQL概念

SQL: Structure Query Language

  • 结构化查询语言
  • SQL解释器:
  • 数据存储协议:应用层协议, C/S

S: server, 监听于套接字,接收并处理客户端的应用请求

mysql数据库端口3306 sqlserver 端口:1433 win远程端口:3389

C: Client

客户端程序接口

  • CLI
  • GUI

应用编程接口

  • ODBC: Open Database Connectivity 微软开发的数据库连接
  • JDBC: Java Data Base Connectivity JAVA连接接口

数据库的约束

1、主键:一个或多个字段的组合,填入的数据必须能在本表中唯一标识本行;必须提供数据,即NOT NULL,一个表只能有一个

2、惟一键:一个或多个字段的组合,填入的数据必须能在本表中唯一标识本行;允许为NULL,一个表可以存在多个

3、外键:一个表中的某字段可填入的数据取决于另一个表的主键或唯一键已有的数据

4、检查:字段值在一定范围内

索引

  • 将表中的一个或多个字段中的数据复制一份另存,并且按特定次序排序存储
  • 例子:就像书中的目录,为数据的查找建立标签 更快的查询数据库中的数据
  • 缺点:不易修改;修改数据的时候;还需修改索引节点。增大磁盘使用率

关系运算 :

  • 选择:挑选出符合条件的行 ##选择表中符合条件的数据 如:大于80分的成绩
  • 投影:挑选出需要的字段
  • 连接:表间字段的关联

[root@localhost gconf.xml.defaults]# pwd

/etc/gconf/gconf.xml.defaults ###用户登陆界面用户名显示修改名户名修改处

Linux —mysql数据库配置服务(一)_第2张图片

/user_list 用户列表

Linux —mysql数据库配置服务(一)_第3张图片

MySQL历史

1979年: TcX公司 Monty Widenius, Unireg

1996年:发布MySQL1.0, Solaris版本, Linux版本

1999年: MySQL AB公司,瑞典

2003年: MySQL 5.0版本,提供视图、存储过程等功能

2008年: Sun 收购

2009年: Oracle收购sun

2009年: Monty成立MariaDB

MySQL和MariaDB

官方网址:

  • http://www.mysql.com
  • http://mariadb.org/

官方网址:

  • http://www.mysql.com
  • http://mariadb.org/

版本演变:

  • MySQL: 5.1 --> 5.5 --> 5.6 --> 5.7 -->8.0
  • MariaDB: 5.5 -->10.0--> 10.1 --> 10.2 --> 10.3

centos6 mysql-server

[root@localhost ~]# yum info mysql-server
Available Packages
Name : mysql-server
Arch : x86_64
Version : 5.1.73

centos7 mariadb

[root@centos7-4 ~]# yum info mariadb-server
Available Packages
Name        : mariadb-server
Arch        : x86_64
Epoch       : 1
Version     : 5.5.56

MYSQL的特性

1、插件式存储引擎:也称为“表类型”,存储管理器有多种实现版本,功能和特性可能均略有差别;用户可根据需要灵活选择,Mysql5.5.5开始innoDB引擎是

MYSQL默认引擎

  • MyISAM ==> Aria
  • InnoDB ==> XtraDB

2、单进程,多线程

3、诸多扩展和新特性

4、提供了较多测试组件

5、开源

安装MYSQL

Mariadb安装方式:

1、源代码:编译安装

2、二进制格式的程序包:展开至特定路径,并经过简单配置后即可使用

3、程序包管理器管理的程序包

CentOS安装光盘

项目官方: https://downloads.mariadb.org/mariadb/repositories/

rpm包安装Mysql

首先使用centos光盘系统安装自带的mariadb

环境:centos7

[root@centos7-4 ~]# yum install mariadb-server

[root@centos7-4 ~]# rpm -ql mariadb-server
/etc/my.cnf.d/server.cnf
/usr/lib/systemd/system/mariadb.service ###服务

客户端配置文件

[root@centos7-4 ~]# rpm -ql mariadb
/etc/my.cnf.d/client.cnf							#客户端配置文件
/usr/bin/mysql								#客户端工具

启动服务

[root@centos7-4 ~]# systemctl start mariadb.service
[root@centos7-4 ~]# ss -ntlp					#端口号3306
LISTEN     0      50         *:3306                   *:*                   users:(("mysqld",pid=10686,fd=14))
[root@centos7-4 ~]# ps aux						#进程
mysql    10525  0.0  0.0 113304  1604 ?        Ss   09:09   0:00 /bin/sh /us
mysql    10686  0.3  4.3 903336
[root@centos7-4 ~]# getent passwd mysql		##mysql  系统用户
mysql:x:27:27:MariaDB Server:/var/lib/mysql:/sbin/nologin
[root@centos7-4 ~]# ls /var/lib/mysql -d -l			##查看mysql用户所有者所属组信息
drwxr-xr-x 5 mysql mysql 177 Sep 28 09:09 /var/lib/mysql
[root@centos7-4 ~]# ls /var/lib/mysql  -l			同时也是mysql的数据库存放路径
mysql.sock	本地sql客户端连接本地mysql服务器通信的桥梁
[root@centos7-4 ~]# pstree -p mysql
mysqld_safe(10525)───mysqld(10686)─┬─{mysqld}(10690)
                                   ├─{mysqld}(10691)
                                   ├─{mysqld}(10692)
                                   ├─{mysqld}(10693)
                                   ├─{mysqld}(10694)
                                   ├─{mysqld}(10695)
                                   ├─{mysqld}(10696)
                                   ├─{mysqld}(10697)
                                   ├─{mysqld}(10698)
                                   ├─{mysqld}(10699)
                                   ├─{mysqld}(10700)
                                   ├─{mysqld}(10701)
                                   ├─{mysqld}(10702)
                                   ├─{mysqld}(10703)
                                   ├─{mysqld}(10704)
                                   ├─{mysqld}(10705)
                                   ├─{mysqld}(10713)
                                   └─{mysqld}(10714)

单进程 ------- 多线程

https://downloads.mariadb.org/mariadb/10.2.18/

 

Linux —mysql数据库配置服务(一)_第4张图片

Linux —mysql数据库配置服务(一)_第5张图片

 

Linux —mysql数据库配置服务(一)_第6张图片

RPM包安装MySQL

RPM包安装

  • CentOS 7:安装光盘直接提供
  • mariadb-server 服务器包 rpm -ql mariadb-server
  • mariadb 客户端 rpm -ql maridb
  • mariadb-libs 数据库列表 rpm-ql mariadb-libs

CentOS 6

提高安全性

mysql_secure_installation ## sql 安全设置脚本

  1. 设置数据库管理员root口令
  2. 禁止root远程登录
  3. 删除anonymous用户帐号
  4. 删除test数据库

centos7中 Mysql 初步的使用和简单配置

运行mysql命令:默认空密码登录

[root@centos7-4 ~]# mysql				##本机客户端连接数据库
Welcome to the MariaDB monitor.  Commands end with ; or \g.
Your MariaDB connection id is 2
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)]> 
MariaDB [(none)]> select user();			##查看当前登陆用户
+----------------+
| user()         |
+----------------+
| root@localhost |
+----------------+
MariaDB [(none)]> show databases;		##查看mysql刚安装好时的数据库
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
| test               |
+--------------------+
MariaDB [(none)]> select user,host,password from mysql.user;		
+------+-----------+----------+
| user | host      | password |
+------+-----------+----------+
| root | localhost |          |			
| root | centos7-4 |          |				
| root | 127.0.0.1 |          |
| root | ::1       |          |
|      | localhost |          |
|      | centos7-4 |          |
+------+-----------+----------+

查看mysql数据库中 user的这个表中的 用户 、主机、和密码信息

[root@centos7-4 ~]# mysql -uroot -p -h127.0.0.1 连接数据库方法

默认情况下mysql数据库登陆的安全限制权限基本没有设置;我们可以拿任何一个匿名用户都可以登陆,这样给数据库带来了很大的安全隐患,所以我们在安装完数据后需要对数据库默认的安全限制做相应的基础配置。

例子: 我们现在使用非root用户登陆mysql

Linux —mysql数据库配置服务(一)_第7张图片

mysql_secure_installation ## sql 安全设置脚本

设置完之后在使用其它用户登陆就会失败

[root@centos7-4 ~]# mysql -uroot -p
Enter password:
MariaDB [(none)]> select user,password,host from mysql.user;
+------+-------------------------------------------+-----------+
| user | password                                  | host      |
+------+-------------------------------------------+-----------+
| root | *E74858DB86EBA20BC33D0AECAE8A8108C56B17FA | localhost |
| root | *E74858DB86EBA20BC33D0AECAE8A8108C56B17FA | 127.0.0.1 |
| root | *E74858DB86EBA20BC33D0AECAE8A8108C56B17FA | ::1       |
+------+-------------------------------------------+---------

mysql客户端程序:

1、mysql: 交互式的CLI工具 ###mysql本身也是个客户端工具

2、mysqldump:备份工具,基于mysql协议向mysqld发起查询请求,并将查得的所有数据转换成insert等写操作语句保存文本文件中

3、mysqladmin:基于mysql协议管理mysqld

4、mysqlimport:数据导入工具

musql的使用模式:

1、交互式模式

  • [root@centos7-4 ~]# mysql -uroot -p
  • Enter password:
  • MariaDB [(none)]> ###交互式模式

可运行命令有两类

客户端命令:MariaDB [(none)]> help ###输入help显示帮助工具列表

?         (\?) Synonym for `help'.
clear     (\c) Clear the current input statement.
connect   (\r) Reconnect to the server. Optional arguments are db and host.
delimiter (\d) Set statement delimiter.
edit      (\e) Edit command with $EDITOR.
ego       (\G) Send command to mysql server, display result vertically.
exit      (\q) Exit mysql. Same as quit.
go        (\g) Send command to mysql server.
help      (\h) Display this help.
nopager   (\n) Disable pager, print to stdout.
notee     (\t) Don't write into outfile.
pager     (\P) Set PAGER [to_pager]. Print the query results via PAGER.
print     (\p) Print current command.
prompt    (\R) Change your mysql prompt.
quit      (\q) Quit mysql.
rehash    (\#) Rebuild completion hash.
source    (\.) Execute an SQL script file. Takes a file name as an argument.
status    (\s) Get status information from the server.
system    (\!) Execute a system shell command.
tee       (\T) Set outfile [to_outfile]. Append everything into given outfile.
use       (\u) Use another database. Takes database name as argument.
charset   (\C) Switch to another charset. Might be needed for processing binlog with multi-byte charsets.
warnings  (\W) Show warnings after every statement.
nowarning (\w) Don't show warnings after every statement.

mysql客户端工具使用例子:

MariaDB [(none)]> status   		等价于 \s
Server:                 MariaDB
Server version:         5.5.56-MariaDB MariaDB Server
Protocol version:       10
UNIX socket:            /var/lib/mysql/mysql.sock
MariaDB [(none)]> system ls	等价于 \!  ls
anaconda-ks.cfg  Documents  initial-setup-ks.cfg  Public
data.tar         Downloads  Music                 Templates
Desktop          file1      Pictures              Videos

数据库修改提示符:

[root@centos7-4 ~]# mysql -uroot -p
MariaDB [(none)]> show databases;
MariaDB [(none)]>use mysql
MariaDB [mysql]> use mysql;	##切换数据库
Database changed
MariaDB [mysql]> 				##切换后提醒在mysql中

修改等提示符:

man mysql  /prompt
方法一:
[root@centos7-4 ~]# vim /etc/profile.d/mysql.sh
export MYSQL_PS1="(\u@\h \v ) [\d]> "
方法二:
MariaDB [(none)]> mysql --prompt="(\u@\h) [\d]> "	登陆mysql数据库后修改
方法三:
vim /etc/my.cnf.d/mysql-clients.cnf
 [mysql]
               prompt=" \\r:\\m:\\s> "

MyISAM存储引擎的管理工具:

1、myisamchk:检查MyISAM库

2、myisampack:打包MyISAM表,只读

服务器端程序

1、mysqld_safe

2、mysqld ##默认使用mysqld

3、mysqld_multi:多实例 ,示例: mysqld_multi --example

*****所实例的意思是在一台主机上开多个mysql程序**** 在测试服务器中会使用 修改配置和端口等

用户账号

mysql用户账号由两部分组成:

'USERNAME'@'HOST‘

_ 匹配任意单个字符 / 172.16.0.0/255.255.0.0 或 172.16.%.%

例子:wang@'192.168.161.%'	

服务器端命令:

SQL, 需要语句结束符;

脚本模式:

  • mysql –uUSERNAME -pPASSWORD < /path/somefile.sql
  • mysql> source /path/from/somefile.sql

例子:

vim test.sql
show databases;
select user,host,password from mysql.user;
[root@centos7-4 ~]# mysql -uroot -p < test.sql
Enter password: 
Database
information_schema
mysql
performance_schema
test
user    host    password
root    localhost       *E74858DB86EBA20BC33D0AECAE8A8108C56B17FA
root    127.0.0.1       *E74858DB86EBA20BC33D0AECAE8A8108C56B17FA
root    ::1     *E74858DB86EBA20BC33D0AECAE8A8108C56B17FA
或者登陆mysql数据库后:
MariaDB [(none)]> source test.sql  同样也可以执行脚本文件	##脚本的后缀不做要求
MariaDB [(none)]> \. test.sql  同样也可以执行脚本文件

Mysql客户端

mysql客户端可用选项:
-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  端口:3306   oracle 端口:1521   sql server端口:1433    远程桌面端口:3389 

例子:

[root@centos7-4 ~]# mysql -uroot -p -D mysql
MariaDB [mysql]> 
[root@centos7-4 ~]# mysql -uroot -pmysql -e "show databases"
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
| test               |
+--------------------+

服务器监听的两种socket地址:

ip socket: 监听在tcp的3306端口,支持远程通信

unix sock: 监听在sock文件上, 仅支持本机通信

如: /var/lib/mysql/mysql.sock)

说明: host为localhost,127.0.0.1连接时自动使用unix sock

MariaDB [(none)]> status

UNIX socket: /var/lib/mysql/mysql.sock

服务器端配置

服务器端(mysqld):工作特性有多种配置方式
命令行选项:
配置文件: 类ini格式
集中式的配置,能够为mysql的各应用程序提供配置信息
[mysqld]
[mysqld_safe]
[mysqld_multi]
[mysql]
[mysqldump]
[server]
[client]
格式: parameter = value
说明: _和- 相同
1, ON, TRUE意义相同, 0, OFF, FALSE意义相同

配置文件:

后面覆盖前面的配置文件,顺序如下:
/etc/my.cnf 						Global选项  全局
/etc/mysql/my.cnf 					Global选项  全局
SYSCONFDIR/my.cnf 				Global选项  全局	
$MYSQL_HOME/my.cnf 				Server-specific 选项
--defaults-extra-file=path
~/.my.cnf 							User-specific 选项
[root@centos7-4 ~]# cat /etc/my.cnf

配置mariadb

侦听3306/tcp端口可以在绑定有一个或全部接口IP上
vim /etc/my.cnf
[mysqld]
skip-networking=1
关闭网络连接,只侦听本地客户端, 所有和服务器的交互都通过一个socket实现, socket的配置存放在/var/lib/mysql/mysql.sock) 可在/etc/my.cnf修改
[root@centos7-4 ~]# vim /etc/my.cnf
[mysqld]
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock
skip=networking=1
[root@centos7-4 ~]# systemctl restart mariadb
 [root@centos7-4 ~]# ss -ntl  
*******mysql 数据库3306端口就会停用、只可以使用本地客户端连接******

 

你可能感兴趣的:(Linux —mysql数据库配置服务(一))