数据库

一、数据库的作用

            用来存储数据,方便查询。   

二、关系型数据库(RDBMS) 

            核心是用二维表存储数据

            行,记录,代表的是一条事物的信息

            列,字段,代表的是一条事物的某一个属性

            表可以存很多行

            数据库可以存很多表

三、sql

            结构化查询语言,操作关系型数据库

            不区分大小写

四、Mysql(关系型数据库管理系统,一套软件,包括客户端和服务端)

            瑞典公司开发,被卖给Sun,Sun又被卖给Oracle

            开源,免费,支持多平台

            客户端提出命令,显示结果

            服务端是提供数据存储,查询

五、MySQL 安装

            服务端:不能带中文路径

                启动、停止、重启

            客户端:

                命令行客户端

                navicat

六、Navicat数据库相关操作:

            数据库操作:

                创建 —— 字符集用utf8

                编辑 —— 不能改名字

                删除

            数据表

                创建

                设计表 —— 添加字段、修改字段、删除字段

                重命名

                删除

            数据操作

                添加、删除、修改、查询

七、数据类型与约束

        数据类型

            int :有符号范围(-2147483648 ~ 2147483647),无符号范围(0 ~ 4294967295),长度没有意义

            varchar:varchar(3)表示最多存3个字符,一个中文或一个字母都占一个字符

            decimal:decimal(5,2) 表示共存5位数,小数占2位,整数占3位

            datetime

        约束:

            主键(primary key):字段值必须唯一,且不能为null,物理上存储的顺序,唯一标识某一条数据,一般字段名叫id,int类型,无符号、自动递增

            非空(not null):此字段不允许写空值

            唯一(unique):此字段的值不允许重复

            默认值(default):当不填写此值时,会使用默认值,如果填写时以填写为准

            外键(foreign key):维护两个表之间的关联关系

八、数据库的备份和恢复:

        界面操作:

            备份的话,点数据库——》转储SQL文件——》结构和数据,就会存成sql文件,里面都是sql语句

            恢复,新建数据库(注意字符集要与sql文件一致),点数据库——》运行SQL文件 即可

        但一般,这由备份与恢复代码文件执行

