接上一篇:Linux運維必會的100道MySql面試題之(二)mysql
001:請解釋關係型數據庫概念及主要特色?面試
關係型數據庫模型是把複雜的數據結構歸結爲簡單的二元關係,對數據的操做都是創建一個 或多個關係表格上redis
最大的特色就是二維的表格,經過SQL結構查詢語句存取數據,保持數據 一致性方面很強大sql
002:請說出關係型數據庫的典型產品、特色及應用場景?mongodb
mysql 互聯網企業經常使用 數據庫
oracle 大型傳統企業應用軟件segmentfault
如數據備份、複雜鏈接查詢、一致性數據存儲等,仍是使用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服務,它們監聽不一樣的端口,運行多個服務進程
它們相互獨立,互不影響的對外提供服務,便於節約服務器資源與後期架構擴展
多實例的配置方法有兩種:
一、一個實例一個配置文件,不一樣端口
二、同一配置文件(my.cnf)下配置不一樣實例,基於mysqld_multi工具
具體配置請參考以前的文章
010:如何增強MySQL安全,請給出可行的具體措施?
一、刪除數據庫不使用的默認用戶
二、配置相應的權限(包括遠程鏈接)
三、不可在命令行界面下輸入數據庫的密碼
四、按期修改密碼與增強密碼的複雜度
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線程過多如何解決?
一、能夠殺掉sleep進程,kill PID
二、修改配置,重啓服務
[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語句,如何完整恢復?
一、中止主從複製,在主庫上執行鎖表並刷新binlog操做,接着恢復以前的全備文件(好比0點的全備)
二、將0點時的binlog文件與全備到故障期間的binlog文件合併導出成sql語句
mysqlbinlog --no-defaults mysql-bin.000011 mysql-bin.000012 >bin.sql
三、將導出的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語句應用到從庫上,至此整個同步過程完成,以後將是無限重複上述過程
完整步驟以下:
一、主庫開啓binlog功能,並進行全備,將全備文件推送到從庫服務器上
二、show master statusG 記錄下當前的位置信息及二進制文件名
三、登錄從庫恢復全備文件
四、執行change master to 語句
五、執行start slave and show slave statusG
點擊關注 民工哥技術之路 微信公衆號對話框回覆關鍵字:1024 能夠獲取一份最新整理的技術乾貨:包括系統運維、數據庫、redis、MogoDB、電子書、Java基礎課程、Java實戰項目、架構師綜合教程、架構師實戰項目、大數據、Docker容器、ELK Stack、機器學習、BAT面試精講視頻等。