1. 程式人生 > 實用技巧 >Linux運維必會的MySQL企業面試題大全

Linux運維必會的MySQL企業面試題大全

一、基礎筆試命令考察

1.開啟MySQL服務

/etc/init.d/mysqld startservice mysqld startsystemctl  start mysqld

2.檢測埠是否執行

lsof -i :3306netstat -lntup |grep 3306

3.為MySQL設定密碼或者修改密碼
設定密碼

mysql -uroot -ppassword -e "set passowrd for root = passowrd('passowrd')"
mysqladmin -uroot passowrd "NEWPASSWORD"

更改密碼

mysqladmin -uroot passowrd oldpassowrd "NEWPASSWORD"use mysql;update user set passowrd = PASSWORD('newpassword') where user = 'root';flush privileges;

msyql 5.7以上版本修改預設密碼命令

alter user 'root'@'localhost' identified by 'root'

4.登陸MySQL資料庫

mysql -uroot -ppassword

5.檢視當前資料庫的字符集

show create database DB_NAME;

6.檢視當前資料庫版本

mysql -V
mysql -uroot -ppassowrd -e "use mysql;select version();"

7.檢視當前登入的使用者

select user();

8.建立GBK字符集的資料庫mingongge,並檢視已建庫完整語句

create database mingongge DEFAULT CHARSET GBK COLLATE gbk_chinese_ci;

9.建立使用者mingongge,使之可以管理資料庫mingongge

grant all on mingongge.* to 'mingongge'@'localhost' identified by 'mingongge';

10.檢視建立的使用者mingongge擁有哪些許可權

show grants for mingongge@localhost

11.檢視當前資料庫裡有哪些使用者

select user from mysql.user;

12.進入mingongge資料庫

use mingongge

13.建立一innodb GBK表test,欄位id int(4)和name varchar(16)

create table test (     id int(4),     name varchar(16)
     )ENGINE=innodb DEFAULT CHARSET=gbk;

14.檢視建表結構及表結構的SQL語句

desc test;show create table test\G

15.插入一條資料“1,mingongge”

insert into test values('1','mingongge');

16.再批量插入2行資料 “2,程式設計師面試吧”,“3,chengxuyuanmianshiba”

insert into test values('2','程式設計師面試吧'),('3','chengxuyuanmianshiba');

17.查詢名字為mingongge的記錄

select * from test where name = 'mingongge';

18.把資料id等於1的名字mingongge更改為mgg

update test set name = 'mgg' where id = '1';

19.在欄位name前插入age欄位,型別tinyint(2)

alter table test add age tinyint(2) after id;

20.不退出資料庫,完成備份mingongge資料庫

system mysqldump -uroot -pMgg123.0. -B mingongge >/root/mingongge_bak.sql

21.刪除test表中的所有資料,並檢視

delete from test;select * from test;

22.刪除表test和mingongge資料庫並檢視

drop table test;show tables;drop database mingongge;show databases;

23.不退出資料庫恢復以上刪除的資料

system mysql -uroot -pMgg123.0. </root/mingongge_bak.sql

24.把庫表的GBK字符集修改為UTF8

alter database mingongge default character set utf8;alter table test default character set utf8;

25.把id列設定為主鍵,在Name欄位上建立普通索引

alter table test add primary key(id);create index mggindex on test(name(16));

26.在欄位name後插入手機號欄位(shouji),型別char(11)

alter table test add shouji char(11);#預設就是在最後一列後面插入新增列

27.所有欄位上插入2條記錄(自行設定資料)

insert into test values('4','23','li','13700000001'),('5','26','zhao','13710000001');

28.在手機欄位上對前8個字元建立普通索引

create index SJ on test(shouji(8));

29.檢視建立的索引及索引型別等資訊

show index from test;show create table test\G
#下面的命令也可以檢視索引型別  
show keys from test\G

30.刪除Name,shouji列的索引

