整理了一些常用的面試題

整理了一些面試題,給需要的朋友。

(自己寫的答案,僅供參考)


1. root用戶下以httpd用戶的身份運行腳本/opt/case/www.km.com/testdb.php,用一條命令怎麼實現?

sudo -u httpd  `which php` /opt/case/www.km.com/testdb.php

2. 添加crontab,在11月內,每天的早上6點到20點中,每隔2小時執行一次/opt/shell/rsync.sh?

0 6-20/2 * 11 * /opt/shell/rsync.sh

如果rsync.sh沒有執行權
0 6-20/2 * 11 * /bin/bash /opt/shell/rsync.sh

3. 使用find命令查找/opt/case/目錄下的內容,一條命令同時滿足以下三個需求:
   a.大於10K以php結尾的文件;
   b.修改時間爲24小時內的;
   c.移動到/opt/src/目錄下。

find /opt/case/ -name "*php" -size +10k -mtime -1 -exec mv {} /opt/src/ \;

如果用兩條命令實現可以用xargs命令
find /opt/case/ -name "*php" -size +10k -mtime -1 | xargs -i mv {} /opt/src/


4. 如何查看進程號爲4044的進程打開了哪些文件?

lsof -p 4044

5. 通過nginx訪問access.log紡計每個IP地址訪問的次數,按訪問量列出前10名.
日誌格式樣例如下:
172.16.0.11 -- [22/Nov/2016:14:00:00 +0800] "GET / HTTP/1.1" 200 231 "-" "-"

awk '{print $1}' access.log| sort |uniq -c | sort -rn | head -n10

6. 假設nginx產生的日誌文件名爲access_log,在nginx正在運行時,執行命令mv access_log access_log.bak,執行完後,請問新的nginx日誌會出到哪裏,爲什麼?

新的nginx日誌會出到access_log.bak,因爲nginx還持有舊文件的句柄,還是指向access_log.bak,只有重新加載nginx後纔會生成新的access_log文件.

 
7. MySQL怎麼授權及取消授權, 假如環境如下:

授權IP: 172.16.0.11
用戶名: test
密碼: 123456
數據庫名稱: monitor
權限: SELECT
grant select on monitor.* to 'test'@'172.16.0.11' identified by '123456'
revoke select on monitor.* from 'root'@'172.16.0.11'

REVOKE語句只能取消用戶的權限,而不可以刪除用戶。即使取消了所有的權限,用戶仍然可以連接到服務器。要想徹底的刪除用戶,必須使用DELETE語句將該用戶的記錄從MySQL數據庫中的user表中刪除。該語句的語法格式如下:
Delete from user where user = "user_name" and host = "host_name" ;

8. 用for循環輸出20以下的偶數

for ((i=0;i<20;i=i+2));do echo $i; done 或者

for i in {0..20..2}; do echo $i; done

9. 一個每天pv億級的大型web網站,必要的架構有哪些,說出你理解


10. linux怎麼查看用戶登錄日誌

more /var/log/secure
who /var/log/wtmp 或者last

11. linux中utmp,wtmp,lastlog,message各文件的作用

/var/run/utmp文件,它記錄當前登錄進系統的各個用戶

w命令查詢utmp文件並顯示當前系統中每個用戶和它所運行的進程信息
who命令查詢utmp文件並報告當前登錄的每個用戶

/var/log/wtmp 記錄每個用戶的登錄次數和持續時間等信息。
who /var/log/wtmp 或者last查看

/var/log/lastlog文件記錄系統中所有用戶最近一次登錄信息
可以使用lastlog命令輸出lastlog文件的內容

/var/log/messages
messages 日誌是核心系統日誌文件。它包含了系統啓動時的引導消息,以及系統運行時的其他狀態消息。IO 錯誤、網絡錯誤和其他系統錯誤都會記錄到這個文件中。其他信息,比如某個人的身份切換爲 root,也在這裏列出。
此外,mail,cron,daemon,kern和auth等內容也記錄在var/log/messages日誌中。
如果服務正在運行,比如 DHCP 服務器,您可以在 messages 文件中觀察它的活動。通常,/var/log/messages 是您在做故障診斷時首先要查看的文件。

