zoukankan      html  css  js  c++  java
  • MySQL数据库的安装及体系说明

    第1章 MySQL介绍

    1.1 数据的定义

    数据是指对客观事件进行记录并可以鉴别的符号,是对客观事物的性质、状态以及相互关系等进行记载的物理符号或这些物理符号的组合,是可识别、抽象的符号

    1.2 数据库管理系统

    作用:存储数据、管理数据(查询数据、备份恢复、安全、性能等)

    1.2.1 RDBMS及NoSQL的特性对比

    种类

    RDBMS(关系型数据库)

    NoSQL(非关系型)

    特点

    强大查询功能

    强一致性

    二级索引

    事务支持等

    灵活模式

    扩展性

    高性能

    分布式支持

    典型产品

    Oracle、MySQL、sqlserver、db2

    Redis(持久化缓存)、MongoDB(最接近关系型数据的NoSQL)、Memcached、hbase、Neo4j

    功能特点介绍

    01.数据存取是通过SQL

    02.最大特点:数据安全性方面强(ACID)

    01.关系型数据库的补充,现在也有部分替代的趋势

    02.关注高性能,高并发,灵活性,忽略和上述无关的功能

    1.2.2 NoSQL的分类、特点、典型产品

    键值(KV)存储:Memcached、Redis

    列存储(column-oriented):HBASE(新浪,360)、Cassandra(200台服务器集群)

    文档数据库(document-oriented):MongoDB(最接近关系型数据库的NoSQL)

    图形存储(Graph):Neo4j

    1.2.2.1  Oracle公司产品介绍

    01.Oracle数据库版本介绍
       7--8i--9i--10g—11g--12c--18c(?)
    
    02.Oracle的市场应用
    市场份额第一,趋势递减
    市场空间,传统企业
    传统企业也在互联网化
    
    03.MySQL数据库版本介绍
       5.0--5.1--5.5--5.6--5.7--8.0
    
    04.MySQL的市场应用
    中、大型互联网公司
    市场空间:互联网领域第一
    趋势明显

    同源产品:MariaDB、perconaDB

    1.2.2.2  其他公司产品介绍

    01.微软:SQL Server

    微软和sysbase合作开发的产品,后自己开发windows平台

    3/4线小公司,传统行业在用

    02.IBM:DB2

    市场占有量小

    目前只有:国有银行(人行、中国银行、工商银行等)、中国移动应用

    03.PostgreSQL

    04.MongoDB

    05.Redis

    后三者广泛应用在大型互联网公司

    1.2.3 Redis特点

    01.依然高性能该并发

    02.数据持久化的功能

    03.支持多数据类型,主从复制和集群

    04.管理不再使用SQL

    第2章 Mysql安装

    2.1 安装方式介绍

    01.RPM/Yum:安装方便、速度快,无法定制

    02.二进制:无需安装,解压即可使用,但不能定制功能

    03.编译安装:可定制,安装慢

    5.5之前:./configure make make install

    5.5之后:cmake gmake

    04.先编译再制作rpm、yum库,然后yum安装

    特点:简单、速度快、可定制,比较复杂,制作时间长

    2.1.1 企业选择安装方式

    中小企业:以上方式都可以,运维偏向编译,dba偏向选择二进制

    大型企业:可以选择04

    2.2 准备环境

    01.克隆模板机(尽量使用centos6)→克隆完做快照

    1 iptables -L   #查看已添加的iptables规则
    2 iptables -F   #清除已有iptables规则
    3 /etc/init.d/iptables stop
    4 chkconfig iptables off
    5 
    6 getenforce

    02.设置IP地址为10.0.0.52 主机名db02

    A.网卡地址修改IP=10.0.0.52

    1 sed -i 's#200#52#g' /etc/sysconfig/network-scripts/ifcfg-eth[01]
    2 grep '52' /etc/sysconfig/network-scripts/ifcfg-eth[01]

    B.修改系统主机名称

    1 hostname db02
    2 sed -i 's#oldboyedu-40#db02#g' /etc/sysconfig/network
    3 grep "db02" /etc/sysconfig/network

    C.重启网络生效

     1 /etc/init.d/network restart 

    03.设置hosts解析

     1 echo "10.0.0.52 db02" >>/etc/hosts 

    04.添加单独的磁盘用来存放mysql软件和数据(/dev/sdb=20G)

    1 mkfs.ext4 /dev/sdb
    2 mkdir /application
    3 mount /dev/sdb /application
    4 blkid   #查询磁盘的uuid,这里用来查询/dev/sdb的信息
    5 
    6 echo "UUID=xxx    /application   ext4  defaults  0 0 " >>/etc/fstab

    2.3 软件安装

    2.3.1 安装依赖包

     1 yum install -y ncurses-devel libaio-devel 2 yum install cmake -y #安装cmake 3 rpm -qa ncurses-devel libaio-devel cmake 

     1 vim /etc/yum.conf 2 3 keepcache=1 #将网络yum源使用过的软件包保存下来 4 cachedir=/var/cache/$basearch/$releasever #保存在这个位置 

    2.3.2 创建mysql管理用户

     1 useradd -s /sbin/nologin -u 999 -M mysql #无需登录,生产环境中建议手动定义UID及GID 2 id mysql 

    2.3.3 解压安装mysql

    1 mkdir -p /home/oldboy/tools/
    2 cd /home/oldboy/tools/
    3 wget -q http://mirrors.sohu.com/mysql/MySQL-5.6/mysql-5.6.36.tar.gz
    4 ls -l mysql-5.6.36.tar.gz   #尽量去官方下载或rz直接上传软件包

     

     1 tar xf mysql-5.6.36.tar.gz
     2 cd mysql-5.6.36
     3 cmake . -DCMAKE_INSTALL_PREFIX=/application/mysql-5.6.36    #代码预编译->程序存放位置
     4 -DMYSQL_DATADIR=/application/mysql-5.6.36/data  
     5 -DMYSQL_UNIX_ADDR=/application/mysql-5.6.36/tmp/mysql.sock  
     6 -DDEFAULT_CHARSET=utf8  
     7 -DDEFAULT_COLLATION=utf8_general_ci 
     8 -DWITH_EXTRA_CHARSETS=all 
     9 -DWITH_INNOBASE_STORAGE_ENGINE=1 
    10 -DWITH_FEDERATED_STORAGE_ENGINE=1 
    11 -DWITH_BLACKHOLE_STORAGE_ENGINE=1 
    12 -DWITHOUT_EXAMPLE_STORAGE_ENGINE=1 
    13 -DWITH_ZLIB=bundled 
    14 -DWITH_SSL=bundled 
    15 -DENABLED_LOCAL_INFILE=1 
    16 -DWITH_EMBEDDED_SERVER=1 
    17 -DENABLE_DOWNLOADS=1 
    18 -DWITH_DEBUG=0
    19 
    20 make && make install   #如果是多核cpu可指定make -jcpu核数,加快编译速度
    21 ln -s /application/mysql-5.6.36/ /application/mysql

    #补充:如果系统里有曾经安装的数据库文件和启动程序最好停掉或删除,以免冲突

    说明:在装系统时不要安装有关虚拟化的选择,因为这样会导致安装KVM的过程中依赖iptable,删除所有iptables规则后重启网络会自动添加上

    若上述操作未出现错误(可使用echo $?查看返回值),cd /application/mysql/若其下有内容则表示MySQL安装成功。至此,数据库安装完成

    2.4 初始化及配置数据库

     1 cp support-files/my*.cnf /etc/my.cnf 

    初始化系统库对象(程序位置、数据存放位置及使用的用户)

     1 /application/mysql/scripts/mysql_install_db --basedir=/application/mysql/ --datadir=/application/mysql/data --user=mysql 

    提示:如果以前操作系统中安装过rpm格式的mysql,系统中可能会遗留/etc/my.cnf文件,则需将它删除/更名,否则该文件会干扰MySQL的正确配置,造成无法启动

    说明:初始化mysql数据库文件会有很多信息提示,若出现两个OK的字样即表示初始化成功,否则就要解决初始化的问题

     

     1 chown -R mysql.mysql /application/mysql/ 2 cp /application/mysql/support-files/mysql.server /etc/init.d/mysqld #拷贝mysql启动脚本到命令路径 3 chmod 700 /etc/init.d/mysqld 

    2.5 启动服务并测试

     chkconfig mysqld on 2 chkconfig --list mysqld 3 /etc/init.d/mysqld start 

    注意:此时数据库启动会提示找不到xx/tmp/mysql.sock,因为5.6.36版本不会自动创建tmp目录,需手动创建mkdir -p /application/mysql/tmp

     1 netstat -lntup|grep 3306 2 cd /application/mysql/bin 3 ./mysql 

    2.6 设置mysql全局变量

    1 echo 'PATH=/application/mysql/bin/:$PATH' >>/etc/profile
    2 tail -1 /etc/profile
    3 source /etc/profile
    4 echo $PATH
    5 mysql

    说明:数据库分为系统数据和管理数据

    2.6.1 排错方法

    01.输出

    02.错误日志

     1 tail -100 /application/mysql/data/db02.err #日志需定期切割,否则会导致日志过大无法查看 

    2.6.2 设置mysql数据库密码并登录

    01.设置密码

    1 which mysqladmin
    2 mysqladmin -u root password 'oldboy123'   #设置密码oldboy123
    3 mysqladmin -u root -p password '新密码'   #更改密码

    注意:此时命令回车后需验证旧密码,输入旧密码后即更改成功

    02.登录测试

     1 mysql -uroot -poldboy123 

    2.6.2.1  生产环境中如何更安全的登录数据库

     1 mysql -uroot -p 2 #此时回车后只需输入密码即可登录,且密码不会被打印到屏幕上 

    2.6.3 删除用户及无用数据库(基本优化)

     show databases; #查看数据库及用户 2 select user,host from mysql.user; 

     

    #删除用户

    1 drop user ''@'db02';
    2 drop user ''@'localhost';
    3 drop user 'root'@'db02';
    4 drop user 'root'@'::1';
    5 select user,host from mysql.user;   #此时数据库仅有root 127.0.0.1及root localhost用户

     

    #删除数据库

     drop database test; 2 show databases; 

    注意:删除无密码无用户名的用户,即存在安全隐患,其查看方法如下

     1 select user,host,password from mysql.user 

    提示:在数据库中的use mysql相当于命令行中的/application/mysql/data目录,在此目录下创建目录(表)即可在数据库中看到

    2.7 ‼常见问题

    故障:

     1 ERROR! The server quit without updating PID file 

    解决:

           1.权限chown -R mysql.mysql

           2.killall mysqld

           3.重新初始化数据

           4.运行1年了,出问题(非法断电/关机或者非法关闭数据库,如kill -9)

    第3章 Mysql体系及原理说明

    3.1 Mysql客户端-服务器结构

    Mysql是一个典型的C/S服务结构:即client+server(服务器及客户端)两部分

    01.mysql自带的客户端程序/application/mysql/bin

     mysql

    mysqladmin

    mysqldump等

    4 API接口:php-mysql 

    02.服务端程序mysqld,即二进制程序(后台的守护进程)

    单进程多线程的服务结构

    3.1.1 数据库连接方式

    01.通过TCP/IP方式(用户;密码;IP地址;端口)

     1 mysql -uroot -poldboy123 -h 10.0.0.52 -P 3306 

    02.通过socket套接字(用户;密码;socket路径)

     1 mysql -uroot -poldboy123 -S /application/mysql/tmp/mysql.sock 

    注意:端口号和socket均为启动完成后自动创建,mysql -uroot -poldboy123默认使用socket方式登录

    3.2 Mysql实例

    01.mysql在启动过程

    a.启动后台守护进程,并生成工作线程xxx

    b.预分配内存结构供MySQL处理数据使用

    02.Mysql实例:即mysql后台进程+线程结构+预分配的内存结构

    说明:在处理能力上,数据库以守护进程mysqld的方式先载入内存,程序等待请求的到来再进行处理;同时也把将来可能用到的内存结构一并分配完成

    3.3 Mysqld服务器程序构成

    服务器程序构成概览:

    服务器程序

    功能及作用

    备注

    连接层

    通信协议、连接线程、用户验证合法性

    SQL(核心)

    判断语句语法

    解析器、查询执行

    授权、查询高速缓存

    优化器、查询日志记录(记录成功SQL的执行)

    二维表逻辑结构

    结构化的查询语言(数据库内部的逻辑语言)

    存储引擎层

    存储/检索数据、通过索引查找数据

    数据的不同存储方式

    不同的管理方式:事务(增删改)、备份恢复、高级功能(高可用、读写分离架构)

    将抽象(逻辑)数据存放到数据文件中去

    基于磁盘内存网络

    InnoDB/MyISAMMEMORYNDB

    3.3.1 SQL层

    3.3.1.1  分类

    DDL数据库定义语言

    DCL数据库控制语言

    DML数据库操作语言

    DQL数据查询语言

    3.3.2 存储引擎层

    01.依赖于存储引擎的功能

     存储介质

    事务功能

    锁定

    备份和恢复

    5 优化 

    02.特殊功能

     a.全文搜索 2 b.引用完整性 3 c.空间数据处理 

    03.双层处理

    上层包括SQL解析器和优化器、下层包含一组存储引擎

    04.SQL 层不依赖于存储引擎

    引擎不影响SQL处理

    3.3.3 总结Mysql的执行过程(连接层->SQL层->存储引擎层)

    1)用户通过TCP/IP或者socket请求连接mysql
    2)经过连接层判断连接合法性,分配连接相应线程
    3)连接层线程将用户需要执行的SQL语句送到SQL层处理
    4)SQL层经过语句、语义、语法、SQL类型、权限等判断
    5)查询缓存查找,若找到直接返回给用户数据;若未找到则将SQL交给解析器解析,生成执行计划
    6)优化器读取执行计划,判断并选择代价最小的执行计划
    7)执行计划执行,生成获取数据的方法方案,交由存储引擎层继续处理
    8)存储引擎层根据上层提供的方法,获取磁盘数据返回用户
    9)此次查询信息会缓存到查询缓存中

    3.4 Mysql逻辑结构(数据库内部结构)

    出现原因:为了用户能够读懂数据出现的,用来更好的理解数据

    即管理数据的一种方式

    对象:

    库show databases; use mysql;

    表show tables;

      记录(行select user,host,password from user、列desc user)

    3.4.1 Mysql物理结构

    库(目录)、表(多个文件)->行记录MYD、列结构frm、索引MYI

     1 [root@db02 ~]# cd /application/mysql/data/ 2 [root@db02 data]# ls 3 auto.cnf(数据库唯一值) db02.err(错误日志) db02.pid(mysqld进程号) ibdata1 ib_logfile0 ib_logfile1 mysql performance_schema 

    注意:上述文件切勿进行物理操作,如rm.mv.vi.vim

    3.4.2 Mysql存储方式

    01.存储方式

    程序文件随数据目录一起存储在服务器安装目录下,执行各种客户机程序、管理程序和实用程序时将创建程序可执行文件和日志文件,首要使用磁盘空间的是数据目录。
    
    A.服务器日志文件和状态文件:
    包含有关服务器处理的语句的信息,日志可用于进行故障排除、监视、复制和恢复
    
    B.InnoDB日志文件:
    (适用于所有数据库)驻留在数据目录级别
    
    C.InnoDB系统表空间:
    包含数据字典、撤消日志和缓冲区;每个数据库在数据目录下均具有单一目录(无论在数据库中创建何种类型的表)

    02.存储内容

    A.数据文件:
    特定于存储引擎的数据文件。这些文件也可能包含元数据或索引信息,具体取决于所使用的存储引擎
    
    B.格式文件(.frm):
    包含每个表和/或视图结构的说明,位于相应的数据库目录中
    
    C.触发器:
    与某个表关联并在该表发生特定事件时激活的命名数据库对象
    
    数据目录的位置取决于配置、操作系统、安装包和分发,典型位置是/var/lib/mysql
    MySQL在磁盘上存储系统数据库(mysql),mysql包含诸如用户、特权、插件、帮助列表、事件、时区实现和存储例程之类的信息。

    3.4.3 体系结构小结

    3.4.3.1  SQL优化相关的理念

    解析器:执行计划-数据库执行sql的一种方式

    优化器:知道基本规则,直接影响将来选择哪个执行计划

    查询缓存:生产环境中,一般会用redis memcached来代替

    3.4.3.2  逻辑结构<--->物理结构对应关系

    库<=>data即一个目录,为了存放多张表

    表<=>data在相应的库中,用多个文件来表示

          myisam表:3文件(.myd数据文件、.myi索引文件、frm表/列结构定义文件)

          innodb:2个/1个,即共享表空间:ibdata1->系统的元数据(基表)-->information_schema视图

                             独立表空间:5.6以后默认的表的存储方式

    独立表空间实例

    #创建库->切换库->创建表->写入数据->查看列信息

     1 mysql>
     2 create database oldboy;
     3 use oldboy;
     4 create table t1(id int);
     5 insect id from t1;
     6 desc t1;
     7 exit
     8 
     9 [root@db02 data]# cd oldboy/
    10 [root@db02 oldboy]# ls
    11 db.opt  t1.frm  t1.ibd

    3.4.3.3  如何使用磁盘(物理结构)

    a.多个库多个目录,目录下存放了多个表的存储文件

    b.auto.cnf

      ibdataN

      ib_logfileN

      db02.err

      xx.pid等

     

     此笔记是本人学习摘记整理而成,此为初稿(尚有诸多不完善之处),原创作品允许转载,转载时请务必以超链接形式标明文章原始出处,作者信息和本声明,否则将追究法律责任。http://www.cnblogs.com/bananaaa/

     

  • 相关阅读:
    Java 1.7.0_21b11 Code Execution
    nginx NULLByte 任意代码执行漏洞
    nginx ‘ngx_http_close_connection()’远程整数溢出漏洞
    WordPress WP Super Cache插件任意代码执行漏洞
    memcached 远程拒绝服务漏洞
    原环套原环
    要去哈尔滨了
    母亲节就要到了,你忘了吗?
    对于流媒体服务的一点概念
    有了螃蟹让心情好一点
  • 原文地址:https://www.cnblogs.com/bananaaa/p/8056515.html
Copyright © 2011-2022 走看看