七、Linux

操作系统
  • 主要用于管理计算机的硬件以及其他的应用软件。所有的应用软件必须给予操作系统才能在计算机上运行
  • 运行在个人PC上:XP、windows系列、MacOSX
  • 运行在手机端(移动端):Android、IOS
  • 运行在服务器端:Linux、Windows server
    • 服务器通常是指一台安装了服务器软件的高性能计算机
Linux操作系统
  • 诞生于1991年,是一款类Unix的操作系统,继承了Unix操作系统的一些特性,如以网络通信稳定为重心

  • 主要应用在服务器上

  • Linux发行版本

    • 国外:Ubuntu、RedHat、centos、Suse等
    • 国内:红旗等
  • 安装Centos版本

  • 配置网络环境

    • 桥接:虚拟机会以当前宿主机所在局域网中的一台真实的计算机出现;虚拟机采用桥接模式,类似于当前网段中的一台真实计算机,属于同一个网段,可以共享当前网络环境的资源
    • NET模式:把宿主机当作路由器,建立连接;此时虚拟机直接共享宿主机网络资源,与宿主机所在网络环境原则上没有冲突
  • SecureCRT客户端使用

    • Hostname:远程服务器系统的IP
    • Username:root是超级管理员
  • Winscp工具使用

    • 用与在宿主机和虚拟机之间进行文件的传输
    • 文件协议:SFTP
    • 主机名:IP地址
    • 用户名root
    • 端口号22为默认
