数据是指对客观事件进行记录并能够鉴别的符号,是对客观事物的性质、状态以及相互关系等进行记载的物理符号或这些物理符号的组合,是可识别、抽象的符号php
做用:存储数据、管理数据(查询数据、备份恢复、安全、性能等)mysql
种类redis |
RDBMS(关系型数据库)sql |
NoSQL(非关系型)数据库 |
特色vim |
强大查询功能windows 强一致性centos 二级索引缓存 事务支持等安全 |
灵活模式 扩展性 高性能 分布式支持 |
典型产品 |
Oracle、MySQL、sqlserver、db2 |
Redis(持久化缓存)、MongoDB(最接近关系型数据的NoSQL)、Memcached、hbase、Neo4j |
功能特色介绍 |
01.数据存取是经过SQL 02.最大特色:数据安全性方面强(ACID) |
01.关系型数据库的补充,如今也有部分替代的趋势 02.关注高性能,高并发,灵活性,忽略和上述无关的功能 |
键值(KV)存储:Memcached、Redis
列存储(column-oriented):HBASE(新浪,360)、Cassandra(200台服务器集群)
文档数据库(document-oriented):MongoDB(最接近关系型数据库的NoSQL)
图形存储(Graph):Neo4j
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
01.微软:SQL Server
微软和sysbase合做开发的产品,后本身开发windows平台
3/4线小公司,传统行业在用
02.IBM:DB2
市场占有量小
目前只有:国有银行(人行、中国银行、工商银行等)、中国移动应用
03.PostgreSQL
04.MongoDB
05.Redis
后三者普遍应用在大型互联网公司
01.依然高性能该并发
02.数据持久化的功能
03.支持多数据类型,主从复制和集群
04.管理再也不使用SQL
01.RPM/Yum:安装方便、速度快,没法定制
02.二进制:无需安装,解压便可使用,但不能定制功能
03.编译安装:可定制,安装慢
5.5以前:./configure make make install
5.5以后:cmake gmake
04.先编译再制做rpm、yum库,而后yum安装
特色:简单、速度快、可定制,比较复杂,制做时间长
中小企业:以上方式均可以,运维偏向编译,dba偏向选择二进制
大型企业:能够选择04
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
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 #保存在这个位置
1 useradd -s /sbin/nologin -u 999 -M mysql #无需登陆,生产环境中建议手动定义UID及GID 2 id 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安装成功。至此,数据库安装完成
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
1 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
1 echo 'PATH=/application/mysql/bin/:$PATH' >>/etc/profile
2 tail -1 /etc/profile 3 source /etc/profile 4 echo $PATH 5 mysql
说明:数据库分为系统数据和管理数据
01.输出
02.错误日志
1 tail -100 /application/mysql/data/db02.err #日志需按期切割,不然会致使日志过大没法查看
01.设置密码
1 which mysqladmin
2 mysqladmin -u root password 'oldboy123' #设置密码oldboy123 3 mysqladmin -u root -p password '新密码' #更改密码
注意:此时命令回车后需验证旧密码,输入旧密码后即更改为功
02.登陆测试
1 mysql -uroot -poldboy123
1 mysql -uroot -p 2 #此时回车后只需输入密码便可登陆,且密码不会被打印到屏幕上
1 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用户
#删除数据库
1 drop database test; 2 show databases;
注意:删除无密码无用户名的用户,即存在安全隐患,其查看方法以下
1 select user,host,password from mysql.user
提示:在数据库中的use mysql至关于命令行中的/application/mysql/data目录,在此目录下建立目录(表)便可在数据库中看到
故障:
1 ERROR! The server quit without updating PID file
解决:
1.权限chown -R mysql.mysql
2.killall mysqld
3.从新初始化数据
4.运行1年了,出问题(非法断电/关机或者非法关闭数据库,如kill -9)
Mysql是一个典型的C/S服务结构:即client+server(服务器及客户端)两部分
01.mysql自带的客户端程序/application/mysql/bin
1 mysql
2 mysqladmin
3 mysqldump等
4 API接口:php-mysql
02.服务端程序mysqld,即二进制程序(后台的守护进程)
单进程多线程的服务结构
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方式登陆
01.mysql在启动过程
a.启动后台守护进程,并生成工做线程xxx
b.预分配内存结构供MySQL处理数据使用
02.Mysql实例:即mysql后台进程+线程结构+预分配的内存结构
说明:在处理能力上,数据库以守护进程mysqld的方式先载入内存,程序等待请求的到来再进行处理;同时也把未来可能用到的内存结构一并分配完成
服务器程序构成概览:
服务器程序 |
功能及做用 |
备注 |
链接层 |
通讯协议、链接线程、用户验证合法性 |
|
SQL层(核心) |
判断语句语法 解析器、查询执行 受权、查询高速缓存 优化器、查询日志记录(记录成功SQL的执行) |
二维表逻辑结构 结构化的查询语言(数据库内部的逻辑语言) |
存储引擎层 |
存储/检索数据、经过索引查找数据 数据的不一样存储方式 不一样的管理方式:事务(增删改)、备份恢复、高级功能(高可用、读写分离架构) |
将抽象(逻辑)数据存放到数据文件中去 基于磁盘、内存、网络 InnoDB/MyISAM、MEMORY、NDB
|
DDL数据库定义语言
DCL数据库控制语言
DML数据库操做语言
DQL数据查询语言
01.依赖于存储引擎的功能
1 存储介质
2 事务功能
3 锁定
4 备份和恢复
5 优化
02.特殊功能
1 a.全文搜索 2 b.引用完整性 3 c.空间数据处理
03.双层处理
上层包括SQL解析器和优化器、下层包含一组存储引擎
04.SQL 层不依赖于存储引擎
引擎不影响SQL处理
1)用户经过TCP/IP或者socket请求链接mysql
2)通过链接层判断链接合法性,分配链接相应线程 3)链接层线程将用户须要执行的SQL语句送到SQL层处理 4)SQL层通过语句、语义、语法、SQL类型、权限等判断 5)查询缓存查找,若找到直接返回给用户数据;若未找到则将SQL交给解析器解析,生成执行计划 6)优化器读取执行计划,判断并选择代价最小的执行计划 7)执行计划执行,生成获取数据的方法方案,交由存储引擎层继续处理 8)存储引擎层根据上层提供的方法,获取磁盘数据返回用户 9)这次查询信息会缓存到查询缓存中
出现缘由:为了用户可以读懂数据出现的,用来更好的理解数据
即管理数据的一种方式
对象:
库show databases; use mysql;
表show tables;
记录(行select user,host,password from user、列desc user)
库(目录)、表(多个文件)->行记录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
01.存储方式
程序文件随数据目录一块儿存储在服务器安装目录下,执行各类客户机程序、管理程序和实用程序时将建立程序可执行文件和日志文件,首要使用磁盘空间的是数据目录。
A.服务器日志文件和状态文件:
包含有关服务器处理的语句的信息,日志可用于进行故障排除、监视、复制和恢复
B.InnoDB日志文件:
(适用于全部数据库)驻留在数据目录级别
C.InnoDB系统表空间:
包含数据字典、撤消日志和缓冲区;每一个数据库在数据目录下均具备单一目录(不管在数据库中建立何种类型的表)
02.存储内容
A.数据文件:
特定于存储引擎的数据文件。这些文件也可能包含元数据或索引信息,具体取决于所使用的存储引擎
B.格式文件(.frm):
包含每一个表和/或视图结构的说明,位于相应的数据库目录中 C.触发器: 与某个表关联并在该表发生特定事件时激活的命名数据库对象 数据目录的位置取决于配置、操做系统、安装包和分发,典型位置是/var/lib/mysql MySQL在磁盘上存储系统数据库(mysql),mysql包含诸如用户、特权、插件、帮助列表、事件、时区实现和存储例程之类的信息。
解析器:执行计划-数据库执行sql的一种方式
优化器:知道基本规则,直接影响未来选择哪一个执行计划
查询缓存:生产环境中,通常会用redis memcached来代替
库<=>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
a.多个库多个目录,目录下存放了多个表的存储文件
b.auto.cnf
ibdataN
ib_logfileN
db02.err
xx.pid等
此笔记是本人学习摘记整理而成,此为初稿(尚有诸多不完善之处),原创做品容许转载,转载时请务必以超连接形式标明文章原始出处,做者信息和本声明,不然将追究法律责任。http://www.cnblogs.com/bananaaa/