12. 列舉你熟悉的服務器性能查看命令
w;uptime; top; free -m;netstat;vmstat;sar;dmesg;pidstat;mpstat

13. linux服務器怎麼實現無密碼登陸.列舉操作步驟

用 ssh-key-gen 在本地主機上創建公鑰和密鑰
ssh-keygen -t rsa
用 ssh-copy-id 把公鑰複製到遠程主機上
 ssh-copy-id -i ~/.ssh/id_rsa.pub  [email protected]
(也可以用scp id_rsa.pub 192.168.1.1:/root/.ssh/authorized_key 命令複製)

設置目錄和文件權限
chmod 700 /root/.ssh
chmod 600 /root/.ssh/authorized_keys

直接登錄遠程主機
ssh 192.168.1.1

14. 使用tcpdump嗅探80端口的訪問看看誰最高

tcpdump -i eth0 -tnn dst port 80 -c 1000 | awk -F "." '{print $1"."$2"."$3"."$4}' | sort | uniq -c | sort -nr | head

15. 查看當前系統每個ip的連接數
netstat -np | awk '/tcp/ {print $5}' | awk -F: '{print $1}'| sort|uniq -c | sort -rn

統計80端口連接數
netstat -nat|grep -i "80"|wc -l

16. 請寫出iptables語句      iptables [-t 表名] -命令 -匹配 -j 動作/目標   

1)本地80端口的請求轉發到遠端服務器10.0.3.188:8080端口,當前主機IP爲192.168.2.1,並且保證服務正常使用  

2)允許本機對外連接80端口(本機能連外界服務器爲80) 

3)開放本機的3306端口

4)禁止外界ping本服務器

解答:
1.iptables -t nat -A PREROUTING -p tcp -d 192.168.2.1 --dport 80 -j DNAT --to-destination 10.0.3.188:8080
2.iptables -A OUTPUT -p tcp –dport 80 -j ACCEPT
3.iptables -A INPUT -p tcp --dport 3306 -j ACCEPT
4.iptables -A INPUT -p icmp -j DROP

19. 通過proc 文件系統怎麼找到id 爲235的進程文件在哪個位置,打開了哪些文件,啓動參數是什麼,他的父進程id 是多少,他的子進程id 有哪些?

通過訪問這些文件和文件夾,我們可以實時查詢到當前系統的運行信息:進程文件在/proc/235/目錄中

看進程打開了哪些文件: ls -l /proc/235/fd/
啓動參數: cat /proc/235/cmdline

cat status | grep  -E 'Tgid|Pid|PPid'

#pid 進程號, ppid 父進程號, tgid進程組號

20.有個文件file1如下:
http://a.domain.com/1.html
http://b.domain.com/1.html
http://c.domain.com/1.html
http://a.domain.com/2.html
http://b.domain.com/2.html
http://a.domain.com/3.html

請寫出命令或腳本得出以下結果:
      3 a.domain.com
      2 b.domain.com
      1 c.domain.com

awk -F'/' '{print $3}' file1 |sort |uniq -c

21.在linux系統中,我們通常使用終端shell腳本處理一些數據,十分高效現在有以下兩個文件:
file1:
user passwd
aa   1234
bb    4567
cc   9999

file2:
id user
001 cfoqe
002 werwe
003 cc
004 jggq

22. 寫一段shell腳本,輸出同時存在於file1和file2中用戶名的密碼
awk 'NR==FNR{a[$1]=$2;next}{print a[$2]}' file1 file2|sed '/^$/d'
注:sed用於刪除空行,可不用

23. 寫一個腳本後臺監控php-fpm進程,當檢測到進程停止後,能自動啓動php-fpm