Linux系统目录结构
  • bin:(binaries)存放二进制可执行文件

  • sbin:(super user binaries)存放二进制可执行文件,只有root可以访问

  • etc:(etcetera)存放系统配置文件

  • usr:(unix shared resources)用于存放共享的系统资源

  • home:存放用户文件的根目录

  • root:超级用户目录

  • dev:(devices)用于存放设备文件

  • lib:(library)存放跟文件系统中的程序运行所需要的共享库及内核模块

  • mnt:(mount)系统管理员安装临时文件系统的安装点

  • boot:存放用于系统引导时使用的各种文件

  • tmp:(temporary)用于存放各种临时文件

  • var:(variable)用于存放运行时需要改变数据的文件

  • 命令书写要求

    • 命令及其参数严格区分大小写
    • 文件名严格区分大小写
  • 文件路径

    • 绝对路径:写法一定由根目录 " / "写起,比如 /user/local/sbin
    • 相对路径:写法不是由根目录 " / "写起,如执行命令:cd /home?cd.admin,那么当前所处目录为 /home/admin下,/home为绝对路径,admin则为相对路径,相对于当前/home目录的一个位置
  • 常用命令

    vi /etc/sysconfig/network-scripts/ifcfg-eth0:进入到网卡信息编辑
    	ONBOOT=yes		开机启动网卡
    	BOOTPROTO=dhcp	dhcp:自动获取IP 		static:手动指定IP
    
    ip addr
    	查看网络ip地址
    	
    ifconfig命令
    	1. 显示开启状态的网卡信息
    		例:ifconfig
    	2. 查看所有网卡信息
    		例:ifconfig -a
    	3. 查看指定网卡的信息
    		例:ifconfig 网卡名
    	4. 关闭指定的网卡
    		例:ifconfig 网卡名 down
    	5. 开启指定的网卡
    		例:ifconfig 网卡名 up
    
    关机命令:
    	1. halt   立刻关bai机 
    	2. poweroff  立刻关机 
    	3. shutdown -h now 立刻关机(root用户使用) 
    	4. shutdown -h 10 10分钟后自动关机 如果是通过shutdown命令设置关机的话,可以用shutdown -c命令取消重启
    
    重启命令:
    	1. reboot 
    	2. shutdown -r now 立刻重启(root用户使用) 
    	3. shutdown -r 10 过10分钟自动重启(root用户使用)  
    	4. shutdown -r 20:35 在时间为20:35时候重启(root用户使用) 如果是通过shutdown命令设置重启的话,可以用shutdown -c命令取消重启
    
    cd命令:通过指定一个绝对路径或相对路径,使用cd可以进入到目标目录下
    	例:
    		cd /etc		进入到etc目录下
    		cd sysconfig	在etc下执行,进入到 /etc/sysconfig下
    		cd ./		当前目录
    		cd ..		返回上一级目录
    		cd ~ 或 cd		进入到用户的家目录,如果用户是root用户,则进入到 /root目录
    
    pwd命令:打印当前所在目录
    
    ls命令:显示指定目录下的文件目录清单,相当于dos下的dir命令,而且其参数更加丰富多样
    	1. 显示当前目录	ls
    	2. 可以显示指定目录下文件清单
    		如:ls/etc		显示/etc下的文件清单
    	3. 可以显示隐(含)藏文件
    		例:ls -a		参数-a,显示隐含文件,若文件名以 . 开头,则认为是隐含的,进而普通的ls命令不显示以 . 开头的文件,所以要完全显示某目录下的文件清单,必须加上-a参数
        4. 可以长格式的输出文件名
        	例:ls -l		参数-l,以长格式列表输出指定目录中的文件清单
        	长格式文件说明
        	文件类型	文件权限	连接数	属主		属组	大小	日期			时间		文件名
        	d				rwxrwxr-x		2			user1		user1	4096	Aug	17	09:10		ceshi	
        	linux文件有三种典型的权限,即 r 读权限,w 写权限,x 执行权限;在长格式输出中在文件类型的后面有九列权限位,实际上是针对不同用户而设定的
        	属主的权限			熟组的权限			其他用户的权限
        	rwx						rwx						r-x
      5. 递归显示
        	例:li -R		参数-R,递归显示指定目录下的文件清单,即会显示指定目录分支内各子目录中的文件清单
    
    mkdir命令
    	1. 在当前目录下创建目录ceshi
    		例:mkdir ceshi
        2. 创建多级目录
        	例:mkdir -p a/b/c	参数-p,如果要创建的目录的父目录不存在,则先创建其父目录,再创建该目录;如果指定的目录存在,则不影响原目录
        	
    touch命令
    	创建空文件
    		例:touch myfile		如果myfile不存在,则创建一个大小为0字节的myfile的空文件,如果myfile已存在,则将改变myfile的最后修改时间
    		
    cp命令
    	1. 复制文件
    		例:cp /etc/hosts abc/		将/etc目录下的hosts文件复制到当前目录中的abc下
        2. 递归赋值
        	例:cp -R/etc/ abc/		参数-R的含义为递归操作,将/etc目录下的所有子目录和文件都复制到abc目录中  		cp-R/etc/ .			.代表当前目录
        	
    mv命令
    	将文件移动到目录中
    		例:mv myfile mydir1		如果mydir1存在且是个目录,则将文件myfile移动到目录mydir1中
        文件改名
        	例:mv myfile myfile2		如果myfile2不存在,则将文件或目录改名为myfile2
        	
    rmdir命令
    	删除指定的空目录,只能删除目录类型文件
    		例:rmdir mydir1
    		
    rm命令
    	1. 删除文件
    		例:rm php.ini		删除指定的文件php.ini
        2. 删除目录
        	例:rm -rf abc	参数-r是递归的意思,即可以删除非空目录;参数-f是强制的意思
        3. 自杀式删除,从根目录等全部删除
        	例:rm -rf /*
        	
    cat命令
    	1. 显示文件内容
    		例:cat myfile		显示指定文件myfile内容
        2. 创建文件
        	例:cat > myfile1	Welcome to Linux World		按ctrl+d结束输入,利用输出重定向符 ">" 来创建简短的文本文件myfile1
        	
    more / less命令
    	例:moer /etc/services 	分屏显示指定文件httpd.conf的内容,非常适合显示超过一屏的文本文件。没按一下空格键,向后翻一页;没按一次回车键,向后翻一行
    	例:less /etc/services 与more功能相似,less功能更强大,支持PageUp键向前翻屏以及PageDown向后翻屏,q退出查看
    	
    head命令
    	1. 显示文件10行内容
    		例:head /etc/services	默认显示指定文件的前十行内容
        2. 显示文件的前n行内容
        	例:head -n 20 /etc/services	参数-n设置显示指定行数,此时显示文件前20行内容
        	
    
    tail命令
    	1. 显示文件后10行内容
    		例:tail aliases		显示aliases文件最后十行内容
        2. 显示文件后n行内容
        	例:tail -n 1 aliases		显示aliases文件最后n行内容,此时显示文件最后一行
        3. 实时查看文件内容
        	例:tail -f 文件
    		
    --help帮助文档
    
Linux的用户管理模型
  • Linux是一个支持多用户远程操作的系统;采用用户组的模式管理用户的权限

  • Linux中每个用户有唯一的用户标识符UID,该UID是一个无符号整数,同时每个用户也必须至少属于一个组,也有组标识符GID,其中UID和GID独立编号

  • 文件属性的操作:

    groupadd命令
    	1. 创建组账号
    		例:groupadd mygroup1		创建一个新组mygroup1,其GID号为已存在最大的GID号的下一个顺序编号;创建一个组的同时会在/etc/group文件中为该组增加相应的一行,用来记录该组的名称、GID号及成员等信息
        2. 创建组账号同时指定GID号
        	例:groupadd -g 100 mygroup1	创建一个新组mygroup1,GID号为100,如果GID号重复,则会提示已存在;-g用来设置用户的主要组,每个用户都有一个主要组
        
    useradd命令
    	1. 创建用户账户
    		例:useradd user1		创建一个用户user1,同时在/etc/passwd文件和/etc/shadow文件增加一行,并自动为用户创建相应的主目录:/home/user1;/etc/passwd文件记录了系统中每个用户的用户名、UID号、GID号、主目录、shell等信息;用户的口令原来也存放在此文件中,现在为了保证安全采用了影子口令文件/etc/shadow来保存每个用户的口令
    	2. 创建用户账号并设置相应属性值
    		例:useradd -u 600 -g mygroup1 -G mygroup2 -d /home/student1 s1		创建用户s1,-u指定UID号为600,-g指定用户的主要组为mygroup1,-G指定用户的附加组为mygroup2,每个用户可以有多个附加组;-d指定用户的主目录为/home/student1
    
    passwd 用户名
    	1. 指定新用户密码
    	2. 禁止用户登录
    		例:passwd -l user1		成功反馈:passwd:Success 参数-l可以给指定用户user1加锁,即禁止该用户登录
    	3.恢复用户登录
    		例:passwd -u user1 	成功反馈:passwd:Success 参数-u可以给指定的用户user1解锁,即恢复该用户登录
    	4. 删除用户口令
    		例:passwd -d user1		成功反馈:passwd:Success 参数-d可以删除指定的用户user1口令,即以user1登录时无需口令
    	
    userdel命令
    	1. 删除用户
    		userdel user1		删除指定的用户user1
        2. 删除用户的同时删除其主目录
        	userdel -r user1	删除指定的用户user1,同时删除其主目录
    
    groupdel命令
    	删除指定的组
    		例:groupdel mygroup1		当某个组是某现有用户的主要组时,不能被删除
    		
    usermod命令
    	例:usermod -u 601 -g 501 -G 1000 s1	将已存在的用户s1的UID号修改为601,主组修改为501,属组修改为1000;一个用户只能有一个主组,可以有多个属组
    	
    chown命令
    	1. 改变文件的属主
    		例:chown user1 hello.txt		将指定文件hello.txt的属主(所有者)改为user1
    	2. 递归改变文件的属主
    		例:chown -R user1 mydir	参数-R表示递归,可以深入到指定目录中的每一层,将所有子目录和文件的属主(所有者)改为指定的用户;本例中将mydir目录中所有子目录和文件的属主设定为user1
    		
    chgrp命令
    	1. 改变文件的属组
    		例:chgrp mygroup1 hello.txt		将指定文件hello.txt的属组改为mygroup1
    	2. 递归改变文件的属组
    		例:chgrp -R mygroup1 mydir		参数-R表示递归,可以深入到指定目录到每一层;将所有子目录和文件的属组改为指定的组;本例中将mydir目录中所有子目录和文件的属组设定为mygroup1
    		
    chmod命令
    	1. 字母方式
    			图中字母u针对属主、g针对属组、o针对其他用户、a针对所有用户
    			=表示赋予(设置)指定权限,要注意它会覆盖原权限,+表示在原有权限的基础上增加指定权限,—表示在原有权限的基础上去掉指定权限
    			r、w、x三种权限,可以单独使用也可以组合使用
    			r表示读权限, w表示写权限, x表示执行权限
    			属主操作权限		属组操作权限		其他用户操作权限
    			rwx						---							---
    		例:chmod u+x host.conf		为文件host.conf的属主增加执行权限
    		例:chmod g-w,o=x host.conf		将文件host.conf的属组去掉写权限,同时将其他用户设置为只有执行权限,而文件属主的权限不变
    		例:chmod a=r host.conf		将改变文件所有属性
    	2.数字方式
    		需要注意数制转换的问题,先将每个权限位化成二进制数,其中如果某权限位是“-”则用0来表示,否则用1来表示,然后将九列权限分为三组(每三位一组),再将每组化为一个八进制数
    		例:某文件有权限rwxrw-r--,转换为二进制数为111110100,再化为八进制数764
    		例:chomd 677 host.conf	读写执行
    
    
建立文件链接操作命令
  • 简化对文件的操作

    • 硬连接:ln 文件 连接名
      • 不支持目录的操作,只能是文件
      • 删除源文件(原始饮用),不影响硬连接的操作
    • 软连接:ln -s 文件名/目录名 连接名
      • 软连接同时支持文件和目录的操作
      • 删除源文件,会导致软连接不可用
      • 通过操作软连接,修改文件的内容,本质上还是修改的源文件的内容
  • 查找命令

    which命令
    	显示命令的绝对路径
    		例:which cp		该命令只能在命令搜索路径指定的目录中去查找命令或程序
    		
    whereis命令
    	查询指定命令所在目录以及帮助文档所在目录
    		例:whereis ln
    		
    find命令:find 目标目录 -name|type|size|perm "条件"
    	1. 根据文件名查找
    		例:find / -name "dhcpd*"		参数-name指明按文件名进行查找,即从 / 目录开始查找以dhcpd开头的所有文件
    	2. 根据文件的类型查找	l代表连接类型  f代表文件类型  d代表目录类型
    		例:find /var -type d -print		从 /var目录下开始查找类型为目录的文件,其中参数-print是显示到屏幕上,通常省略		
    	3. 根据文件的大小查找
    		例:find /etc -size 8		从/etc下开始查找大小为8块的文件,默认512字节为1块,若认为块大小为1k,则应写8k;其他可以使用的单位有c(字节)、w(双字节)、M(兆字节)、G(吉字节)
    	4. 根据文件的修改时间查找
    		例:find . -cmin -5		从当前目录下查找5分钟之内修改过的文件,如果把-5改为+5,则表示查找5分钟以前修改过的文件。不带+或-,则认为整五分钟;
    		例:find . -ctime -5	此时时间单位为天
    	5. 根据文件的权限查找
    		例:find mytmp -perm 755	查找mytmp目录下的权限为755的文件
    		例:find mytmp -perm +755		查找mytmp目录下满足755中任何一种权限的文件,即符合任何一个指定的权限位即可
    		例:find mytmp -perm -755		查找mytmp目录下的权限至少满足755的文件,即指定的所有权限位必须符合才算满足查询条件
    
  • 文件内容操作命令

    grep命令
    	1. 在指定的文件中查找包含特定的字符串的行
    		例:grep "bind" host.conf		在文件host.conf中查找包含字符串"bind"的行
    		例:grep "network" /ect/*.conf	利用通配符在多个文件中查找包含特定的字符串的行;此时是在/etc下扩展名为 .conf文件中查找包含字符串"netword"的行
    	2. 查找不包含指定字符串的行
    		例:grep -v "bind" /etc/host.conf	查找/etc/host.conf中查找不包含字符串"bind"的行
    	3. 组合命令
    		例:find . -type f | grep "条件"		按照grep指定的条件,从find . -type f 查询的结果集中过滤内容
    
  • 关闭Centos6.5防火墙

    关闭防火墙,但再次开机会自动开启service iptables stop
    //Centos7命令:systemctl stop firewalld
    
    关闭防火墙,关闭开机启动chkconfig iptables off
    
    查看防火墙状态service iptables status
    //Centos7命令:systemctl status firewalld
    
  • 快照功能:快照可以将当前系统的状态,以一个快照文件的方式保留下来;当开发人员对系统进行了误操作或事系统因为自然原因宕机等故障时,可以使用快照文件使系统及时的恢复到快照保存的正常状态

    • 生成快照会占用磁盘空间,大量的快照会侵占服务器资源,企业开发中通常不用
  • 软件安装

    查看操作系统位数	uname -r
    
    rpm安装
    	1. 安装命令 rpm -ivh rpm软件包	其中i为安装软件,v显示安装过程,h显示安装进度,rpm包中内置安装目录
    	2. 查询系统中安装的软件包
    		例:rpm -qa		查询系统中安装的软件包列表,其中参数-q的功能是查询,参数-a的功能是所有的
    		例:rpm -qa | grep "jdk"	查询并筛选
    	3. 查询软件包中文件清单
    		例:rpm -ql php		查询已安装的软件包php中的文件列表,其中参数-l的功能是列出指定软件包中的文件
    	4. 卸载指定的软件包
    		例:rpm -e php		卸载已安装的软件包php,参数-e的功能是卸载;注意此命令当使用账号身份不同是,普通用户只能执行查询操作
    
                rpm -uvh xxx.rpm	升级对应安装包
                
    	
    解压缩安装
    tar命令
    	tar类似于windows压缩工具,对文件压缩和解压缩
    		-c:建立一个压缩文件(未压缩)
    		-x:解开一个压缩文件
    		-z:是否需要gzip压缩,扩展名为gz
    		-Z:调用compress命令来压缩,扩展名为Z
    		-j:调用bzip2命令来压缩,扩展名为bz2
    		-v:压缩过程中显示文件
    		-f:指定文档名,在f之后立即接档名,其他位置不限,但f必须接档名
    		例:tar -cvf test.tar a.txt b.txt		只打包不压缩,把a.txt和b.txt打包,包名为test.tar
    		例:tar -xvf test.tar		解不压缩的包
    		例:tar -czvf test.tar.gz a.txt b.txt 		打包并压缩,压缩包名为test.tar.gz
    		例:tar -xzvf test.tar.gz		解包并解压缩
    		例:tar -zxvf test.tar.gz -C 		解包到目标目录
    		
    		
    源码安装
    	1. 初始化配置信息,基本上所有源码安装都会提供configure文件  	./configure
    	2. 编译源码为可安装的程序  	make
    	3. 安装到系统		make install
    	如nginx,由C语言编写
    
    yum源安装:在线安装
    	yum install 安装简名,有确认提示
    	yun install -y 安装简名,没有确认直接安装
    	yum install vim	高亮展示文本编辑
    	
    wget代表网络直接下载资源到虚拟机
    	需要先下载wget,安装wget:yum install wget
    	wget 资源的url
    
    
  • 配置jdk环境变量

    用户级别环境变量:用户家目录有一个隐藏文件 .bash_profile
    	PATH=$PATH:$HOME/bin	//因为是用户级别,所有引用系统环境变量
    	
    	export PATH
    	export CLASSPATH=.
    	export JAVA_HOME=/usr/java/jdk1.7.0_79		//rpm通常默认安装在usr目录下
    	export PATH=$PATH:$JAVA_HOME/bin		//会覆盖掉默认的引用系统环境变量,所有在引用jdk时再次引入系统环境变量
    	//$PATH引用系统默认环境变量值,多个环境变量用:隔开
    
    系统级别环境变量:/etc/profile
    
    重新加载文件的内容
    	source .bash_profile
    	
    卸载:
    	rpm
    
  • 配置tomcat

    解压缩:tar -zxvf apache-tomcat-7.0.69.tar.gz		//root根目录下
    
    将开发调试好的Web项目以war包形式部署到Linux服务器上
    
  • 进程相关命令

    ps命令
    	1. 不带参数
    		例:ps		查询在当前控制台上运行的进行
    	2. 查看所有进程
    		例:ps -aux		查询系统中所有运行的进程,包括后台进程,其中参数a是所有进程,参数x包括不占用控制台的进程,参数u显示用户
    	3. 查看所有进程
    		例:ps -ef		查询系统中所有运行的进程,包括后台进程,而且可以显示出每个进程的父进程号(守护进程,有关联的)
    	查看控制台进程
    		例:ps -aux | grep 关键字
    		例:ps -ef | grep 关键字
    		
    kill命令
    	1. 结束一个进程,杀掉指定进程
    		例:kill 进程号(pid)		kill命令可以杀掉一个进程,普通用户只能杀掉自己的进程,同时被保护的进程无法杀掉
    	2. 强制杀掉指定进程
    		例:kill -9 进程号		强制终止进程的运行,-9代表强制的意思;实际上kill命令是向该进程发送信号,该进程接到信号后决定是否停止运行,有些守护进程必须要收到参数9才终止运行
    		
    pstree命令 --- 进程多时使用,通常不使用
    	1. 数状格式显示进程列表
    		例:pstree		以数状格式显示系统的进程列表
    	2. 带进程号的数状格式显示进程列表
    		例:pstree -p		以数状格式显示系统的进程列表,并标识出每个进程的进程号
    		
    top命令
    	查看进程
    		例:top			动态的显示系统中的进程
    
  • 加载系统配置文件并生效命令

    reboot重启虚拟机
    
    source /etc/profile
    
  • 文本编辑命令

    vi命令
    	对文本文件进行编辑
    	vi 文件名
    		如果指定文件名的文件存在,则进入文件进行编辑
    		如果指定文件名的文件不存在,则创建一个新文件,并进入编辑。:wq!:保存新创建的文件
    	1. 普通命令模式
    		例:删除当前行:dd
    			   删除多行:ndd		如5dd、3dd
    			   复制当前行:yy
    			   复制多行:nyy
    			   黏贴:p
    			   撤销:u
    			   光标定位到文档首行:gg
    			   搜索指定字符:/word(向下查找)      ?word(向上查找)
    	2. 底线命令模式
    		例:退出不保存:  :q!	
    			   退出并保存:	:wq!
    	3. 编辑模式
    		例:普通命令模式下输入i进行文件编辑即可
    
克隆虚拟机
  • 克隆操作是由VMware提供的一种方便于我们学习的操作,克隆操作会生成一个与母体系统状态一样的虚拟机

  • 两种克隆方式

    • 链接克隆:对原始虚拟机的引用,所需的存储磁盘空间较少,但是必须能够访问原始虚拟机才能运行
    • 完整克隆:是原始虚拟机当前状态的完整副本,此副本虚拟机完全独立,可以拷贝到其他的计算机进行使用;但是需要较多的存储磁盘空间
  • 对克隆机的处理

    • 删除保存有原始虚拟机网卡初始化信息的文件,确保克隆机网络没有问题

      rm -rf /etc/udev/rules.d/70-persistent-net.rules
      
    • 修改主机名

      vi /etc/hosts:
      	127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4
      	::1         localhost localhost.localdomain localhost6 localhost6.localdomain6
      	10.211.55.12 master
      
      vi /etc/sysconfig/network
      	NETWORKING=yes
      	HOSTNAME=master
      	
      修改完需要重启虚拟机
      	reboot
      
Web应用架构的演变
  • 单体架构(单机架构)
    • 网站的用户量比较少的阶段,将应用程序和存储系统部署在同一台计算机上
    • 应用程序:主要任务完成相关业务逻辑的处理和运算,基于内存运行,需要高运算能力的CPU
    • 存储系统:占用磁盘空间,对磁盘空间的需求为最主要的
  • 多机架构(以两台为例)
    • 根据应用程序和存储系统的各自特点进行最优的部署和硬件配置
    • 一台CPU运算能力高:部署应用程序
    • 一台存储能力强:部署存储系统
  • 集群:提高整个网站的吞吐量(处理请求的数量)
    • 高可用集群
      • 数据库的高可用
      • 数据库存储系统(主)
      • 数据库存储系统(从):同步主存储系统的数据
      • 此时可以进行读写分离,写操作在主存储系统操作,读在从存储系统操作
      • 因为此时地址不统一,所有使用数据库中间件(mycat)来访问存储系统,负责统一数据库的IP等
    • 负载均衡式集群:nginx,指对于来自客户端的大量请求进行均衡的分发到服务器的每一个节点上
      • 代理服务器:
        • 需要明确代理的集群节点信息
        • 需要进行请求的分发,负载均衡
        • 统一多个服务器的IP
      • 负载均衡策略:
        • 轮巡(对服务器的分发策略为一个一个使用)
        • 基于最小连接数
        • 基于权重(服务器的新旧,负载能力不同)
        • ip_hash(对用户的电脑ip取hash码值来分配服务器)
    • 科学计算集群:通常国家科研机构等使用
Linux安装mysql
  • 安装mysql,可以直接使用yum安装

  • centos6.5中rpm安装

    rpm -ivh --nodeps --force perl-*.rpm
    
    rpm -Uvh mysql-libs-5.1.73-7.e16.i686.rpm
    
    rpm -ivh mysql-5.1.73-7.el6.i686.rpm mysql-server-5.1.73-7.el6.i686.rpm 
    
    
  • 启动mysqlmarkdown

    service mysqld start
    
  • 进入mysql

    mysql -u root -p	 	此时无密码,直接回车即可
    
  • 暴力修改外部访问权限,仅限学习使用

    use mysql;
    
    select user,password,host from user;		//权限表
    delete from user where host != '127.0.0.1';
    update user set password=password('123456')	//修改登录数据库密码
    update user set host='%'			//权限设置为所有外部均可连接
    
    flush privileges;		//修改的权限进行提交
    
主从搭建
  • 测试两台Linux的mysql是否连通

    mysql -u root -p -h 10.211.55.12 -P 3306
    
    mysql -u root -p -h 10.211.55.13 -P 3306
    
  • 连通后配置mysql文件

    /etc/my.cnf
    #在配置文件中加入
    server-id=1		//唯一
    log-bin=mysql-bin
    log-slave-updates
    slave-skip-errors=all
    
    另一个Linux的mysql配置文件
    server-id=2		//唯一
    log-bin=mysql-bin
    log-slave-updates
    slave-skip-errors=all
    
  • 查看配置是否生效

    重启mysql
    service mysqld restart
    
    show variables like 'server_id';		查看配置的server_id是否生效
    
  • 查看主节点的日志文件以及文件位置

    mysql下:
    show master status;
    
  • 配置从服务器

    在mysql下执行:
    change master to
    master_host='10.211.55.12',		//主机IP
    master_user='root',			//用户名
    master_password='123456',			//密码
    master_log_file='mysql-bin.000001',		//同步的文件位置;与上一步查出来的对应,一般不会变
    master_log_pos=106;
    
  • 开启从机

    slave start;
    
  • 查看从节点状态

    show slave status;	//没有格式化,太乱
    show slave status\G;		//格式化显示从节点状态
    
    //核心
    *************************** 1. row ***************************
                   Slave_IO_State: Waiting for master to send event
                      Master_Host: 10.211.55.12							//主机ip
                      Master_User: root										//主机用户名
                      Master_Port: 3306										//主机短端口
                    Connect_Retry: 60
                  Master_Log_File: mysql-bin.000001
              Read_Master_Log_Pos: 106
                   Relay_Log_File: mysqld-relay-bin.000002
                    Relay_Log_Pos: 251
            Relay_Master_Log_File: mysql-bin.000001
                 Slave_IO_Running: Yes								//同步数据,网络也是用IO传输数据
                Slave_SQL_Running: Yes							//这两个是关键
    
Centos6.5安装Mycat
  • 核心功能:读写分离、对数据库垂直拆分、对数据库水平拆分

    • 垂直拆分:不同的表拆分到不同的库
    • 水平拆分:对单表拆分到不同的库
  • 核心功能是分库分表,即将一个大表水平分割为N个小表,存储在后端MySQL服务器里或其他数据库里

  • 可以看作是一个数据库代理,用MySQL客户端工具和命令行访问,其后端可以用MySQL原生协议与多个MySQL服务器通信,也可以用JDBC协议与大多数主流数据库服务器通信

  • 解压即可

    tar -zxvf Mycat-server-1.6-RELEASE-20161028204710-linux.tar.gz
    
    目录结构:
    核心bin:启动相关命令
    conf:配置文件
    logs:Mycat运行过程中的日志信息
    
  • 建议先处理配置

    vi schema.xml 的部分标签:
    
    schema标签:代表数据库实例
    	name:逻辑库名字
    	checkSQLschema:false
    	sqlMaxLimit:查询数据最多返回条数,性能优化配置
    	dataNode:数据节点
    dataNode标签:可以有多个
    	name对应schema的name
    	database:对应Mysql数据库中子库的名字,指定让Mycat代理哪个子库
    	dataHost:配置对应子库的具体主机服务器
    dataHost标签:
    	name对应dataNode中的name
    	heartbeat:心跳检测机制,提高集群可用性,监控主机是否有问题
    	balance="1"		一个集群下一个主有几个从
    	内部writeHost标签:
    		host:要连接主机的名字,可以写ip便于阅读;负责读的数据库
    		url:ip和端口
    		user:用户名
    		password:密码
    		内部readHost标签:读写分离;指定从机负责写
    			host:从机名字
    			url:ip和端口
    			user:用户名
    			password:密码
    			
    <?xml version="1.0"?>
    <!DOCTYPE mycat:schema SYSTEM "schema.dtd">
    <mycat:schema xmlns:mycat="http://io.mycat/">
    <schema name="MYDB" checkSQLschema="false" sqlMaxLimit="100" dataNode="dn1"></schema>
    <dataNode name="dn1" dataHost="dh1" database="test" />
    <dataHost name="dh1" maxCon="1000" minCon="10" balance="1" 
            writeType="0" dbType="mysql" dbDriver="native" switchType="1"
                    slaveThreshold="100">
            <heartbeat>select user()</heartbeat>
            <writeHost host="master1" url="10.211.55.12:3306" user="root" password="123456">
                    <readHost host="slave" url="10.211.55.13:3306" user="root" password="123456"></readHost>
            </writeHost>
    </dataHost>
    </mycat:schema>
    
    • 编写server.xml

      property标签:
      <property	name="serverPort">8806</property>:	访问Mycat端口
      <property	name="managerPort">9066</property>:监控管理Mycat使用
      
      把其中<user name="root">标签改为使用的schema的name
      
              <user name="root">
                      <property name="password">123456</property>
                      <property name="schemas">MYDB</property>
      
                      <!-- 表级 DML 权限设置 -->
                      <!--
                      <privileges check="false">
                              <schema name="TESTDB" dml="0110" >
                                      <table name="tb01" dml="0000"></table>
                                      <table name="tb02" dml="1111"></table>
                              </schema>
                      </privileges>
                       -->
              </user>
      
              <user name="user">
                      <property name="password">user</property>
                      <property name="schemas">MYDB</property>
                      <property name="readOnly">true</property>		//此用户权限只能读
              </user>
              
      
    • 启动

      Mycat下的bin下:
      ./startup_nowrap.sh 
      
      ps -ef查看进程看Mycat是否启动成功
      root      1412     1  0 18:02 ?        00:00:54 /usr/java/jdk1.7.0_79/bin/java -DMYCAT_HOME=/root/mycat -classpath /root/
      
      用mysql和命令行即可访问mycat
      登录Mycat
      mysql -u root -p -h 10.211.55.14 -P8066
      
安装nginx并使用nginx做负载均衡的代理服务器
  • 源码安装,由C语言编写,故需要先安装C语言环境

    安装C语言,可用yum安装
    rpm -ivh --nodeps --force *.rpm		在gcc包下
    
    安装pcre
    rpm -ivh --nodeps --force *.rpm		在pcre包下
    
    安装zlib
    rpm -ivh --nodeps --force *.rpm		在zlib包下
    
  • 初始化配置信息,基本上所有源码安装都会提供configure文件 ./configure

  • 编译源码为可安装的程序 make

  • 安装到系统 make install

  • 配置nginx信息

    //	cd /usr/local/nginx/
    配置代理服务器的nginx列表
    http{
         #gzip  on; 		前面不需要改动
    	//配置服务器列表
    	upstream tomcat7{
            ip_hash;	//不写为默认均衡策略
            server 10.211.55.15:8080;
            server 10.211.55.17:8080;
        }
    
        server {
            listen       80;
            server_name  localhost;
    
            #charset koi8-r;
    
            #access_log  logs/host.access.log  main;
    
            location / {
                proxy_pass http://tomcat7;
                root   html;
                index  index.html index.htm;
            }
    
    }
    upstream关键字,名字自己确定,其中括号内第一行为负载均衡策略,不写的话为默认负载均衡策略为轮巡
    在server内部的location里配置关联
    	proxy_pass http://tomcat7;		代理监听的地址
    	
    
  • 使配置生效,重启nginx

    ./nginx -s reload
    
    停止ngnix:
    ./nginx -s stop
    
  • 测试

    默认端口为80
    10.211.55.16:80
    
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值