报错解决与排错思路

Posted qq5ee630a16d38e

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了报错解决与排错思路相关的知识,希望对你有一定的参考价值。

网络问题:

1.Device eth0 does not seem to be present MAC地址冲突造成
解决:

  • rm -f /etc/udev/rules.d/70-persistent-net.rules
  • reboot

2.出现两个IP是因为,网络配置文件下面配置了静态IP,但是,上面设置的不是static而是dhcp
解决:

  • 改为dhcp

负载均衡访问网站异常排错思路:

第一步:负载均衡测试后端web节点服务器是否能够正常访问
[root@1b01 conf.d]# curl -H host :www.yangyang.com 10.0.0.7
www 10.0.0.7
[root@1b01 conf.d]# curl -H host :www yangyang.com 10.0.0.8
www 10.0.0.8
[root@1b01 conf.d]# curl -H host :www.yangyang.com 10.0.0.9
www 10.0.0.9
第二步:负载均衡利用cur1命令访问负载均衡服务器
第三步:打开一个xshell连接ping www.yangyang.com
第四步:配置文件编写不正确

mysql异常

主从复制报错

mysql replication 中slave机器上有两个关键的进程,死一个都不行,一个是slave_sql_running,一个是Slave_IO_Running,一个负责与主机的io通信,一个负责自己的slave mysql进程。

如果是slave_io_running no了,那么就我个人看有三种情况,一个是网络有问题,连接不上,像有一次我用虚拟机搭建replication,使用了nat的网络结构,就是死都连不上,第二个是有可能my.cnf有问题,配置文件怎么写就不说了,网上太多了,最后一个是授权的问题,replication slave和file权限是必须的。

一旦io为no了先看err日志,看看报什么错,很可能是网络,也有可能是包太大收不了,这个时候主备上改max_allowed_packet这个参数。

如果是slave_sql_running no了,那么也有两种可能,一种是slave机器上这个表中出现了其他的写操作,就是程序写了,这个是会有问题的,还有一种占绝大多数可能的是slave进程重启,事务回滚造成的,这也是mysql的一种自我保护的措施,像关键时候只读一样。

这个时候想恢复的话,只要停掉slave,set GLOBAL SQL_SLAVE_SKIP_COUNTER=1;再开一下slave就可以了,这个全局变量赋值为N的意思是:
This statement skips the next N events from the master. This is useful for recovering from replication stops caused by a statement.
This statement is valid only when the slave thread is not running. Otherwise, it produces an error.
翻译过来就是
该语句跳过主服务器的下一个N事件。 这对于从语句引起的复制停止中恢复很有用。
该语句仅在从属线程未运行时才有效。 否则,将产生错误。
可参考:
https://mariadb.com/kb/en/replication-and-binary-log-system-variables/#sql_slave_skip_counter
错误实例:
show slave status\\G
Slave_IO_Running: Yes
Slave_SQL_Running: No

有问题了,Slave_SQL_Running应该是Yes才对。

再往下看,有错误的提示:

Last_Errno: 1062
Last_Error: Error ‘Duplicate entry ‘b847a74ad1e35badd71d0171bd703360’ for key ‘PRIMARY’’ on query. Default database: ‘fangh6fu’. Query: ‘INSERT INTO fangh6fu.ecs_sessions (sesskey, expiry, ip, data) VALUES (‘b847a74ad1e35badd71d0171bd703360’, ‘1447919111’, ‘192.168.1.214’, ‘a:0:{}’)’

先stop slave,然后执行了一下提示的语句,就是把重复的主键记录删除,
再SET GLOBAL SQL_SLAVE_SKIP_COUNTER=1; START SLAVE;

show slave status\\G

Slave_IO_Running: Yes
Slave_SQL_Running: Yes

OK了,从服务器也在几分钟内把堆积的log处理完了,两边又同步了:)

MHA 高可用报错

[root@DBproxy app1]# masterha_check_ssh --conf=/data/masterha/app1/app1.cnf
Can’t locate MHA/SSHCheck.pm in @INC (@INC contains: /usr/local/lib64/perl5 /usr/local/share/perl5 /usr/lib64/perl5/vendor_perl /usr/share/perl5/vendor_perl /usr/lib64/perl5 /usr/share/perl5 .) at /usr/bin/masterha_check_ssh line 25.
BEGIN failed–compilation aborted at /usr/bin/masterha_check_ssh line 25.
[root@DBproxy app1]#

问题定位:应该是环境变量的问题
[root@DBproxy app1]# find / -name SSHCheck.pm
/usr/lib/perl5/vendor_perl/MHA/SSHCheck.pm

将相关路径加入PERL5LIB后,问题解决(根本原因是MHA和OS版本不匹配)。
export PERL5LIB=$PERL5LIB:/usr/lib/perl5/vendor_perl/

问题现象:
[root@DBproxy mysql]# masterha_check_repl --conf=/data/masterha/app1/app1.cnf

Fri Jul 15 17:40:59 2016 - [error][/usr/lib/perl5/vendor_perl/MHA/ManagerUtil.pm, ln123]
Can’t locate MHA/BinlogManager.pm in @INC (@INC contains: /usr/local/lib64/perl5 /usr/local/share/perl5 /usr/lib64/perl5/vendor_perl /usr/share/perl5/vendor_perl /usr/lib64/perl5 /usr/share/perl5 .) at /usr/bin/apply_diff_relay_logs line 24.
BEGIN failed–compilation aborted at /usr/bin/apply_diff_relay_logs line 24.
Fri Jul 15 17:40:59 2016 - [error][/usr/lib/perl5/vendor_perl/MHA/ManagerUtil.pm, ln150] node version on 192.168.0.60 not found! Is MHA Node package installed ?
at /usr/lib/perl5/vendor_perl/MHA/MasterMonitor.pm line 374
Fri Jul 15 17:40:59 2016 - [error][/usr/lib/perl5/vendor_perl/MHA/MasterMonitor.pm, ln424] Error happened on checking configurations. Died at /usr/lib/perl5/vendor_perl/MHA/ManagerUtil.pm line 151.
Fri Jul 15 17:40:59 2016 - [error][/usr/lib/perl5/vendor_perl/MHA/MasterMonitor.pm, ln523] Error happened on monitoring servers.
Fri Jul 15 17:40:59 2016 - [info] Got exit code 1 (Not master dead).

MySQL Replication Health is NOT OK!
[root@DBproxy mysql]#

问题定位:设置环境变量export PERL5LIB=$PERL5LIB:/usr/lib/perl5/vendor_perl后问题依然没解决。
最后安装版本为el6的MHA(导致问题的版本为el5,该版本的MHA安装目录为/usr/lib/perl5/vendor_perl下),问题解决。

 

以上是关于报错解决与排错思路的主要内容,如果未能解决你的问题,请参考以下文章

报错来了不要崩!nginx服务启动失败排错分析!

MySQL主从同步报错排错结果及修复过程之:Slave_SQL_Running: No

抓包排错-tcp.flags.reset

对小白操作Linux系统,解决报错的大概思路

启动Jenkins后无法访问,如何排错

蓝鲸-监控 排错思路