九、SQL语句

        点数据库——》点“查询”——》在查询页面写sql语句

        ctrl+/:注释;ctrl+shift+/:去掉注释

        1、 创建表:create table 表名(字段名 类型 约束)

            create table student(

            id int UNSIGNED PRIMARY KEY auto_increment,

            name VARCHAR(10),  # 表示长度是10

            age int UNSIGNED,     #表示无符号

            height decimal(5,2)

            )

        2、 删除表:drop table if exists 表名

            每条sql语句后要有;隔开,最后一条sql后面不用加;

            drop table if exists student; 

            create table student(

            id int UNSIGNED PRIMARY KEY auto_increment,

            name VARCHAR(10),

            age int UNSIGNED,

            height decimal(5,2)

            )

        3、数据操作:增、删、改、查:我们这些写的sql语句,可以在navicat中的数据库中的“查询”栏里新建查询页面编写,写完可以直接按“保存”,就会保存在“查询”栏下面

               1)增加数据:insert into 表名 values(...)

                           给所有字段插入数据: insert into 表名 values(0,'亚瑟',16,160.32) —— 第一位表示id的时候,填0,default,或者null表示自动递增,但不能不写

                           只给某一字段添加数据:insert into 表名(name,age) values('亚瑟',30) —— 注意数据要和字段一一对应,这里“name”,“age”是字段名

                           一条sql语句插入多条数据:insert into 表名(name) values('亚瑟'),('鲁班'),('大乔') —— 推荐,效率高

                           多条sql语句插入多条数据,之间用;隔开

            2)修改数据:update 表名 set 列1=值1,列2=值2 where 条件

                            例如:update student set name='mike' where age=20

            3)删除数据:delete from 表名 where 条件

                            例如:delete from student where id=20

                        逻辑删除:对于重要数据,不能轻易删除。加多一个字段例如“isdelete”来表示这条数据是否被删除,类型设成int,初始isdelete字段都设置成0,0代表没删除,1代表删除

                                 update student set isdelete=0

                             然后删除的时候就执行:

                                update student set isdelete=1 where id=5 (表示把id=5的人删除)

                            以后查询,只要看isdelete=0的人就可以了,select * from student where isdelete=0

            4)查询数据:select 列名,列名 from 表名 where 条件

                            查询所有数据:select * from students

                            查询某几列数据:select name,hometown from students

                            查询并起别名:select name as 姓名,hometown as 家乡 from students

                            多表的时候给表起别名:select stu.name,stu.hometown from students as stu

                            删除重复值:select distinct sex,class from students

                            条件查询比较运算:select * from students where hometown!='北京'

                            条件查询逻辑运算:select * from students where age<20 and sex='女'

                                                            select * from students where age='女' or class='1班'

                                                            select * from students where not hometown='天津'

                            条件查询模糊查询:select * from students where name like '%孙%' —— 孙前后面可以有任意个任意字符

                                                            select * from students where name like '孙_' —— 孙后面只能有一个任意字符

                            条件查询范围查询:select * from students where hometown in ('北京','上海','广东')

                                                            select * from students where hometown not in ('北京','上海','广东')

                                                            select * from students where age between 18 and 20 —— 包含18和20,只能用于数字,而且必须小的18放前,大的20放后

                            条件查询空判断:select * from students where card is null (注意一定要用is)

                                                         select * from students where card is not null (找非空)

                            !!注意,null(指没有填写值)与''(指空字符串)是不一样的!!如何插入null呢?

                                    insert into students values('013','mike','男','北京','1班',null)

                                    或者 

                                    insert into students(studentNo,name) values('013','mike') —— 其余没有定义的字段就是null

                            如何插入''呢?insert into students values('013','mike','男','北京','1班','')

            5)排序:select * from 表名 order by 列1 asc|desc, 列2 asc|desc,...(不写asc或者desc,默认是asc,正序;先按列1排,排完再按列2)

                        select * from students order by convert(name using bgk) —— bgk是中国语言的编码,可用于对中文字段按拼音排序

            6)聚合函数

                    count统计一个表有多少行:select count(*) from students where sex='男'—— 一行记录只要有一个字段有值,就会统计在内

                    count统计某一个字段有多少非空行:select count(name) from students —— null的值不计入

                    max,min统计最大最小值:select max(age) from students where sex='女' ——先执行from,再是where,最后才是select

                    sum求和:select sum(age) from students where hometown='北京'

                    avg求平均值:select avg(age) from students where sex='女'

            7)分组:select 列1,列2,聚合... from students group by 列1,列2,... (null也算是一组)

                        select sex,count(*) from students group by sex —— 查询各种性别的人数

                        select class,max(age),min(age),avg(age) from students group by class —— 查询各个班级学生的平均年龄,最小年龄,最大年龄

            8)分组后过滤:select 列1,列2,聚合... from students group by 列1,列2,... having 条件

                        select sex,count(*) from students group by sex having sex='男' —— 分组后,即group by后面不能跟where,只能用having过滤

                        相当于 select count(*) from students where sex='男',执行顺序是先from,where,再group by 最后再select

            9)按照多个字段分组:这里class 与 sex 的值一模一样时,认为是一个组

                        select class,sex,count(*) from students group by class,sex

            10) 分页,用到获取部分行的语法:select * from 表名 limit start,count

                        select * from students limit 0,3 —— 从0开始表示第一条数据,显示3条数据,如果limit后面只写一个数字,就是省略了start

                        分页:已知每页显示m条数据,显示第n页的数据的时候,就需要这个sql语句:

                                    select * from students limit (n-1)*m,m

                      (count一下求总条数p1,p1除以m得页数p2,如果整除页数就是p2,如果不是整数则页数是p2+1)

        4、多表查询或者叫多表连接查询

            等值连接:

            1)、where:select * from 表1,表2 where 表1.列=表2.列

                             生成临时表,然后在临时表中使用关联字段进行过滤 —— 临时表存大小是两表的笛卡尔积,存在内存中,性能比较差

                                 select * from students as stu,scores as sc where stu.studentNo=sc.studentNo

            2)内连接(推荐):select * from 表1 inner join 表2 on 表1.列=表2.列

                            不生成临时表,连接时先判断条件,只有符合条件才会连接再放到结果 —— 性能比较好

                                    select * from students as stu

                                    inner join scores as sc on stu.studentNo=sc.studentNo

                                三个表连接示例(至少要两个条件):

                                    select * from students as stu,scores as sc,courses as cs

                                    where stu.studentNo=sc.studentNo and sc.courseNo=cs.courseNo

                                或者:

                                    select * from students as stu

                                    inner join scores as sc on stu.studentNo=sc.studentNo

                                    inner join courses as cs on sc.courseNo=cs.courseNo

             3)左连接:select * from 表1 left join 表2 on 表1.列=表2.列 (把左边的表的信息全部显示出来,找不到交集的填null,这里join前面的是左边的表,join后面的是右边的表)

                        select * from students as stu

                        left join scores as sc on stu.studentNo=sc.studentNo

                        left join courses as cs on sc.courseNo=cs.courseNo

            4)右连接:select * from 表1 right join 表2 on 表1.列=表2.列 (把右边的表的信息全部显示出来,找不到交集的填null,这里join前面的是左边的表,join后面的是右边的表)注意!!表的书写顺序!!

                        select * from scores as sc                    

                        right join  courses as cs on sc.courseNo=cs.courseNo                         

                        left join students as stu on stu.studentNo=sc.studentNo —— 这里注意,到底是想把哪个表的数据全部显示出来,这里想course表的信息全部显示出来,所以就要用left join

        5、自关联:针对表中的数据有上下级关系,带层次关系的

                    例如:对于一张表areas,里面既有省的数据,也有市的数据,找出省对应的市

                    select * from areas as sheng, areas as shi

                    where sheng.aid=shi.pid

                    例2:找出省对应的市,市对应的区

                    select * from areas as shengareas as shi,areas as qu

                    where sheng.aid=shi.pid and shi.aid=qu.pid

                    或者:

                    select * from areas as sheng

                    inner join areas as shi on sheng.aid=shi.pid

                    inner join areas as qu on shi.aid=qu.pid

