mysql面試會被問到的問題

  1. 索引是什么
    索引是對數據庫中一或多個列值的排序,幫助數據庫高效獲取數據的數據結構
    假如我們用類比的方法,數據庫中的索引就相當于書籍中的目錄一樣,當我們想找到書中的摸個知識點,我們可以直接去目錄中找而不是在書中每頁的找,但是這也拋出了索引的一個缺點,在對數據庫修改的時候要修改索引到導致時間變多。
    幾個基本的索引類型 普通索引 唯一索引主鍵索引 全文索引

  2. 索引優(yōu)點和索引缺點
    索引優(yōu)點
    加快檢索速度
    唯一索引確保每行數據的唯一性
    在使用索引的過程可以優(yōu)化隱藏器,提高系統(tǒng)性能
    索引缺點
    插入刪除 修改 維護速度下降
    占用物理和數據空間

  3. drop, delete truncate的區(qū)別
    三者都是刪除的意思,但是三者個有些區(qū)別
    delete和truncate只刪除表的數據不刪除表的結構
    速度 drop > truncate > delete
    想刪除部分數據時, delete 刪除時要帶上where語句
    保留表而想刪除所有的數據時用truncate

  4. 主鍵 外鍵 區(qū)別
    主鍵 數據庫中表中唯一和完整標識的數據列或屬性集合。
    外鍵 在一個表中存在另外一個表的主鍵叫做外鍵

  5. 如何開啟從庫的binlog功能?
    修改配置文件加上下面的配置
    log_bin=slave-bin
    log_bin_index=slave-bin.index
    需要重啟服務

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

  7. 開發(fā)有一堆數據發(fā)給dba執(zhí)行,DBA執(zhí)行需注意什么?
    答:1、需要注意語句是否有格式上的錯誤,執(zhí)行會出錯導致過程中斷
    2、還需要注意語句的執(zhí)行時間是否過長,是否會對服務器負載產生壓力影響實際生產

  8. 如何批量更改數據庫表的引擎?
    通過mysqldump命令備份出一個sql文件,再使用sed命令替換sed -i 's/GBK/UTF8/g'

  9. 網站打開慢,如是數據庫慢導致,如何排查并解決?
    答:可以使用top free 等命令分析系統(tǒng)性能等方面的問題
    如是因為數據庫的原因造成的,就需要查看慢查詢日志去查找并分析問題所在

  10. 如何調整生產線中MySQL數據庫的字符集?
    答:1、首先導出庫的表結構 -d 只導出表結構,然后批量替換
    2、導出庫中的所有數據(在不產生新數據的前提下)
    3、然后全局替換set names = xxxxx
    4、刪除原有庫與表,并新創(chuàng)建出來,再導入建庫與建表語句與所有數據

  11. 為MySQL設置密碼或者修改密碼
    mysql -uroot -ppassword -e "set passowrd for root = passowrd('passowrd')"
    mysqladmin -uroot passowrd "NEWPASSWORD"

  12. 創(chuàng)建一innodb GBK表test,字段id int(4)和name varchar(16)
    create table test (
    id int(4),
    name varchar(16)
    )ENGINE=innodb DEFAULT CHARSET=gbk;

  1. 查看建表結構及表結構的SQL語句
    desc test;
    show create table test\G

  2. 插入一條數據“1,mingongge”
    insert into test values('1','mingongge');

  3. 刪除test表中的所有數據,并查看
    答:delete from test;
    select * from test;

  4. 把id列設置為主鍵,在Name字段上創(chuàng)建普通索引
    alter table test add primary key(id);
    create index mggindex on test(name(16));

  5. 查看創(chuàng)建的索引及索引類型等信息
    show index from test;
    show create table test\G

下面的命令也可以查看索引類型