drop index SJ on test;drop index mggindex on test;

31.對Name列的前6個字元以及手機列的前8個字元組建聯合索引

create index lianhe on test(name(6),shouji(8));

32.查詢手機號以137開頭的,名字為zhao的記錄(提前插入)

select * from test where shouji like '137%' and name = 'zhao';

33.查詢上述語句的執行計劃(是否使用聯合索引等)

explain select * from test where name = 'zhao' and shouji like '137%'\G

34.把test表的引擎改成MyISAM

alter table test engine=MyISAM;

35.收回mingongge使用者的select許可權

revoke select on mingongge.* from mingongge@localhost;

36.刪除mingongge使用者

drop user migongge@localhost;

37.刪除mingongge資料庫

drop database mingongge

38.使用mysqladmin關閉資料庫

mysqladmin -uroot -pMgg123.0. shutdownlsof -i :3306

39.MySQL密碼丟了,請找回?

mysqld_safe --skip-grant-tables &   #啟動資料庫服務mysql -uroot -ppassowrd -e "use mysql;update user set passowrd = PASSWORD('newpassword') where user = 'root';flush privileges;"

二、MySQL運維基礎知識面試問答題

面試題001:請解釋關係型資料庫概念及主要特點?
關係型資料庫模型是把複雜的資料結構歸結為簡單的二元關係,對資料的操作都是建立一個或多個關係表格上,最大的特點就是二維的表格,通過SQL結構查詢語句存取資料,保持資料一致性方面很強大

面試題002:請說出關係型資料庫的典型產品、特點及應用場景?
1、mysql 網際網路企業常用
2、oracle 大型傳統企業應用軟體
3、 如資料備份、複雜連線查詢、一致性資料儲存等,還是使用MySQL或者其他傳統的關係型資料庫最合適

面試題003:請解釋非關係型資料庫概念及主要特點?
非關係型資料庫也被稱為NoSQL資料庫,資料儲存不需有特有固定的表結構
特點:高效能、高併發、簡單易安裝

面試題004:請說出非關係型資料庫的典型產品、特點及應用場景?
1、memcaced 純記憶體
2、redis 持久化快取
3、mongodb 面向文件
如果需要短時間響應的查詢操作,沒有良好模式定義的資料儲存,或者模式更改頻繁的資料儲存還是用NoSQL

面試題005:請詳細描述SQL語句分類及對應代表性關鍵字。
sql語句分類如下
DDL 資料定義語言,用來定義資料庫物件:庫、表、列
代表性關鍵字:create alter drop
DML 資料操作語言,用來定義資料庫記錄
代表性關鍵字:insert delete update
DCL 資料控制語言,用來定義訪問許可權和安全級別
代表性關鍵字:grant deny revoke
DQL 資料查詢語言,用來查詢記錄資料
代表性關鍵字:select

面試題006:請詳細描述char(4)和varchar(4)的差別
char長度是固定不可變的,varchar長度是可變的(在設定內)比如同樣寫入cn字元,char型別對應的長度是4(cn+兩個空格),但varchar型別對應長度是2

面試題007:如何建立一個utf8字符集的資料庫mingongge?

create database mingongge default character utf8 collate utf8_general_ci;

面試題008:如何授權mingongge使用者從172.16.1.0/24訪問資料庫。

grant all on *.* to mingongge@'172.16.1.0/24' identified by '123456';

面試題009:什麼是MySQL多例項,如何配置MySQL多例項?
mysql多例項就是在同一臺伺服器上啟用多個mysql服務,它們監聽不同的埠,執行多個服務程序,它們相互獨立,互不影響的對外提供服務,便於節約伺服器資源與後期架構擴充套件
多例項的配置方法有兩種:
1、一個例項一個配置檔案,不同埠
2、同一配置檔案(my.cnf)下配置不同例項,基於mysqld_multi工具

