Linux常见问题及解决方案

Linux常见问题
写在前面的话:遇到问题时不要盲目找答案。先想想为什么会发生这个问题,看看问题的提示,寻找产生问题的原因,百度搜索找到答案,也要想想为什么那样子做可以解决问题。没有直接答案的,学会从类似问题的解决方案中琢磨出解决办法。
误删文件恢复
1.查看磁盘分区
[root@hadoop01 ~]# df -hT
Filesystem Type Size Used Avail Use% Mounted on
/dev/sda2 ext4 18G 6.0G 11G 36% /
tmpfs tmpfs 495M 80K 495M 1% /dev/shm
/dev/sda1 ext4 291M 34M 242M 13% /boot
/dev/sr0 iso9660 3.7G 3.7G 0 100% /media/CentOS_6.7_Final
2.运用系统自还工具debugfs来修复
[root@hadoop01 software]# debugfs
debugfs 1.41.12 (17-May-2010)
3.打开需要恢复文件所在的磁盘分区
debugfs: open /dev/sda2
4.用ls 加-d参数显示刚刚删除文件所在的目录
debugfs: ls -d /home/software
912234 (12) . 781829 (12) …
912540 (72) .hive-staging_hive_2018-12-18_02-53-40_005_494099416586841089-1
5.显示有<>尖括号的就是我们要找的文件Inode 号 执行
debugfs: logdump -i <912234>
6.执行完命令后,显示了一屏信息,我们需要的是下面这一行,并且要记住,后面的值
Blocks: (0+1): 127754 (1+1): 65540 (4+1): 557119 (5+1): 524288 (6+1): 1 (7+1): 1 (8+1): 557601 (9+1): 2 (10+1): 1 (11+1): 557148 (IND): 3 (DIND): 1 (TIND): 557894
No magic number at block 13889: end of journal.
7.退出debugfs
debugfs: quit
,执行如下命令

十一,以上结果表示恢复成功我们看下/tmp目录下到底有没有

十二,tmp目录下有我们显示一下,

虚拟机绑定静态IP后无法上网
1.虚拟机配置

2.输入ifconfig查看网络状态

3.修改网络配置
vim /etc/sysconfig/network-scripts/ifcfg-eth0
DEVICE=“eth3”
BOOTPROTO=“static”
IPV6INIT=“yes”
NM_CONTROLLED=“yes”
ONBOOT=“yes”
IPADDR=192.168.157.130
NETMASK=255.255.255.0
GATEWAY=192.168.157.2
DNS1=192.168.157.2
TYPE=“Ethernet”
UUID=“9275843d-39ad-4b2f-8eb4-032f9565b3ab”
HWADDR=00:0C:29:59:28:96
DEFROUTE=yes
PEERDNS=yes
PEERROUTES=yes
IPV4_FAILURE_FATAL=yes
IPV6_AUTOCONF=yes
IPV6_DEFROUTE=yes
IPV6_PEERDNS=yes
IPV6_PEERROUTES=yes
IPV6_FAILURE_FATAL=no
NAME=“System eth0”
LAST_CONNECT=1536167030
IPADDR 就是你执行ifconfig的时候输出的IP
BROADCAST 是广播地址,从第2步的"DHCP设置"界面获取
NETMASK是子网掩码,也从第2步的"DHCP设置"界面获取
GATEWAY是网关,从vmware的虚拟网络编辑器的"NAT设置”里面获取
4.重启网络
service network restart
5.重启虚拟机
reboot
6.测试上网
ping www.baidu.com
复制虚拟机后eht0变为eth1的解决
在A机器安装了虚拟机vmA,把虚拟机复制到机器B中vmB
新的虚拟机bmB网络无法使用,并用原操作系统中的网卡eth0在克隆出来的新系统中,网卡号变成了eth1,并且IP地址也丢失了,网络不可正常使用
解决办法
之一
修改克隆后机器(B机器)70-persistent-net.rules文件内容
 
对克隆后机器(B机器)vim /etc/udev/rules.d/70-persistent-net.rules文件进行两步修改:
 
(1) 将原NAME="eth0"行内容注释
 
(2) 将NAME=“eth1"行内容中的"eth1"修改成"eth0”
 
修改完成后内容如下:

This file was automatically generated by the /lib/udev/write_net_rules

program, run by the persistent-net-generator.rules rules file.

You can modify it, as long as you keep each rule on a single

line, and change only the value of the NAME= key.

PCI device 0x8086:0x100f (e1000)

#SUBSYSTEM==“net”, ACTION==“add”, DRIVERS==“?", ATTR{address}“00:0c:29:5e:35:00”, ATTR{type}“1”, KERNEL=="eth”, NAME=“eth0”
SUBSYSTEM==“net”, ACTION==“add”, DRIVERS==“?", ATTR{address}“00:0c:29:3a:f2:8e”, ATTR{type}“1”, KERNEL=="eth”, NAME=“eth0”
之二
修改克隆后机器(B机器)的Mac地址与IP地址
[root@ol6_weblogic_1 network-scripts]#vi /etc/sysconfig/network-scripts/ifcfg-eth0
DEVICE=“eth0”
HWADDR=“00:0C:29:3a:f2:8e”
NM_CONTROLLED=“yes”
ONBOOT=“yes”
IPADDR=192.0.0.207
NETMAST=255.255.255.0
TYPE=“Ethernet”
特别注意:
 
修改的MAC地址,只能是与70-persistent-net.rules文件中ATTR{address}相同的地址
之三
经验证,重启网络服务(service network restart)方式,IP地址可以变化过来,但是网络接口名称eth1修改不生效,
需重启系统!
解决VMware重启IP地址改变的问题
场  景:
    VMware的虚拟机重启后,IP地址可能会发生变化
