centos安装strace centos7安装卡在安装源

本篇文章给大家谈谈centos安装strace,以及centos7安装卡在安装源对应的知识点,文章可能有点长,但是希望大家可以阅读完,增长自己的知识,最重要的是希望对各位有所帮助,可以解决了您的问题,不要忘了收藏本站喔。

在CentOS上安装Percona服务器的方法

在这篇文章中我们将了解关于 Percona服务器,一个开源的MySQL,MariaDB的替代品。InnoDB的数据库引擎使得Percona服务器非常有吸引力,如果你需要的高性能,高可靠性和高性价比的解决方案,它将是一个很好的选择。

在下文中将介绍在CentOS 7上 Percona服务器的安装,以及备份当前数据,配置的步骤和如何恢复备份。

1.什么是Percona,为什么使用它

Percona是一个MySQL,MariaDB数据库的开源替代品,它是MySQL的一个分支,相当多的改进和独特的功能使得它比MYSQL更可靠,性能更强,速度更快,它与MYSQL完全兼容,你甚至可以在Oracle的MySQL与Percona之间使用复制。

在Percona中独具特色的功能

分区适应哈希搜索

快速校验算法

缓冲池预加载

支持FlashCache

MySQL企业版和Percona中的特有功能

从不同的服务器导入表

PAM认证

审计日志

线程池

现在,你肯定很兴奋地看到这些好的东西整合在一起,我们将告诉你如何安装和对Percona Server做基本配置。

2.备份你的数据库

接下来,在命令行下使用SQL命令创建一个mydatabases.sql文件,来重建或恢复salesdb和employeedb数据库,根据你的设置替换数据库名称,如果没有安装MySQL则跳过此步:

代码如下:

mysqldump-u root-p--databases employeedb salesdb mydatabases.sql

复制当前的配置文件,如果你没有安装MYSQL也可跳过:

代码如下:

cp my.cnf my.cnf.bkp

3.删除之前的SQL服务器

停止MYSQL/MariaDB,如果它们还在运行:

代码如下:

systemctl stop mysql.service

卸载MariaDB和MYSQL:

代码如下:

yum remove MariaDB-server MariaDB-client MariaDB-shared mysql mysql-server

移动重命名放在/var/lib/mysql当中的MariaDB文件。这比仅仅只是移除更为安全快速,这就像2级即时备份。:)

代码如下:

mv/var/lib/mysql/var/lib/mysql_mariadb

4.使用二进制包安装Percona

你可以在众多Percona安装方法中选择,在CentOS中使用Yum或者RPM包安装通常是更好的主意,所以这些是本文介绍的方式,下载源文件编译后安装在本文中并没有介绍。

从Yum仓库中安装:

首先,你需要设置Percona的Yum库:

代码如下:

yum install

接下来安装Percona:

代码如下:

yum install Percona-Server-client-56 Percona-Server-server-56

上面的命令安装Percona的服务器和客户端、共享库,可能需要Perl和Perl模块,以及其他依赖的需要,如DBI::MySQL。如果这些尚未安装,可能需要安装更多的依赖包。

使用RPM包安装:

我们可以使用wget命令下载所有的rpm包:

代码如下:

wget-r-l 1-nd-A rpm-R"*devel*,*debuginfo*"/

使用rpm工具,一次性安装所有的rpm包:

代码如下:

rpm-ivh Percona-Server-server-55-5.5.42-rel37.1.el7.x86_64.rpm/

Percona-Server-client-55-5.5.42-rel37.1.el7.x86_64.rpm/

Percona-Server-shared-55-5.5.42-rel37.1.el7.x86_64.rpm

注意在上面命令语句中最后的反斜杠'/'(只是为了换行方便)。如果您安装单独的软件包,记住要解决依赖关系,在安装客户端之前要先安装共享包,在安装服务器之前请先安装客户端。

5.配置Percona服务器

恢复之前的配置

当我们从MariaDB迁移过来时,你可以将之前的my.cnf的备份文件恢复回来。

代码如下:

cp/etc/my.cnf.bkp/etc/my.cnf

创建一个新的my.cnf文件

如果你需要一个适合你需求的新的配置文件或者你并没有备份配置文件,你可以使用以下方法,通过简单的几步生成新的配置文件。

下面是Percona-server软件包自带的my.cnf文件

代码如下:

# Percona Server template configuration

