接上一篇:Linux運維必會的100道MySql面試題之(二)
001:請解釋關係型資料庫概念及主要特點?
關係型資料庫模型是把複雜的資料結構歸結為簡單的二元關係,對資料的操作都是建立一個 或多個關係表格上
最大的特點就是二維的表格,通過SQL結構查詢語句存取資料,保持資料 一致性方面很強大
002:請說出關係型資料庫的典型產品、特點及應用場景?
mysql 網際網路企業常用
oracle 大型傳統企業應用軟體
如資料備份、複雜連線查詢、一致性資料儲存等,還是使用MySQL或者其他傳統的關係型資料庫最合適
003:請解釋非關係型資料庫概念及主要特點?
非關係型資料庫也被稱為NoSQL資料庫,資料儲存不需有特有固定的表結構
特點:高效能、高併發、簡單易安裝
004:請說出非關係型資料庫的典型產品、特點及應用場景?
memcaced 純記憶體
redis 持久化快取
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密碼忘了如何找回?
mysqld_safe --skip-grant-tables & #啟動資料庫服務
mysql -uroot -ppassowrd -e "use mysql;update user set passowrd = PASSWORD('newpassword') where user = 'root';flush privileges;"
012:delete和truncate刪除資料的區別?
前者刪除資料可以恢復,它是逐條刪除速度慢
後者是物理刪除,不可恢復,它是整體刪除速度快
013:MySQL Sleep執行緒過多如何解決?
1、可以殺掉sleep程式,kill PID
2、修改配置,重啟服務
[mysqld]
wait_timeout = 600
interactive_timeout=30
如果生產伺服器不可隨便重啟可以使用下面的方法解決
set global wait_timeout=600
set 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';
set 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 statusG 記錄下當前的位置資訊及二進位制檔名
3、登陸從庫恢復全備檔案
4、執行change master to 語句
5、執行start slave and show slave statusG
點選關注 民工哥技術之路 微信公眾號對話方塊回覆關鍵字:1024 可以獲取一份最新整理的技術乾貨:包括系統運維、資料庫、redis、MogoDB、電子書、Java基礎課程、Java實戰專案、架構師綜合教程、架構師實戰專案、大資料、Docker容器、ELK Stack、機器學習、BAT面試精講視訊等。