show keys from test\G

  1. 刪除Name,shouji列的索引
    答:drop index SJ on test;
    drop index mggindex on test;

  2. 查詢手機號以137開頭的,名字為zhao的記錄(提前插入)
    select * from test where shouji like '137%' and name = 'zhao';

  3. 收回mingongge庫用戶的select權限
    revoke select on mingongge.* from mingongge@localhost;

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

  5. 請說出關系型數據庫的典型產品、特點及應用場景?
    1、mysql 互聯網企業(yè)常用
    2、oracle 大型傳統(tǒng)企業(yè)應用軟件
    3、 如數據備份、復雜連接查詢、一致性數據存儲等,還是使用MySQL或者其他傳統(tǒng)的關系型數據庫最合適

  1. 請詳細描述SQL語句分類及對應代表性關鍵字。
    sql語句分類如下
    DDL 數據定義語言,用來定義數據庫對象:庫、表、列
    代表性關鍵字:create alter drop
    DML 數據操作語言,用來定義數據庫記錄
    代表性關鍵字:insert delete update
    DCL 數據控制語言,用來定義訪問權限和安全級別
    代表性關鍵字:grant deny revoke
    DQL 數據查詢語言,用來查詢記錄數據
    代表性關鍵字:select

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

  1. 如何在線正確清理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的過期時間讓系統(tǒng)自動刪除日志
    show variables like 'expire_logs_days';
    et global expire_logs_days = 30;

    查看過期時間與設置過期時間

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

  3. 誤操作執(zhí)行了一個drop庫SQL語句,如何完整恢復?
    1、停止主從復制,在主庫上執(zhí)行鎖表并刷新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

  1. 查看當前數據庫版本
    mysql -V
    mysql -uroot -ppassowrd -e "use mysql;select version();"

  2. 查看當前數據庫的字符集
    答:show create database DB_NAME;

  1. MySQL如何實現雙向互為主從復制,并說明應用場景?
    雙向同步主要應用于解決單一主庫寫的壓力,具體配置如下
    主庫配置
    [mysqld]
    auto_increment_increment = 2 #起始ID
    auto_increment_offset = 1 #ID自增間隔
    log-slave-updates
    從庫配置
    [mysqld]
    auto_increment_increment = 2 #起始ID
    auto_increment_offset = 2 #ID自增間隔
    log-slave-updates 主從庫服務器都需要重啟mysql服務

  2. MySQL主從復制故障如何解決?
    答:1、登陸從庫,執(zhí)行stop slave;停止主從同步
    然后set global sql_slave_skip_counter = 1;跳過一步錯誤
    最后執(zhí)行 start slave;并查看主從同步狀態(tài)
    2、需要重新進行主從同步操作
    進入主庫,進行全備數據庫并刷新binlog,查看主庫此的狀態(tài)
    恢復全備文件到從庫,然后執(zhí)行change master
    開啟主從同步start slave;并查看主從同步狀態(tài)

  3. 如何監(jiān)控主從復制是否故障?
    mysql -uroot -ppassowrd -e "show slave statusG" |grep -E "Slave_IO_Running|Slave_SQL_Running"|awk '{print $2}'|grep -c Yes
    通過判斷Yes的個數來監(jiān)控主從復制狀態(tài),正常情況等于2

  4. MySQL數據庫如何實現讀寫分離?
    1、通過開發(fā)程序實現
    2、通過其它工具實現(mmm、mycat等)

  5. 生產一主多從從庫宕機,如何手工恢復?
    1、停止與主庫的連接
    2、 修復好從庫數據庫
    3、 然后重新操作主庫同步

  6. 生產一主多從主庫宕機,如何手工恢復?
    答:1、登陸各個從庫停止同步,并查看誰的數據最新,將它設置為新主庫讓其它從庫同步其數據
    2、修復好主庫之后,重新操作主從同步的步驟就可以了
    需要注意的新的主庫如果之前是只讀,需要關閉此功能讓其可寫
    需要在新從庫創(chuàng)建與之前主庫相同的同步的用戶與權限
    其它從庫執(zhí)行change master to master_port=新主庫的端口,start slave

  7. 工作中遇到過哪些數據庫故障,請描述2個例子?
    1、開發(fā)使用root用戶在從庫上寫入數據造成主從數據不一致,并且前端沒有展示需要修改的內容(仍舊是老數據)

沒有控制好用戶權限和從庫沒有設置只讀

