天天看點

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 status\G 記錄下目前的位置資訊及二進制檔案名

3、登陸從庫恢複全備檔案

4、執行change master to 語句

5、執行start slave and show slave status\G