解决方案: 在CentOS 7上添加缓存Swap
问题描述:当我想在CentOS上运行mysql时,突然遇到错误如Can't connect to local MySQL server through socket '/var/lib/mysql/mysql.sock' (111)
上文图片截图来源于:https://www.digitalocean.com/community/questions/mysql-server-keeps-stopping-unexpectedly
表面原因是mysql没有启动,于是运行命令:service mysql start
,提示我没有找到该组件
于是我们再抱着侥幸心理运行这个命令试一下:systemctl status mysqld.serrvice
结论:遇到这种问题,表面问题是服务器启动不了,本质是交换内存(Swap)不足
下面我们就在CentOS上来解决这个问题吧
swapon -s
另一种检查交换空间的方法是使用该free实用程序,它向我们显示系统的总体内存使用情况。我们可以通过键入以下内容来查看当前内存和交换使用情况(以兆字节为单位):
free -m
total used free shared buffers cached
Mem: 3953 315 3637 8 11 107
-/+ buffers/cache: 196 3756
Swap: 0 0 4095
如您所见,系统中的总交换空间为0.这与我们所看到的相符swapon。
在我们这样做之前,我们应该了解当前的驱动器使用情况。我们可以输入以下信息来获取此信息
df -h
Filesystem Size Used Avail Use% Mounted on
/dev/vda1 59G 1.5G 55G 3% /
devtmpfs 2.0G 0 2.0G 0% /dev
tmpfs 2.0G 0 2.0G 0% /dev/shm
tmpfs 2.0G 8.3M 2.0G 1% /run
tmpfs 2.0G 0 2.0G 0% /sys/fs/cgroup
注意:该-h标志只是告诉您dh以人性化的阅读格式输出驱动器信息。例如,不是在分区中输出原始数量的内存块,而是df -h告诉我们M(兆字节)或G(千兆字节)的空间使用情况和可用性。
创建交换文件的最快速最简单的方法是使用fallocate。此命令立即创建预分配大小的文件。我们可以输入以下内容创建一个4G的文件:
sudo fallocate -l 4G /swapfile
输入密码以授权sudo权限后,几乎可以立即创建交换文件,并且会将提示返回给您。我们可以使用以下方法验证是否为swap保留了正确的空间量ls:
ls -lh /swapfile
-rw-r--r-- 1 root root 4.0G Oct 30 11:00 /swapfile
如您所见,我们的交换文件是在留出正确数量的空间的情况下创建的。
在我们这样做之前,我们应该调整我们的交换文件的权限,以便除root帐户之外的任何人都无法读取它。允许其他用户读取或写入此文件将是一个巨大的安全风险。我们可以使用以下命令锁定权限chmod:
sudo chmod 600 /swapfile
这将仅限制root帐户的读取和写入权限。我们可以ls -lh再次使用来验证交换文件是否具有正确的权限:
ls -lh /swapfile
-rw------- 1 root root 4.0G Oct 30 11:00 /swapfile
既然我们的交换文件更安全,我们可以通过输入以下内容告诉我们的系统设置交换空间以供使用:
sudo mkswap /swapfile
Setting up swapspace version 1, size = 4194300 KiB
no label, UUID=b99230bb-21af-47bc-8c37-de41129c39bf
我们的交换文件现在可以用作交换空间。我们可以通过键入来开始使用它:
sudo swapon /swapfile
要验证程序是否成功,我们可以检查我们的系统是否现在报告交换空间:
swapon -s
Filename Type Size Used Priority
/swapfile file 4194300 0 -1
此输出确认我们有一个新的交换文件。我们可以free再次使用该实用程序来证实我们的发现:
free -m
total used free shared buffers cached
Mem: 3953 315 3637 8 11 107
-/+ buffers/cache: 196 3756
Swap: 4095 0 4095
使交换文件永久化
我们的交换文件目前已启用,但是当我们重新启动时,服务器将不会自动启用该文件以供使用。我们可以通过修改fstab文件来更改它,该文件是管理文件系统和分区的表。
sudo在文本编辑器中使用权限编辑文件:
sudo nano /etc/fstab
在文件的底部,您需要添加一行来告诉操作系统自动使用您创建的交换文件:
/swapfile swap swap sw 0 0
添加完行后,可以保存并关闭文件。服务器将在每次启动时检查此文件,以便从现在开始准备好使用交换文件。
调整您的交换设置(可选)
您可以配置一些选项,这些选项会在处理交换时对系统的性能产生影响。在大多数情况下,这些配置是可选的,您所做的更改将取决于您的应用程序需求和个人偏好。
Swappiness
该swappiness参数确定系统将数据从内存交换到交换空间的频率。这是介于0和100之间的值,表示将触发交换使用的内存使用百分比。
值接近于零时,除非绝对必要,否则系统不会将数据交换到驱动器。请记住,与交换文件的交互是“昂贵的”,因为它们比与内存的交互慢得多,并且读写速度的这种差异可能导致应用程序性能的显着降低。告诉系统不要依赖交换,通常会使您的系统更快。
接近100的值将尝试将更多数据放入交换中以努力保持更多内存空闲。根据应用程序的内存配置文件或服务器的使用情况,在某些情况下,这可能是更好的选择。
我们可以通过读取swappiness配置文件来查看当前的swappiness值:
cat /proc/sys/vm/swappiness
30
CentOS 7默认为30的swappiness设置,这对于大多数台式机和本地服务器来说是一个公平的中间立场。对于VPS系统,我们可能希望将其移近0。
我们可以使用该sysctl命令将swappiness设置为不同的值。例如,要将swappiness设置为10,我们可以键入:
sudo sysctl vm.swappiness=10
vm.swappiness = 10
此设置将持续到下次重新启动。要在重新启动之间保持设置,我们可以将输出的行添加到sysctl配置文件中:
sudo nano /etc/sysctl.conf
将您的swappiness设置添加到文件的底部:
vm.swappiness = 10
添加完行后,可以保存并关闭文件。服务器现在将自动将swappiness设置为您在每次启动时声明的值。
缓存压力
您可能想要修改的另一个相关值是vfs_cache_pressure。此设置会影响特殊文件系统元数据条目的存储。不断读取和刷新此信息通常非常昂贵,因此将其存储在缓存中的时间更长,这对于系统的性能非常有用。
您可以通过proc再次查询文件系统来查看此缓存压力的当前值:
cat /proc/sys/vm/vfs_cache_pressure
100
由于当前配置,我们的系统从缓存中删除inode信息的速度太快。我们可以通过使用sysctl以下方式将其设置为更保守的设置,如50;
sudo sysctl vm.vfs_cache_pressure=50
vm.vfs_cache_pressure = 50
同样,这仅适用于我们当前的会话。我们可以通过将其添加到配置文件来改变它,就像我们使用swappiness设置一样:
sudo nano /etc/sysctl.conf
在底部,添加指定新值的行:
vm.vfs_cache_pressure = 50
添加完行后,可以保存并关闭文件。服务器现在将自动将缓存压力设置为您在每次启动时声明的值。
原文网址:https://www.digitalocean.com/community/tutorials/how-to-add-swap-on-centos-7#check-available-storage-space
然后再次登陆mysql发现,又回到最初的起点:
那么这个问题就是表面问题了,只需要启动mysql服务就好了
代码如下
systemctl start mysqld.service #启动mysql服务
systemctl status myqld.service #查看服务状态