2、內網測試環(huán)境服務器突然斷電造成主從同步

  1. MySQL出現復制延遲有哪些原因?如何解決?
    答:1、需要同步的從庫數據太多
    2、從庫的硬件資源較差,需要提升
    3、網絡問題,需要提升網絡帶寬
    4、主庫的數據寫入量較大,需要優(yōu)配置和硬件資源
    5、sql語句執(zhí)行過長導致,需要優(yōu)化
  1. 什么是數據庫事務,事務有哪些特性?企業(yè)如何選擇?
    數據庫事務是指邏輯上的一組sql語句,組成這組操作的各個語句,執(zhí)行時要么成功,要么失敗
    特點:具有原子性、隔離性、持久性、一致性

  2. 給出企業(yè)生產大型MySQL集群架構可行備份方案?
    答:1、雙主多從,主從同步的架構,然后實行某個從庫專業(yè)做為備份服務器
    2、編寫腳本實行分庫分表進行備份,并加入定時任務
    3、最終將備份服務推送至內網專業(yè)服務器,數據庫服務器本地保留一周
    4、備份服務器根據實際情況來保留備份數據(一般30天)

  3. 企業(yè)生產MySQL如何優(yōu)化(請多角度描述)?
    答:1、提升服務器硬件資源與網絡帶寬
    2、優(yōu)化mysql服務配置文件
    3、開啟慢查詢日志然后分析問題所在

  4. 請描述MySQL里中文數據亂碼原理,如何防止亂碼?
    服務器系統(tǒng)、數據庫、客戶端三方字符集不一致導致,需要統(tǒng)一字符

  5. 請解釋非關系型數據庫概念及主要特點?
    非關系型數據庫也被稱為NoSQL數據庫,數據存儲不需有特有固定的表結構
    特點:高性能、高并發(fā)、簡單易安裝

  6. 請說出非關系型數據庫的典型產品、特點及應用場景?
    1、memcaced 純內存
    2、redis 持久化緩存
    3、mongodb 面向文檔
    如果需要短時間響應的查詢操作,沒有良好模式定義的數據存儲,或者模式更改頻繁的數據存儲還是用NoSQL

  7. 什么是MySQL多實例,如何配置MySQL多實例?
    mysql多實例就是在同一臺服務器上啟用多個mysql服務,它們監(jiān)聽不同的端口,運行多個服務進程,它們相互獨立,互不影響的對外提供服務,便于節(jié)約服務器資源與后期架構擴展
    多實例的配置方法有兩種:
    1、一個實例一個配置文件,不同端口
    2、同一配置文件(my.cnf)下配置不同實例,基于mysqld_multi工具

  8. 如何加強MySQL安全,請給出可行的具體措施?
    1、刪除數據庫不使用的默認用戶
    2、配置相應的權限(包括遠程連接)
    3、不可在命令行界面下輸入數據庫的密碼
    4、定期修改密碼與加強密碼的復雜度

  9. MySQL Sleep線程過多如何解決?
    1、可以殺掉sleep進程,kill PID
    2、修改配置,重啟服務

[mysqld]
wait_timeout = 600
interactive_timeout=30

如果生產服務器不可隨便重啟可以使用下面的方法解決

set global wait_timeout=600
set global interactive_timeout=30;

  1. 詳述MySQL主從復制原理
    主從復制的原理如下:
    主庫開啟binlog功能并授權從庫連接主庫,從庫通過change master得到主庫的相關同步信息,然后連接主庫進行驗證,主庫IO線程根據從庫slave線程的請求,從master.info開始記錄的位置點向下開始取信息,同時把取到的位置點和最新的位置與binlog信息一同發(fā)給從庫IO線程,從庫將相關的sql語句存放在relay-log里面,最終從庫的sql線程將relay-log里的sql語句應用到從庫上,至此整個同步過程完成,之后將是無限重復上述過程

  2. MySQL如何實現雙向互為主從復制,并說明應用場景?
    雙向同步主要應用于解決單一主庫寫的壓力,具體配置如下
    主庫配置
    [mysqld]
    auto_increment_increment = 2 #起始ID
    auto_increment_offset = 1 #ID自增間隔
    log-slave-updates
    從庫配置
    [mysqld]
    auto_increment_increment = 2 #起始ID
    auto_increment_offset = 2 #ID自增間隔
    log-slave-updates
    主從庫服務器都需要重啟mysql服務

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內容

  • 開啟我的簡書之旅!2018-10-02 MySQL經典面試題目1、MySQL的復制原理以及流程基本原理流程,3個線...
    Dimplesya閱讀 559評論 0 3
  • 關于Mongodb的全面總結 MongoDB的內部構造《MongoDB The Definitive Guide》...
    中v中閱讀 32,328評論 2 89
  • https://www.cnblogs.com/along21/p/8011596.html https://bl...
    SkTj閱讀 3,256評論 1 4
  • 總是在做過以后,浪費完以后,墮落過以后才會后悔莫及,很討厭這樣的自己,討厭不努力的自己,卻又不知進??! ...
    圣托里尼r閱讀 304評論 0 0
  • 1825的燈到底怎么樣,聽聽客戶怎么說 米優(yōu)MY-1825自推出市場以來,憑借其穩(wěn)定的特性,超高的性價比受到了客戶...
    米優(yōu)LED封裝閱讀 212評論 0 0

友情鏈接更多精彩內容