[mysqld]

#

# Remove leading# and set to the amount of RAM for the most important data

# cache in MySQL. Start at 70% of total RAM for dedicated server, else 10%.

# innodb_buffer_pool_size= 128M

#

# Remove leading# to turn on a very important data integrity option: logging

# changes to the binary log between backups.

# log_bin

#

# Remove leading# to set options mainly useful for reporting servers.

# The server defaults are faster for transactions and fast SELECTs.

# Adjust sizes as needed, experiment to find the optimal values.

# join_buffer_size= 128M

# sort_buffer_size= 2M

# read_rnd_buffer_size= 2M

datadir=/var/lib/mysql

socket=/var/lib/mysql/mysql.sock

# Disabling symbolic-links is recommended to prevent assorted security risks

symbolic-links=0

[mysqld_safe]

log-error=/var/log/mysqld.log

pid-file=/var/run/mysqld/mysqld.pid

根据你的需要配置好my.cnf后,就可以启动该服务了:

代码如下:

systemctl restart mysql.service

如果一切顺利的话,它已经准备好执行SQL命令了,你可以用以下命令检查它是否已经正常启动:

代码如下:

mysql-u root-p-e'SHOW VARIABLES LIKE"version_comment"'

如果你不能够正常启动它,你可以在/var/log/mysql/mysqld.log中查找原因,该文件可在my.cnf的[mysql_safe]的log-error中设置。

代码如下:

tail/var/log/mysql/mysqld.log

你也可以在/var/lib/mysql/文件夹下查找格式为[主机名].err的文件,就像下面这个例子:

代码如下:

tail/var/lib/mysql/centos7.err

如果还是没找出原因,你可以试试strace:

代码如下:

yum install strace systemctl stop mysql.service strace-f-f mysqld_safe

上面的命令挺长的,输出的结果也相对简单,但绝大多数时候你都能找到无法启动的原因。

6.保护你的数据

好了,你的关系数据库管理系统已经准备好接收SQL查询,但是把你宝贵的数据放在没有最起码安全保护的服务器上并不可取,为了更为安全最好使用mysqlsecureinstall来安装,这个工具可以帮助你删除未使用的默认功能,并设置root的密码,限制使用此用户进行访问。只需要在shell中执行该命令,并参照屏幕上的说明操作。

代码如下:

mysql_secure_install

7.还原备份

如果您参照之前的设置,现在你可以恢复数据库,只需再用mysqldump一次。

代码如下:

mysqldump-u root-p mydatabases.sql

恭喜你,你刚刚已经在你的CentOS上成功安装了Percona,你的服务器已经可以正式投入使用;你可以像使用MySQL一样使用它,你的服务器与它完全兼容。

总结

为了获得更强的性能你需要对配置文件做大量的修改,但这里也有一些简单的选项来提高机器的性能。当使用InnoDB引擎时,将innodbfileper_table设置为on,它将在一个文件中为每个表创建索引表,这意味着每个表都有它自己的索引文件,它使系统更强大和更容易维修。

可以修改innodbbufferpool_size选项,InnoDB应该有足够的缓存池来应对你的数据集,大小应该为当前可用内存的70%到80%。

将innodb-flush-method设置为O_DIRECT,关闭写入高速缓存,如果你使用了RAID,这可以提升性能,因为在底层已经完成了缓存操作。

如果你的数据并不是十分关键并且并不需要对数据库事务正确执行的四个基本要素完全兼容,可以将innodbflushlogattrx_commit设置为2,这也能提升系统的性能。

一次/etc/hosts权限错误导致的es集群错误

先说一下环境:系统使用的CentOS7.5,elasticsearch版本是5.4.0。一套产品集群包括三个elasticsearch节点构成的集群。

部署了两套测试集群,配置基本类似,elasticsearch配置文件中使用主机名。在某一次测试后,一套集群里的elasticsearch就开始报错,无法提供服务。查看日志发现,elasticsearch一直抛出UnknownHostException异常,所以无法和另外两个节点通信连成集群。根据堆栈信息,这个异常是在解析其它elasticsearch节点域名的时候调用InetAddress.getAllByName()抛出的。

而另外一套集群里类似的配置,它的elasticsearch服务却是很正常的。唯一的不同是,出问题的集群临时配置了DNS服务。