#!/bin/bash
#變量初始化
process="php-fpm" #進程名
startCmd="/etc/init.d/php-fpm start" #啓動命令
down=0
while true
do
    #取得http狀態碼
    code=$(curl -H "Host:www.jb51.net" -m 5 -L -s -w %{http_code} http://127.0.0.1 -o /dev/null)
    #當狀態碼返回000或者大於等於500時,計數故障到down變量
    if [ $code -eq 000 -o $code -ge 500 ];then
        ((down++))
    else
break
    fi
    #稍等5s
    sleep 5
    #判斷是否連續檢測三次都爲故障.
    if [ $down -ge 3 ];then
if [ "$(find /tmp/${process}_restart -mmin -3)" == "" ];then
                #取得進程名對應的所有pid
pids=$(ps aux | grep ${process} | grep -v "grep" | awk '{print $2}')
                #依次對所有pid執行kill命令
for i in $pids;do
kill -9 $i
kill -9 $i
done
                #kill完pid後,啓動服務
$startCmd
echo "$(date) Return code $code,${process} had been restarted" >> /tmp/${process}_restart
else
echo "$(date) ${process} not yet recovery.As it had been restarted in 2 minutes.so this time ignore." >> /tmp/${process}_not_restart
fi
break
    fi
done


24. 寫一個腳本,實現判斷10.10.1.0/24網絡裏,當前在線的IP有哪些,能ping通認爲在線

#!/bin/bash
    for ip in {1..255}
    do
    {
        ping -c 1 10.10.1.$ip > /dev/null 2>&1
        if [ $? -eq 0 ]; then
            echo 10.10.1.$ip UP
        else
            echo 10.10.1.$ip DOWN
        fi
    }&
    done
    wait

不使用腳本,用一行命令實現:
nmap -sP 10.10.1.0/24

25. 寫一個腳本,如果有錯誤,則提醒用戶鍵入Q或者q無視錯誤並退出。其他任何輸入都可以通過vim打開這個指定的腳本

#!/bin/bash
read -p "請輸入指定腳本文件:" file
if [ -f $file ]; then
    bash -n $file > /dev/null 2>&1
    if [ $? -ne 0 ];then
        read -p "腳本文件$file語法錯誤,按Q或q退出,其它鍵打開vim:" answer
        case $answer in
        q | Q)
        exit 0
        ;;
        *)
        vim $file
        exit 0
        ;;
        esac
    else
        echo  "腳本文件$file語法正確."
    fi
else
    echo "腳本文$file不存在"
    exit 1
fi


26. 從第1000行開始,顯示2000行。即顯示1000~2999行
cat input_file | tail -n +1000 | head -n 2000


顯示 1000行到3000行
cat input_file | head -n 3000 | tail -n +1000


顯示最後1000行
tail -n 1000

從1000行開始顯示,顯示1000行以後的
tail -n +1000

顯示前面1000行
head -n 1000 input_file
或者
sed '1000q' input_file

查看文件的第5行到第10行
sed -n '5,10p' input_file

顯示前10行
sed '10q' input_file

用awk處理,顯示2-11行
awk 'NR==2, NR==11{print}'  input_file
或者
awk 'NR>=2 && NR<=11 {print $0}' input_file


27. 有一日誌文件(假設文件名爲 demo.log ),只查看它的第1000至2000 行(方法不限)
tail -n +1000 demo.log | head -n 10001 或者
sed -n '1000,2000p' demo.log

28. Nginx二進制源碼包在搜狐鏡像的URL是http://mirrors.sohu.com/nginx/,如何通過管道來獲取nginx的最新版本號?
curl -s http://mirrors.sohu.com/nginx/|sed -n 's/<a href=.*\(nginx-.*.tar.gz\)<\/a> .*/\1/p'|sort -t. -nr -k2.2 -k3.2|head -1

29. Nginx服務器報 "Too Many Open Files" 一般是什麼狀況引起的,該如何處理?

1)應用級別:修改nginx的配置文件  添加work_rlimit_nofile=65535


2)系統級別:修改etc/security/limits.conf中軟限制和硬限制數。


* soft nofile 10240

* hard nofile 15360

其中第一行soft表示所有用戶打開文件的數量限制爲10240,如果超過這個數字則提示警告信息,但是依然可以打開文件。

第二行hard表示最大的打開文件數量不能超過15360,如果超過這個數字,則無法打開文件。


