zoukankan      html  css  js  c++  java
  • mysql简单介绍及安装

    MySQL是一个关系型数据库管理系统关系数据库,将数据保存在不同的表中,而不是将所有数据放在一个大仓库内,这样就增加了速度并提高了灵活性,所使用的 SQL 语言是用于访问数据库的最常用标准化语言。MySQL 软件采用了双授权政策,分为社区版和商业版,由于其体积小、速度快、总体拥有成本低,尤其是开放源码这一特点,一般中小型网站的开发都选择 MySQL 作为网站数据库。

    mysql分为关系型数据库和非关系型数据库

    关系型:

            库中的数据二维表的方式存储

    概念:
    关系:存储数据的表的表名
    元组:表中的一条记录(一行是一条记录)
    属性:表中的一个字段(一列是一个字段)                          

    域:字段的取值范围
    关键字:可以唯一标识一条记录的字段(一个或多个字段)     
    关系模型:表和表之间的关系

    关系性数据库遵循ACID
    A:原子性
    C:一致性
    I:隔离性
    D:持久性

    原子性

    原子性任务是一个独立的操作单元,是一种要么全部是,要么全部不是的原子单位性的操作。

    一致性

    一个事务可以封装状态改变(除非它是一个只读的)。事务必须始终保持系统处于一致的状态,不管在任何给定的时间并发事务有多少。

    隔离性

    多个事务并发访问时,事务之间是隔离的,一个事物不应该影响其它事务运行效果。在并发环境中,当不同的事务同时操纵相同数据时,每个事务都有各自的完整数据空间,由并发事务所做的修改必须与其它并发事务所做的修改隔离。

    并行是可能出行的问题:

    .脏读

    脏读发生在:当一个事务允许读取一个被其他事务改变但是未提交的状态时,这是因为并没有锁阻止读取,如上图,你看到第二个事务读取了一个并不一致的值,不一致的意思是,这个值是无效的,因为修改这个值的第一个事务已经回滚,也就是说,第一个事务修改了这个值,但是未提交确认,却被第二个事务读取,第一个事务又放弃修改,悔棋了,而第二个事务就得到一个脏数据。

    .不可重复读

    在同一事务中,对于同一分数据读到的结果不一致。比如:事务B在事务A提交前读到的结果,和提交后读到的结果可能不同。

    持久性

    一个成功的事务将永久性地改变系统的状态,所以在它结束之前,所有导致状态的变化都记录在一个持久的事务日志中。如果我们的系统突然受到系统崩溃或断电,那么所有未完成已提交的事务可能会重演。

    关系型优点:                             缺点:

    1. 容易理解                        1. 事务一致性(数据一致性),为了保证数据的完整,会带来额外的开销,导致性能降低

    2. 可以借助于sql语句来进行数据的读写            2. 关系型数据库在高并发的读写请求下,会程序系统的性能瓶颈            

    3. 便于维护表中的数据(主要用于保证数据完整、数据一致)              3. 可扩展性  4. 读写的时效性      5. 需要写复杂的SQL,甚至需要用多表联合查询


    非关系型数据库(NoSQL)

    通常NoSQL是以key-value的方式存储

    特点:
    性能相比关系型数据库更好,更易于扩展。

    常用的关系和非关系数据库

    1. oracle
    支持众多平台,收费
    应用场景:非互联网行业
    特点:稳定,安全,重量级,收费

    2. sql server
    仅仅支持windows平台

    3. mysql
    应用场景:互联网企业
    特点:体积小、运行速度块、稳定、开源

    4. MariaDB
    mysql的分支,完全兼容mysql

    5. Redis
    key-value
    内存+磁盘
    因为磁盘的限制,导致在处理海量数据的时候不好
    适用场景:局部高并发的场景

    8. memcached
    key-value
    内存
    逐渐被redis取代

    存储引擎

    MYISAMMySQL 5.0 之前的默认数据库引擎,最为常用。拥有较高的插入,查询速度,但不支持事务
    InnoDB事务型数据库的首选引擎,支持ACID事务,支持行级锁定, MySQL 5.5 起成为默认数据库引擎
     

    MyISAM存储的数据格式,包括三部分
    MYD:保存表中的数据
    frm:保存表结构
    MYI:保存的索引信息

    安装mysql(通用二进制格式)

    (centos7下安装)

    1.准备mysql的配置文件(不再提供配置文件模版)

    [root@localhost ~]# mv /root/my.cnf /etc/  <<<此my.cnf模板是自定义的

    说明:
    安装位置:/usr/local/mysql
    数据位置: /data/mysql/mysql3306/data
    临时文件位置:/data/mysql/mysql3306/tmp
    日志文件位置:/data/mysql/mysql3306/logs/mysql-bin
    socket文件位置:/tmp/mysql3306.sock

    [root@localhost ~]# groupadd mysql
    [root@localhost ~]# useradd -r -g mysql -s /sbin/nologin mysql
    [root@localhost ~]# tar xf /root/mysql-5.7.23-linux-glibc2.12-x86_64.tar.gz 安装包可在官网直接下载
    [root@localhost ~]# mv mysql-5.7.23-linux-glibc2.12-x86_64 /usr/local/
    [root@localhost ~]# cd /usr/local
    [root@localhost local]# ln -sv mysql-5.7.23-linux-glibc2.12-x86_64/ mysql
    chown mysql.mysql mysql -R
    

     创建相关目录

    [root@localhost local]# mkdir /data/mysql/mysql3306/{data,tmp,logs} -pv
    chown -R mysql.mysql /data

    初始化

    [root@localhost local]# /usr/local/mysql/bin/mysqld --initialize --user=mysql
    说明:1. --user是用于指定以哪个用户的身份完成初始化工作(默认从配置文件中读取) 2. 数据目录下如果有文件,会导致初始化失败

    初始化完成后,会在数据目录下生成一系列文件

    [root@localhost local]# cd /data/mysql/mysql3306/data/

    [root@localhost data]# ls
    abc ib_logfile2
    a.sh ibtmp1
    auto.cnf innodb_status.1656
    bak innodb_status.1657
    db innodb_status.1665
    db4 innodb_status.16762
    dbq innodb_status.16895
    error.log innodb_status.4740
    gyf innodb_status.5819
    hh mysql
    ib_buffer_pool mysql.pid
    ibdata1 performance_schema
    ib_logfile0 slow.log
    ib_logfile1 sys  <<<<说明初始化成功

    说明:
    error.log中保存了安装、启动、运行mysql过程中所出现的错误信息出,初始root密码也在其中

    导出二进制

    [root@localhost ~]# vim /etc/profile.d/mysql.sh
    PATH=$PATH:/usr/local/mysql/bin/
    export PATH
    [root@localhost ~]# source /etc/profile

    生成服务管理脚本

    [root@localhost ~]# cd /usr/lib/systemd/system/
    [root@localhost system]# vim mysql3306.service

      [Unit]
      Description=mysql 3306 service

      [Service]
      Type=forking
      ExecStart=/bin/bash /usr/local/mysql/support-files/mysql.server start
      ExecStop=/bin/bash /usr/local/mysql/support-files/mysql.server stop
      ExecRestart=/bin/bash /usr/local/mysql/support-files/mysql.server restart

      [Install]
      WantedBy=multi-user.target

    启动mysql

    [root@localhost system]# systemctl start mysql3306.service 
    [root@localhost system]# ss -tnl | grep 3306
    LISTEN 0 70 :::3306 :::* <<<mysql启动端口为3306

     

  • 相关阅读:
    自定义Collection类
    基本排序算法(冒泡排序,选择排序,插入排序)
    泛型
    XSD的学习
    SSH整合配置
    一个可以随时插入的json的简单实现
    将Properties文件的键值对调换位置重新生成一个文件
    JAVA MD5加密
    框架中退出登录
    java 生成 xml
  • 原文地址:https://www.cnblogs.com/bo-ke/p/9794274.html
Copyright © 2011-2022 走看看