总结三、MySQL

1.MySQL二进制部署流程是什么

http://blog.youkuaiyun.com/weixin_39182877/article/details/79043751


2.配置文件在哪里?默认的

/etc/my.cnf


3.MySQL启动命令是什么

mysqld_safe

service mysqld start (5.0版本是mysqld)
service mysql start (5.5.7版本是mysql)

 mysqld_safe 启动后,会启动mysqld,如果mysqld挂了,mysqld_safe会尝试重启mysqld 特别是mysqld crash的时候。

4.MySQL登录进去的命令

mysql -uroot -p**** -hlocalhost


5.密码-p 123456  这样可以不

no


6.-u root 这样可以不?

yes


7.%是什么

全网段可访问


8.创建一个DB,一个表命令

create database xxx,create table xxxx


9.切换DB

use xxx


10.1导出所有的DB到一个备份文件;
10.2导出xxxdb到一个备份文件;
10.3导出某个DB下的某张表到一个备份文件;

mysqldump -h localhost -uroot -p --all-databases >/tmp/all.sql

mysqldump  database -u root -p > /tmp/users.sql

mysqldump  database -uusername -ppassword --tables table1 > /tmp/test.sql

10.4mysqldump: command not found

vi ~/.bash_profile 
#mysql  
PATH=$PATH:/usr/local/mysql/bin  
export  
保存并退出后  
source ~/.bash_profile 


11.怎样还原10.1  10.2  10.3

11.1

登录mysal:

         mysql–uroot –p

 source /tmp/all.sql;

11.2&&11.3

mysql -hhostname -uusername -ppassword databasename < backupfile.sql


12.两台MySQL,怎样做主从

http://blog.youkuaiyun.com/millery22/article/details/50547443


13.MySQL binlog默认保留多少天,怎样从binlog文件指定时间去恢复数据,或者从指定位置恢复数据

默认0天(永不过期)   

13.1.binlog内容查看:

使用工具查看:

mysqlbinlog binlog.000005 |more
mysqlbinlog binlog.000005 >>/tmp/binlog.000005.txt

因为模式为binlog-format=ROW,
所以使用参数,解析SQL语句:

mysqlbinlog --base64-output=decode-rows -v
binlog.000008 >/tmp/test
mysqlbinlog --base64-output=decode-rows -v \
--start-datetime='2016-01-04 15:10:00' \
--stop-datetime='2016-01-04 15:11:00' binlog.000008 >/
tmp/test
mysqlbinlog --base64-output=decode-rows -v \
--start-position='398' \
--stop-position='617' binlog.000008 >/tmp/test

SQL查询:

show binlog events in 'binlog.000006'\G;
show binlog events in 'binlog.000006' limit 10;

13.2.binlog恢复操作:
时间和位置界定参数:

mysqlbinlog --start-datetime='2016-01-04 15:11:00'
binlog.000006
mysqlbinlog --stop-datetime='2016-01-04 15:11:00'
binlog.000006
mysqlbinlog --start-position=249 binlog.000006
mysqlbinlog --stop-position=249 binlog.000006

使用--one-database参数,从binlog日志中恢复单个库:

mysqlbinlog --stop-datetime='2016-01-04 15:11:00' /
usr/local/mariadb/log/binlog.000006 |mysql -uroot -
pvincent --one-database test
#使用mysqlbinlog命令,指定结束时间,指定binlong日志文件抽取
SQL,
#管道给mysql,使用--one-database指定库名,
#从所有binlog日志中抽取对应库的SQL行为进行恢复。

使用mysqlbinlog将binlog日志导出成文本文件,使用source执行该文件:

mysqlbinlog /usr/local/mariadb/log/binlog.000006>/tmp/
redo.sql
mysql -uroot -pvincent
\. /tmp/redo.sql
#这种方法也是mysql中调用sql脚本的方法。


14.binlog哪 三种模式,优缺点  

Mysql复制主要有三种方式:基于SQL语句的复制(statement-based replication, SBR),基于行的复制(row-based replication, RBR),混合模式复制(mixed-based replication, MBR)。

对应的,binlog的格式也有三种:STATEMENT,ROW,MIXED。

1、STATEMENT模式(SBR)每一条会修改数据的sql语句会记录到binlog中。优点是并不需要记录每一条sql语句和每一行的数据变化,减少了binlog日志量,节约IO,提高性能。缺点是在某些情况下会导致master-slave中的数据不一致(如sleep()函数, last_insert_id(),以及user-defined functions(udf)等会出现问题)

2、ROW模式(RBR)不记录每条sql语句的上下文信息,仅需记录哪条数据被修改了,修改成什么样了。而且不会出现某些特定情况下的存储过程、或function、或trigger的调用和触发无法被正确复制的问题。缺点是会产生大量的日志,尤其是altertable的时候会让日志暴涨。

3、MIXED模式(MBR)以上两种模式的混合使用,一般的复制使用STATEMENT模式保存binlog,对于STATEMENT模式无法复制的操作使用ROW模式保存binlog,MySQL会根据执行的SQL语句选择日志保存方式。

你们可以从搜索   binlog日志恢复数据


15.限制多少行

limit


16.排序语法

order by


17.聚合函数哪些

max min sum avg count having


18.分组语法是什么

group by


19.join哪几种

left join  right join  out join full join inner jion


20.ID 学生ID 学生姓名 班级名称 年级名称  科目  成绩

请问
1.求每个年级每个班级前五名学生(语数外总和)

