关系型数据库之Mysql编译安装及数据库基础(一)

一、为什么会有数据库呢?

刚开始接触数据库的朋友们,都会问数据库用来干啥的呢?字面表达的意思就是用来存储数据的仓库简称"数据库",在日常生活中我们与数据库相关的事务都是一大把一大把的,例如: 1.我们去做火车的时候需要实名认证,为什么安检人员可以通过我们的身份证就可以查询我们的个人信息呢,因为们都是有户口的群众,在公安居民信息库都录入着我们的信息,而们的信息也是存储在国家公民的信息库里面的,这也是我们所说的数据库,早期最传统的数据库就是文本文件,没当查询数据时都需要从头到尾把整个文件都查询一次,查询和检索的效率极其低下,随着互联网大数据的爆发,这种方式以及面临淘汰,于是后来开发产生出各种各样的数据管理程序,这就是数据库的开端及新生。

文本数据库管理数据的缺陷:

  1. 数据冗余、信息冗余产生及数据完整性:导致同一个数据有可能重复多次。
  2. 数据访问缓慢麻烦。
  3. 数据孤立性:数据拆分很难再次建立关联关系。
  4. 原子性问题:有效保证数据库之间交互,能及时同步数据。
  5. 并发访问:文件方式无法实现多并发访问。
  6. 安全性问题:文件方式授权过于笼统,不能实现精细化授权(如:针对库授权、针对表授权、针对用户授权)

数据库管理系统

为了更加精细的操作数据的存取,在应用程序和数据之间建立一个中间层,专门用来负载数据存取和管理,就产生了数据库管理系统(DBMS)。

(DBMS)数据库管理系统,包含前端API接口与前端应用程序交互,也包含shell命令行接口与程序员直接交互。同时负责完成数据存取。这时,前端程序将不再直接面对数据,而有数据库管理系统代理完成更加精细管理工作。包括权限,以及如何按照比较高效的方式分配数据。

数据库模型:
1)层次模型
2)网状模型
3)关系模型:1975年又IBM研究院E.F.Coded提出并发表了最开始论述关系型数据库的模型论文,有拉里.克瑞森和其程序员朋友将其实现,后来承接了美国军方一个名叫oracle的项目创建了oracle公司
4)NoSQL:No only SQL , 很多产品,各有侧重点。 由于海量数据是由分布式存贮, 所以需要CAP测试,NoSQL 产品通常只能满足两个。
CAP测试: Consistent Avilable Partition tolerence 一致性, 可用性,容错性

目前市面上的开源数据库:

1)sqliteMySQL
2)PostgreSQL(EnterpriseDB)
3)MariaDB
4)MySQL

关系型数据库管理模型:

存储的文件: 

1)数据:保存的数据

2)索引:保存数据的索引文件

3)事物文件:操作事物文件 

2.磁盘空间管理器: 用于管理磁盘上数据的存取,建立索引等工作 

3.缓冲区管理器: 为了解决频繁I/O的低效,一部分检索结果会存在缓冲区中内存中,缓冲区管理器用于管理存于内存中

4.存取方法接口:管理数据的存取方法,于sql语句作用

5.事务管理器:当以个存取操作完成后,并不是直接写入数据文件,而且写入事物日志中,如果此时数据库崩溃,数据库存取数据将会存入事务日志中。写入数据库文件为随机I/O,写入日志文件为顺序I/O 所以后者比较快。
事务:满足ACID测试
  A:原子性
  C: 一致性
  I:隔离性
  D:持久性

6.锁管理器:当某一数据在被用户访问时,它将不能再被其他用户访问,会被锁管理器锁住。

7.恢复管理器:存取操作写入事务日志但没写入数据中时,数据库崩溃,在第二次重新启时候,事务日志中内容将通过恢复管理器写入到数据文件中

8.SQL查询引擎

1). SQL Struct Query Language: 结构化查询语言, 包含以下三类命令

(1) DCL: Data Control Language: 数据控制语言,主要是授予或取消某些访问权限

GRANT/REVORK

(2) DDL: Data Definition Language:数据定义语言,建立表,创建索引

CTREAT/ALTER/DROP

(3) DML : Data Manipulation Language:数据需改语言

SELECT/INSERT/DELETE/UPDATE

2). SQL查询引擎包含四个部分
    (1) 分析器,进行SQL语言的语法分析
    (2) 查询计划,对查询对象路径进行优化,有可能统一对象存在多条索引
    (3) 优化器, 对于SQL语言查询方式进行优化
    (4) 求解器, 管理返回结果等
    (5) 线程池, 当mysql服务器接收多个并发请求时,分配线程响应多用户