這裏也可以針對具體的用戶或者用戶組進行相應的設定。例如針對nginx這個用戶進行設定:


nginx soft nofile 10240

nginx hard nofile 15360

3)內核級別:首先查看內核級別允許打開文件的上限,cat /proc/sys/fs/file-max 或者sysctl -n  fs.file-max 這個值默認其實是蠻大的,可以無需調節。


如果需要調整,可以編輯/etc/sysctl.conf這個文件。

$ vi /etc/sysctl.conf

加上fs.file-max設置


fs.file-max = 100000

然後重新載入核心配置

$ sysctl -p

30. 如果讓你管理數量 100+ 服務器,你會如何去管理?
1)首先將100+臺服務器都錄入到資產管理系統中,並且使用zabbix添加監控、設置郵件報警。
2)將100+臺機器按照業務分組,比如數據庫、測試等。
3)使用自動化管理工具ansible進行批量管理。

31. 用shell模擬從一幅撲克牌中隨機抽取1張牌(Tips: 有個內置函數 RANDOM,可根據指定的數據範圍隨機生成數據)

suites=(Clubs Dianonds Hearts Spades Joker)
deno=(2 3 4 5 6 7 8 9 10 Jack Queen King Ace)
var=(red black)
num_suites=${#suites[@]}
num_deno=${#deno[@]}
num_var=${#var[@]}
var1=$((RANDOM%$num_suites))
if [ "${suites[$var1]}" == "Joker" ];then
    echo " Joker of "
    echo ${var[$((RANDOM%$num_var))]}
else
    echo "${deno[$((RANDOM%$num_deno))]} of "
    echo ${suites[$var1]}
fi

32. 用什麼命令查詢指定ip地址的服務器端口
比如掃描192.168.1.1的目標機是否開啓80web服務、21ftp服務,23telnet服務,則可以執行:
nmap -p80,21,23 192.168.1.1
nc -nv 192.168.1.1 80
nc -nv -z -w2 192.168.1.1 80-90 (掃描多個端口,w2表示超時時間爲2秒)


33. -exec和xargs的區別
find -exec 命令會對每個匹配的文件執行一個單獨的rm操作,但是使用這種方式,如果有100個文件匹配了,那麼就需要啓100個進程,一個進程處理一個rm命令。一般來說,其越多進程,意味着越耗性能。

xargs 一次將參數傳給命令,可以使用-n控制參數個數,xargs不能操作文件名有空格的文件

34. /var/www/html/是網站的發佈目錄,如何每天凌晨0點30對其進行自動備份?
a、crontab-e進入編輯模式
b、添加以下內容
30 0 * * * /bin/tar -czf /backup/web_bak_$(date+\%Y\%m\%d).tar.gz /var/www/html>/dev/null2>&1
c、啓動服務service crontab start;chkconfig crontab on

35. Yum命令與rpm命令的區別?如何使用rpm安裝一個有依賴的包?

rpm一般用於安裝本地的包,yum一般用於在線安裝(也可以本地光盤建立yum源)
最大的區別在於yum可以自動安裝所依賴的包(不包含環境)

36. 簡述raid0raid1raid5三種工作模式的工作原理及特點。

raid0數量>=2磁盤利用率100%hot-spare無優點讀寫性能高缺點沒有容錯能力

    數據分散寫入不同磁盤,不提供冗餘,不能擴容,任何一個盤壞掉,數據全部丟失。適用於對性能要求高,但對數據的安全不太在乎的領域。

    raid1數量>=2磁盤利用率50%Hot-spare有優點提供數據冗餘,安全性高缺點浪費磁盤空間

    適用於對數據安全性高的場所,一般爲2塊盤,空間爲最小的盤的空間,如果有4塊盤,其中3塊空間都是浪費(做鏡像冗餘)只要有一塊盤存在,數據就不會丟失.

    raid5數量>=3磁盤利用率(n-1)/nhot-spare有優點有容錯,可冗餘,讀取性能高缺點寫性能低

    raid5相當於raid0和raid1的折中方案

    應用服務器(像apache)做raid1兩塊硬盤

    數據服務器(像Mysql)做raid10四塊硬盤

37. 如何查看佔用端口8080的進程。

   netstat-anlp|grep8080

    lsof-i:8080

38. 寫一個腳本將數據庫備份並打包至遠程服務器192.168.1.1 /backup目錄下。
mount 192.168.1.1:/backup /mnt
cd /mnt
/usr/local/mysql/bin/mysqldump -hlocalhost -uroot test >test.sql
tar czf test.sql.tar.gz test.sql
rm -f test.sql

39.寫一個防火牆配置腳本,只允許遠程主機訪問本機的80端口。
iptables -F
iptables -X
iptables -A INPUT -i eth0 -p tcp --dport 80 -j ACCEPT
iptables -P INPUT DROP

38.寫出下列命令的含義
 (1)MaxKeepAliveRequests    100  連接的最大請求數
 (2)Options FollowSymLinks  允許192.168.1.1可以列目錄
               Order Deny Allow
                Deny from all
         Allow from 192.168.1.1

40. 替換文件中的目錄
sed 's:/user/local:/tmp:g'  filename

41. 把test.txt文件23行test改成tset
sed '23s/test/tset/g' test.txt


42. 簡要描述Linux的啓動過程?
1.加載BIOS 2.讀取MBR 3.Boot Loader 4.加載內核 5.用戶層init依據inittab文件來設定系統運行等級 6.init進程執行rc.syninit
7.啓動內核模塊 8.執行不同級別運行的腳本程序 9.執行/etc/rc.d/rc.local 10.執行/bin/login程序,進入登錄狀態.


43. 簡要敘述下列端口所運行的服務
21、 22、 23、 25、 110、 143、 873、 3306

ftp、ssh、telnet、 smtp、pop3、IMAP、rsync、mysql

44. TCP斷頭最小長度是? 64字節

45. 讓某普通用戶能進行cp /dir1/file1 /dir2的命令時,請說明dir1 file1 dir2最小具有什麼權限?
dir1 :至少需要有 x 權限;
file1:至少需要有 r 權限;
dir2 :至少需要有 w, x 權限。

46. 簡述TCP三次握手的過程?
第一次握手:建立連接時,客戶端發送syn包(syn=j)到服務器,並進入SYN_SEND狀態,等待服務器確認;

第二次握手:服務器收到syn包,必須確認客戶的SYN(ack=j+1),同時自己也發送一個SYN包(syn=k),即SYN+ACK包,此時服務器進入SYN_RECV狀態;

第三次握手:客戶端收到服務器的SYN+ACK包,向服務器發送確認包ACK(ack=k+1),此包發送完畢,客戶端和服務器進入ESTABLISHED狀態,完成三次握手。

47. 使用tcpdump監聽主機IP爲192.168.1.1,tcp端口爲80的數據,同時將結果保存輸出到tcpdump.log
tcpdump -nn host 192.168.1.1 and tcp port 80 -s0 -t -w tcpdump.log

參數說明
(1)tcp: ip icmp arp rarp 和 tcp、udp、icmp這些選項等都要放到第一個參數的位置,用來過濾數據報的類型
(2)-i eth1 : 只抓經過接口eth1的包
(3)-t : 不顯示時間戳
(4)-s 0 : 抓取數據包時默認抓取長度爲68字節。加上-S 0 後可以抓到完整的數據包
(5)-c 100 : 只抓取100個數據包
(6)dst port ! 22 : 不抓取目標端口是22的數據包
(7)src net 192.168.1.0/24 : 數據包的源網絡地址爲192.168.1.0/24
(8)-w ./target.cap : 保存成cap文件,方便用ethereal(即wireshark)分析

48. linux如何掛載windows下的共享目錄

mount -t cifs -o username="共享用戶",password="密碼" //ip/共享目錄 /mnt

49. 在linux主機只允許遠程主機訪問80端口,通過iptables實現
iptables -A INPUT -p tcp --dport 3306 -j ACCEPT
iptables -A INPUT -p icmp -j DROP

iptables -F 清空規則
iptables -X 刪除用戶自定義的鏈
iptables -A INPUT -i eth0 -p tcp --dport 80 -j ACCEPT
iptables -P INPUT DROP 設置默認策略的

50. 6塊300G硬盤做raid 5,請問實際在操作系統中可用磁盤多大?
磁盤空間x(n-1) =300Gx(6-1) =1800G

51. 通過nestat命令找出apache運行的pid
netstat -tlnp |grep httpd

52.說明linux命令中-exec和xargs的區別
exec命令的格式爲: exec command {} \;
有些系統對傳遞給exec的命令長度有限制,會出現溢出錯誤。
execexec命令將爲每一個參數單獨執行一條命令,效率低
而xargs是將所有的參數傳遞給命令,只有一個進程。
參數中不能有空格

53. 統計目錄A中所有.svn文件夾合計佔用磁盤大小
find a -name ".svn" |xargs du -h -c .svn

54.將文件夾A中1個小時內產生的後綴爲.php的文件刪除
find a -name "*.php" -mmin -60 | xargs -i rm {}


55. 統計access.log某個時間點產生的總流量
cat access.log |awk '{if (match($4,"07/Mar/2017:05:24:49")) ;sum+=$10} END {print sum}'
07/Mar/2017:05:24:49

56. crontab誤刪了,如何恢復
/var/log/cron

0 0 * * * * /usr/bin/crontab -l>/backup/crontab`date '+%Y%m%d'`.bak


mysql題

1.mysql主從延遲原因以及解決方案 

原因:當主庫的TPS併發較高時,產生的DDL數量超過slave一個sql線程所能承受的範圍,那麼延時就產生了,當然還有就是可能與slave的大型query語句產生了鎖等待。

解決方案:
在架構上做優化,儘量讓主庫的DDL快速執行。


主庫是寫,對數據安全性較高,比如sync_binlog=1,innodb_flush_log_at_trx_commit = 1 之類的設置,而slave則不需要這麼高的數據安全,完全可以講sync_binlog設置爲0或者關閉binlog,innodb_flushlog也可以設置爲0來提高sql的執行效率。

選擇支持多線程的mysql版本來進行主從複製,避免併發高峯時可能的延遲,mysql-5.6.3已經支持了多線程的主從複製。


使用比主庫更好的硬件設備作爲slave。


MySQL數據庫主從同步延遲產生的因素。
1. 網絡延遲
2. master負載
3. slave負載
 一般的做法是,使用多臺slave來分攤讀請求,再從這些slave中取一臺專用的服務器,只作爲備份用,不進行其他任何操作,就能相對最大限度地達到’實時’的要求了


2.簡述存儲引擎Myisam和Innodb的區別與應用場景

MyISAM
  它不支持事務,也不支持外鍵,尤其是訪問速度快,對事務完整性沒有要求或者以SELECT、INSERT爲主的應用基本都可以使用這個引擎來創建表

InnoDB存儲引擎提供了具有提交、回滾和崩潰恢復能力的事務安全。但是對比MyISAM的存儲引擎,InnoDB寫的處理效率差一些並且會佔用更多的磁盤空間以保留數據和索引。


兩種存儲引擎的大致區別表現在:
1)InnoDB支持事務,MyISAM不支持,這一點是非常之重要。事務是一種高級的處理方式,如在一些列增刪改中只要哪個出錯還可以回滾還原,而MyISAM就不可以了。
2)MyISAM適合查詢以及插入爲主的應用,InnoDB適合頻繁修改以及涉及到安全性較高的應用
3)InnoDB支持外鍵,MyISAM不支持
4)從MySQL5.5.5以後,InnoDB是默認引擎
5)InnoDB不支持FULLTEXT類型的索引
6)InnoDB中不保存表的行數,如select count(*) from table時,InnoDB需要掃描一遍整個表來計算有多少行,但是MyISAM只要簡單的讀出保存好的行數即可。注意的是,當count(*)語句包含where條件時MyISAM也需要掃描整個表
7)對於自增長的字段,InnoDB中必須包含只有該字段的索引,但是在MyISAM表中可以和其他字段一起建立聯合索引
8)清空整個表時,InnoDB是一行一行的刪除,效率非常慢。MyISAM則會重建表
9)InnoDB支持行鎖(某些情況下還是鎖整表,如 update table set a=1 where user like '%lee%'

關於MyISAM與InnoDB選擇使用:
MYISAM和INNODB是Mysql數據庫提供的兩種存儲引擎。兩者的優劣可謂是各有千秋。INNODB會支持一些關係數據庫的高級功能,如事務功能和行級鎖,MYISAM不支持。MYISAM的性能更優,佔用的存儲空間少。所以,選擇何種存儲引擎,視具體應用而定:

1)如果你的應用程序一定要使用事務,毫無疑問你要選擇INNODB引擎。但要注意,INNODB的行級鎖是有條件的。在where條件沒有使用主鍵時,照樣會鎖全表。比如DELETE FROM mytable這樣的刪除語句。