面試題010:如何加強MySQL安全,請給出可行的具體措施?
1、刪除資料庫不使用的預設使用者
2、配置相應的許可權(包括遠端連線)
3、不可在命令列介面下輸入資料庫的密碼
4、定期修改密碼與加強密碼的複雜度

面試題011:MySQL root密碼忘了如何找回?
請參考前面的回答

面試題012:delete和truncate刪除資料的區別?
前者刪除資料可以恢復,它是逐條刪除速度慢
後者是物理刪除,不可恢復,它是整體刪除速度快

面試題013:MySQL Sleep執行緒過多如何解決?
1、可以殺掉sleep程序,kill PID
2、修改配置,重啟服務

[mysqld]
wait_timeout = 600interactive_timeout=30#如果生產伺服器不可隨便重啟可以使用下面的方法解決set global wait_timeout=600set global interactive_timeout=30;

面試題014:sort_buffer_size引數作用?如何線上修改生效?
在每個connection(session)第一次連線時需要使用到,來提訪問效能
set global sort_buffer_size = 2M
面試題015:如何線上正確清理MySQL binlog?
MySQL中的binlog日誌記錄了資料中的資料變動,便於對資料的基於時間點和基於位置的恢復
但日誌檔案的大小會越來越大,點用大量的磁碟空間,因此需要定時清理一部分日誌資訊
手工刪除:

首先檢視主從庫正在使用的binlog檔名稱 
show master(slave) status\G
刪除之前一定要備份
purge master logs before'2017-09-01 00:00:00'; 
#刪除指定時間前的日誌
purge master logs to'mysql-bin.000001';
#刪除指定的日誌檔案
自動刪除:
通過設定binlog的過期時間讓系統自動刪除日誌
show variables like 'expire_logs_days'; 
et global expire_logs_days = 30;
#檢視過期時間與設定過期時間

面試題016:Binlog工作模式有哪些?各什麼特點,企業如何選擇?
1.Row(行模式);
日誌中會記錄成每一行資料被修改的形式,然後在slave端再對相同的資料進行修改
2.Statement(語句模式)
每一條修改的資料都會完整的記錄到主庫master的binlog裡面,在slave上完整執行在master執行的sql語句
3.mixed(混合模式)
結合前面的兩種模式,如果在工作中有使用函式 或者觸發器等特殊功能需求的時候,使用混合模式
資料量達到比較高時候,它就會選擇 statement模式,而不會選擇Row Level行模式

面試題017:誤操作執行了一個drop庫SQL語句,如何完整恢復?
1、停止主從複製,在主庫上執行鎖表並重新整理binlog操作,接著恢復之前的全備檔案(比如0點的全備)
2、將0點時的binlog檔案與全備到故障期間的binlog檔案合併匯出成sql語句

mysqlbinlog --no-defaults mysql-bin.000011 mysql-bin.000012 >bin.sql

3、將匯出的sql語句中drop語句刪除,恢復到資料庫中

mysql -uroot -pmysql123 < bin.sql

面試題018:mysqldump備份使用了-A -B引數,如何實現恢復單表?
-A 此引數作用是備份所有資料庫(相當於--all-databases)
-B databasename 備份指定資料(單庫備份使用)

面試題019:詳述MySQL主從複製原理及配置主從的完整步驟
主從複製的原理如下:
主庫開啟binlog功能並授權從庫連線主庫,從庫通過change master得到主庫的相關同步資訊,然後連線主庫進行驗證,主庫IO執行緒根據從庫slave執行緒的請求,從master.info開始記錄的位置點向下開始取資訊,同時把取到的位置點和最新的位置與binlog資訊一同發給從庫IO執行緒,從庫將相關的sql語句存放在relay-log裡面,最終從庫的sql執行緒將relay-log裡的sql語句應用到從庫上,至此整個同步過程完成,之後將是無限重複上述過程
完整步驟如下:
1、主庫開啟binlog功能,並進行全備,將全備檔案推送到從庫伺服器上
2、show master status\G 記錄下當前的位置資訊及二進位制檔名
3、登陸從庫恢復全備檔案
4、執行change master to 語句
5、執行start slave and show slave status\G

