IO理论知识
同步、异步、阻塞、非阻塞
同步:系统调用一个函数、并不会立即完成而是等待外部调用工作完成后才结束。
阻塞:系统调用一个功能,同样不会立即完成,并等待io完成,直到io完成才结束。
非阻塞:系统调用一个功能,并很快返回一个未完成的状态结果,并定期轮询查看进程执行情况,称为非阻塞。
异步:系统发起一个调用请求后,继续执行其他进程,待结束后,返回一个结果信息。
linux优先级:priority
实时优先级:1-99,数值小,优先级低
静态优先级:描述用户状态,100-139,数值小,优先级高
实时优先级比静态优先级高
通过top可以查看进程当前的优先级,通过nice来调整优先级,由于用户优先级是100-139,而nice调整的范围是-20 至 19,可以推断出用户优先级默认是120。
调度类型:
实时进程:
sched_fifo:先进先出队列 FF
sched_rr:轮训调度
sched_other:调度用户空间进程 TS
动态优先级:对于长期不能得到相应的优先级低的进程,会临时调整优先级,主要对sched_other类型进行调整。
手动调整优先级:nice
100-139之间
对于未启动的进程设置优先级
nice n command
对于已启动的进程设置优先级
renice -n process-id
1-99之间
chrt
-f:fifo类别
-r:rr类型
-o:other类型
例如:chrt -f -p [prio] pid
启动一个进程直接设置优先级,chrt -f -p [prio] command
web服务器内核工作常见协议
CGI协议
CGI是通用网关接口,主要负责web服务器前端和后面解释器、应用环境的通信,举例说:一个用户请求一个WEB页面,如果这个请求是一个静态页面请求,那么直接由httpd、nginx处理即可,如果请求的是一个需要进行计算的动态页面,那么这个请求就要涉及到具体的解释器或者应用程序,这个通常是在编写网页的时候就应经制定的比如php、jsp、tomcat等应用程序,这个时候httpd与php之间就需要CGI来作为通信协议保证之间的正常通信了。
httpd会主动生成一个进程来处理动态请求,并在动态请求结束后进行销毁工作。
在CGI的协议下,由于IO工作模型不同,有一下几种模型:
1、单进程阻塞工作
由于是工作在阻塞模式下,前端httpd只可以接受一个动态请求,直到请求处理结束后才处理第二个请求。
2、perfork工作机制: 客户端请求服务,httpd会有一个主进程专门用来派发动态请求,服务器的主进程对服务请求进行相应,并分配一个空闲进程来对客户端服务进行处理,一个进程只能处理一个请求。主进程只负责接收请求并派发给空闲进程。即实现多路io复用。
缺点:对于大量访问,需要分配大量子进程,消耗cpu资源,造成浪费
解决方法:线程的使用worker。
worker工作机制:客户端发起请求服务,服务器的主进程后面会有多个工作进程,并且会将请求分配到工作进程的线程里面去,实现多进程多线程的工作模式。
缺点:追踪问题困难
event模型:同样是一个主进程接受客户端请求并派发,子进程采用AIO模式,一个进程可以接受多个请求,不存在上下文切换。
上下文切换:不同进程或线程直接在请求信息和完成请求的时候会产生切换,称为上下文切换,上下文切换会造成资源大量损耗。
Fast-CGI协议
CGI是通过web服务器(httpd、nginx)来生成一个调用CGI的进程,这个进程是立即生成并调用的,同时维护CGI的完成。而FASTCGI采用C/S架构,自身独立于web服务器产生一个“服务器”,用来接收web服务器的关于动态请求,这个“服务器”工作方式类似prework,它是事先生成空闲进程,当web服务器需要调用动态请求的时候,这个“服务器”会随时调用空闲进程,这样为web服务器节约了cpu资源,并且也提高了访问速度。
有了fastCGI可以实现web服务器的动静分离。
动态网站开发语言
php:mysql
jsp:tomcat
python:mod_python (UWSGI,性能优于fastCGI)
ruby
数据模型引入
2-8法则:一小部分的数据被大量访问,而另外大部分数据访问很少,也就是数据的局部性。
数据管理系统
数据库引擎
数据模型:
层次模型
网状模型
关系模型
数据库范式:用于规范数据模型,有第一,第二、第三第四范式。
关系运算:
交叉连接:
投影:挑选列
选择:挑选行
操作:
read、creat、update、delete等。
数据库管理系统DBMS设计目标
1、数据冗余和不一致问题。
2、数据查找困难问题
3、解决数据的孤立性(耦合问题)
4、完整性问题
数据库访问驱动(访问接口):外部用于访问、查询、删除数据库内容的接口。不同程序访问数据的驱动接口是不同的。
php:适合小型网站的编程,由于自身问题,php公司研发了hiphop来将php翻译成c++代码,提供效率。
jsp:大型网站编程
SQL语句:统一标准由ANSI来定义,但各个数据库厂家的sql语句还是有区别的,比如mysql使用sql,sqlserver使用t-sql、oracle使用pl/sql。
第二节 安装MYSQL数据库
一、安装方式:
1、通过系统自身自带安装,os vender:mysql mysql-server,mysql-devel(开发使用)
2、源码编译:优势是可以指定自己需求,优化性能。
编译安装一般步骤:
a、创建用户和用户组
useradd -s /bin/nologin mysql
b、解压缩源码包,并指定解压位置。
tar -zxf mysql.tar.gz -C /usr/local/mysql
c、为了方便可以创建快捷方式-软连接。
ln -s /usr/local/mysql /mysql
d、编译安装mysql。 mysql5.5之后编译安装采用cmake的方式,需要先安装cmake,git。如果是mysql5.7及以上版本需要安装boost,下载boost后需要编译安装boost,方法是:bash bootstrap.sh后执行bjam
[root@localhost mysql-5.6.29]# yum install cmake git
boost安装参考:http://blog.csdn.net/simtwo/article/details/8083598
1、安装cmake软件包
2、确定编译环境,其实所有编译安装都是需要确定编译环境的。
[root@localhost mysql-5.6.29]# yum install gcc gcc-c++
安装开发环境依赖的软件包组:
Development Tools
Server Platform Development
Desktop Platform Development
安装
[root@localhost mysql-5.6.29]# cmake -DCMAKE_INNOBASE_STORAGE_ENGINE=1 -DCMAKE_INSTALL_PREFIX=/usr/local/mysql -DMYSQL_CHARSET=utf8 -DMYSQL_DATADIR=/usr/local/mysql/data -DMYSQL_USER=mysql -DSYSCONFDIR=/etc
注意:参数都是使用大写方式。
以下适用于编译安装方式:
1、 导出帮助文件(使用man 的功能)
通常man文件位于/usr/local/mysql/man中(编译安装),通过修改mysql的man.config文件来进行添加man路径即可。添加MANPATH /usr/local/mysql/man。
2、导出头文件:将编译安装的mysql文件目录中的incloud目录链接到/usr/incloud/mysql中。
设置动态库文件查找:一般情况命令执行需要的动态库文件会查找/lib、/usr/lib目录以及/etc/ld.so.conf配置文件,当然也就是在ld.so.conf.d目录下创建单独的配置文件,只要指明库文件的位置即可。
命令:ln -sv /usr/local/mysql/incloude /usr/include/mysql
3、导出库文件:
命令:vim /etc/ld.so.conf.d/mysql.conf 指定库文件,首先需要创建mysql.conf文件,然后在文件里面讲mysql的库文件路径添加进来,通常是/usr/local/mysql/lib。
ldconfig -v |grep mysql //查看库文件是否已经注册,主要看libmysqlclient.so.18->libmysqlclient_r.so.18.0.0
3、通用二进制格式程序包,tarball(类似绿色版)
数据包格式通常是tar的归档类型。并且建议所有mysql数据存储位置都应该是lvm类型的磁盘格式,这样便于数据的备份(快照)。通常是安装到/usr/local/mysql中,数据默认也是存储在/usr/local/myql/data/目录下。创建mysql用户和mysql组,然后为安装目录创建软连接,ln -s 原目录 创建的链接目录。
4、rpm软件包
数据默认存储位置是/var/lib/mysq/data/目录下。此安装方式安装过程中,需要先删除之前系统中自带的早期的mysql-libs库文件,否则会包如下错误:
事务测试出错:
file /usr/share/mysql/czech/errmsg.sys from install of MySQL-server-5.6.36-1.el6.x86_64 conflicts with file from package mysql-libs-5.1.73-5.el6_6.x86_64
mysql_server 服务器端软件
mysql_client 客户端软件
mysql_bench 测试及基准程序,需要perl支持
mysql_devel 编写其他mysql和客户端的函数库和文件
mysql_share 共享函数库
rpm安装,至少需要安装server和client软件,数据库通常放在/var/lib/data目录下。
warning: MySQL-client-5.6.36-1.el6.x86_64.rpm: Header V3 DSA/SHA1 Signature, key> Preparing... ########################################### [100%]
1:MySQL-client ########################################### [100%]
[root@localhost ~]# rpm -ivh MySQL-devel-5.6.36-1.el6.x86_64.rpm-5.6.36-1.el6.x86_64.rpm
error: open of MySQL-devel-5.6.36-1.el6.x86_64.rpm-5.6.36-1.el6.x86_64.rpm failed: 没有那个文件或目录
[root@localhost ~]# rpm -ivh MySQL-devel-5.6.36-1.el6.x86_64.rpm
warning: MySQL-devel-5.6.36-1.el6.x86_64.rpm: Header V3 DSA/SHA1 Signature, key> Preparing... ########################################### [100%]
1:MySQL-devel ########################################### [100%]
[root@localhost ~]# yum install MySQL-server-5.6.36-1.el6.x86_64.rpm
已加载插件:fastestmirror
设置安装进程
诊断 MySQL-server-5.6.36-1.el6.x86_64.rpm: MySQL-server-5.6.36-1.el6.x86_64
复制启动脚本
[root@localhost ~]# cp /usr/share/mysql/mysql.server /etc/init.d/mysqld
[root@localhost ~]# service mysqld start
Starting MySQL. SUCCESS!
通过rpm安装的mysql,会随机生成一个root的密码并将密码存放在/root/.mysql_secret。复制这个秘钥串,并进入mysql后重新登录并设置密码
[root@10 ~]# cat /root/.mysql_secret
# The random password set for the root user at Fri Jul 21 22:34:21 2017 (local time): O0UC3_Mv888DFpQ1
[root@10 ~]# mysql -u root -p
Enter password:
mysql> SET PASSWORD = PASSWORD('123456');
Query OK, 0 rows affected (0.00 sec)
mysql> flush privileges;
Query OK, 0 rows affected (0.00 sec)
rpm安装的mysql默认配置文件在/usr/my.cnf,复制一个新的到/etc/my.cnf。并添加以下内容:
port = 3306
datadir = /mysqldata/data
socket = /mysqldata/data/mysql.sock
pid-file = /mysqldata/data/mysqld.pid
log-error = /mysqldata/data/mysql.err
参考文件:http://blog.csdn.net/bbaibb1009/article/details/50518218
RPM方式安装MySQL5.6:http://blog.csdn.net/liumm0000/article/details/18841197
然后初始化mysql_install_db,进入数据库创建root账户
mysql> use mysql;
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A
Database changed
mysql> update user set password=password('123123') where user='root';
Query OK, 4 rows affected (0.00 sec)
Rows matched: 4 Changed: 4 Warnings: 0
退出后重新登录
mysql> set password for 'root'@‘%localhost‘=password('123123');
常见问题:
1、通过rpm安装过程中,出现conflicts with 5.xx的情况,说明系统的mysql-libs库使用的版本低于目前需要安装的版本,才会造成版本冲突,解决方法就是删除早期版本的libs
方法:yum remove mysql-libs
2、mysql的开机启动脚本通常是mysql.server文件,一般位置在/usr/share/mysql/mysql.server,如果不能找到可以通过rpm -qpl mysql-server-5.xxx.rpm |grep server的方式查找。
3、一般mysql的配置文件存放在/etc/mysql.cnf。如果没有或者丢失,可以通过rpm -qpl mysql-server-5.xxx.rpm |grep cnf的方式查找。
4、Curses library not found. Please install appropriate package
处理方法:1、删除CMakeCache.txt文件。
2、yum install ncurses-devel debian,ubuantu需要安装libncurses5-dev。
5、开启服务提示sock错误:
error: 'Can't connect to local MySQL server through socket '/var/lib/mysql/mysql.sock' (111)'
Check that mysqld is running and that the socket: '/var/lib/mysql/mysql.sock' exists!
通常需要修改my.cnf配置文件,将[mysqld]的socket和[mysql]的socket均设置为同一个路径。
6、出现120223 21:29:59 mysqld_safe mysqld from pid file /usr/local/mysql/data/localhost.localdomain.pid ended问题。
删除mysql安装目录下data目录下的ib开头的所有文件。
运维网声明
1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网 享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com