9.SQL命令行接口: SQL的客户端程序,使用SQL命令查询SQL服务器
10.应用程序命令API:不同编程语言有不同的SQL命令输出接口,可以通过API驱动把SQL语句输送给SQL服务器,本质上也是SQL客户端
11.ODBC: 底层关系型数据库查询标准
12.SQL索语言的标准 ANSI: SQL-86, SQL-89, SQL-92, SQL-99, SQL-2003

13.事务隔离:

隔离级别:

读未提交:read uncommitted

读提交: read committed

可重读:repeatable read

串行化: serializable

14.Mysql存储引擎

MyISAM:无事务

非聚集

InnoDB:事务型

聚集索引

15.关系数据库的约束:

主键

外键

惟一键

条件约束

非空约束

二、MySQL数据库管理软件安装:

mysql程序来源: mysql.com
  1)vendor 系统自带的rpm包
  2)MySQL官方rpm包:不建议使用,可能会打破依赖关系
  3)通用二进制格式:建议
  4)源码编译:建议

下面我们通过案例进入关系数据库之MySQL生产实战配置(编译安装):

操作系统:CentOS release 6.5(x64)

mysql版本:mysql-5.6.30

(1).安装开发环境及开发包组:

# yum -y groupinstall "Development Tools"
# yum -y groupinstall "Development Libraries"
# yum -y install pcre-devel
# yum -y install ncurses-devel
# yum -y install openssl-devel

(2).安装夸平台编译器cmake

# tar xf cmake-2.8.8.tar.gz 
# cd cmake-2.8.8
# ./configure 
# make && make install

(3).数据存储目录规划准备:

规划一个大小为:20G的逻辑卷,以便后期数据量扩展:

# fdisk /dev/sda
# kpartx -l /dev/sda
# kpartx -af /dev/sda
# partx -a /dev/sda

创建逻辑分区管理:

# pvcreate /dev/sda3 
# vgcreate myvg /dev/sda3 
# lvcreate -L 10G -n mydata myvg

格式化挂载逻辑卷目录:

# mke2fs -t ext4 /dev/myvg/mydata 
# mkdir /mydata   #创建挂载目录
# vim /etc/fstab  #在最后加入此行
/dev/myvg/mydata    /mydata            ext4    defaults,acl    0 0
# mount -a
# mkdir /mydata/data
# groupadd -r -g 3306 mysql                    #创建mysql服务用户组
# useradd -r -g 3306 -d /mydata/data/ -s /sbin/nologin mysql    #创建mysql服务用户
# chown mysql.mysql /mydata/data/

考虑生产环境数据安全,可使用ACL权限控制:

# setfacl -m u:mysql:rwx /mydata/data/
# getfacl /mydata/data/
getfacl: Removing leading ‘/‘ from absolute path names
# file: mydata/data/
# owner: mysql
# group: mysql
user::rwx
user:mysql:rwx
group::r-x
mask::rwx
other::r-x

(4).编译安装mysql-5.5.33

编译安装之前我们需要设置主机名及主机名解析:

# hostname mysql.samlee.com
# vim /etc/sysconfig/network 
HOSTNAME=mysql.samlee.com
# vim/etc/hosts 
172.16.100.7    mysql.samlee.com

编译安装:

# tar xf mysql-5.5.33.tar.gz
# cd mysql-5.5.33
# cmake . -DCMAKE_INSTALL_PREFIX=/usr/local/mysql > -DMYSQL_DATADIR=/mydata/data > -DSYSCONFDIR=/etc > -DWITH_INNOBASE_STORAGE_ENGINE=1 > -DWITH_ARCHIVE_STORAGE_ENGINE=1 > -DWITH_BLACKHOLE_STORAGE_ENGINE=1 > -DWITH_READLINE=1 > -DWITH_SSL=system > -DWITH_ZLIB=system > -DWITH_LIBWRAP=0 > -DMYSQL_UNIX_ADDR=/tmp/mysql.sock > -DDEFAULT_CHARSET=utf8 > -DDEFAULT_COLLATION=utf8_general_ci
# make && make install

(5).数据库服务器初始化

# cd /usr/local/mysql/
# chown -R :mysql /usr/local/mysql/    #赋予目录用户组为mysql

#运行./script/mysql_install_db 创建系统库 
# scripts/mysql_install_db --user=mysql --datadir=/mydata/data/

