-
查看當前MYSQL支持的存儲引擎
show engines;
-
查看某一用戶的權限
show grants for UserName;
-
如何得知當前Binary Log文件和Position值
show master status;
-
用什么命令切換Binary Log
flush logs;
-
用什么命令修復MyISAM表
repaire table TabName;
-
用什么命令整理表數據文件的碎片
optimize table TabName;
-
如何得到TabA表的建表語句
show create table TabA;
-
創(chuàng)建TabB表彼绷,完整拷貝TabA表的結構和索引,不要數據
create table TabB like TabA;
-
為TabA表新增字段ColA麦牺,精度無偏差的小數型咨察,10位整數,2位小數柳击,加索引
alter table TabA add ColA decimal(12,2), add key (ColA);
-
如何清空TabB表的數據
truncate table TabB;
-
如何不進入mysql客戶端庶溶,執(zhí)行一條SQL命令宅此,帳號User秦踪,密碼Passwd褐捻,庫名DBName,SQL為"select sysdate();"
mysql -uUser -pPasswd -D DBName -e "select sysdate();"
-
如何從slow log中分析出所有的select語句椅邓,按次數以倒序輸出前20條柠逞,日志名為slow_log.file
mysqldumpslow -g 'select' -s c -r slow_log.file
-
如何從BinLog中分析出時間從"2012-10-27 13:00:00"到"2012-10-27 18:00:00"的anjuke庫的SQL語句,日志名為bin_log.file
mysqlbinlog -d anjuke --start-datetime='2012-10-27 13:00:00' --stop-datetime='2012-10-27 18:00:00' bin_log.file
-
創(chuàng)建用戶景馁,用戶名為iamdba板壮,密碼為mypasswd,訪問來源10.11.8.X合住,即8段IP都允許绰精,對anjuke庫所有表擁有“增刪改查”權限
grant insert,delete,update,select on anjuke.* to iamdba@'10.10.8.%' identified by 'mypasswd';
-
如何執(zhí)行一個SQL文件,帳號User聊疲,密碼Passwd茬底,庫名DBName,SQL文件名為sql.file
mysql -uUser -pPasswd -D DBName
-
用select方式導出TabA的所有數據到/tmp/TabA.txt文件
select * from TabA into outfile '/tmp/TabA.txt';
-
導入TabA.txt數據到TabB表获洲,如主鍵或唯一鍵沖突,覆蓋tabB表中的數據
load data [local] infile '/tmp/TabA.txt' replace into table TabB;
-
用mysqldump命令導出anjuke庫里的TabB表中滿足“ColA > 100”的數據到TabB.sql文件殿如,不要導出建表語句贡珊,帳號User最爬,密碼Passwd
mysqldump -uUser -pPasswd --no-create-info anjuke TabB -w "ColA > 100" >TabB.sql PS: --no-create-info 也可以寫為 -t
-
切換同步到master 10.11.8.11,端口為3307门岔,用戶名repl爱致,密碼為passwd,起點BinLog為db-master.000001寒随,位置123456
change master to master_host='10.11.8.11', master_port=3307, master_user='repl', master_password='passwd', master_log_file='db-master.000001', master_log_pos=123456;
-
啟動slave的sql進程糠悯,并在同步到master的db-master.000003文件123456位置上停止
start slave sql_thread util master_log_file='db-master.000003', master_log_pos=123456;
-
建一個滿足以下五種條件的最優(yōu)索引
where a=? and b=? and c=? where a=? and b>? and c=? where a=? and b in (?) and c=? where a=? and c=? order by b where a=? order by c,b 創(chuàng)建順序為(a,c,b)的復合索引
-
有二個復合索引(a,b)和(c,d),以下語句會怎樣使用索引妻往?可以做怎樣的優(yōu)化互艾?
select * from Tab where (a=? and b=?) or (c=? and d=?)
根據MYSQL的機制,只會使用到一個篩選效果好的復合索引讯泣,可以做如下優(yōu)化
select * from Tab where a=? and b=?
union
select * from Tab where c=? and d=?
-
如何統(tǒng)計文件a.txt有多少非空行纫普?
grep -c '^..*$' a.txt 或 grep -v '^$' a.txt | wc -l
-
文件b.txt,每行以“:”符分成5列好渠,如“1:apple:3:2012-10-25:very good”昨稼,如何得到所有行第三列的總合值
awk 'BEGIN {FS=":"; s=0} {s+=$3} END {print s}' b.txt
-
截取文件c.txt的第60至480行記錄,忽略大小寫拳锚,統(tǒng)計出重復次數最多的那條記錄假栓,及重復次數
sed -n '60,480'p c.txt | sort | uniq -i -c | sort -rn | head -n 1
二、簡答題 5x5
- MyISAM和InnoDB各有哪些特性霍掺?分別適用在怎樣的場景下匾荆?
MyISAM,表鎖抗楔,不支持事務棋凳,表損壞率較高,分為MYD數據文件和MYI索引二個文件连躏,讀寫并發(fā)不如InnoDB剩岳,適用于insert較多的場景,且支持直接復制文件入热,用以備份數據
InnoDB拍棕,行鎖,支持事務勺良,crash后具有recove機制绰播,只有ibd文件,分為數據區(qū)和索引區(qū)尚困,有較好的讀寫并發(fā)能力蠢箩,但做count()運算時相當消耗CPU
- MySQL原生支持的備份方式有哪些,并說出其優(yōu)缺點?
(1) 直接拷貝數據文件谬泌,必須是MyISAM表滔韵,且使用flush tables with read lock;語句,優(yōu)點是簡單方便掌实,缺點是須要鎖寫陪蜻,且只能在同版本的MySQL上恢復使用
(2) mysqldump,導出的是SQL語句贱鼻,所以可以跨版本恢復宴卖,但是需要導入數據和重建索引,恢復用時會較長邻悬,如果是MyISAM表症昏,同樣需要鎖表,如果是InnoDB表拘悦,可以使用--single-transaction參數避免此問題
- 在創(chuàng)建和使用索引時齿兔,有哪些要注意的地方,有什么規(guī)則础米?
避免索引過多分苇,會影響寫性能
給篩選效果低的字段加索引葡缰,幾乎無效钢拧,如性別、狀態(tài)標志等
每條查詢執(zhí)行時盈咳,只會使用一個索引蘑斧,有需要時應該創(chuàng)建復合索引
復合索引使用時遵守“從左到右”原則靖秩,嚴禁左百分號
不要在索引字段上有運算操作和使用函數,將無法使用索引
- 如何分析一條SQL語句的執(zhí)行性能竖瘾,關注哪些信息沟突?
不論性能如何,不要有子查詢和嵌套SQL捕传,盡量不要有join查詢
使用explain命令惠拭,觀察type列,可以知道是否是全表掃描庸论,和索引的使用形式职辅,觀察key可以知道使用了哪個索引,觀察key_len可以知道索引是否使用完成聂示,觀察rows可以知道掃描的行數是否過多域携,觀察extra可以知道是否使用了臨時表和進行了額外的排序操作
- MySQL通過什么機制來控制訪問權限?
mysql庫中鱼喉,從user表到host表和db表秀鞭,再到tables_priv表和colums_priv表
三趋观、聊天題
- 對于一臺DB服務器,有哪些是必須監(jiān)控的基礎指標气筋,如何得到這些值拆内?
- 簡單介紹一個你用過的MYSQL狀態(tài)探測或監(jiān)控工具旋圆,第三方的或自己寫的都可以宠默,說出你覺得最好用的地方
- 簡單介紹一個你用過的MySQL日志(slow/general/binary log)分析工具,第三方的或自己寫的都可以灵巧,說出你覺得最好用的地方
- 介紹一件遇到過的DB服務器故障
- 如果出現Too many connections搀矫,應該采取哪些措施?