当我们想把没有区的市都显示出来的时候:

                    select* from areas as sheng

                    inner join areas as shi on sheng.aid=shi.pid

                    left join areas as qu on shi.aid=qu.pid

        6、子查询:

            1)标量子查询:写在where后,当成条件使用,子查询的结果是一个数据(一行一列)

                        select * from students where age>(select avg(age) from students) 括号内的是子查询,括号外的是主查询

                        例如:

                        select score from scores 

                        where studentNo=(select studentNo from students where name='王昭君') 

                        and courseNo=(select courseNo from courses where name='数据库')

            2)列级子查询:写在where后,当成条件使用,子查询返回的结果是一列(一列多行)

                        select * from scores where studentNo in (select studentNo from students where age=18)

                        除了in以外,还可以使用any,some,all,但前面一定要有=,!=,>,<

                        select from students where age =any (select age from students where age between 18 and 20)  (相当于some,等于任一个,或者<>any,小于或者大于任一个,即大于里面的最小值,或者 小于里面的最大值

                        select from students where age =some (select age from students where age between 18 and 20) (等于任一个,或者<>some,小于或者大于任一个

                        select from students where age<all (select age from students where age between 18 and 20) 表示所有,<所有即小于括号里面的所有结果,即小于18

            3)行子查询:写在where后,当成条件使用,子查询返回的结果是一行(一行多列)

                        select * from students

                        where (sex,age) = (select sex, age from students where sex='男' order by age desc limit 1)

            4)表级子查询:写在from后,当成数据源使用,子查询的结果是多行多列

                        把临时生成的表当成是数据源,一定要给这个临时的表起别名,这里是“as c” 

                        select * from scores

                        inner join 

                        (select * from courses where name in ('数据库','系统测试')) as c

                        on scores.courseNo = c.courseNo

                        *round 函数

                        select round(avg(price),2) from goods —— 四舍五入保留两位小数的函数

        7、拆分表

                    对于一个表中的数据如果有冗余,例如一个商品表,它有类型这一个字段,有很多商品都是标上“笔记本”的类型,存在我们的电脑硬盘中很占地方,所以会新建一个类型表,一个类型对应一个编号,在原表中,每个商品的类型写的是一个编号,这样占的空间小点,也利于以后类型名称的修改。

                    — 1、创建create table goods_cates (...)之后,给商品类型表插入数据

                            insert into goods_cates(cate_name) select distinct cate from goods(如果插入的是两个字段,则查询也要查两个,一一对应)

                    或者创建并同时插入:

                        create table goods_brands(

                        brand_id int unsigned primary key auto_increment,

                        brand_name varchar(10)

                        ) select distinct brand_name  as brand from goods (这里注意!!查询出来的字段名要在新建表中找到对应,如果找不到,例如这里的brand,在新建表中找不到对应的字段名叫“brand”,那它就会自动在创建表的最后添加一列叫“brand”,最终表就有“brand_id”,“brand_name”,“brand” 3列)

                    * 延伸:快速备份一张表:

                    create table brand_bak select * from goods_brands

                    — 2、接着更新原goods中的数据,把类型名称改成类型表中的对应编号

                        update goods

                        inner join goods_cates on goods.cate=goods_cates.cate_name

                        set goods.cate=goods_cates.cate_id

                    — 3、展示的时候,就把goods,goods_cates,goods_brands 三个表连接起来:

                        select goods_name,goods_cates.cate_name,goods_brands.brand_name from goods

                        inner join goods_cates on goods.cate_id = goods_cates.cate_id

                        inner join goods_brands on goods.brand_id=goods_brands.brand_id

        8、数据库设计——ER模型

                    E表示entry,一个实体,一个数据对象

                    R表示relationship,联系,包括一对一,一对多,多对一,多对多

                    属性:实体的某一特性

                    实体A对实体B为1对1,则在字段少的那个表,创建一个字段,储存另一个表的主键值

                    实体A对实体B为1对多,则在表B中创建一个字段,储存表A的主键值

                    实体A对实体B为多对多的,新建一个中间表C,这个表C只有两个字段,一个用于储存表A的主键值,一个用于储存表B的主键值

        9、命令行客户端

                    在黑窗口,cd到mysql的安装路径下,mysql -uroot -p123456 (这里123456是你的密码)就能进入命令行客户端,连接上了mysql服务端。连接时,更为安全的做法是:mysql -uroot -p 直接回车,再输入密码

                    在命令行客户端,一般所有语句都有;结尾,不然有可能运行不了。接着,要查看有哪里数据库,show database; 下一步,再选择你要操作的数据库,例如 use ceshi; 如果要查询当前自己所在的仓库,即 select database();要显示中文数据,要先做转换, set charset gbk;

                    创建数据库:create database seshi_bak charset='utf8'

                    删除数据库:drop database ceshi_bak;

                    进入某个数据库中操作:use ceshi;

                    显示当前数据库所有的表:show tables; | 而 show create table students; 返回一个创建students表时的sql语句

                    查看某个表中字段内容:desc students;

                    对数据库进行备份,cmd一定要用管理员身份打开,再去到mysql的安装目录下,然后mysqldump -uroot -p123456 cheshi > ceshi.sql (利用重定向把ceshi这个数据库存到.sql文件中);备份以后,要恢复的话,就运行mysql -uroot -p123456 ceshi_bak<ceshi.sql (把刚才备份的ceshi.sql文件恢复到ceshi_bak数据库中)

        10、内置函数,跟在select后面,select后面都可以写函数

                1)、拼接函数:select concat(str1,str2,......)

                                 select name,hometown,concat(name,'的家乡是',hometown) from students

                2)求字符串长度:select length(str) (这里是返回多少个字节,英文是a的长度是1,中文“我”的长度是3)

                                select * from students where length(name)=6

                3)截取字符串:select left(str,len) ;select right(str,len) ;select subring(str,pos,len) 

                                select name,left(name,1) from students

               4)去除字符串空格:select ltrim(str) 删除左空格 ;select rtrim(str) 删除右空格

                5)大小写转换:select lower(str)  ;select upper(str)

                6)四舍五入 select round (n,d) ,n表示原数,d表示小数位置,默认为0

                7)求次幂:select pow(x,y) , x的y次幂

                8)获取圆周率: select PI();

                9) 获取随机数:select rand(), 值为0-1.0的浮点数;select round(rand()*10), 返回一个1-10的随机数

                            随机选取表中的一条数据:select from students order by rand() limit 1

                10) 显示当前日期:select current_date(); 当前时间:select current_time(); 当前日期和时间,select now();规定时间的格式:select date_format(now(),'%Y/%m/%d') 这里用/连接年月日,可以自定义用什么符号连接

                               %Y —— 完整年份,%y —— 简写年份,%m —— 月, %d —— 天,%H —— 小时,24小时制, %h —— 小时,12小时制,%i —— 分,%s —— 秒

        11、流程控制:case 值 when 比较值1 then 结果1 when 比较值2 then 结果2 ... else 结果 end

                        当值等于某个比较值时,对应的结果会返回;如果所有的比较值都不相等则返回else的结果,如果没有else并且所有比较值都不相等则返回null

                        这里的case整个相当于一个字段

                        select name,sex,

                        case sex 

                        when '男' then concat(left(name,1),'帅哥')

                        when '女' then concat(left(name,1),'美女')

                        else 'xx' end as 结果 —— 不男不女的话返回xx

                        from students

        12、自定义函数,调用用select, 一次编译,缓存起来在服务端,下次使用直接命中缓存中已经编译好的sql,不需要重复编译,减少网络交互,减少网络访问流量,提高性能;另外还有隐藏核心函数功能的作用。 

                        在命令行客户端写:需要delimiter,用于设置分割符,默认是;因为sql语句中可能含有;

                        delimiter $$

                        create function 函数名称(参数列表) returns 返回类型

                        begin

                        sql 语句

                        end

                        $$

                        delimiter ;

                        在navicat中写

                        create function my_trim(str varchar(100)) returns varchar(100)

                        begin 

                        return ltrim(rtrim(str));

                        end

         13、储存过程:调用用call,一次编译,缓存起来在服务端,下次使用直接命中缓存中已经编译好的sql,不需要重复编译,减少网络交互,减少网络访问流量,提高性能;另外还有隐藏核心函数功能的作用。 

                    delimiter //

                    create procedure 存储过程名称(参数列表)

                    begin

                    sql语句

                    end

                    //

                    delimiter

                    例如:

                    create procedure proc_stu()

                    begin

                    select * from students;

                    end

                    call proc_stu

        14、视图:就是一个查询存在服务端,当写的sql语句很多,可以存成视图放在服务端, 下次使用就能直接调用视图;也有隐藏关键字段数据的作用;减少网络传输的sql数量。

                    create view v_students as

                    select * from students

                    调用:

                    select * from v_students

                    在命令行客户端,要显示视图:show tables; 会把表和视图都显示出来。

                    删除视图:drop view 视图名称;如果update 视图就是update它的原表。

        15、事物:一个事物有多个操作,需要成功就要全部操作成功,一个失败就整个事物失败

                    begin; —— 一begin,开启事物,当所有操作都执行完了,你也确认过结果了,在commit; 最终表的内容才会改变

                    update students set age=age-10 where name='大乔';

                    update students set age=age+10 where name='小乔';

                    select * from students where name in ('大乔','小乔'); —— 确认上两步操作成功了

                    rollback; —— 如果某一步操作出错了,rollback后所有的操作全部失败,数据回到原始状态

                    commit;

        16、索引:为了查询更快

                        查看表的索引: show index from 表名

                        创建索引的方式,primary key,unique,key(字段):这里name,id,age都是索引

                        create tables 表名(

                        in int primary key,

                        name varchar(10) unique,

                        age int,

                        key(age)

                        );

                        添加索引:create index 索引名称 on 表名(字段名称(长度)) 例如:

                        create index age_index on create_index(age);

                        create index name_index on create_index(name(10)); 如果创建索引的字段类型是varchar要指定长度,而且要与字段创建表时设置的长度一样

                        删除索引:drop 索引名称 on 表名;

                        * 开启运行时间检测(在命令行客户端):set profiling=1;执行完一个sql语句后,再show profiles;就能查询刚才的sql语句的执行时间;要想在navicat看sql语句的执行快慢,可以explain sql语句,返回结果中有个rows表示扫描了多少行,间接表示执行速度

                        select * from 表名 where title='test10000' —— 当title是一个索引,查询速度会很快

                        在创建索引的时候,数据会以树的形式存放(BTREE,每个节点,左节点比上级节点小,右节点比上级节点大,一路建立一个树)这样之后查询的速度会更快;但是会降低表的更新速度,每次对表的增删改,都要重新创建索引的树,MySQL不仅要保存数据,还要保存索引文件,耗费性能,所以只有当表的查询量大,修改很少要添加索引,要经常修改的,就不要加索引了。

        17、外键:foreign key,从表被约束一列的值,必须要在主表那一列的值范围内,约束的一种,少用,降低更新数据的性能

                    create table class(

                    id int unsigned primary key auto_increment,

                    name varchar(10)

                    );

                    create table stu(

                    name varchar(10),

                    class_id int unsigned,

                    foreign key(class_id) references class(id) —— 这里的class_id字段被class表中的id约束,只能填class表中id出现的数据

                    );

                    对于已经创建的表,要添加外键:

                    alter table 从表名 add foreign key (从表字段) references 主表名(主表字段);

                    例如:alter table stu add foreign key (class_id) references class(id);

                    删除外键,首先获取外键名称:show create table stu; 再删除:alter table stu drop foreign key 这里写的是外键名;

        18、修改密码

                        连接后,会有一个自带的mysql数据库,里面存我们用户的数据。然后在mysql的数据库中,查询页面下写以下sql语句:

                        use mysql;

                        update user set password=password('新密码') where user='用户名';

                        例如: update user set password=password('123') where user='root';

                        flush privileges;

        19、root忘记密码

                    首先,修改配置文件,配置mysql登录时不需要密码:

                    CentOS中:配置文件位置为/data/server/mysql/my.cnf

                    Windows中:配置文件位置为C:\Program Files\MySQL\MySQL Server 5.1\my.ini

                    在配置文件中找到mysqld,在它的下一行,添加skip-grant-tables

                    然后,要重启mysql服务(对于任何软件,修改了配置文件,都要重启服务),免密码登录,再按上述方法修改密码;之后再把配置文件中的skip-grant-tables 删除,重启服务,登录mysql使用。要退出mysql则在命令行窗口输入exit