面試題020:如何開啟從庫的binlog功能?
修改配置檔案加上下面的配置

log_bin=slave-binlog_bin_index=slave-bin.index

需要重啟服務生效

面試題021:MySQL如何實現雙向互為主從複製,並說明應用場景?
雙向同步主要應用於解決單一主庫寫的壓力,具體配置如下
主庫配置

[mysqld]
auto_increment_increment  = 2  #起始IDauto_increment_offset     = 1  #ID自增間隔log-slave-updates

從庫配置

[mysqld]
auto_increment_increment  = 2  #起始IDauto_increment_offset     = 2  #ID自增間隔log-slave-updates

主從庫伺服器都需要重啟mysql服務

面試題022:MySQL如何實現級聯同步,並說明應用場景?
級聯同步主要應用在從庫需要做為其它資料庫的主庫
在需要做級聯同步的資料庫配置檔案增加下面的配置即可

log_bin=slave-binlog_bin_index=slave-bin.index

面試題023:MySQL主從複製故障如何解決?
登陸從庫
1、執行stop slave;停止主從同步
2、然後set global sql_slave_skip_counter = 1;跳過一步錯誤
3、最後執行 start slave;並檢視主從同步狀態
需要重新進行主從同步操作步驟如下
進入主庫
1、進行全備資料庫並重新整理binlog,檢視主庫此的狀態
2、恢復全備檔案到從庫,然後執行change master
3、開啟主從同步start slave;並檢視主從同步狀態

面試題024:如何監控主從複製是否故障?

mysql -uroot -ppassowrd -e "show slave status\G" |grep -E "Slave_IO_Running|Slave_SQL_Running"|awk '{print $2}'|grep -c Yes
通過判斷Yes的個數來監控主從複製狀態,正常情況等於2

面試題025:MySQL資料庫如何實現讀寫分離?
1、通過開發程式實現
2、通過其它工具實現(如mysql-mmm)

面試題026:生產一主多從從庫宕機,如何手工恢復?
1、執行stop slave 或者停止服務
2、修復好從庫資料庫
3、然後重新操作主庫同步

面試題027:生產一主多從主庫宕機,如何手工恢復?
1、登陸各個從庫停止同步,並檢視誰的資料最新,將它設定為新主庫讓其它從庫同步其資料
2、修復好主庫之後,生新操作主從同步的步驟就可以了

#需要注意的新的主庫如果之前是隻讀,需要關閉此功能讓其可寫#需要在新從庫建立與之前主庫相同的同步的使用者與許可權#其它從庫執行change master to master_port=新主庫的埠,start slave

面試題028:工作中遇到過哪些資料庫故障,請描述2個例子?
1、開發使用root使用者在從庫上寫入資料造成主從資料不一致,並且前端沒有展示需要修改的內容(仍舊是老資料)
2、內網測試環境伺服器突然斷電造成主從同步故障

面試題029:MySQL出現複製延遲有哪些原因?如何解決?
1、需要同步的從庫資料太多
2、從庫的硬體資源較差,需要提升
3、網路問題,需要提升網路頻寬
4、主庫的資料寫入量較大,需要優配置和硬體資源
5、sql語句執行過長導致,需要優化

面試題030:給出企業生產大型MySQL叢集架構可行備份方案?
1、雙主多從,主從同步的架構,然後實行某個從庫專業做為備份伺服器
2、編寫指令碼實行分庫分表進行備份,並加入定時任務
3、最終將備份服務推送至內網專業伺服器,資料庫伺服器本地保留一週
4、備份伺服器根據實際情況來保留備份資料(一般30天)

