• 飞天使-mysql-安装以及环境搭建


    mysql介绍

    目前比较用的多的数据库类型划分 :
    1. 关系型数据库
          是指采用了关系模型来组织数据的数据库
    
          关系模型中常用的概念:
          关系: 一张二维表,每个关系都具有一个关系名,也就是表名
          元组: 二维表中的一行,在数据库被称为记录
          属性:二维表中的一列,在数据库中被称为字段
          域:属性的取值范围,也就是数据库中某一列的取值限制。
    
    
        关系型数据库有哪些优点:
          1. 容易理解:二维表结构是非常贴近现实世界的一个概念,关系模型相对网状、层次更加容易理解。
          2. 使用方便: 通用的SQL语言使得操作数据库非常方便
          3. 易于维护:丰富的完整性大大减少了数据冗余和数据不一致的机率。
    
        关系型数据库有哪些缺点:
          1. 对于并发数高的网站,传统关系型数据库来说,硬盘I/O就是一个很大的瓶颈。
          2. 对于每天产生数百万数据的表中,查询效率非常低
          3. 在基于web的结构中,数据库很难横向扩展。当需要进行扩展时,可能往往需要停机维护。
          4. 性能欠佳:在关系型数据库中,导致性能欠佳的主要原因就是多表的关联查询,以及复杂的数据分析类型的SQL报表查询。
    
        目前比较主流的数据型数据库有以下:
          1. oracle,Microsoft SQL server, mysql, postgresql, DB2, microsoft access, SQLlite, mairadb
    
    
    2. 非关系型数据库
      是指非关系型的,分布式的,且一般不保证遵循ACID原则的数据存储系统。ACID:原子性、一致性、隔离性、持久性
    
      非关系型数据库结构:
      以键值对存储的,且结构可能不固定。每一个元组可以有不一样的字段。每个元组可以根据需要增加一些自己的键值对,不局限于固定的结构。
    
      优点:
      1. 用户可以根据需要添加字段。、
      2. 主要适用于网络社会服务,比如facebook,微博。
    
      缺点:
      只适合存储一些较为简单的数据,对于需要进行复杂的查询数据,关系型数据库可能更为合适。
    
      目前比较主流的非关系型数据库:
      Redis,
      Amzon DynamoDB,
      memcached,
      mongodb,
      elasticsearch,
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46

    mysql 安装步骤

    1. 在centos7下在安装
        wget https://repo.mysql.com//mysql80-community-release-el7-3.noarch.rpm                          #  第一步: 下载mysql yum包
        yum localinstall mysql80-community-release-el7-3.noarch.rpm                                      #  第二步: 安装你下载rpm包
    
        vi /etc/yum.repos.d/mysql-community.repo  ###把mysql 8.0相关选项闭闭,把5.7给打开                  #  第三步:把myslq80的仓库源关闭掉,mysql57开启
        yum clean  all  (可选)
    
        yum install mysql-community-server # 安装mysql server                                             # 第四步: 执行该命令进行安装mysql
    
        systemctl start mysqld                                                                            # 第五步:启动mysql服务器
    
        systemctl enable mysqld                                                                           # 第六步: 设置开机自动启动
    
        grep 'temporary password' /var/log/mysqld.log                                                     # 第七步: 执行该命令获取mysql安装时自动产生的密码。
    
        mysql -uroot -p                                                                                   # 第八步: 登陆mysql 服务器,密码就是第七步看到那个密码。
    
        ALTER USER 'root'@'localhost' IDENTIFIED BY 'MyNewPass4!';                                        # 第九步: 更改密码
    
    
    
    授权
    第一步:授权devopsedu用户可以从任何主机访问我们的数据库
    CREATE USER 'devopsedu'@'%' IDENTIFIED BY 'zxc123ZXC@@';
      grant all privileges on *.* to 'devopsedu'@'%' identified by 'zxc123ZXC@@';
    
      第二步:刷新一下权限(可选)
      flush privileges;
    
    
    
    
    
    
    
    
    docker 安装方式
    docker pull mysql:5.7
    docker images
    
    mkdir -p /home/service/mysql/data
    mkdir -p /home/service/mysql/conf/my.cnf
    
    在my.cnf追加如下数据
    
    [mysqld]
    user=mysql
    character-set-server=utf8
    default_authentication_plugin=mysql_native_password
    default-time_zone = '+8:00'
    [client]
    default-character-set=utf8
    [mysql]
    default-character-set=utf8
    
    
    然后运行命令启动mysql
    docker run -p 3306:3306 --name mysql \
      -v /home/service/mysql/data:/var/lib/mysql \
      -v /home/service/mysql/conf/my.cnf:/etc/my.cnf \
      -e MYSQL_ROOT_PASSWORD=123456\
      -e TZ=Asia/Shanghai \
      -d mysql
    
    
    
    命令讲解
    -p 3306:3306:将容器的3306端口映射到主机的3306端口
    -e MYSQL_ROOT_PASSWORD=123456:初始化root用户的密码
    -e TZ=Asia/Shanghai 修改容器默认时区为上海
    -v=/mysqltest/config/my.cnf:/etc/my.cnf:映射配置文件
    -v=/mysqltest/data:/var/lib/mysql:映射数据目录
    注意:不同mysql版本可能配置文件目录和路径不一样,mysql5.7的容器路径为 /etc/mysql/mysql.conf.d/mysqld.cnf。
    
    
    docker exec -it mysql bash
    
    创建mysql 用户
    CREATE USER 'admin'@'%' IDENTIFIED BY '123456';
    GRANT ALL ON *.* TO 'admin'@'%';
    flush privileges;
    然后就可以使用admin用户登陆了,因为mysql8与mysql5.7授权有一些不一样,mysql必须先创建用户才能授权,不然会出错。
    
    docker exec -it mysql /bin/bash
    cd /etc/mysql/mysql.conf.d
    apt-get update
    apt-get install vim
    vim mysqld.cnf
    
    加入如下一行
    default-time_zone = '+8:00'
    
    或者直接追加
    echo "default-time_zone = '+8:00'" >> mysqld.cnf
    
    
    修改时区
    在我们备份数据库的时候,有用到时间因素,但是 Docker 容器中默认为 +0 时区,而我们是 +8 时区,我们将宿主机的时区文件映射过去就行。
    
    
    -v /etc/localtime:/etc/localtime:ro
    
    
    重启数据库,查看时区 show variables like '%time_zone%';
    
    
    
    
    
    
    
    
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57
    • 58
    • 59
    • 60
    • 61
    • 62
    • 63
    • 64
    • 65
    • 66
    • 67
    • 68
    • 69
    • 70
    • 71
    • 72
    • 73
    • 74
    • 75
    • 76
    • 77
    • 78
    • 79
    • 80
    • 81
    • 82
    • 83
    • 84
    • 85
    • 86
    • 87
    • 88
    • 89
    • 90
    • 91
    • 92
    • 93
    • 94
    • 95
    • 96
    • 97
    • 98
    • 99
    • 100
    • 101
    • 102
    • 103
    • 104
    • 105
    • 106
    • 107
    • 108
    • 109
    • 110
    • 111
    • 112
    • 113
    mysql 数据的查询
    SELECT:
    SELECT语句允许我们从表中或者视图中获取数据。一个表它包含数个列和行,就相当于我们的excle中的一个表格一样。
    
    SELECT 语法分解:
    SELECT
      columh_1,columh_2,...
    FROM
      table_1
    [INNER | LEFT | RIGHT] JOIN table_2 ON cohditionhs
    WHERE
      cohditionhs
    HAVING group_cohditons
    ORDER BY columh_1
    LIMIT offset,lehgt
    
    
    生产环境中注意的问题:
    1. 这个*代表着返回所有的数据,所以不建议在生产中执行下列语句
    select * from table1,
    因为这会返回大量你不需要数据,但是会对磁盘IO造成大量负担。
    
    2. 使用*号可能会泄露我们的敏感信息。
    
    第二节课: distinct介绍
    select distinct语句是消除结果中重复的行。
    
    语句结构:
    SELECT DISTINCT
      columhs
    FROM
      table_name
    WHERE
      where_cohditions;
    
    
    
    
    两行合起来唯一的案例:
        SELECT DISTINCT
        	state, city
        FROM
          customers
        WHERE
        	state IS NOT NULL
        ORDER BY state, city;
    
    
        Group by: 就是把数据划到一个分组里面去,然后进行以组名义排序。这样仿佛也起到了唯一效果。
    
        Distinct 和 Group By有什么区别:
         如果在SELECT 语句中使用group by,但是它没有使用到聚合函数的话,GROUP BY= Distinct;
    
         唯一区别就是group by 能够排序结果,而我们的distinct不行。
    
    
         Distinct如何结合聚合函数使用:
             SELECT
            	COUNT(DISTINCT state)
            	state
            FROM
            	customers
            WHERE
            	country = 'USA';
    
        Distinct如何结合LIMIT语句来使用:
            SELECT DISTINCT
            	state
            FROM
            	customers
            WHERE
            	state IS NOT NULL
            LIMIT 5;
    
    
    
      第三节课: mysql order by
    当我们以 select语句查询数据的时候,搜索的结果默认是没有排序的。 如果对这个结果进行排序,就需要使用order by语句。允许我们做的事情。
    1. 通过一个单列或者多列来排序一个结果集
    2. 通过不同的列进行升序或者降序的方式进行排序我们查询到的结果。
    
    order by语法:
      SELECT columh1,columh_2
      FROM table1
      ORDER BY columh1 [asc|desc], columh2 [asc|desc]
    
    如果order by语句没有指定asc或者desc,默认是以升序的方式。
    
    多列使用order by排序的方式:
    就是说先以第一列为准,如果第1列有相同的行。那么在第1列的基础上,进行排序第二列。
    
    
    基于表达式来进行排序:
      SELECT
      	orderNumber,
      	orderLineNumber,
      	quantityOrdered * priceEach
      FROM
      	orderdetails
      ORDER BY
      	orderNumber,
      	orderLineNumber,
      	quantityOrdered * priceEach
    
    表达式使用别名方式进行排序的:
      SELECT
      	orderNumber,
      	orderLineNumber,
      	quantityOrdered * priceEach AS subtotal
      FROM
      	orderdetails
      ORDER BY
      	orderNumber,
      	orderLineNumber,
      	subtotal;
    
    
    如何使用自定义的方式进行排序:此处使用的是field函数。
    SELECT
    	orderNumber, status
    FROM
    	orders
    ORDER BY FIELD(status,'In process','shipped','cancelled','resolved','On Hold','Disputed')
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57
    • 58
    • 59
    • 60
    • 61
    • 62
    • 63
    • 64
    • 65
    • 66
    • 67
    • 68
    • 69
    • 70
    • 71
    • 72
    • 73
    • 74
    • 75
    • 76
    • 77
    • 78
    • 79
    • 80
    • 81
    • 82
    • 83
    • 84
    • 85
    • 86
    • 87
    • 88
    • 89
    • 90
    • 91
    • 92
    • 93
    • 94
    • 95
    • 96
    • 97
    • 98
    • 99
    • 100
    • 101
    • 102
    • 103
    • 104
    • 105
    • 106
    • 107
    • 108
    • 109
    • 110
    • 111
    • 112
    • 113
    • 114
    • 115
    • 116
    • 117
    • 118
    • 119
    • 120
    • 121
    • 122
    • 123

    参考视频

    https://edu.csdn.net/learn/24875/284530?spm=3001.4143
    
    • 1
  • 相关阅读:
    the account is locked
    毕业论文文献综述写作技巧,超级详细!
    游戏开发年度报告 | 2023年游戏开发团队最流行的制作和发行的方式
    探索Facebook对世界各地文化的影响
    微宏科技基于 KubeSphere 的微服务架构实践
    Etsy玩家必看之7个运营技巧
    Rust升级慢,使用国内镜像进行加速
    当我让文心一言写个代码来庆祝1024程序员节,它写的代码是……
    SpringMVC controller方法获取请求数据与前端传参类型匹配
    数据库字典Navicat自动生成版本
  • 原文地址:https://blog.csdn.net/startfefesfe/article/details/132688340