设为首页 收藏本站
查看: 873|回复: 0

[经验分享] mysql数据库详解

[复制链接]

尚未签到

发表于 2018-10-7 12:30:55 | 显示全部楼层 |阅读模式
  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

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-614337-1-1.html 上篇帖子: MySQL的两个存储引擎 下篇帖子: mysql数据库详解(续一)
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表