A.查询结果的分组条件 B.组的筛选条件php
C.限定返回的行的判断条件 D.对结果集进行排序html
A.树 B.网络 C.图 D.二维表前端
A.数据模型 B.数据库管理系統 C.数据库 D.数据库管理员java
A.元组 B.字段 C.属性 D.码mysql
A程序维护 B数据维护 C编码维护 D硬件维护linux
A.mssql B memcached C mongodb D postgresql E cassandra F couchdb G redisc++
A 在proxy上处理数据库访问问题程序员
B在www服务器上处理黑客的非法访问问题web
C 在www服务器上处理数据库的访问问题正则表达式
D 在sendmail邮件系统是上处理数据库的访问问题
1.1.1.8 如下哪一个端口为远程登录默认端口(C)
A1433 B3389 C3306
①官网下载二进制安装包;
②解压二进制包;
③修改配置文件/etc/my.cnf
④初始化配置;
⑤启动
mysql -u -p -P -h
show full processlist
mysql -u -p -e "show databases;"
SGA区由数据缓冲区,共享池,重作日志缓冲区,大型池,java池构成;PGA区由排序区,私有SQL区以及堆栈构成。 SGA区是由Oracle分配的共享内存结构,包含一个数据库实例共享的数据和控制信息。当多个用户同时链接同一个实例时,SGA区数据供多个用户共享,因此SGA区又称为共享全局区。用户对数据库的各类操做主要在SGA区中进行。该内存区随数据库实例的建立而分配,随实例的终止而释放。PGA区是在用户进程链接数据库,建立一个会话时,由oracle为用户分配的内存区域,保存当前用户私有的数据和控制信息,所以该区又称为私有全局区。每一个服务器进程只能访问本身的PGA区,全部服务器进程PGA区总和即为实例的PGA区的大小。
共享表空间,独立表空间
共享表空间:一个数据的文件都存放在一个文件内。
独立表空间:一个表有一个idb和frm文件。
字符集编码不一致问题
alter table 表名 default character set utf8 collate utf8_general_ci;
--skip-grand-tables #跳过 受权表
--skip-networking #跳过网络链接
厂家: 最新版本: 熟悉的版本: 接触过的版本
mysql 5.6 5.7
mysqladmin -uroot -p password oldboy123
set password for 用户@localhost=password('新密码')
mysql> alter user '用户名'@'登陆主机' identified by '密码(自定义)';
关系型:mysql,oracle
非关系型:redis,mongodb
非关系型数据快,操做简单,可是又丢数据风险。
存储过程是用户定义的一系列sql语句的集合,涉及特定表或其它对象的任务,用户能够调用存储过程,而函数一般是数据库定义的方法,它接收参数返回某种类型的值而且不涉及特定用户表。
视图是一种虚拟的表,具备和物理表相同的功能,能够对视图进行增改查操做,视图一般是有一个表或者多个表的行或者列的子集。对视图的修改不影响基本表。它使得咱们获取数据更容易,相比多表查询。
游标:是对查询出来的结果集做为一个单元来有效的处理。游标能够定在该单元中的特定行,从结果集的当前行检索一行或多行。能够对结果集当前行作修改。通常不使用游标,可是须要逐条处理数据的时候,游标显得十分重要。
高可用mysql及主从架构和读写分离。
2000
select @@default_storage_engine;
myisam:表级锁,不支持事务,支持温备。
innodb:行级锁,支持事务,支持温备。自动故障恢复,外键。
redis,mongodb,memcached
A.从S表中完全删除年龄大于60岁的记录
B.S表中年龄大于60岁的记录被加上删除标记
C.删除S表
D.删除S表的年龄列
A.INSERT B.UPDATE C.DELETE D.TRUNCATE
A.HOST B.DB C.COLUMNS_PRIV D.MANAGER
A.INSERT B.UPDATE C.DELETE D.CREATE
A.SELECT B.UPDATE C.INSERT D.DROUP
A.DELETE B. DROP C.CLEAR D.RI MORE
Arm table t1 Bdelete table t1 Cdrop table t1 Dtruncate t1
A.alter table user rename as userinfo B .rename to userinfo from user
C.rename user to userinfo D.rename user as userinfo
Amodify table Bmodify structure Calter table Dalter structure
A.FOR INSERT B.FOR UPDATE C.FOR DELETE D.FOR REFRESH
A.CREATE SCHEMA B.CREATE TABLE C.CREATE VIEW D.CREATE INDEX
A层次数据库 B网络数据库 C关系数据库 D非数据库
A包括15岁和35岁 B不包括15岁和35岁
C包括15岁但不包括35岁 D包括35岁但不包括15岁
A数据定义功能 B数据管理功能 C数据操纵功能 D数据控制功能
A.Delete * from pat_visit Where inp_no = '6' B.Delete From pat_visit Where inp_no ='6'
C.Delete pat_visit Where inp_no = '6' D.Delete pat_visit Set inp_no = '6'
Where 子句是用来指定 "行" 的条件的,而 Having 子句是指定 “组” 的条件的
因此 Where 子句 = 指定行所对应的条件
因此 Having 子句 = 指定组所对应的条件
当在 Where 子句和 Having 子句中均可以使用的条件,从语句的执行效率来看,最好写在 Where 子
句中。
在使用 Count 函数等对表中的数据进行聚合操做时,DBMS 内部会进行排序处理,而排序操做会增
加机器的负担,减小排序的行数,能够增长处理速度。
使用 Where 子句指定条件时,因为排序以前就对数据进行了过滤,因此可以减小排序的数据量。但
是 Having 子句是在排序以后才对数据进行分组的,所以与前者相比,须要排序的数据量就要多得
多。
第三,使用 Where 子句更具速度优点的另外一个理由是,能够对 Where 子句指定条件所对应的列建立
索引,这样能够大幅提升处理速度。
第四,Where 子句中不能使用聚合函数,而 Having 子句中能够。
show databases;
create database;
select * from table;
update table set state
select * from order limit 2,5
grand all on *.* to admin@'192.168.0.%' identified '123';
select to_base64(name) from 'order';
没有合理的索引条件下,须要大量的CPU时间来排序和处理。
select group_contat(字段1) from db group by '字段2'
select sum(字段1) from db group by '字段2'
select max(字段1) from db group by "字段2"
CSBH CSBH_COUNT
20 2
10 8
CSBH SUM_GJQJ
20 211.039900
10 871.317850
select CSBH,count(CSBH) as CSBH_COUNT from table group by CSBH; select CSBH,sum(CSBH) as SUM_GJQJ from table group by CSBH;
alter table oldboy add primary key pri(id);
表A user_table
Name age city
Tom 20 bj
Jimmy 50 nj
Zhou 33 sh
Jing 30 nj
Nanan 28 sh
create table user_table(id int(11),name varchar(20),age int,city varchar(20)) engine=innodb; insert into user_table(name,age,city) values(tom,20,bj),(jimmy,50,nj),(zhou,33,sh),(jing,30,nj),(nannan,28,sh);
select city,sum(name),avg(age) from user_table group by city;
表Student 学生表
S_id Sname Ssex
1 Xiaoli 男
2 xiaowang 女
3 zhanglong 男
4 zhaohu 女
create table student(s_id int(11),sname varchar(20),ssex varchar(20)) engine=innodb; insert into student(s_id,sname,ssex) values(1,xiaoli,男),(2,xiaowang,女),(3,zhanglong,男),(4,zhaohu,女);
表 Course 课 程 表
C_id Cname T_id
1 语文 1
2 历史 3
3 数学 2
4 政治 4
create table course(c_id int(11),cname varchar(20),t_id int(20)) engine=innodb; insert into course(c_id,cname,t_id) values(1,语文,1),(2,历史,3),(3,数学,2),(4,政治,4)
表SC 成绩表
s_id C_id score
1 2 99
3 4 88
1 3 55
2 1 77
create table sc(s_id int(11),c_id int(11),score varchar(20)) engine=innodb; insert into sc(s_id,c_id,score) values(1,2,99),(3,4,88),(1,3,55),(2,1,77);
表Teacher 教师表
T_id Tname
1 zhangsan
2 lisi
3 wangwu
4 zhaoliu
create table teacher(t_id int(11),tname varchar(20)) engine=innodb; insert into teacher(t_id,tname) values(1,zhangsan),(2,lisi),(3,wangwu),(4,zhouliu);
查询上全部同窗的学号姓名、选课数、总成绩
①select student.s_id,avg(sc.score) from student join sc on student.s_id=sc.s_id having avg(sc.score)>60; ②select student.s_id,student.sname,count(sc.cname),sum(sc.score) from student join sc on student.s_id=sc.s_id
A: B
ID Name ID hobby
1 tim 1 football
2 Jimmy 2 tennis
3 John 3 soccer
请写出Select A.Name, B.Hobbt from A,B where A.id = B.id的结果
select a.name,b.hobbt from a jon b on a.id=b.id
grand all on op.test to dev@'%' identified '123';
select * from table where time between '2006-01-01' and '2006-01-31';
delete * from tablename;或者truncate table name;
select name,sex,birthday,company from table order by company desc;
select name,mingzu,birthday from table where sex='女' and 面貌!=中共党员;
select name,sex,birthday,政治面貌,company,职务,批准日期 from table where xueli=boshi order by 批准日期;
select count(name) from table group by company;
abcabc53abc36
select name from table order by age desc limit 10;
表 dept (系):
dept_id(系编号),dept_name(系名称)
表 class(班级):
class_id(班编号),dept_i(系编号),class_name(班名)
表 setdent(学生):
setdent_id(学生编号),class_id(班编号), sex(性别),birthday(生日)
select count(setdent.setdent_id),date_format(setdent.birthday,%m) from setdent join class on setdent.class_id=class.class_id join deptp on dept.dept_id=class.dept_id where dept.dept_name='计算机' and sex='男' group by Date_format(setdent.birthday,%m) order by date_format(setdent.birthday,%m) desc;
查询T表中地址中包含“北京”的SQL语句
插入一条数据到T表中
请写出将T表中第3~5行数据列出来的SQL语句
select * from t where ADDRESS="%北京%";
insert into t(ID,NAME,ADDRESS,PHONE,LOGDATE) values(,,,,);
select * from t limit 2,3;
create database
create table ;
insert into t()values()
表名1:cardApply
字段(字段名/类型/长度):
applyNo varchar 8; //申请单号(关键字)
applyDate date 8; //申请日期
state varchar 2; //申请状态
表2:cardApplyDetail
字段(字段名/类型/长度):
applyNo varchar 8; //申请单号(关键字)
name varchar 30; //申请人姓名
idCard varchar 5; //ID卡号
applyNo varchar 8; //申请单号(关键字)
其中,两个表的关联字段为申请单号,依据上述信息完成1-5题目:
查询ID卡号为11111的申请日期
select cardApply.applydate from cardApply join cardApplyDetail on cardApplyDetail.applyNo=cardApply.applyNo where cardApplyDetail.idCard ='11111';
查询同一个ID卡号有两条以上记录的ID卡号及记录个数
select idCard,count(idCard) from cardApplyDetail group by idCard having count(idCard )>2;
将ID卡号为11111的记录在两个表中的申请状态均改成02
update cardApplyDetail set state='02' where idCard='11111';
删除cardApplyDetall 表中全部姓李的记录
delete * from cardApplyDetall where name='李%';
假如某一天有10我的申请,另一天有20我的申请,还有一天有30我的申请,查询出申请卡最多的那一天日期
select applyDate,count(applyNo) from cardApply group by applyDate order by count(applyNo) desc limit 1;
Student S# Sname Sage Ssex 学生表
Course C# T# Cname () 课程表
SC S# C# score 成绩表
Teacher T# tname 教师表
写出学生表建表语句
create table student( s# int,not null,primary key auto_increment,sname varchar(20) not null,sage int not null,ssex enum('m','f') not null default 'm') engine=innodb charset='utf-8';
查询姓张的学生名单
select * from student where name='张%';
查询全部同窗的学号、姓名、选课数、总成绩
select student.s#,student.sname,count(sc.c#),sum(sc.score) from student join sc on sc.s#=student.s# group by student.sname;
查询选修“叶平”老师所授课程的学生中,成绩最高的学生姓名及其成绩
select student.sname,max(score),avg(score) from student join sc on student.s#=sc.s# join course on course.c#=sc.course.c# join teacher on course.t#=teacher.t# group by teacher.tname where teacher.tname='叶平';
第一题中的教师表中哪一个字段能够创建惟一索引?写出创建惟一索引的语句
t#创建惟一索引。
alter table teacher add unique key index(t#);
如何检查第一题中学生表在数据库中所占的空间大小
select table_name,(index_length+avg_row_length*table_rows)/1024/1024 from information_schema.tables where table_name='student';
如何将第一题中的4个表进行备份,数据库用户、密码为:admin/admin 数据库名为:dbschool
select concat("mysqldump -uadmin -padmin" ,talble_schema " ",table_name,">temp/",table_schema,"__",table_name,".sql") from infomation_schema.tables where table_schema not in ('infomation_schema','performance_schema','sys') into outfile 'tmp.bak.sh';
select t_depy.depyname ,avg(t_salary.salary) from t_dept join t_salary on t_dept.deptid=t_salary.deptid group by t_dept.deptid having avg(t_salary.salary)>3000;
建表student、course、SC
create table student(sno int,sname varchar(20),sage int,ssex varchar(10))
create table course(cno int,cname varchar(20),ccredit varchar(20))
create table course(sno int , cno int,grade varchar(20))
查询年龄小于20的学生学号、年龄,并显示
select sno,sname,sage from student where sage<20;
查询年龄不在20-23(包括20,23)的学生的成绩
select student.sname sc.grade from student join sc on student.sno=sc.sno where student.sage<20 and student.sage>23;
select id,count(id) from a group by id having count(id)>3;
mysql -uroot -p123456 -S /opt/mysql3306/mysql3306.sock -e "update table neutron.ipallocations set ip_address="202.113.14.92" where ip_address='10.4.182.36';
查询某一个表前20条记录
select * from t limit 20;
某公司从下个月起,每一个人工资在原有基础上上涨10%
update table a salary=salary+salary*0.1 where date=date_format(now(),%m)+1
删除某个表中日期为2017-01-01之前的数据
delete * from a where date<'2017-01-01';
新增一条记录
insert into a values();
备份数据库
mysqldump -uroot -poldboy123 -A -master-date -single-transaction -R -E -triggers >/tmp.bak.gz
客户表customers (cust_id,cust_name,cust_opendate())
帐户表accounts(acc_id,acc_name,cust_id,acc_opendate(帐户开通时间))
用户表users(user_id,user_name,cust_id,lost_login_date(用户最后登陆时间))
每一个客户能够开通多个账号,每一个客户有多个用户,cust_id,acc_id,user_id分别为客户、帐户、用户的惟一标志,cust_opendate,acc_opendate,lost_login_date类型为date按照要求用一条sql语句完成
统计每月开通的客户数
select count(cust_id) ,date.format(accounts.acc_opendate,%m) from customers join accounts on customers.cust_id=accounts.cust_id group by date_format(accounts.acc_opendate,%m);
列出上个月开通客户列表,并输出这些客户所具备的帐户和用户数量
select accounts.cust.id,count(users.user.id) from accounts join users on accounts.cust_id=users.cust_id where data_format(accounts.acc_opendate,%m)=date_format(now(),%m)-1;
统计三个月内登陆过的客户数量
select count(user_id) from users where date_format(lost_login_date,%m) in date_format(now(),%m)-1,date_format(now(),%m)-2,date_format(now(),%m)-3;
统计老客户今年开通帐户的数量,老客户是指今年之前开通的帐户
select date_format(cust_opendate,%Y),count(cust_id) from customers where date.format(cust_opendate,%Y)=date.format(now(),%Y);
表名 user
Name Tel Content Date
张三 13333663366 大专毕业 2006-10-11
张三 13612312331 本科毕业 2006-10-15
张四 021-55665566 中专毕业 2006-10-15
(a)有一新记录(小王 13254748547 高中毕业 2007-05-06)请用SQL语句新增至表中
insert into user values(‘小王 ’,‘13254748547’, ‘高中毕业’, ‘2007-05-06’);
(b)请用sql语句把张三的时间更新成为当前系统时间
update user set date=date_format(now(),"%Y-%m-%d") where name='张三';
(c)请写出删除名为张四的所有记录
delete from user where name='张四';
grand all on *.* to oldboy@localhost identified '123';
create tablespace neuspace datefile 'd:\data\neudata.dbf' size 200 autoextend on text 5M maxsize 500M;
create user tom identified by tom default tablespace account;
grand connect,resource to tom;
grand select on scott.emp to tom;
grand update on SALARY.MGR to tom;
属性 类型(长度) 默认值 约束 含义
CLASSNO 数值(2) 无 主键 班级编号
CNAME 变长字符(10)无 非空 班级名称
create table class(classon int(2) not null primary key auto_increment comment '班级编号',cname varchar(10) not null comment '班级名称')
select count(姓名),年级 from a group by name order by 年级 ;
alter table class add index class_sname_idx(cname);
学生信息表
姓名(Name) 学号(Code)
张三 001
李四 002
马五 003
甲六 004
考试信息表
学号 学科 成绩
001 数学 80
002 数学 75
001 语文 90
002 语文 80
001 英语 90
002 英语 85
003 英语 80
004 英语 70
查询各科成绩的平均分,显示栏位为学科、平均分,sql怎么写
select 学科,avg(成绩)from 考试 group by 学科;
查询全部学生各科成绩,显示栏位为姓名、学号、学科、成绩,并以学号与学科排序,没有成绩的学生也须要列出,sql怎么编写
select a.name,a.code,b.course,b.grade from a join b on a.id=b.id order by course;
查询出单科成绩最高的,显示栏位为:姓名、学号、学科、成绩,sql怎么编写
select a.name,a.id,b.course,max(grade) from a join b a.id=b.id group by b.course;
列出每位学生各科成绩,要求输出格式:姓名、学号、语文成绩、数学成绩、英语成绩,sql怎么写
select a.name,a.id
case when b.学科=‘语文’ then b.成绩 then as ‘语文成绩’,
case when b.学科=‘数学’ then b.成绩 then as ‘数学成绩’
case when b.学科=‘英语’ then b.成绩 then as ‘英语成绩’
from a join b on a.id=b.id
group by a.id;
1.2.3.46 假若有A*和B两个表,A表中包括ID,COL1,COL2,COL3等栏位,B表中包括ID,COL1,COL2,COL4,COL5等栏位,现须要把B中的CLO1,COL2内容更新到A表COL1,COL2中,ID***为关键字段,要求只写一个SQL**
update table a set (select clo1,col2 from b)
explain
A必定要,由于索引有助于加快搜索记录的进程
B不适宜,由于对少林记录的表进行索引实际上会产生不利的影响
C必定要,由于索引对于任何数据库表都是必要的
D没有必要,由于创建索引对任何数据库的性能都没有影响
好处,在有索引的条件下查询速度快。
坏处,须要维护成本。
主键索引,惟一列,联合列;
A.SELECT * FROM customer_master WHERE first_name = 'Ed';
B.SELECT * FROM CUSTOMER_MASTER WHERE last_name LIKE '%rane' AND first_name = 'Ed';
C.SELECT * FROM CUSTOMER_MASTER WHERE last_name = 'Crane' AND first_name LIKE '%Ed';
D.SELECT * FROM CUSTOMER_MASTER WHERE last_name LIKE 'Crane%' ORDER BY first_name,last_name;
E.SELECT * FROM CUSTOMER_MASTER WHERE last_name='Crane' OR first_name='ED';
索引有 B-TREE、BIT、CLUSTER 等类型。ORACLE 使用了一个复杂的自平衡 B-tree 结构;一般来
说,在表上创建恰当的索引,查询时会改进查询性能。但在进行插入、删除、修改时,同时会进行
索引的修改,在性能上有必定的影响。有索引且查询条件能使用索引时,数据库会先度取索引,根
据索引内容和查询条件,查询出 ROWID,再根据 ROWID 取出须要的数据。因为索引内容一般比全
表内容要少不少,所以经过先读索引,能减小 I/O,提升查询性能。
b-tree index/bitmap index/function index/patitional index(local/global)索引一般能提升 select/update/delete
的性能,会下降 insert 的速度。
A. 3 B. 4 C.5 D. 6
A二叉排序树 B.大顶堆 C 小顶堆 D.平衡二叉树
查询不须要的记录,使用 limit 解决;
多表关联返回所有列,指定 A.id, A.name, B.age;
老是取出所有列,SELECT * 会让优化器没法完成索引覆盖扫描的优化。
优化 count() 查询
优化关联查询
优化子查询(即嵌套查询)
优化 GROUP BY 和 DISTINCT
优化 LIMIT 分页
优化 UNION 查询
创建索引
分区(如 MySQL,按时间分区)
尽可能使用固定长度字段和限制字段长度(如 varchar(10))
增长缓冲区
若是设计表的级联,不一样的表存储在不一样磁盘上,以增长 I/O 速度
优化 sql 语句,减小比较次数
限制返回条目数(mysql 中使用 limit)
SQL> desc tab_201707;
Name Type Nullable Default Comments
ID NUMBER 自增
CID NUMBER Y 批次ID
CODE VARCHER2(20) Y 特服号
CORPORATEID NUMBER 企业ID
USERID NUMBER Y 用户ID
请写出SQL语句,统计七、八、9三个月,每一个USERID的记录总数
select userid,count(userid) from tab_201707;
XSS 跨站脚本攻击:两种状况。一种经过外部输入而后直接在浏览器端触发,即反射型 XSS;还有
一种则是先把利用代码保存在数据库或文件中,当 web 程序读取利用代码并输出在页面上时触发漏
洞,即存储型 XSS。DOM 型 XSS 是一种特殊的反射型 XSS。
跨站点脚本(XSS)容许攻击者经过利用因特网服务器的漏洞来发送恶意代码到其余用户。攻击者
利用跨站点脚本(XSS)攻击向那些看似可信任的连接中注入恶意代码。当用户点击了连接后,内
嵌的程序将被提交而且会在用户的电脑上执行,这会使黑客获取。
危害:前端页面能作的事它都能作。(不只仅盗取 cookie、修改页面等)
漏洞防范
(1) 特殊字符 HTML 实体转码。最好的过滤方式是在输出和二次调用的时候进行加 HTML 实体
一类的转码,防止脚本注入。
(2) 标签事件属性黑名单。特殊字符容易被绕过,因此还得加标签事件得黑名单或者白
名单,这里推荐使用白名单的方式,实现规则能够直接使用正则表达式来匹配,若是匹配到的事件
不在白名单列表,就能够直接拦截,而不是过滤为空。
首先应该从系统级别来排查。先找出到底哪里慢,是特定操做慢呢,仍是全部操做都慢了。
既然是忽然变慢,那么就是说以前仍是比较快的。自从某个特殊事件发生后,慢了下来。特殊事件
通常包括:
一、程序作了修改。
二、忽然有大数据量的系统访问。
三、某些不经常使用功能忽然启用,或大量访问。
四、某些硬件出了功能性问题。
对于系统总体变慢,基本上仍是先查系统日志。查最近的系统更新日志。查看磁盘剩余容量。硬件
是否由异常。
select v_id,v_owner,v_uesr,v_options,v_date,v_anonymous from t_vote_hash_by_id_65 where v_id='536' and v_user='yu281590760' and v_owner='xiwangkuaile222';
一、sql 语句的执行计划是否正常。
二、减小应用和数据库的交互次数、同一个 sql 语句的执行次数。
三、数据库实体的碎片的整理(特别是对某些表常常进行 insert 和 delete 动做,尤为注意,索引字段
为系列字段、自增加字段、时间字段,对于业务比较频繁的系统,最好一个月重建一次)。
四、减 少表之间的关联,特别对于批量数据处理,尽可能单表查询数据,统一在内存中进行逻辑处理,减小
数据库压力(java 处理批量数据不可取,尽可能用 c 或者 c++ 进行处理,效率大大提高)。
五、对访问频繁的数据,充分利用数据库 cache 和应用的缓存。
六、数据量比较大的,在设计过程当中,为了减小其余表的关联,增长一些冗余字段,提升查询性能。
listener.log 过大致使
A.mysqldump -h ip -u -p DBNAME>back.sql B.mysqldump -P ip -h DBNAME>back.sql
C.mysqldump -u ip -P DBNAME>back.sql D.mysqldump -h ip -u DBNAME>back.sql
A、mysql -opt mail uroot-p > mail sql B、mysqldump --opt mail -uroot p > mail.sql
C、mysql -uroot -p > mail.sql D.mysql -uroot -p < mail sql
A错误日志 B事务日志 C中继日志 Dredo log
A中止业务开始备份 B 中止数据库开始备份 C不须要中止备份 D根据状况而定
mysql -uroot -poldboy123 -B lest >/tmp/lest.bak.gz
source /tmp/lest.bak.gz
crontab -e
00 02 * * * /bin/sh /server-scripts/backup.sh >/dev/null 1&>2
mysqldump -uroot -poldboy123 -B mfdata >/data/mysql/backup_$(date +%F).bak.sql
xtraback
mysqldump
本地备份 mysqldump -uroot -p -S /tmp/mysql.sock
远程备份 mysqldump -uroot -p -h 10.0.0.51 -P3306
1.change master to 时,ip pot user password binlog position 写入到 master.info 进行记录
\2. start slave 时,从库会启动 IO 线程和 SQL 线程
3.IO_T,读取 master.info 信息,获取主库信息链接主库
\4. 主库会生成一个准备 binlog DUMP 线程,来响应从库
\5. IO_T 根据 master.info 记录的 binlog 文件名和 position 号,请求主库 DUMP 最新日志
\6. DUMP 线程检查主库的 binlog 日志,若是有新的,TP(传送)给从从库的 IO_T
\7. IO_T 将收到的日志存储到了 TCP/IP 缓存,当即返回 ACK 给主库 ,主库工做完成
8.IO_T 将缓存中的数据,存储到 relay-log 日志文件,更新 master.info 文件 binlog 文件名和 postion,
IO_T 工做完成
9.SQL_T 读取 relay-log.info 文件,获取到上次执行到的 relay-log 的位置,做为起点,回放 relay-log
10.SQL_T 回放完成以后,会更新 relay-log.info 文件。
mysqldump -uroot -poldboy123 -A >/tmp/backup.bak.gz;
create database test;
mysqldump -uroot -poldboy123 -A >/tmp/backup.bak.gz
source /tmp/backup. bak.gz
mysqldump -uroot -poldboy123 testdb --ignore-table test123>/tmp/backup/test.bak.gz
mysqldump -uroot -poldboy testdb </tmp/backup/test.bak.gz
还原直接复制目录的备份 经过这种方式还原时,必须保证两个 MySQL 数据库的版本号是相同
的。MyISAM 类型的表有效,对于 InnoDB 类型的表不可用,InnoDB 表的表空间不能直接复制。
1.change master to 时,ip pot user password binlog position 写入到 master.info 进行记录
\2. start slave 时,从库会启动 IO 线程和 SQL 线程
3.IO_T,读取 master.info 信息,获取主库信息链接主库
\4. 主库会生成一个准备 binlog DUMP 线程,来响应从库
\5. IO_T 根据 master.info 记录的 binlog 文件名和 position 号,请求主库 DUMP 最新日志
\6. DUMP 线程检查主库的 binlog 日志,若是有新的,TP(传送)给从从库的 IO_T
\7. IO_T 将收到的日志存储到了 TCP/IP 缓存,当即返回 ACK 给主库 ,主库工做完成
8.IO_T 将缓存中的数据,存储到 relay-log 日志文件,更新 master.info 文件 binlog 文件名和 postion,
IO_T 工做完成
9.SQL_T 读取 relay-log.info 文件,获取到上次执行到的 relay-log 的位置,做为起点,回放 relay-log
10.SQL_T 回放完成以后,会更新 relay-log.info 文件。
\11. relay-log 会有自动清理的功能。
监控
1)监控 MYSQL 的运行状态;
2)Slave 机器的 IO 和 SQL 状态都必须为 YES,缺一不可;
mysqldump -uroot -poldboy123 -A >/tmp/backup.bak.sql
grand all on . to jfdeu@localhost identified by 'jfedu.net';
show slave status\G;
Slave_IO_Running
Slave_SQL_Runing
锁监控设计到的命令:
show status like 'innodb_rows_lock%'
select * from information_schema.innodb_trx;
select * from sys.innodb_lock_waits;
select * from performance_schema.threads;
select * from performance_schema.events_statements_current;
select * from performance_schema.events_statements_history;
---------------------
1 主库写 binlog 不及时 *******
控制 binlog 从内存写入磁盘的控制开关
每次事务提交都当即刷新 binlog 到磁盘(双一标准中的其一)
sync_binlog=1
每次事务提交不当即写入磁盘,靠操做系统判断何时写入
sync_binlog=0
说明:5.6 默认是 0,5.7 之后默认是 1
2 dump 线程多致使的,系统资源压力大,因为传送日志是串行的。
从库越多,压力越大
因为超大事务存在,因为是串行工做,会阻塞后续其余事务的传送。
解决方案:
减小大事务
group commit (须要配合 GTID 来实现的)
3 从库-IO 线程阻塞
大事务拆成小事务
事务量大(主库压力大)
group commit 能够缓解
业务的分离和分布式(Mycat,InnoDB Cluster)
4 SQL 线程慢(Classic replication 传统) *****
缘由:
从库 默认只有一个 SQL 线程,串行回放事务。在主库有并发事务量大,或者有超大事务时,都会导
致 SQL 延时较严重。
如何解决:
5.6 版本,加入了 GTID 特性,因此支持了并发 SQL 特性,基于不一样库实现并行回放事务
5.7 版本,GTID 功能进行了升级,能够经过 Logical_clock 模式,实现事务级别的多 SQL 线程的回
放。咱们把这种复制模式叫作 MTS。
mysqldump -uroot -poldboy123 test >/tmp/bakcup/test.bak.sql
create databases test;
source /tmp/backup/test.bak.sql
binlog 有三种格式:Statement、Row 以及 Mixed。
–基于 SQL 语句的复制(statement-based replication,SBR),
–基于行的复制(row-based replication,RBR),
–混合模式复制(mixed-based replication,MBR)。
一、STATEMENT 模式(SBR)
每一条会修改数据的 sql 语句会记录到 binlog 中。优势是并不须要记录每一条 sql 语句和每一行的数
据变化,减小了 binlog 日志量,节约 IO,提升性能。缺点是在某些状况下会致使 master-slave 中的
数据不一致(如 sleep()函数, last_insert_id(),以及 user-defined functions(udf)等会出现问题)
二、ROW 模式(RBR)
不记录每条 sql 语句的上下文信息,仅需记录哪条数据被修改了,修改为什么样了。并且不会出现
某些特定状况下的存储过程、或 function、或 trigger 的调用和触发没法被正确复制的问题。缺点是
会产生大量的日志,尤为是 alter table 的时候会让日志暴涨。
三、 MIXED 模式(MBR)
以上两种模式的混合使用,通常的复制使用 STATEMENT 模式保存 binlog,对于 STATEMENT 模式
没法复制的操做使用 ROW 模式保存 binlog,MySQL 会根据执行的 SQL 语句选择日志保存方式。
show slave status\G;
slave_IO_Running
slave_SQL_Running
MHA+atlas
Mycat+MGR
InnoDB cluster
PXC
MGC
mysqldump -uroot -poldboy123 -A >/tmp/backup.bak.sql
source /tmp/backup.bak.sql
mysqldump
mysqldump -u 用户名 -p 密码 --databases 数据库 1 数据库 2 > xxx.sql
常见选项:
-u: 用户名
-p: 密码
-P: 端口号,不写默认 3306
--all-databases, -A:备份全部数据库
--databases, -B: 用于备份多个数据库,若是没有该选项,mysqldump 把第一个名字参数做为数据库
名,后面的做为表名。使用该选项,mysqldum 把每一个名字都看成为数据库名。
-d: 只导出数据库的表结构
-t: 只导出数据库的数据
--quick, -q:快速导出
--xml, -X:导出为 xml 文件
binlog 的格式也有三种:STATEMENT、ROW、MIXED 。
一、STATMENT 模式:基于 SQL 语句的复制(statement-based replication, SBR),每一条会修改数据的
sql 语句会记录到 binlog 中。
二、基于行的复制(row-based replication, RBR):不记录每一条 SQL 语句的上下文信息,仅需记录哪
条数据被修改了,修改为了什么样子了。
三、混合模式复制(mixed-based replication, MBR):以上两种模式的混合使用,通常的复制使用
STATEMENT 模式保存 binlog,对于 STATEMENT 模式没法复制的操做使用 ROW 模式保存
binlog,MySQL 会根据执行的 SQL 语句选择日志保存方式。
双主原理:
双向的主从复制,也就是互为对方的从服务器,每台服务器便是对方的主服务器,又是对方的从服
务器
数据库复制 replication 的实现原理
1:主服务器凡运行语句,都产生一个二进制日志 binlog
2:从服务器不断读取主服务器的 binlog
3:从主服务读取到的 binlog,转换为自身可执行的 relaylog,
4:执行 relaylog
mysql -hhostname -uusername -ppassword databasename < backupfile.sql
mysqlbinlog -d test mysql-bin.000003 >003bin.sql
<v:shapetype id="_x0000_t75" coordsize="21600,21600" o:spt="75" o:preferrelative="t" path="m@4@5l@4@11@9@11@9@5xe" filled="f" stroked="f"><v:stroke joinstyle="miter"><v:formulas></v:formulas><v:path o:extrusionok="f" gradientshapeok="t" o:connecttype="rect"></v:path></v:stroke></v:shapetype><v:shape id="图片_x0020_10" o:spid="_x0000_i1025" type="#_x0000_t75" style="width:6in;height:195pt;visibility:visible;mso-wrap-style:square"><v:imagedata src="file:///C:\Users\ADMINI~1\AppData\Local\Temp\msohtmlclip1\01\clip_image001.png" o:title=""></v:imagedata></v:shape>
SAN(Storage Area Network)简单点说就是能够实现网络中不一样服务器的数据共享,
共享存储可以为数据库服务器和存储解耦。使用共享存储时,服务器可以正常挂载文件系统并操
做, 若是服务器挂了,备用服务器能够挂载相同的文件系统,执行须要的恢复操做,而后启动 MySQL
mysqldump 备份不锁表:加上--lock-tables=false 参数,
若是是 innodb,则加上--single-transcation 比较好。
mysqldump -uroot -poldboy123 -A >/tmp/backup.bak.sql
mysqldump -uroot -poldboy123 -B test >/temp/backup.bak.sql
异步复制
异步复制,主库将事务 Binlog 事件写入到 Binlog 文件中,此时主库只会通知一下 Dump 线程发
送这些新的 Binlog,而后主库就会继续处理提交操做,而此时不会保证这些 Binlog 传到任何一个
从库节点上。
全同步复制
全同步复制,当主库提交事务以后,全部的从库节点必须收到、APPLY 而且提交这些事务,而后主
库线程才能继续作后续操做。但缺点是,主库完成一个事务的时间会被拉长,性能下降。
半同步复制
半同步复制,是介于全同步复制与全异步复制之间的一种,主库只须要等待至少一个从库节点收到
而且 Flush Binlog 到 Relay Log 文件便可,主库不须要等待全部从库给主库反馈。同时,这里只是
一个收到的反馈,而不是已经彻底完成而且提交的反馈,如此,节省了不少时间。
每周 Full,天天 inc,或使用 DG、OGG
expdp/impdp 是服务端程序,影响它速度的只有磁盘 IO。
exp/imp 能够在服务端,也能够在客户端。因此,它受限于网络和磁盘
采用 direct path 能够提升导出速度。 因此,在使用 exp 时,就能够采用直接路径模式。 这种模式有 2 个相关的参数:
DIRECT 和 RECORDLENGTH 参数。
DIRECT 参数定义了导出是使用直接路径方式(DIRECT=Y),仍是常规路径方式(DIRECT=N)。常规路径导出使用 SQL SELECT
语句从表中抽取数据,直接路径导出则是将数据直接从磁盘读到 PGA 再原样写入导出文件,从而避免了 SQL 命令处理层的数
据转换过程,大大提升了导出效率。在数据量大的状况下,直接路径导出的效率优点更为明显,可比常规方法速度提升三倍之
多。
和 DIRECT=Y 配合使用的是 RECORDLENGTH 参数,它定义了 Export I/O 缓冲的大小,做用相似于常规路径导出使用的
BUFFER 参数。建议设置 RECORDLENGTH 参数为最大 I/O 缓冲,即 65535(64kb)。其用法以下:
如:exp userid=system/manager full=y direct=y recordlength=65535 file=exp_full.dmp log=exp_full.log
A.DBWR B.LGWR C.SMON D.PMON
A.SGA系统全局区 B.控制文件 C.PMON 后台进程 D.Dnnn 调度进程
A.sqlnet.ora B.listener.ora C.cman.ora D.tnsnames.ora
A.Open B.close C.fetch Dcursor
A.create table cats(c_name varchar2(10),c_weighe number,c_owner varcjar2(10))
B.create table cats(c_name varchar2(10),c_weighe number,c_owner varcjar2(10))
C.create global temporary table temp_cats(c_name varchar2(10),c_weighe number,c_owner varcjar2(10))
D.create table 51cats as select c_name,c_weight from cats where c_weigth >5
A.Open B.close C.fetch D.cursor
A.PDF B.EXE C.TXT D.DMP
A数据缓冲区 B日志缓冲区 C共享池 D大池
A.DBA 视图 B.ALL 视图 C.USER 视图 D.动态性能视图
A.表空间 B.段 C.盘区 D.数据块
A.表空间由段组成,段由盘区组成,盘区由数据块组成
B.段由表空间组成,表空间由盘区组成,盘区由数据块组成
C.盘区由数据块组成,数据块由段组成,段由表空间组成
D.数据块由段组成,段由盘区组成,盘区由表空间组成
A.DBWR B.LGWR C.RECO D.ARCH
A数据缓冲区 B日志缓冲区 C共享池 D大池
A.DBWR B.LGWR C.SMON D.ARCH
A// B\ C- D,
A 、DBA B、SCOTT C、SYSTEM D、SYS
一、startup nomount
这个阶段,Oracle 进程读取初始参数文件,查看 Oracle 数据库的参数是如何配置的。好比内存
大小配置参数等。读取参数文件后,与数据库相关的内存区域被创建起来,同时,后台进程也已经
开始启动。咱们把这些内存和进程叫作 Oracle instance,一旦 Oracle Instance 启动成功,数据库就进
入了 NoMount 阶段。
二、Mount
启动到这个阶段时,会打开和读取控制文件,控制文件是二进制文件,记录着 Oracle 的重要
信息,例如,数据文件的路径等。
这个阶段,Oracle 肯定数据文件的位置,可是尚未打开这些文件,一旦数据文件的路径被定
位后,数据库开始进入下一阶段。
三、Open这个阶段,Oracle 会读取全部的数据文件,而且肯定这些数据文件是一致的(consistent)。
32G
启动:startup
中止:shutdown immediate
Oracle 备份包括逻辑备份和物理备份。
1.逻辑备份 数据库的逻辑备份包含读一个数据库记录集和将记录集写入文件。
(1)输出(Export)输出能够是整个数据库、指定用户或指定表。
(2)输入(Import)输入将输出创建的二进制转储文件读入并执行其命令。
2.物理备份 物理备份包含拷贝构成数据库的文件而无论其逻辑内容。
Oracle 支持两种不一样类型的物理文件备份:脱机备份(offline backup)和联机备份(online
backup)。
(1) 脱机备份 脱机备份用在当数据库已正常关闭,数据库处于"offline"时,要备份下列文件
全部数据文件 全部控制文件
一、调整数据结构的设计。这一部分在开发信息系统以前完成,程序员须要考虑是否使用 ORACLE
数据库的分区功能,对于常常访问的数据库表是否须要创建索引等。
二、调整应用程序结构设计。这一部分也是在开发信息系统以前完成,程序员在这一步须要考虑应用
程序使用什么样的体系结构,是使用传统的 Client/Server 两层体系结构,仍是使用
Browser/Web/Database 的三层体系结构。不一样的应用程序体系结构要求的数据库资源是不一样的。
三、调整数据库 SQL 语句。应用程序的执行最终将归结为数据库中的 SQL 语句执行,所以 SQL 语
句的执行效率最终决定了 ORACLE 数据库的性能。ORACLE 公司推荐使用 ORACLE 语句优化器
(Oracle Optimizer)和行锁管理器(row-level manager)来调整优化 SQL 语句。
逻辑备份与物理备份。或者冷备份与热备份。
性能优化、故障修复, RAC,DG,OGG,迁移
官方文档,MOS 等;性能优化、故障修复, RAC,DG,OGG,迁移
SQL 调优
保存数据的前像,保证数据读取的时间点一致性。Oracle 里数据的多版本特性就是经过回滚段来实
现的,正由于此,Oracle 数据库实现了读写不竞争的性能优点!
Alert log files--警报日志,
Trace files--跟踪日志(用户和进程),
redo log 重作日志(记录数据库的更改)
归档 保存 redo
pmon smon dbwr lgwr arch lisner
ORACLE 里锁有如下几种模式:
0:none
1:null 空
2:Row-S 行共享(RS):共享表锁
3:Row-X 行专用(RX):用于行的修改
4:Share 共享锁(S):阻止其余 DML 操做
5:S/Row-X 共享行专用(SRX):阻止其余事务操做
6:exclusive 专用(X):独立访问使用
数字越大锁级别越高, 影响的操做越多。
通常的查询语句如 select ... from ... ;是小于 2 的锁, 有时会在 v$locked_object 出现。
select ... from ... for update; 是 2 的锁。
当对话使用 for update 子串打开一个游标时,
全部返回集中的数据行都将处于行级(Row-X)独占式锁定,
其余对象只能查询这些数据行,不能进行 update、delete 或 select...for update 操做。
insert / update / delete ... ; 是 3 的锁。
没有 commit 以前插入一样的一条记录会没有反应,
由于后一个 3 的锁会一直等待上一个 3 的锁, 咱们必须释放掉上一个才能继续工做。
建立索引的时候也会产生 3,4 级别的锁。
locked_mode 为 2,3,4 不影响 DML(insert,delete,update,select)操做,
但 DDL(alter,drop 等)操做会提示 ora-00054 错误。
有主外键约束时 update / delete ... ; 可能会产生 4,5 的锁。
DDL 语句时是 6 的锁。
以 DBA 角色, 查看当前数据库里锁的状况能够用以下 SQL 语句:
select object_id,session_id,locked_mode from v$locked_object;
select t2.username,t2.sid,t2.serial#,t2.logon_time
老男孩教育-Linux 学院-微信:lidao996(加上备注)37
from vlockedobjectt1,vsession t2
where t1.session_id=t2.sid order by t2.logon_time;
若是有长期出现的一列,多是没有释放的锁。
咱们能够用下面 SQL 语句杀掉长期没有释放非正常的锁:
alter system kill session 'sid,serial#';
若是出现了锁的问题, 某个 DML 操做可能等待好久没有反应。
当你采用的是直接链接数据库的方式,
也不要用 OS 系统命令 killprocessnum 或者 kill -9 process_num 来终止用户链接,
由于一个用户进程可能产生一个以上的锁, 杀 OS 进程并不能完全清除锁的问题。
记得在数据库级别用 alter system kill session 'sid,serial#';杀掉不正常的锁。
DataGuard 有三种模式:
1.最大性能
这是 Data Guard 默认的保护模式。primay 上的事务 commit 前不须要从 standby 上收到反馈信息,该
模式在 primary 故障时可能丢失数据,但 standby 对 primary 的性能影响最小。
2.最大可用
在正常状况下,最大可用模式和最大保护模式同样;在 standby 不可用时,最大可用模式会自动降
低成最大性能模式,因此 standby 故障不会致使 primay 不可用。只要至少有一个 standby 可用的状况
下,即便 primary down 机,也能保证不丢失数据。
3.最大保护
最高级别的保护模式。primay 上的事务在 commit 前必须确认 redo 已经传递到至少一个 standby 上,
若是全部 standby 不可用,则 primary 会挂起。该模式能保证零数据丢失, 通常为保证主库在某个从
库故障后仍能正常运行,最好配置两个及以上的从库。
热备份针对归档模式的数据库,在数据库仍旧处于工做状态时进行备份。
而冷备份指在数据库关闭后,进行备份,适用于全部模式的数据库。
热备份的优势在于当备份时,数据库仍旧能够被使用而且能够将数据库恢复到任意一个时间点。
冷备份的优势在于它的备份和恢复操做至关简单,而且因为冷备份的数据库能够工做在非归档模式
下,
数据库性能会比归档模式稍好。(由于没必要将 archive log 写入硬盘)
SELECT TOP 1 Productname,Price FROM Products ORDER BY Price desc
SELECT Productname,MAX(price) FROM Products
SELECT Productname
A操做系统 B语言处理 C数据库管理系统 D服务性程序
A.sql B.mdf C.mdb D.ldf
A.Image 数据类型能够用来存储图像 B.使用字符数据类型时,能够改变长度信息
C.使用数字数据类型时,能够改变长度信息 D.Bit数据类型为1位长度,能够存储表示是/否的数据
A.DEL B.PRUGE C.DELETE D.DROP
A.MODIFY B.EDIT C.REMAKE D.UPDATE
日志文件是维护数据库完整性的重要工具 有的对SQL数据库的操做都须要写日志
当日志文件的空间占满时,将没法写日志 当修改数据库时,必先写日志
根据须要授予角色权限
主数据库文件的扩展名是__mdf___,事务日志文件的扩展名是__ldf__
设置的,默认为本机的名字___
一、Windows 身份验证和 SQL 身份验证都是数据库身份验证的一种,身份验证是用以识别数据的操
做者身份。无论使用哪一种身份验证,只要具备数据库或表的相关权限,那么都可以对数据库及表进
行相关的权限范围以内的增删查改的操做,所操做后的数据都是相互影响;
二、Windows 身份验证和 SQL 身份验证的区别不是权限,由于无论是 Windows 用户(包括服务器本
地用户及活动目录用户)仍是 SQL 用户,都须要在 SQL 管理器中进行授予权限后,才能在权限范
围以内操做。楼上所说的 windows 用户登陆默认 windows 管理员为数据库的管理员,这种说法是错
误的,SQL2008 在安装时,会让你添加至少一个 SQL 管理员,通常来讲都会添加当前的 Windows
用户为默认的数据库管理员,固然也能够添加其它任何 Windows 用户做为数据库管理员(并非
Windows 管理员就会是数据库管理员),在此也能够决定是否启用 SQL 身份验证,若是启用,那么
则须要为 SQL 用户 SA 设置一个密码。
那么区别在于,一个使用 SQL 单独用户,一个使用 Windows 用户,使用 Windows 用户能够极大的
方便管理员的管理,统一用户身份验证(通常使用活动目录用户,在实践环境中,通常企业都会有
本身的活动目录,若是使用 SQL 用户的话,管理员则须要记忆和维护两套用户名及密码,在这种情
况下就会使用 Windows 用户,SQL 能够直接调用 Windows 用户并授予数据库及表相关权限。那么
在有权限的状况下,管理员能够直接使用本身的域用户来登录链接 SQL 数据库)
老男孩教育-Linux 学院-微信:lidao996(加上备注)40
老男孩教育-Linux 学院-微信:lidao996(加上备注)
三、只要有相关的权限,所登录到的数据固然是同样,前面已经说过,身份验证是用以识别数据的操
做者身份,那么无论以何种身份登录,只要具备相关权限,那么都可以对数据库及表进行相关的权
限范围以内的增删查改的操做。
1.用下面的语句选出所的表名:
select name from DBName.Sysobjects where xtype='U'
将上面的 DBName 替换成你的数据库名。
2.经过 Excel 及 UltraEdit 等 工具,把按下面的语句替换 表名 ,生成一系列的修改语句。
增长一个 IDKEY 字段
ALTER TABLE 表名 ADD idkey bigint identity(1,1);
alter table 表名 add constraint pk_表名 primary key (idkey) ;
3.执行这些语句