整理了一些面試題,給須要的朋友。php
(本身寫的答案,僅供參考)html
1. root用戶下以httpd用戶的身份運行腳本/opt/case/www.km.com/testdb.php,用一條命令怎麼實現?mysql
sudo -u httpd `which php` /opt/case/www.km.com/testdb.phplinux
2. 添加crontab,在11月內,天天的早上6點到20點中,每隔2小時執行一次/opt/shell/rsync.sh?nginx
0 6-20/2 * 11 * /opt/shell/rsync.shweb
若是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/目錄下。sql
find /opt/case/ -name "*php" -size +10k -mtime -1 -exec mv {} /opt/src/ \;shell
若是用兩條命令實現能夠用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 root@192.168.1.1
(也能夠用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. 簡要敘述下列端口所運行的服務
2一、 2二、 2三、 2五、 1十、 14三、 87三、 3306
ftp、ssh、telnet、 smtp、pop三、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
優勢:
一、恢復簡單,可使用管道將他們輸入到MySQL
二、與存儲引擎無關,由於是從MySQL服務器中提取數據而生成的,因此消除了底層數據存儲的不一樣
三、有助於避免數據損壞。若磁盤驅動器有故障而要複製原始文件時,此時將獲得一個損壞的備份
缺點:
一、 必須有數據庫服務器完成邏輯工做,須要更多地cpu週期
二、 邏輯備份還原速度慢:須要MySQL加載和解釋語句、轉化存儲格式、重建引擎
物理備份:xtrabackup
優勢:
一、 基於文件的物理備份
二、 容易跨平臺、跨操做系統和MySQL版本
三、 恢復起來會更快(不須要執行任何的mysql語句,不須要構建索引,innoDB表無需徹底緩存到內存)
缺點:
一、 文件大
二、 不老是能夠跨平臺、操做系統和MySQL版本
binlog備份
應用場景
對於一些因爲錯誤操做等形成數據丟失錯誤的,須要按照時間點進行還原的狀況下。
備份時間及地點備份服務器實時將主庫上binlog同步到遠程服務器上