解决办法:
    把VMware虚拟机的IP地址设定为固定值,避免因IP地址变化而重新修改配置文件.
具体步骤:
1.打开VMware虚拟机,编辑—>虚拟网络编辑器中,查看相关设置:

2.点击编辑,设置固定的ip地址:

3.最后左边点击.选择你设置固定的ip地址:

添加用户到指定组
遇到类似这样的提示 * Please do NOT forget to add your users to the rvm group.
添加一个用户到指定用户组:
gpasswd –a 用户名 组名
usermod –G 组名 用户名
//第一种:gpasswd –a 用户名 组名
[root@localhost ~]# id user1
uid=501(user1) gid=501(user1) groups=501(user1)
[root@localhost ~]# gpasswd -a user1 user_group
Adding user user1 to group user_group
[root@localhost ~]# id user1             
uid=501(user1) gid=501(user1) groups=501(user1),500(user_group)
//第二种:usermod –G 组名 用户名
[root@localhost ~]# id user1
uid=501(user1) gid=501(user1) groups=501(user1)
[root@localhost ~]# usermod -G user_group user1
[root@localhost ~]# id user1            
uid=501(user1) gid=501(user1) groups=501(user1),500(user_group)
很显然,这两种方式得到的结果是一样的。其实对于上面两种方式正确来说是将用户组添加到指定用户的用户附加组中。
但是这个使用时候我们创建文件得到所属的组还是原来的user1组。可以使用newgrp来切换用户组,但是这个newgrp切换用户组只是临时切换的,当账号重新登录后就会变回去的。这个情况我们可以使用id和id 用户名 命令看出来。
[user1@localhost ~]$ touch file1
[user1@localhost ~]$ ls -l
total 0
-rw-rw-r–. 1 user1 user1 0 Jul  1 11:19 file1
[user1@localhost ~]$ id
uid=501(user1) gid=501(user1) groups=501(user1),500(user_group) context=unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023
[user1@localhost ~]$ id user1
uid=501(user1) gid=501(user1) groups=501(user1),500(user_group)
[user1@localhost ~]$ newgrp user_group
[user1@localhost ~]$ touch file2
[user1@localhost ~]$ ls -l
total 0
-rw-rw-r–. 1 user1 user1      0 Jul  1 11:19 file1
-rw-r–r–. 1 user1 user_group 0 Jul  1 11:20 file2
[user1@localhost ~]$ id
uid=501(user1) gid=500(user_group) groups=501(user1),500(user_group) context=unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023
[user1@localhost ~]$ id user1
uid=501(user1) gid=501(user1) groups=501(user1),500(user_group)
修改一个用户到指定用户组
[root@localhost ~]# id user1             
uid=501(user1) gid=501(user1) groups=501(user1)
 [root@localhost ~]# usermod -g user_group user1