面試題031:什麼是資料庫事務,事務有哪些特性?企業如何選擇?
資料庫事務是指邏輯上的一組sql語句,組成這組操作的各個語句,執行時要麼成功,要麼失敗
特點:具有原子性、隔離性、永續性、一致性

面試題032:請解釋全備、增備、冷備、熱備概念及企業實踐經驗?
全備:資料庫所有資料的一次完整備份,也就是備份當前資料庫的所有資料
增備:就在上次備份的基礎上備份到現在所有新增的資料
冷備:停止服務的基礎上進行備份操作
熱備:實行線上進行備份操作,不影響資料庫的正常執行
全備在企業中基本上是每週或天一次,其它時間是進行增量備份
熱備使用的情況是有兩臺資料庫在同時提供服務的情況,針對歸檔模式的資料庫
冷備使用情況有企業初期,資料量不大且伺服器數量不多,可能會執行某些庫、表結構等重大操作時

面試題033:MySQL的SQL語句如何優化?
建立主鍵與增加索引

面試題034:企業生產MySQL叢集架構如何設計備份方案?
1、叢集架構可採用雙主多從的模式,但實際雙主只有一主線上提供服務,兩臺主之間做互備
2、另外的從可做讀的負載均衡,然後將其中一臺抽出專業做備份

面試題035:開發有一堆資料發給dba執行,DBA執行需注意什麼?
1、需要注意語句是否有格式上的錯誤,執行會出錯導致過程中斷
2、還需要注意語句的執行時間是否過長,是否會對伺服器負載產生壓力影響實際生產

面試題036:如何調整生產線中MySQL資料庫的字符集。
1、首先匯出庫的表結構 -d 只匯出表結構,然後批量替換
2、匯出庫中的所有資料(在不產生新資料的前提下)
3、然後全域性替換set names = xxxxx
4、刪除原有庫與表,並新創建出來,再匯入建庫與建表語句與所有資料

面試題037:請描述MySQL裡中文資料亂碼原理,如何防止亂碼?
伺服器系統、資料庫、客戶端三方字符集不一致導致,需要統一字元

面試題038:企業生產MySQL如何優化(請多角度描述)?
1、提升伺服器硬體資源與網路頻寬
2、優化mysql服務配置檔案
3、開啟慢查詢日誌然後分析問題所在

面試題039:MySQL高可用方案有哪些,各自特點,企業如何選擇?
高可用方案有
1、主從架構
2、MySQL+MMM
3、MySQL+MHA
4、mysql+haproxy+drbd
5、mysql+proxy+amoeba

面試題040:如何批量更改資料庫表的引擎?
通過mysqldump命令備份出一個sql檔案,再使用sed命令替換
或者執行下面的指令碼進行修改

#!/bin/shuser=root
passwd=123456
cmd="mysql -u$user -p$passwd "dump="mysqldump -u$user -p$passwd"for database in `$cmd -e "show databases;"|sed '1,2d'|egrep -v "mysql|performance_schema"`dofor tables in `dump -e "show tables from $databses;"|sed '1d'`do$cmd "alter table $database.$tables engine = MyISAm;"donedone

面試題041:如何批量更改資料庫字符集?
通過mysqldump命令備份出一個sql檔案,再使用sed命令替換sed -i 's/GBK/UTF8/g'

面試題042:網站開啟慢,請給出排查方法,如是資料庫慢導致,如何排查並解決,請分析並舉例?
1、可以使用top free 等命令分析系統性能等方面的問題
2、如是因為資料庫的原因造成的,就需要檢視慢查詢日誌去查詢並分析問題所在

※更多文章和資料|點選後方文字直達 ↓↓↓
100GPython自學資料包
阿里雲K8s實戰手冊
[阿里雲CDN排坑指南]CDN
ECS運維指南
DevOps實踐手冊
Hadoop大資料實戰手冊
Knative雲原生應用開發指南
OSS 運維實戰手冊
雲原生架構白皮書