2)如果你的應用程序對查詢性能要求較高,就要使用MYISAM了。MYISAM索引和數據是分開的,而且其索引是壓縮的,可以更好地利用內存。所以它的查詢性能明顯優於INNODB。壓縮後的索引也能節約一些磁盤空間。MYISAM擁有全文索引的功能,這可以極大地優化LIKE查詢的效率。

3.mysql高可用方案有哪些?mysql備份方案有哪些?有什麼優缺點
Keepalived+MySQL Replication
MySQL架構爲主從形式,當master故障時,會自動切換到slave上.
Keepalived的作用是檢測MySQL服務器狀態,如果有一臺MySQL服務器出現故障後將其剔除,當故障恢復後,自動將服務器加入集羣中。

Heartbeat+DRBD+MySQL
Heartbeat可實現心跳監測和資源接管
DRBD是一個用軟件實現的、無共享的、服務器之間鏡像塊設備內容的存儲複製解決方案。
當master出現故障,VIP就會漂移到slave上,DRBD分區會自動掛載。

MMM(Master-Master Replication Manager for MySQL)主主複製管理器,是一套提供了MySQL主主複製配置的監控、故障遷移和管理的可伸縮的腳本程序。在MMM高可用解決方案中,可以配置雙主多從架構,通過MySQL Replication技術可以實現兩臺MySQL服務器互爲主從,並且在任何時候只有一個節點可以寫入,避免多節點寫入的數據衝突,同時,當可寫節點故障時,MMM套件可以立即監控到,然後將服務自動切換到另一個主節點繼續提供服務,從而實現MySQL的高可用。
簡而言之,通過MMM可以實現監控和管理MySQL主主複製和服務狀態,同時也可以監控多個Slave節點的複製和運行狀態,並且可以做到任意節點發生故障時實現自動切換的功能。MMM也爲MySQL提供了讀、寫分離架構的良好平臺。


邏輯備份:mysqldump

優點:

1、恢復簡單,可以使用管道將他們輸入到MySQL

2、與存儲引擎無關,因爲是從MySQL服務器中提取數據而生成的,所以消除了底層數據存儲的不同

3、有助於避免數據損壞。若磁盤驅動器有故障而要複製原始文件時,此時將得到一個損壞的備份

缺點:

1、  必須有數據庫服務器完成邏輯工作,需要更多地cpu週期

2、  邏輯備份還原速度慢:需要MySQL加載和解釋語句、轉化存儲格式、重建引擎

物理備份:xtrabackup

優點:

1、  基於文件的物理備份

2、  容易跨平臺、跨操作系統和MySQL版本

3、  恢復起來會更快(不需要執行任何的mysql語句,不需要構建索引,innoDB表無需完全緩存到內存)

缺點:

1、  文件大

2、  不總是可以跨平臺、操作系統和MySQL版本

binlog備份

應用場景
對於一些由於錯誤操作等造成數據丟失錯誤的,需要按照時間點進行還原的情況下。

備份時間及地點
備份服務器實時將主庫上binlog同步到遠程服務器上


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章