[root@localhost ~]# id user1
uid=501(user1) gid=500(user_group) groups=500(user_group)
对于gpasswd -a命令和usermod -G添加用户到用户组同时会保留这个用户之前所在组信息因为是将用户添加到用户群组中修改的是groups,而usermod会将这个用户之前添加的组信息删除直接修改的是gid,所以如果想让指定用户临时加入指定组,可以使用gpasswd –a或者usermod -G命令。
无法删除用户
那就暴力删除该用户吧:userdel -r -f XXXX 提示:userdel: warning: can’t remove /var/mail/git: No such file or directory userdel: git home directory (/home/git) not found 没关系。实际上已成功删除用户
yum无法使用
常见问题:
① 无网络或网络配置有问题
② 配置文件有问题
③ 未安装运行环境JDK
解决办法:
1.删除yum.repos.d目录下所有文件
rm -f /etc/yum.repos.d/*  
或如下操作:
[root@localhost ~]# cd /etc/yum.repos.d
2.复制别的能正常使用yum的虚拟机的配置文件来用
[root@localhost yum.repos.d]# ls
CentOS-Base.repo epel.repo epel-testing.repo erlang_solutions.repo server.repo[root@localhost yum.repos.d]# rm ./*
 或尝试下载阿里的来用
 wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-6.repo  
3.清理缓存
yum clean all  
4.测试下载安装
yum install gcc  
linux 命令行报bash command not found
命令行输入命令执行后报“bash:…:command not found”这是由于系统PATH设置问题,PATH没有设置对,系统就无法找到精确命令了。 
 也可能是系统未安装JDK。
1、在命令行中输入:export PATH=/usr/bin:/usr/sbin:/bin:/sbin 这样可以保证命令行命令暂时可以使用。命令执行完之后先不要关闭终端。 
 
2、在命令行中输入 vi /etc/profile 查看是否自己另外设置了PATH属性。 
  在Vi编辑器中输入 
 
export PATH= P A T N : / u s r / j a v a 1.8 / b i n : / u s r / j a v a 1.8 / j r e / b i n  原来在配置 J A V A 的时候环境变量写错改为 e x p o r t P A T H = PATN:/usr/java1.8/bin:/usr/java1.8/jre/bin  原来在配置JAVA的时候环境变量写错 改为export PATH= PATN:/usr/java1.8/bin:/usr/java1.8/jre/bin 原来在配置JAVA的时候环境变量写错改为exportPATH=PATH:/usr/java1.8/bin:/usr/java1.8/jre/bin
:wq保存此文件
在终端输入source profile
即命令行报bash:…:command not found的解决办法
 
 3、关闭终端,重新打开终端,输入命令执行,OK,全部正常! 
wget无法使用的解决方法
输入下面这个指令即可安装wget服务。
yum -y install wget
GPG key retrieval failed: [Errno 14] Could not open/read file:///etc/pki/rpm-gpg/RPM-GPG-KEY-EPEL-6
解决办法:
第一种是把这个key从这个源站copy过来,放到/etc/pki/rpm-gpg目录下。
[root@localhost rpm-gpg]# wget https://archive.fedoraproject.org/pub/epel/RPM-GPG-KEY-EPEL-6
第二种是修改repo文件
[root@localhost rpm-gpg]# vim /etc/yum.repos.d/epel.repo
[epel]
name=Extra Packages for Enterprise Linux 6 – KaTeX parse error: Expected 'EOF', got '#' at position 10: basearch #̲baseurl=http://…basearch
mirrorlist=https://mirrors.fedoraproject.org/metalink?repo=epel-6&arch=$basearch
failovermethod=priority
enabled=1
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-EPEL-6
把最后一行gpgcheck=1改为gpgcheck=0
原因解析:
每个 fusion源发布的稳定 RPM 软件包都配有一个 GPG 签名。默认情况下,yum 和图形更新工具验证这些签名并拒绝安装任何没有签名或者签名损坏的软件包。您总是应该在安装软件包之前验证其签名。这些签名可确保您要安装的软件包出自fusion仓库,且没有被提供该软件包的网页或者镜像更换(无意的或者恶意的)。
而我们安装fusion源的时候,默认是没有添加gpg密钥的,所以安装软件的时候会出现想
获取 GPG 密钥失败:[Errno 14] Could not open/read file:///etc/pki/rpm-gpg/RPM-GPG-KEY-rpmfusion-free-fedora-15-x86_64
这种错误,那么怎么解决呢?
答案当然是导入密钥了~
安装RVM失败
执行此命令失败curl -sSL http://get.rvm.io | bash -s stable
界面如下:

按提示来,获取密钥:
gpg2 --recv-keys 409B6B1796C275462A1703113804BB82D39DC0E3
下载更新密钥
gpg --keyserver hkp://keys.gnupg.net --recv-keys 409B6B1796C275462A1703113804BB82D39DC0E3
再次尝试执行命令
[root@localhost ruby-2.3.1]# curl -L get.rvm.io | bash -s stable
按照提示添加用户到用户组rvm
[root@localhost ruby-2.3.1]# gpasswd -a root rvm
Adding user root to group rvm
用source命令使文件立即生效
[root@localhost ruby-2.3.1]# source /usr/local/rvm/scripts/rvm
ruby version问题报错
其中 gem install redis命令执行时出现了:
 redis requires Ruby version >= 2.2.2的报错,查了资料发现是Centos默认支持ruby到2.0.0,可gem 安装redis需要最低是2.2.2
解决办法是 先安装rvm,再把ruby版本提升至2.3.3
1.安装curl
 yum install curl
2. 安装RVM
curl -L get.rvm.io | bash -s stable 
3. 
source /usr/local/rvm/scripts/rvm
4. 查看rvm库中已知的ruby版本
rvm list known
5. 安装一个ruby版本
rvm install 2.3.7
若安装过程报错:curl: (35) SSL connect error
解决方法:升级网络安全服务即可。
yum update nss
6. 使用一个ruby版本
rvm use 2.3.7
7. 查看目前版本
ruby --version
8. 版本过低问题解决,现在可以安装redis插件了
gem install redis
 MySql data目录 mysql-bin.000001文件清理方法
在MYSQL安装目录写,data目录存放着所有数据库的文件,在这个目录下有一些mysql-bin.000001,mysql-bin.000002,mysql-bin.000003类似的文件占用很大的空间,这些文件都是数据库的操作日志文件,可以清除掉。清除方法:
在cmd下进到mysql下的bin目录下,输入mysql -u root -p;然后输入密码,成功进去后输入 reset master。
mysql> reset master;
Query OK, 0 rows affected, 1 warning (0.20 sec)
这样就删除了日志文件,如果你不希望生成这些日志文件可以这样操作:
打开mysql目录中的my.ini,找到log-bin=mysql-bin然后注释掉就可以了。
#log-bin=mysql-bin
(在修改数据库配置文件时候最好暂时关闭MYSQL数据库)
mysql 启动时找不到PID 进程坏死的问题
[root@AY140223202734935acfZ ~]# service mysql restart
 ERROR! MySQL (Percona Server) PID file could not be found!
Starting MySQL (Percona Server)… ERROR! The server quit without updating PID file (/usr/local/mysql/data/AY140223202734935acfZ.pid).
[root@AY140223202734935acfZ ~]# service mysql stop
 ERROR! MySQL (Percona Server) PID file could not be found!
当操作mysql过程中,如出现上述MySQL (Percona Server) PID file could not be found!状况,很有肯能是进程卡死的现象,ps -ef | grep mysql 查看是否 有 “?” 
[root@AY140223202734935acfZ ~]# ps -ef |grep mysql
root     26341 25946  0 17:00 pts/0    00:00:00 grep mysql
root     30904     1  0 Mar12 ?        00:00:00 /bin/sh /alidata/server/mysql/bin/mysqld_safe --datadir=/alidata/server/mysql/data --pid-file=/alidata/server/mysql/data/AY140223202734935acfZ.pid
mysql    31025 30904  0 Mar12 ?        00:00:16 /alidata/server/mysql/bin/mysqld --basedir=/alidata/server/mysql --datadir=/alidata/server/mysql/data --user=mysql --log-error=/alidata/log/mysql/error.log --pid-file=/alidata/server/mysql/data/AY140223202734935acfZ.pid --socket=/tmp/mysql.sock --port=3306
解决办法:
//杀掉坏死卡掉的进程
[root@AY140223202734935acfZ ~]# kill -9 30904
[root@AY140223202734935acfZ ~]# kill -9 31025
//停止mysql服务
[root@AY140223202734935acfZ ~]# ps -ef |grep mysql
root     26443 25946  0 17:02 pts/0    00:00:00 grep mysql
[root@AY140223202734935acfZ ~]# service mysql stop
Shutting down MySQL (Percona Server)… SUCCESS! 
//启动mysql
[root@AY140223202734935acfZ ~]# service mysql start
Starting MySQL (Percona Server). SUCCESS! 
无法开启MYSQL服务器
检查配置文件是否有问题
[root@localhost bin]# vim /etc/my.cnf
[mysqld]
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock
user=mysql

Disabling symbolic-links is recommended to prevent assorted security risks

symbolic-links=0

server-id=5 //从服务id号,不可重复

[mysqld_safe]
log-error=/var/log/mysqld.log
pid-file=/var/run/mysqld/mysqld.pid
ERROR! MySQL (Percona Server) is not running, but lock file (/var/lock/subsys/mysql) exists
解决办法:进入cd /var/lock/subsys/ 删除rm mysql即可。
The server quit without updating PID file (/var/lib/mysql/localhost.localdomain.pid).

mysql.sock不存在的解决方法
ERROR 2002 (HY000): Can’t connect to local MySQL server through socket ‘/var/lib/mysql/mysql.sock’ (2)
进入/var/lib/mysql/目录,发现并没有mysql.sock文件修改配置文件。通过 find / -name my.cnf命令找到文件所在位置。
vi /etc/my.cnf(my.cnf也可能在其他路径下)

socket=/tmp/mysql.sock
原因:其他用户对tmp文件夹有读写权限,而var目录没有。
也可以更改mysql对var的操作权限。为了避免权限问题也可以使用软链接为/var/lib/mysql/mysql.sock创建一个到/tmp/mysql.sock的联接
ln -s /var/lib/mysql/mysql.sock /tmp/mysql.sock
最后重启mysql就可以了。
ERROR 2002 (HY000): Can’t connect to local MySQL server through socket ‘/var/lib/mysql/mysql.sock’ (2)
[root@localhost init.d]# ps -A|grep mysql
1868 ? 00:00:00 mysqld_safe
2056 ? 00:00:07 mysqld
[root@localhost init.d]# kill 1868
[root@localhost init.d]# kill 2056
丢失了文件localhost.localdomain.pid
错误界面如下:

1.localhost.localdomain.pid 保存的是MySQL所启动的后台服务进程的PID值,如果这个文件丢了,可以创建一些,然后把一个数字放入其中。(或者到其他虚拟机找这个文件/var/lib/mysql/localhost.localdomain.pid复制到对应目录)
2./tmp/mysql.sock 文件的作用是 MySQL通过这个unix socket 文件来与本地的客户端进行通信的。如果此文件丢了,可以通过重新启动服务器来重新创建它。
不建议将此文件放到 /tmp目录下。

丢失后在mysql的安装目录是没有*.pid,mysql.sock文件造成mysql无法重启,解决方法是重新创建hostname.pid文件
(1)ps -ef |grep mysql 找出mysql的进程,如:6225;
(2)vi hostname.pid写入6225
(3)重新启动mysql正常.
用SQLyog连接虚拟机中的mysql,解决连接不上的方法
在自己的虚拟机上安装了mysql,但是在本地使用SQLyog连接的时候报了如下错误:

这个问题主要是
MySQL没有允许远程登陆,所以要授权MySQL远程登陆。
授权方法:
方法一、本地登入mysql,更改 “mysql” 数据库里的 “user” 表里的 “host” 项,将”localhost”改为”%”
 #mysql -u root -proot
  mysql>use mysql;
  mysql>update user set host = ‘%’ where user = ‘root’;
  mysql>select host, user from user;
  方法二、直接授权(推荐)
  从任何主机上使用root用户,密码:youpassword(你的root密码)连接到mysql服务器:
 # mysql -u root -proot
  mysql>GRANT ALL PRIVILEGES ON . TO ‘root’@‘%’ IDENTIFIED BY ‘youpassword’ WITH GRANT OPTION;
  操作完后切记执行以下命令刷新权限
   FLUSH PRIVILEGES
  这时就可以连接成功了。
另一种情况就是安装mysql的时候,直接给root用户设密码之后没有刷新权限,即没有执行flush privileges
如果是这种情况,使用方法一的时候会报如下错。
mysql> update user set host=‘%’ where user=‘root’;
ERROR 1062 (23000): Duplicate entry ‘%-root’ for key 'PRIMARY’mysql> select host,user from user;
±----------------------±-----+| host | user |
±----------------------±-----+
| % | root |
| 127.0.0.1 | root |
| ::1 | root |
| localhost | |
| localhost.localdomain | || localhost.localdomain | root |
±----------------------±-----+
6 rows in set (0.00 sec)
mysql> flush privileges;
Query OK, 0 rows affected (0.01 sec)
因为root的host已经是%了,只需刷新权限即可。
变换hive原有数据库derby为mysql后无法启动,提示Cannot execute statement: impossible to write to binary log since BINLOG_FORMAT = STATEMENT and at least one table uses a storage engine limited to row-based logging. InnoDB is limited to row-logging when transaction isolation level is READ COMMITTED or READ UNCOMMITTED.
原因分析:因mysql配置的是集群模式,主从结构。该台虚拟机是复制过来的。从节点的IP地址未修改。

mysql> show slave status;
看到貌似是statement模式不足以应付应用,换成mixed试试看吧:

mysql> STOP SLAVE;
Query OK, 0 rows affected (0.02 sec)

mysql>  SET GLOBAL binlog_format=MIXED;
Query OK, 0 rows affected (0.00 sec)

mysql> START SLAVE;
Query OK, 0 rows affected (0.00 sec)

但是这样只会一次性

为了永久生效,需要修改my.ini

Remove leading

to turn on a very important data integrity option: logging

changes to the binary log between backups.

log_bin = E:/mysql56/log_bin/log_bin.log

#relay_log = E:/mysql56/log_bin/relay_log.log

#read_only = 1

binary logging format - mixed recommended

binlog_format=mixed
redis通过6379端口无法连接服务器解决办法
redis无法连接数据库就只有这几种可能,防火墙,安全组,密码,绑定IP。这次的问题感觉还是比较让人费解的,当更换端口号的时候就可以,默认端口6379就是不行。
当使用iptables -L -n查看已设置的iptables规则,它竟然存在安全组规则。
上边结果显示范围内的端口号都只能本地访问,6379自然也就不能被访问到了。知道原因就好办了,直接使用iptables -F将这些规则都清楚掉,再次使用iptables -L -n查看,规则都不存在了,使用telnet测试服务器端口号,也可以正常连接了。这里面个人最不能理解的地方就是为什么iptables 防火墙不存在,竟然还存在它的规则。

[root@10-9-162-80 ~]# iptables -L -n
Chain INPUT (policy ACCEPT)
target prot opt source destination
DROP tcp – 0.0.0.0/0 0.0.0.0/0 tcp dpt:6379
ACCEPT tcp – 127.0.0.1 0.0.0.0/0 tcp dpt:6379

Chain FORWARD (policy ACCEPT)
target prot opt source destination

Chain OUTPUT (policy ACCEPT)
target prot opt source destination
[root@10-9-162-80 ~]# iptables -F
[root@10-9-162-80 ~]# iptables -L -n
Chain INPUT (policy ACCEPT)
target prot opt source destination

Chain FORWARD (policy ACCEPT)
target prot opt source destination

Chain OUTPUT (policy ACCEPT)
target prot opt source destination
[root@10-9-162-80 ~]# cd /home/software/redis-3.2.11
[root@10-9-162-80 redis-3.2.11]# redis-server redis.conf
[root@10-9-162-80 redis-3.2.11]# redis-cli -p 6379
127.0.0.1:6379>
Rabbitmq启动问题
出错错误查看日志
[root@localhost rabbitmq]# cat /var/log/rabbitmq/startup_err
1.报错如下:
[root@localhost rabbitmq]# rabbitmq-server status
/usr/lib/rabbitmq/bin/rabbitmq-server: line 49: /var/lib/rabbitmq/mnesia/rabbit@localhost.pid: Permission denied
Failed to write pid file: /var/lib/rabbitmq/mnesia/rabbit@localhost.pid
解决办法:
权限问题所致,修改权限。
[root@localhost rabbitmq]# chown -R rabbitmq:rabbitmq /var/lib/rabbitmq/mnesia/
2.报错如下:
系统启动初始化失败。

可能是erlang语言环境与rabbitmq版本不匹配。建议卸载重新安装。
若yum获取到的版本为erlang-solutions-21.0.6-1.noarch.rpm,则仅匹配rabbitmq 3.7.7以上版本。
3.启动rabbitmq出现erlang的cookies文件不能读取,缺少权限
[root@10-9-93-42 rabbitmq-server-3.7.7]# chown rabbitmq:rabbitmq /var/lib/rabbitmq/.erlang.cookie
进入启动命令文件
[root@10-9-93-42 rabbitmq-server-3.7.7]# cd /usr/lib/rabbitmq/bin
启动
[root@localhost bin]# ./rabbitmq-server start

命令:curl: (7) couldn’t connect to host ?
使用linux命令 curl http://www.test.com 出现如下错误:curl: (7) couldn’t connect to host。
http://www.test.com 域名是部署在这台linux上的。 用ping 命令可以通。困惑中。。。
80端口未开放。
“couldn’t connect to host”
这样的错误可能是主机不可到达,或者端口不可到达。
ping OK只代表主机可以到达。
端口不可到达可能是由于HTTP 服务器未启动或者监听在其他端口入8080上了。
还有一个可能是防火墙没开放80端口的访问权限。

可通过下面命令开放80端口
iptables -I INPUT 1 -p tcp --dport 80 -j ACCEPT
ElasticSearch 常见问题
问题一:
[2016-11-06T16:27:21,712][WARN ][o.e.b.JNANatives ] unable to install syscall filter:
Java.lang.UnsupportedOperationException: seccomp unavailable: requires kernel 3.5+ with CONFIG_SECCOMPandCONFIG_SECCOMP_FILTERcompiledinatorg.elasticsearch.bootstrap.Seccomp.linuxImpl(Seccomp.java:349) ~[elasticsearch-5.0.0.jar:5.0.0]
at org.elasticsearch.bootstrap.Seccomp.init(Seccomp.java:630) ~[elasticsearch-5.0.0.jar:5.0.0]
原因:报了一大串错误,大家不必惊慌,其实只是一个警告,主要是因为你Linux版本过低造成的。
解决方案:
1、重新安装新版本的Linux系统
2、警告不影响使用,可以忽略
问题二:
ERROR: bootstrap checks failed
max file descriptors [4096] for elasticsearch process likely too low, increase to at least [65536]
原因:无法创建本地文件问题,用户最大可创建文件数太小
解决方案:
切换到root用户,编辑limits.conf配置文件, 添加类似如下内容:
vi /etc/security/limits.conf
添加如下内容:

  • soft nofile 65536
  • hard nofile 131072
  • soft nproc 2048
  • hard nproc 4096
    备注:* 代表Linux所有用户名称(比如 hadoop)
    保存、退出、重新登录才可生效
    问题三:
    max number of threads [1024] for user [es] likely too low, increase to at least [2048]
    原因:无法创建本地线程问题,用户最大可创建线程数太小
    解决方案:切换到root用户,进入limits.d目录下,修改90-nproc.conf 配置文件。
    vi /etc/security/limits.d/90-nproc.conf
    找到如下内容:
  • soft nproc 1024
    #修改为
  • soft nproc 2048
    问题四:
    max virtual memory areas vm.max_map_count [65530] likely too low, increase to at least [262144]
    原因:最大虚拟内存太小
    解决方案:切换到root用户下,修改配置文件sysctl.conf
    vi /etc/sysctl.conf
    添加下面配置:
    vm.max_map_count=655360
    并执行命令:
    sysctl -p
    然后重新启动elasticsearch,即可启动成功。
    问题五:
    ElasticSearch启动找不到主机或路由
    原因:ElasticSearch 单播配置有问题
    解决方案:
    检查ElasticSearch中的配置文件
    vi  config/elasticsearch.yml
    找到如下配置:
    discovery.zen.ping.unicast.hosts:[“192.168..:9300”,“192.168..:9300”]
    一般情况下,是这里配置有问题,注意书写格式
    问题六:
    org.elasticsearch.transport.RemoteTransportException: Failed to deserialize exception response from stream
    原因:ElasticSearch节点之间的jdk版本不一致
    解决方案:ElasticSearch集群统一jdk环境
    问题七:
    Unsupported major.minor version 52.0
    原因:jdk版本问题太低
    解决方案:更换jdk版本,ElasticSearch5.0.0支持jdk1.8.0
    问题八:
    bin/elasticsearch-plugin install license
    ERROR: Unknown plugin license
    原因:ElasticSearch5.0.0以后插件命令已经改变
    解决方案:使用最新命令安装所有插件
    bin/elasticsearch-plugin install x-pack

elastic search报错——“failed to obtain node locks”
启动时报错信息:

寻找主要信息:failed to obtain node locks

简单理解为:绑定节点失败!!!
导致的原因可能是因为之前运行的es还没有正常关闭。
第一步:通过命令:ps aux | grep elastic 进行查看。如下图:

第二步:通过命令: kill -9 进程号 关闭此进程。(或者重启电脑)
第三步:重新启动es
./bin/elasticsearch
threads [1024] for user [es] is too low.
报错线程问题,处理如下:
[root@localhost ~]# cd /home/software/elasticsearch-5.5.2/config

大数据常见问题
Hadoop常见问题:
1.Linux系统执行fs命令出错
[root@hadoop01 hadoop]# hadoop fs -lsr /
lsr: DEPRECATED: Please use ‘ls -R’ instead.
lsr: Call From localhost/127.0.0.1 to hadoop01:9000 failed on connection exception: java.net.ConnectException: Connection refused; For more details see: http://wiki.apache.org/hadoop/ConnectionRefused
问题分析:还没启动hadoop服务
解决办法:开启即可
[root@hadoop01 hadoop]# start-all.sh
2.启动hadoop失败,提示The authenticity of host ‘localhost (::1)’ can’t be established.
问题分析:修改主机名未重启使其生效
解决办法:重启电脑再次开启服务即可
3. 启动hadoop失败,提示Unable to load native-hadoop library for your platform… using builtin-java classes where applicable
问题分析:
Apache提供的hadoop本地库是32位的,而在64位的服务器上就会有问题,因此需要自己编译64位的版本。
解决办法:
①网上找到下载对应的编译版本
(参考网站http://dl.bintray.com/sequenceiq/sequenceiq-bin/)
②将准备好的64位的lib包解压到已经安装好的hadoop安装目录的lib/native 和 lib目录下:
[hadoop@hadoop01 ~]# tar -xvf hadoop-native-64-2.7.0.tar -C hadoop-2.7.1/lib/native
[hadoop@hadoop01 ~]# tar -xvf hadoop-native-64-2.7.0.tar -C hadoop-2.7.1/lib
③然后增加环境变量:
[hadoop@hadoop01 hadoop-2.7.1]# vi /etc/profile
④增加下面的内容:
export HADOOP_COMMON_LIB_NATIVE_DIR= H A D O O P H O M E / l i b / n a t i v e e x p o r t H A D O O P O P T S = " − D j a v a . l i b r a r y . p a t h = HADOOP_HOME/lib/native export HADOOP_OPTS="-Djava.library.path= HADOOPHOME/lib/nativeexportHADOOPOPTS="Djava.library.path=HADOOP_HOME/lib"
⑤让环境变量生效
[hadoop@hadoop01 hadoop-2.7.1]# source /etc/profile
⑥自检hadoop checknative –a 指令检查
[hadoop@hadoop01 hadoop-2.7.1]# hadoop checknative -a
4.run on Hadoop没有写出结果
解决办法:检查读取文件位置是否有不相关文件,删除即可。
4.使用eclipse-hadoop插件无法再eclipse操作(上传、删除文件)
在安装目录下的etc/hadoop中的hdfs-site.xml添加如下配置:

dfs.permissions
false

关闭文件权限检查
5.hadoop完全分布式启动时,执行hdfs namenode -bootstrapStandby失败,报:HadoopIllegalArgumentException: HA is not enabled for this namenode

5.解决Hadoop启动时,没有启动datanode

  1. 环境描述:
    虚拟机12.0,Ubuntu 14.04,伪分布式安装Hadoop2.6。

  2. 问题描述:
    多次格式化文件系统时,会出现datanode无法启动。如下图:

  3. 问题产生原因:
    执行文件系统格式化时(即执行命令$ bin/hadoop namenode -format 后),会在namenode数据文件夹(即配置文件中dfs.name.dir在本地系统的路径)中保存一个current/VERSION(我的路径为 usr/local/hadoop/tmp/dfs/name/current/VERSION,其中hadoop为建立虚拟机时为虚拟机系统所取的用户名)文件,记录namespaceID,标识了所格式化的namenode的版本。如果我们频繁的格式化namenode,那么datanode中保存(即配置文件中dfs.data.dir在本地系统的路径)的current/VERSION文件(路径为usr/local/hadoop/tmp/dfs/data/current/VERSION)只是你第一次格式化时保存的namenode的ID,因此就会造成namdenode 的 namespaceID 与 datanode的namespaceID 不一致,从而导致namenode和 datanode的断连。

  4. datanode启动日志:
    查看日志(在/usr/local/hadoop/logs/hadoop-hadoop-datanode-hadoop-virtual-machine.log下)发现:
    ************************************************************/
    2017-07-3 17:40:59,973 ERROR org.apache.hadoop.hdfs.server.datanode.DataNode: java.io.IOException: Incompatible namespaceIDs in /home/xsj/hadoop/hadoop-0.20.2/hdfs/data: namenode namespaceID = 1825353369; datanode namespaceID = 1986950792

  5. 解决方案:
    把/tmp下的Hadoop开关的临时文件删除
    把/hadoop.tmp.dir目录清空
    注:在每次执行hadoop namenode -format时,都会为NameNode生成namespaceID,,但是在hadoop.tmp.dir目录下的DataNode还是保留上次的namespaceID,因为namespaceID的不一致,而导致DataNode无法启动,所以只要在每次执行hadoop namenode -format之前,先删除hadoop.tmp.dir(路径为 /usr/local/hadoop/下的)tmp目录就可以启动成功,或者删除/usr/local/hadoop/tmp/dfs下的data目录,然后重新启动dfs(在hadoop安装路径 /usr/local/hadoop/ 下,运行命令./sbin/start-dfs.sh)即可。请注意是删除hadoop.tmp.dir对应的本地目录,即/usr/local/hadoop/下的tmp文件夹,而不是HDFS目录。
    也可以试着参考http://blog.sina.com.cn/s/blog_76fbd24d01017qmc.html 或者http://blog.csdn.net/hackerwin7/article/details/19973045这两篇文章。

  6. 重启后执行jps命令:

  7. 总结:
    以后在hadoop format过程中 要注意不要频繁地reformat namnode(格式化命令为 ./bin/hadoop namenode -format)的ID信息。format过程中选择N(否)就是了。
    Hbase常见问题
    1.日志jar包冲突报错:Class path contains multiple SLF4J bindings
    hbase(main):001:0> status
    SLF4J: Class path contains multiple SLF4J bindings.
    SLF4J: Found binding in [jar:file:/home/software/hbase-0.98.17-hadoop2/lib/slf4j-log4j12-1.6.4.jar!/org/slf4j/impl/StaticLoggerBinder.class]
    SLF4J: Found binding in [jar:file:/home/software/hadoop-2.7.1/share/hadoop/common/lib/slf4j-log4j12-1.7.10.jar!/org/slf4j/impl/StaticLoggerBinder.class]
    SLF4J: See http://www.slf4j.org/codes.html#multiple_bindings for an explanation.
    原因分析:查看报错信息发现slf4j-log4j12-1.6.4.jar和slf4j-log4j12-1.7.10.jar两个jar包冲突。
    解决办法:删掉一个jar包,重启即可。
    rm -rf /home/software/hbase-0.98.17-hadoop2/lib/slf4j-log4j12-1.6.4.jar
    2.报错无法连接Zookeeper
    Can’t get connection to ZooKeeper: KeeperErrorCode = ConnectionLoss for /hbase
    3.仅能开启1台服务,另外两台死掉了。查看status提示信息如下:
    1 active master, 0 backup masters, 1 servers, 2 dead, 5.0000 average load
    原因分析:必须用设置为主服务的那台虚拟机开启hbase服务。
    解决办法:关闭服务、相关进程。在主服务器上开启hbase。
    4.hbase 结点之间时间不一致造成regionserver启动失败
    Caused by: org.apache.hadoop.ipc.RemoteException: org.apache.hadoop.hbase.ClockOutOfSyncException: Server s3,60020,1304927875246 has been rejected; Reported time is too far out of sync with master.  Time difference of 41450ms > max allowed of 30000ms