# cp support-files/my-large.cnf /etc/my.cnf             #复制配置文件                                                       
# vim/etc/my.cnf                                        #编辑配置文件
在[mysqld]下添加此项:
datadir = /mydata/data
# cp support-files/mysql.server /etc/init.d/mysqld        #复制启动脚本
# chkconfig --add mysqld                                #加入服务列表
# service mysqld start                                    #启动mysql服务

查询初始化及启动后创建的文件:

# ll /mydata/data/
total 28700
-rw-rw----. 1 mysql mysql 18874368 May  6 14:27 ibdata1                #inodb存储引擎的表空间文件
-rw-rw----. 1 mysql mysql  5242880 May  6 14:27 ib_logfile0            #inodb事物日志    
-rw-rw----. 1 mysql mysql  5242880 May  6 14:27 ib_logfile1
drwx------. 2 mysql root      4096 May  6 14:25 mysql
-rw-rw----. 1 mysql mysql      107 May  6 14:27 mysql-bin.000001          #二进制日志
-rw-rw----. 1 mysql mysql       19 May  6 14:27 mysql-bin.index
-rw-r-----. 1 mysql root      1777 May  6 14:27 mysql.samlee.com.err      #错误信息记录
-rw-rw----. 1 mysql mysql        6 May  6 14:27 mysql.samlee.com.pid      #pid文件
drwx------. 2 mysql mysql     4096 May  6 14:25 performance_schema
drwx------. 2 mysql root      4096 May  6 14:25 test

导出头文件,库文件和man文档:

# ln -sv /usr/local/mysql/include/ /usr/include/mysql
# vim /etc/ld.so.conf.d/mysql.conf
添加此行:
/usr/local/mysql/lib/
# ldconfig
# ldconfig -p | grep mysql
# vim /etc/man.config 
添加此行:
MANPATH /usr/local/mysql/man
# man mysqld

(6)配置PATH环境变量

# vim /etc/profile.d/mysql.sh
export PATH=$PATH:/usr/local/mysql/bin
# chmod +x /etc/profile.d/mysql.sh
# . /etc/profile.d/mysql.sh

以上mysql编译安装过程。

、MySQL配置文件my.cnf及MySQL命令的应用:

1).服务器配置文件和客户端配置是集中式的配置属于多个应用程序共用的配置文件,可以分为以下3个部分:

(1)[mysql]: mysql客户端配置部分,只是用来配置mysql自己的客户端 。
(2)[mysqld]: mysql客户端服务器配置部分。
(3)[client]: mysql的所有客户端,包括其他的客户端。

使用配置文件的方式:
    1、它依次查找每个需要查找的文件,结果是所有文件并集;
    2、如果某参数在多个文件中出现多次,后读取的最终生效;

2).查询mysql服务变量方式有如下:

(1)显示mysqld程序启动时可用的选项,通常都是长选项
(2)显示mysqld的配置文件中可用的服务变量

# /usr/local/mysql/bin/mysqld --help --verbose

进入mysql模式查询:

mysql> SHOW GLOBAL VARIABLES
mysql> SHOW SESSION VARIABLES

3).修改mysql管理员密码删除匿名用户:

用户帐号由两部分组成:[email protected]
host还可以使用通配符:
%: 任意长度的任意字符
_: 匹配任意单个字符

(1)删除所有匿名用户

mysql> DROP USER ‘‘@‘localhost‘;        
mysql> DROP USER ‘‘@‘mysql.samlee.com‘; 
mysql> DROP USER ‘root‘@‘::1‘;

(2)修改管理员密码

第1种方式:

mysql> SET PASSWORD FOR ‘root‘@‘localhost‘ = PASSWORD(‘redhat‘);
mysql> SET PASSWORD FOR ‘root‘@‘127.0.0.1‘ = PASSWORD(‘redhat‘);
mysql> SET PASSWORD FOR ‘root‘@‘mysql.samlee.com‘ = PASSWORD(‘redhat‘);
mysql> FLUSH PRIVILEGES;

第2种方式:

# mysqladmin -uroot -h172.16.100.7 password ‘redhat‘ -p
# mysqladmin -uroot -hlocalhost password ‘redhat‘ -p
# mysqladmin -uroot -hmysql.samlee.com password ‘redhat‘ -p

第3种方式:

# mysql -uroot -hlocalhost -p
mysql> use mysql;
mysql> UPDATE user SET password = PASSWORD(‘redhat‘) WHERE user = ‘root‘;
mysql> FLUSH PRIVILEGES;