十、网站运行需要的环境:LNMP环境搭建

            访问一个网址,事实上是访问一个电脑(服务器,服务器上用的是Linux系统)的IP 。在服务器Linux上还需要安装一个web服务软件,才能提供一个网址给别人访问;另外网站的代码多数是用php代码写的,还需要在服务器上安装一个能运行php代码的软件,来写一个网站出来;最后一个网页访问的数据,都要存在数据库中,可能是mysql数据库中;那我们就要学会如何去搭建一个平台,一个环境,包含上面几个部分,去提供一个网址,给别人访问。


LNMP环境

以前,常用的经典Web服务环境组合就是LAMP(Linux、Apache、MySQL、PHP),现在Nginx Web服务逐渐流行,就出现了新的Wen服务环境组合——LNMP 或 LEMP (N或E代表的是Nginx)    

        1、Nginx

                    服务端的软件,是轻量级Web服务器/反向代理服务器级电子邮件(IMAP/POP3)代理服务器,特点是占有内存少,并发能力强。(除了能提供web服务,还能提供邮箱服务,很多公司有自己的邮箱供自己公司内网服务。)

                    以下所有操作用root用户进行所有操作。

                1)基本环境配置:

                                以root用户操作,su

                                基本软件目录(mkdir b/a/b -p 在b中创建a,在a中创建b):mkdir /data/{server,soft} -p —— 以后装软件,都装在server下

                                把资料里面的所有文件拖到CentOS的桌面,然后移动到刚创建的soft目录:mv /home/admin/桌面/* /data/soft  —— 资料文件都是代码,当做软件放在soft文件夹下

                2)Nginx 安装:

                        注意:编译安装nginx的时候,应该有一个专用的启动用户,我们把这个用户设置为www,linux的好处,软件可以有专有用户打开

                        创建专用用户www:useradd www -s /sbin/nologin -M

                        编译安装nginx:

                        cd /data/soft

                        tar xzf nginx-1.10.2.tar.gz

                        cd nginx-1.10.2

                        ./configure --prefix=/data/server/nginx (先执行配置文件configure,配置软件默认安装的位置在/data/server/nginx)

                        make(以源码方式安装,都要先编译代码,所以这里make是编译出一套程序出来,在windows中就是编译出一个exe文件出来)

                        make install (安装)

                        修改配置文件:

                        gedit /data/server/nginx/conf/nginx.conf

                        #user nobody;找到这一句 ——> user www; 改成这样

                        检查效果:启动nginx:/data/server/nginx/sbin/nginx (对于可执行文件,绿色的,像之前的configure,可以在其所在的路径./configure或者在其他目录下,直接输入这个文件的绝对路径)然后 检查端口是否有80:netstat -tnulp | grep nginx 或者打开浏览器,输入localhost,按回车按钮,看浏览器显示效果 * Linux 下查找本机的ip,ifconfig

                        nginx常用操作:

                        检查nginx配置文件是否配置成功:/data/server/nginx/sbin/nginx -t

                        启动nginx:/data/server/nginx/sbin/nginx

                        关闭nginx:/data/server/nginx/sbin/nginx -s stop

                        重启nginx:/data/server/nginx/sbin/nginx -s reload

                        启动后检查:netstat -tnulp | grep nginx (netstat -tnulp打开查看所有端口)

软件安装总结:1、解压tar文件:解压文件,获取真正的配置文件;2、配置configure文件:根据默认的配置项或者更改配置项,生成编译配置文件(Makefile);3、编译make:根据Makefile内容,编译生成指定的软件所需要的所有文件;4、安装make install:将编译生成的所有文件,转移到软件指定安装的目录下面

         2、安装MySQL (安装PHP前一定要现有MySQL)

                                    创建专用用户mysqluseradd -s /sbin/nologin -M mysql

                                    解压软件

                                    cd /data/soft

                                    tar xzf mysql-5.6.35-linux-glibc2.5-x86_64.tar.gz -C /data/server/

                                    cd /data/server/

                                    ln -s mysql-5.6.35-linux-glibc2.5-x86_64 mysql (因为名字较长,创建一个软链接,不用硬链接,因为硬链接不能针对目录创建)

                                    初始化mysql数据库:/data/server/mysql/scripts/mysql_install_db --basedir=/data/server/mysql --datadir=/data/server/mysql/data/ --user=mysql

                                    数据库配置文件管理:mv /etc/my.cnf /etc/my.cnf-bak ;cp /data/server/mysql/support-files/my-default.cnf /etc/my.cnf

                                    数据库启动命令配置:cp /data/server/mysql/support-files/mysql.server /etc/init.d/mysqld(以后看到文件名以d结尾,代表是服务文件,相当于windows中的一个服务)

                                    修改启动文件:sed -i 's#/usr/local/mysql#/data/server/mysql#g' /data/server/mysql/bin/mysqld_safe /etc/init.d/mysqld (sed -i 's#abc#efg#g'把abc都换成efg)

                                    数据库文件权限设置:chown -R mysql.mysql /data/server/mysql/

                                    将mysql服务设置为开机自动启动服务:chkconfig --add mysqld;然后chkconfig mysqld on

                                    启动mysql:service mysql start

                                    检查数据库启动状态:netstat -tnulp | grep mysql(看是不是3306)

                                    MySQL客户端操作:

                                    配置环境标量:gedit /etc/profile

                                    末尾添加这条配置:PATH=/data/server/mysql/bin:$PATH ($PATH表示以前的路径,改全局变量的目的是在任何地方都能执行这个程序,不需要在进入到/data/server/mysql/bin/mysql 这样去执行mysql这个执行文件)

                                    让配置文件生效:source /etc/profile

                                    客户端连接mysql服务器:没有密码(就不用加-p了) : mysql -uroot -p

                                    启动数据库:service mysql start

                                    停止数据库:service mysql stop

                                    重启数据库:service mysql restart

         3、安装php

                              安装依赖软件:libiconv

                                cd /data/soft

                                tar xzf libiconv-1.14.tar.gz

                                cd libiconv-1.14

                               ./configure --prefix=/usr/local/libiconv 

                                make

                                make install

                                解压php:

                                cd /data/soft/

                                tar xzf php-5.3.29.tar.gz

                                cd php-5.3.29

                                配置:

                                ln -s /data/server/mysql/lib/libmysqlclient.so.18 /usr/lib64/

                                touch ext/phar/phar.phar

                                ./configure \ 

                                --prefix=/data/server/php-5.3.29 \

                                --with-mysql=/data/server/mysql \

                            --with-pdo-mysql=mysqlnd \

                            --with-iconv-dir=/usr/local/libiconv \

                            --with-freetype-dir \

                            --with-jpeg-dir \

                            --with-png-dir \

                            --with-zlib \

                            --with-libxml-dir=/usr \

                            --enable-xml \

                            --disable-rpath \

                            --enable-bcmath \

                            --enable-shmop \

                            --enable-sysvsem \

                            --enable-inline-optimization \

                            --with-curl \

                            --enable-mbregex \

                            --enable-fpm \

                            --enable-mbstring \

                            --with-mcrypt \

                            --with-gd \

                            --enable-gd-native-ttf \

                            --with-openssl \

                            --with-mhash \

                            --enable-pcntl \

                            --enable-sockets \

                            --with-xmlrpc \

                            --enable-zip \

                            --enable-soap \

                            --enable-short-tags \

                            --enable-static \

                            --with-xsl \

                            --with-fpm-user=www \

                            --with-fpm-group=www \

                            --enable-ftp ...之后失败

                            启动php

                            /data/server/php/sbin/php-fpm

                            关闭php

                            pkill php-fpm

                            netstat -tnulp|grep php (端口是9000)

                5) nginx整合php

                6)部署iwebshop软件,安装商城网站

                7)部署禅道软件:管理我们的项目,管理bug平台,从测试到开发

部署网站,禅道软件都是一样的,先解压,然后把装着php代码的文件移动到nginx的html文件夹下(mv /data/soft/ZenTaoPMS.8.2.5/zentaopms/ /data/server/nginx/html/chandao),然后修改权限(chown -R www.www /data/server/nginx/html/chandao),最后再到浏览器中访问

一个网站运行需要的环境:一个服务器(linux系统),web服务软件(nginx),php软件,数据库(mysql)

网站要正常访问:nginx,php,mysql都启动

        4、在Linux中使用navicat

                    linux中,把navicat的压缩包点开,再把文件拖出桌面,再点击使用,如果navicat过期后,删除/home/admin下的.navicat64文件夹即可,以后每次点使用:rm -rf /home/admin/.navicat64

                    linux中的navicat连接windows中的mysql服务端:

                    输入windows机的ip、端口、用户名、密码

        5、windows中的navicat连接linux中的mysql服务器

                    设置mysql支持远程连接,支持别的电脑连接

                    在linux的navicat中的mysql数据库的user,修改一个root用户的host为%:update user set host='%'

                    在linux的navicat中的查询页面输入:flush privileges

                    再在windows的navicat中,输入linux机的ip、端口、用户名、密码

                    * 数据库中的表,函数,视图都是存在服务器中,但是查询语句没有存

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,547评论 6 477
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,399评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,428评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,599评论 1 274
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,612评论 5 365
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,577评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,941评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,603评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,852评论 1 297
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,605评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,693评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,375评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,955评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,936评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,172评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 43,970评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,414评论 2 342