方案1
在hbase-site.xml添加配置。(不建议,系统默认30s是为了保持服务器时间同步)

        hbase.master.maxclockskew
        18000
        Time difference of regionserver from master
 

方案2
修改各结点时间,使其误差在30s内。
我写了一个同步时间的shell脚本  
· #!/bin/bash  
· echo “start”  
· for ((i=211;i<=218;i++))  
· do  
·   
· #ssh 192.168.5. i   ′ d a t e   110415402010 ;   c l o c k   − w ′    ⋅ s s h   192.168.5. {i} 'date 110415402010; clock -w'   · ssh 192.168.5. i date 110415402010; clock w  ssh 192.168.5.i ‘date -s “2011-05-10 10:44:00”; clock -w’  
· #ssh 192.168.210. m a c h i n e   ′ c l o c k   − w ′    ⋅ d o n e    ⋅ e c h o   " c o m p l e t e " 方案 3  下载一个同步时间的插件 y u m i n s t a l l − y n t p d a t e 输入命令 n t p d a t e u s . p o o l . n t p . o r g F l u m e 常见问题启动报错 N o c o n f i g u r a t i o n f o u n d f o r t h i s h o s t : a l 原因分析:英文的 a l 和英文 a + 数字 1 很像,错把 1 写成英文 L 的小写了。解决办法:修改 c o n f 文件或启动命令里的 L 为 1 。 H i v e 常见问题 1. F A I L E D : E x e c u t i o n E r r o r , r e t u r n c o d e 1 f r o m o r g . a p a c h e . h a d o o p . h i v e . q l . e x e c . D D L T a s k . M e t a E x c e p t i o n ( m e s s a g e : F o r d i r e c t M e t a S t o r e D B c o n n e c t i o n s , w e d o n ′ t s u p p o r t r e t r i e s a t t h e c l i e n t l e v e l . ) 拍错过程:打印日志查看: h i v e − h i v e c o n f h i v e . r o o t . l o g g e r = D E B U G , c o n s o l e 原因分析: h i v e 使用 m y s q l 作为元数据  h i v e 创建数据库和切换数据库都是可以的但是创建表就是出问题百度之后发现是编码问题解决办法:详解:把 h i v e 的元数据库 m y s q l 里的数据库的编码改为 l a t i n 1 ,如果还不行就把在 {machine} 'clock -w'   · done   · echo "complete" 方案3  下载一个同步时间的插件 yum install -y ntpdate 输入命令ntpdate us.pool.ntp.org Flume常见问题 启动报错No configuration found for this host:al 原因分析:英文的al和英文a+数字1很像,错把1写成英文L的小写了。 解决办法:修改conf文件或启动命令里的L为1。 Hive常见问题 1.FAILED: Execution Error, return code 1 from org.apache.hadoop.hive.ql.exec.DDLTask. MetaException(message:For direct MetaStore DB connections, we don't support retries at the client level.) 拍错过程:打印日志查看:hive -hiveconf hive.root.logger=DEBUG,console 原因分析:hive 使用mysql作为元数据  hive创建数据库和切换数据库都是可以的 但是创建表就是出问题 百度之后发现 是编码问题 解决办法:详解:把hive的元数据库mysql里的数据库的编码改为 latin1,如果还不行就把在 machine clock w  done  echo "complete"方案下载一个同步时间的插件yuminstallyntpdate输入命令ntpdateus.pool.ntp.orgFlume常见问题启动报错Noconfigurationfoundforthishost:al原因分析:英文的al和英文a+数字1很像,错把1写成英文L的小写了。解决办法:修改conf文件或启动命令里的L1Hive常见问题1.FAILED:ExecutionError,returncode1fromorg.apache.hadoop.hive.ql.exec.DDLTask.MetaException(message:FordirectMetaStoreDBconnections,wedontsupportretriesattheclientlevel.)拍错过程:打印日志查看:hivehiveconfhive.root.logger=DEBUG,console原因分析:hive使用mysql作为元数据 hive创建数据库和切换数据库都是可以的但是创建表就是出问题百度之后发现是编码问题解决办法:详解:把hive的元数据库mysql里的数据库的编码改为latin1,如果还不行就把在{HIVE_HOME}/lib文件夹下的mysql-connector-java-5.X-bin.jar换成mysql-connnector-java-5.1.34-bin.jar。
mysql> alter database hive character set latin1;
终极解决办法:(注意此方法会删除所有元数据)在mysql中执行以下命令:
drop database hive;
create database hive;
alter database hive character set latin1;
重启hive,查看log,问题解决了!!!