4).连入MySQL服务器

连接过程如下:

mysql client <--mysql protocol--> mysqld

mysqld接收连接请求:
    本地通信:客户端与服务器端位于同一主机,而且还要基于127.0.0.1(localhost)地址或lo接口进行通信;
        Linux OR Unix: Unix Sock, /tmp/mysql.sock, /var/lib/mysql/mysql.sock
        Windows: memory, pipe
    远程通信:客户端与服务器位于不同的主机,或在同一主机便使用非回环地址通信
        TCP socket
客户端工具:mysql, mysqladmin, mysqldump, mysqlcheck
    [client]
通行的选项:
        -u, --user=
        -h, --host=
        -p, --password=
        --protocol={tcp|socket|memory|pipe}
        --port=
        --socket=    例如:/tmp/mysql.sock
mysql默认监听的端口: 3306/tcp

演示如下:

# mysql -uroot -hlocalhost -p
Enter password: 

# mysql -uroot -h127.0.0.1 -p --port=3306 --socket=/tmp/mysql.sock
Enter password:

5).MySQL工作模式:

脚本模式:

# mysql -uUsername -hhostname -p < /path/to/mysql_script.sql

脚本演示如下:

mysql交互式模式:
    客户端命令
        mysql> help
        mysql> \?
            \c:结束当前输入执行
            \g:按列显示
            \G:以行显示
            \q:退出mysql
            \!
            \s
            \. /path/to/mysql_script.sql

服务器端命令:需要命令结束符,默认为分号(;)
        mysql> help contents
        mysql> help Keryword

mysql命令行选项:
    --compress
    --database=, -D
    -H, --html:输出结果为html格式的文档
    -X, --xml: 输出格式为xml
    --sate-updates: 拒绝使用无where子句的update或delete命令;