按正常的情况来说,elasticsearch解析域名的方式应该是先从/etc/hosts中获取,获取不到了再查询DNS。elasticsearch服务节点的主机名、IP都有在配置在/etc/hosts中。所以,即使一套集群配置了DNS,另外一套没有,也不应该出现elasticsearch无法解析域名的问题。

为了找到域名解析错误的原因,我决定跟踪一下elasticsearch解析域名的过程,使用的工具是strace。strace命令可以追踪进程的系统调用。

安装过程很简单。

接着是修改elasticsearch的执行脚本,一般路径是/usr/share/elasticsearch/bin/elasticsearch。在这个脚本的最后几行,在exec后添加strace命令 strace-o/tmp/es.strace.log-f,如下所示。

-o参数将strace的输出保存到文件/tmp/es.strace.log,-f参数表明追踪进程的所有子进程的系统调用。

两个集群的elasticsearch节点都修改了这个脚本,重启服务后对比查看。对比这个输出文件,终于发现一些端倪。首先,elasticsearch调用的getAllByName()确实首先查看了/etc/hosts文件,但是权限不足无法访问这个文件。

这是有问题的,首先是这个文件应该是可读的,不应该出现权限不足的问题,第二是两个集群都无法访问这个文件,但是为什么一个能解析域名而另外一个不能。

接着往下对比,出问题的elasticsearch进程这时候检查到/etc/resovl.conf文件已经配置,于是向DNS服务器发出了查询。DNS无法解析,于是抛出了UnknownHostException异常。另外一边,没有问题的elasticsearch进程检查到/etc/resovl.conf未配置,这时候做了一个特别的操作,它创建了一个地址族是AF_NETLINK的原始套接字,通过这个套接字查询得到了域名对应的IP地址。我猜测,这可能是访问系统的ARP信息。

既然是DNS的问题,那么把出问题的/etc/resolv.conf中的DNS配置删除呢?重启服务之后,elasticsearch服务依然抛出异常,查看日志发现进程虽然跳过了/etc/resolv.conf,但是它却开始访问了本地的DNS端口53(UDP),可能这是java最后的解析尝试了。恰好,这个节点上部署了rpcbind服务,这个服务恰好就监听了53端口,结果就是依然无法通过DNS解析,java华丽丽的抛出了异常。

问题的根本原因还是/etc/hosts文件不可读,查看这个文件的权限,结果是600,意思就是只能root用户读写了,其它用户没有任何权限,包括读。elasticsearch服务使用的elasticsearch用户,所以当然就会被禁止读取。

经过其它的查找,发现是有一个服务进程会一直更新这个hosts文件,更新的方式是先创建一个临时文件,然后rename成hosts文件,由于临时文件的默认权限是600,所以导致hosts文件的权限最后也是600了。

至此,整个的问题的原因已经清楚。hosts权限的错误,导致elasticsearch通过DNS解析域名,又刚好DNS解析报错,没有通过ARP解析域名。

另外从这个事情中也可以看到java解析域名的套路,先/etc/hosts文件,接着是DNS,先远程的DNS后本地的DNS,最后尝试从本地ARP缓存解析,中间有一个过程抛出异常的时候,解析就会失败。

centos提交完命令终端卡住

1.在CentOS上执行以下命令查看硬盘使用状态:

df-h

发现命令卡住不动,Ctrl+c也无法终结该命令。

2.安装strace:

yum install strace

strace是一个非常简单的工具,它可以跟踪系统调用的执行。最简单的方式,它可以从头到尾跟踪binary的执行,然后以一行文本输出系统调用的名字,参数和返回值。

3.通过strace跟踪df命令执行情况:

strace df-h

………………

stat("/sys/fs/cgroup/hugetlb",{st_mode=S_IFDIR|0755, st_size=0,...})= 0

stat("/sys/kernel/config",{st_mode=S_IFDIR|0755, st_size=0,...})= 0

stat("/",{st_mode=S_IFDIR|0555, st_size=4096,...})= 0

stat("/proc/sys/fs/binfmt_misc", ^C

该命令在stat("/proc/sys/fs/binfmt_misc"处卡住,我们到该目录看一下情况。

执行:

cd/proc/sys/fs

ls

ls命令同样卡住,问题就出在该目录了。

4.解决办法

网上查了一下,是挂载方面的问题,执行以下命令可以解决:

systemctl restart proc-sys-fs-binfmt_misc.automount

阅读剩余
THE END