2.FAILED: Execution Error, return code 1 from org.apache.hadoop.hive.ql.exec.MoveTask
处理方法同上~
impossible to write to binary log since BINLOG_FORMAT = STATEMENT
解释

这是因为,mysql默认的binlog_format是STATEMENT。

从 MySQL 5.1.12 开始,可以用以下三种模式来实现:基于SQL语句的复制(statement-based replication, SBR),基于行的复制(row-based replication, RBR),混合模式复制(mixed-based replication, MBR)。相应地,binlog的格式也有三种:STATEMENT,ROW,MIXED。

如果你采用默认隔离级别REPEATABLE-READ,那么建议binlog_format=ROW。如果你是READ-COMMITTED隔离级别,binlog_format=MIXED和binlog_format=ROW效果是一样的,binlog记录的格式都是ROW,对主从复制来说是很安全的参数。
解决方案
方法一

mysql> STOP SLAVE;
Query OK, 0 rows affected (0.02 sec)

mysql> SET GLOBAL binlog_format=ROW;
Query OK, 0 rows affected (0.00 sec)

mysql> START SLAVE;
Query OK, 0 rows affected (0.00 sec)

但是这样只是一次性的,重启后失效。
方案二

永久生效,需要修改my.ini

binary logging format - ROW

binlog_format=ROW
Kafka常见问题
1.如练习过程遇到问题,可以考虑清除旧环境,重新创建一个新的。
方法如下:删除log.dirs=/home/software/kafka_2.11-1.0.0/logs目录下的所有文件,并到Zookeeper删除对应节点。
[root@hadoop01 ~]# zkCli.sh
[zk: localhost:2181(CONNECTED) 0] ls /
[cluster, controller, storm, brokers, zookeeper, yarn-leader-election, hadoop-ha, admin, isr_change_notification, node08, log_dir_event_notification, controller_epoch, rmstore, consumers, latest_producer_id_block, config, hbase]
[zk: localhost:2181(CONNECTED) 1] rmr /cluster
逐个删除上方红色字体的节点。
2.kafka 启动报错 Socket server failed to bind to hadoop01:9092: Cannot assign requested address:
解决办法:配置文件 server.properties改为  listeners=PLAINTEXT://localhost:9092 
请不要写死地址。

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值