一、数据库的作用
用来存储数据,方便查询。
二、关系型数据库(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 sheng, areas 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数据库中;那我们就要学会如何去搭建一个平台,一个环境,包含上面几个部分,去提供一个网址,给别人访问。
以前,常用的经典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)
创建专用用户mysql:useradd -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、端口、用户名、密码
* 数据库中的表,函数,视图都是存在服务器中,但是查询语句没有存