2.各个科目的各个年级的平均分

3.各个科目的各个班级的平均分

# insert语句生成

for i in $(seq 9)
do
  echo "insert into SCORE values($((0+$i)),$((0+$i%9)),'S_$((0+$i%9))','class_1','grade_1','yuwen',$((61+$i)));"
  echo "insert into SCORE values($((10+$i)),$((0+$i%9)),'S_$((0+$i%9))','class_1','grade_1','shuxue',$((71+$i)));"
  echo "insert into SCORE values($((20+$i)),$((0+$i%9)),'S_$((0+$i%9))','class_1','grade_1','yingyu',$((81+$i)));"
  echo "insert into SCORE values($((30+$i)),$((10+$i%9)),'S_$((10+$i%9))','class_2','grade_1','yuwen',$((62+$i)));"
  echo "insert into SCORE values($((40+$i)),$((10+$i%9)),'S_$((10+$i%9))','class_2','grade_1','shuxue',$((72+$i)));"
  echo "insert into SCORE values($((50+$i)),$((10+$i%9)),'S_$((10+$i%9))','class_2','grade_1','yingyu',$((82+$i)));"
  echo "insert into SCORE values($((60+$i)),$((20+$i%9)),'S_$((20+$i%9))','class_1','grade_2','yuwen',$((63+$i)));"
  echo "insert into SCORE values($((70+$i)),$((20+$i%9)),'S_$((20+$i%9))','class_1','grade_2','shuxue',$((73+$i)));"
  echo "insert into SCORE values($((80+$i)),$((20+$i%9)),'S_$((20+$i%9))','class_1','grade_2','yingyu',$((83+$i)));"
  echo "insert into SCORE values($((90+$i)),$((30+$i%9)),'S_$((30+$i%9))','class_1','grade_2','yuwen',$((64+$i)));"
  echo "insert into SCORE values($((100+$i)),$((30+$i%9)),'S_$((30+$i%9))','class_1','grade_2','shuxue',$((74+$i)));"
  echo "insert into SCORE values($((110+$i)),$((30+$i%9)),'S_$((30+$i%9))','class_1','grade_2','yingyu',$((84+$i)));"
done>insert.sql.txt

# 建表装入数据
create database student;
use student;
CREATE TABLE `SCORE` (
  `ID`  int(20) NOT NULL comment 'ID',
  `SID` int(20) NOT NULL comment '学生ID',
  `S_NAME` varchar(128) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL comment '学生姓名',
  `C_NAME` varchar(128) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL comment '班级名称',
  `G_NAME` varchar(128) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL comment '年级名称',
  `SUBJECT` varchar(128) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL comment '科目',
  `SCORE` int(20) NOT NULL comment '成绩',
  PRIMARY KEY (`ID`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

# 需求 1.求每个年级每个班级前五名学生(语数外总和):
select ss.G_NAME,ss.C_NAME,
       substring_index(GROUP_CONCAT(ss.S_NAME order by ss.sum_score desc),',',5)
  from (select s.G_NAME,s.C_NAME,s.S_NAME,sum(s.SCORE) as sum_score
          from SCORE s 
         where s.SUBJECT in ('yuwen','shuxue','yingyu') 
         group by s.G_NAME,s.C_NAME,s.S_NAME) ss
group by ss.G_NAME,ss.C_NAME;


# 推演1:
select s.G_NAME,s.C_NAME,s.S_NAME,sum(s.SCORE) as sum_score
  from SCORE s 
 where s.SUBJECT in ('yuwen','shuxue','yingyu') 
 group by s.G_NAME,s.C_NAME,s.S_NAME;
根据年纪和班级以及学生分组,做语数外三门科目的总分
即求出每个同学的语数外总分,然后展示


# 推演2:
select ss.G_NAME,ss.C_NAME,GROUP_CONCAT(ss.S_NAME order by ss.sum_score desc)
  from (select s.G_NAME,s.C_NAME,s.S_NAME,sum(s.SCORE) as sum_score
          from SCORE s 
         where s.SUBJECT in ('yuwen','shuxue','yingyu') 
         group by s.G_NAME,s.C_NAME,s.S_NAME) ss
group by ss.G_NAME,ss.C_NAME;
查出的结果,根据年纪和班级分组,
然后根据每个年级的每个班级的学生的总成绩
由小到大排序,并且将排序之后学生姓名聚合成一列
使用GROUP_CONCAT(order by) group by 语法实现


# 推演3:
select ss.G_NAME,ss.C_NAME,SUBSTRING_INDEX(GROUP_CONCAT(ss.S_NAME order by ss.sum_score desc),',',5)
  from (select s.G_NAME,s.C_NAME,s.S_NAME,sum(s.SCORE) as sum_score
          from SCORE s 
         where s.SUBJECT in ('yuwen','shuxue','yingyu') 
         group by s.G_NAME,s.C_NAME,s.S_NAME) ss
group by ss.G_NAME,ss.C_NAME;
使用SUBSTRING_INDEX,指定分割符为逗号,取出前5组
得到前5名学生信息

# 需求2.各个科目的各个年级的平均分

select G_NAME,SUBJECT,avg(SCORE)
from SCORE 
group by G_NAME,SUBJECT;

3.各个科目的各个班级的平均分

select G_NAME,C_NAME,SUBJECT,avg(SCORE)
from SCORE 
group by  G_NAME,C_NAME,SUBJECT;


若泽大数据交流群:671914634

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值