mysql命令提示符:
    mysql> 等待输入命令
    ->
    ‘>
    ">
    `>
    /*> 注释信息

mysql的快捷键:
    Ctrl + w: 删除光标之前的单词
    Ctrl + u: 删除光标之前至命令行首的所有内容
    Ctrl + y: 粘贴使用Ctrl+w或Ctrl+u删除的内容
    Ctrl + a: 移动光标至行首
    Ctrl + e: 移动光标至行尾

mysqldmin工具:
    mysqladmin [options] command [arg] [command [arg]] ...

command:
            create DB_NAME
            drop DB_NAME
            debug: 打开调试日志并记录于error log中;

status:显示简要状态信息
                --sleep #: 间隔时长
                --count #: 显示的批次

extended-status: 输出mysqld的各状态变量及其值,相当于执行“mysql> SHOW GLOBAL STATUS”
            variables: 输出mysqld的各服务器变量
            flush-hosts: 清空主机相关的缓存:DNS解析缓存,此前因为连接错误次数过多而被拒绝访问mysqld的主机列表
            flush-logs: 日志滚动,二进制日志和中继日志
            refresh: 相当于同时使用flush-logs和flush-hosts
            flush-privileges:
            reload: 功能同flush-privileges
            flush-status: 重置状态变量的值
            flush-tables: 关闭当前打开的表文件句柄
            flush-threads:清空线程缓存
            kill: 杀死指定的线程,可以一次杀死多个线程,以逗号分隔,但不能有多余空格
            password: 修改当前用户的密码;
            ping:
            processlist:显示mysql线程列表
            shutdown: 关闭mysqld进程;
            start-slave
            stop-slave: 启动/关闭从服务器线程

实例演示:

# mysqladmin -uroot -hmysql.samlee.com status --sleep 1  -p
# mysqladmin -uroot -hmysql.samlee.com variables -p

GUI客户端工具:
    Navicat for mysql
    Toad for mysql
    mysql front
    sqlyog
    phpMyAdmin

以上Mysql编译安装及数据库基础(一)所有内容。

时间: 2024-10-03 13:30:10

关系型数据库之Mysql编译安装及数据库基础(一)的相关文章

Linux服务器集群架构部署搭建(六)数据库服务器MySQL编译安装及主从同步配置(1)

命运是大海,当你能够畅游时,你就要纵情游向你的所爱,因为你不知道狂流什么会到来,卷走一切希望与梦想. 作者:燁未央_Estelle声明:测试学习,不足之处,欢迎指正. 第一章 数据库企业应用场景 1.1 数据库的企业应用 MySQL是一种关联数据库管理系统,关联数据库将数据保存在不同的表中,而不是将所有数据放在一个大仓库内,这样就增加了速度并提高了灵活性.MySQL所使用的SQL语言是用于访问数据库的最常用标准化语言.MySQL软件采用了双授权政策,它分为社区版和商业版,由于其体积小.速度快.总

烂泥:mysql5.0数据库源码编译安装

本文首发于烂泥行天下. 本次实验的mysql.OS相关信息如下: Mysql:5.0.96 OS:centos 32 bit 最近公司要上新的业务,指明数据库使用的是mysql5.0版本.如果是使用rpm包安装的话,那就很简单了.直接使用yum安装即可,命令如下: yum –y install mysql mysql-server Yum方式安装完毕后,直接启动mysql数据库服务即可.如下图: 这样基本上就可以了. 但是这样安装mysql数据库,没有进行定制.比如mysql数据库的数据文件存储

mysql编译安装(详细)(转载)

mysql编译安装(详细) 一.编译安装MySQL前的准备工作 安装编译源码所需的工具和库 yum install gcc gcc-c++ ncurses-devel perl 安装cmake,从http://www.cmake.org下载源码并编译安装 wget http://www.cmake.org/files/v2.8/cmake-2.8.10.2.tar.gz tar -xzvf cmake-2.8.10.2.tar.gz cd cmake-2.8.10.2 ./bootstrap ;

Linux(centos)下mysql编译安装教程

Linux下mysql编译安装教程 #查看linux发行版本号 cat /etc/issue #查看linux内核版本 uname -r 本文测试环境centOS6.6 一.Linux下编译安装MySQL前的准备工作 在线安装编译源码所需的工具和库(无法联网的话要事先准备软件,或者系统盘) yum install gcc gcc-c++ ncurses-devel perl 从mysql5.5起源代码编译需要借助cmake这款编译工具.从http://www.cmake.org下载cmake源码

linux服务器配置之三---lamp之mysql编译安装

Mysql的安装 1.  Mysql提供的版本:社区版,企业版,集群版,Mysql workbench(gui tool)mysql图形化管理器,包含管理.查询等功能.Percona开源的mysql优化工具. 2.  安装包格式: (1)Rpm:分为不同的版本(红帽,SUSE等不同版本). Mysql-client  客户端 Mysql-server 服务器端 Mysql-shared  共享库 Mysql-shared-compat 兼容库,为了兼容老版本. 一般安装以上四个包就可以了. My

Mysql数据库源码编译安装

一.下载源码编译工具:yum -y install \gcc \gcc-c++ \make \ncurses \ncurses-devel \bison \cmake 二.编译及安装1.创建运行用户useradd -s /sbin/nologin mysql //手动建一个账号2.解包//把压缩包传进Linux里面tar xf mysql-boost-5.7.20.tar.gz -C /opt/ //解压的目录要足够大,不然会报错cd /opt/mysql-5.7.20/ 3.配置:cmake

Python教程:操作数据库,MySql的安装详解

各位志同道合的同仁请点击上方关注 本教程是基于Python语言的深入学习.本次主要介绍MySql数据库软件的安装.不限制语言语法,对MySql数据库安装有疑惑的各位同仁都可以查看一下. 如想查看学习Python相关文章,请移步:Python开发实战系列教程-链接汇总,持续更新. 数据库的应用在软件开发领域是重重之重.大量数据和配置被保存在数据库中以被使用.如果想开发一套软件系统与数据库是分不开的.发展到现在,各类数据库应需求而生:关系型与非关系型.单机与分布式.文件型内存型等等. 对于关系型数据

在centos上编译安装mariadb数据库

一.安装前提(准备数据文件.安装其他依赖的软件) 1.准备数据存放的目录 [[email protected] ~]# fdisk /dev/sdb  (fdisk /dev/sdb 创建一个逻辑分区/dev/sdb1)Device contains neither a valid DOS partition table, nor Sun, SGI or OSF disklabelBuilding a new DOS disklabel with disk identifier 0xa592b3

Ubuntu 14.04数据库服务器--mysql的安装和配置

mysql是Oracle公司的一种开放源代码的关系型数据库管理系统,被广泛应用于各中小网站,是一种跨平台的数据库管理系统,现在介绍一下如何在Ubuntu 14.04上安装和配置mysql 1. 更新源列表 打开"终端窗口", 输入"sudo apt-get update"-->回车-->"输入root用户的密码"-->回车,就可以了.如果不运行该命令,直接安装mysql,会出现"有 几个软件包无法下载,您可以运行apt