整理了一些面试题,给需要的朋友。

(自己写的答案,仅供参考)


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/ .*/\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同步到远程服务器上