日历

2019年八月
« 5月    
 1234
567891011
12131415161718
19202122232425
262728293031  

最近评论

    linux企业应用

    Linux 假死现象

    什么是假死现象
    所谓假死现象,是指 Linux 内核 Alive,但是其上的某个或所有操作的响应变得很慢的现象。

    具体比较常见的现象有如下几种:
    1、能 Ping 通访问的服务器。
    2、系统负载非常的高。
    3、SSH 不能登陆或者登陆比较慢。
    4、服务器上提供的服务都不能正常响应,比如:不能访问系统上部署的 Web 服务器所提供的页面。
    5、在系统上做任何其它操作都没有反应或者反应较慢。

    假死现象并不是经常出现
    Linux 作为一个多任务操作系统,要把系统忙死,忙到 SSH 都连不上去也不是那么容易的。尤其是现在的系统还有 FD 保护、进程数保护、最大内存保护之类的机制。
    你可以尝试 Fork 很多进程,系统会变得很慢,但是 SSH 通常还是能连上去的;你可以尝试分配很多内存,但是内存多到一定程度 Linux 的 OOM 机制的 Killer 进程就会杀掉你的进程,来保证其它服务能正常工作。

    假死现象是如何出现的
    有一个确定可以把系统搞成假死的办法是:主进程分配固定内存,然后不停的 Fork,并且在子进程里面 Sleep(100)。
    也就是说,当主进程不停 Fork 的时候,很快会把系统的物理内存用完。当物理内存不足时候,系统会开始使用 Swap。那么当 Swap 不足时会触发 OOM 机制的 Killer 进程来杀掉多余进程。
    当 OOM 机制的 Killer 进程杀掉了子进程,主进程会立刻 Fork 新的子进程,并再次导致内存用完并再次触发 OOM 机制的 Killer 进程杀掉子进程,于是就进入死循环。而且 OOM Killer 进程是系统底层优先级很高的内核线程,此时也参与到这个死循环中,长此以往系统资源就会被消耗殆尽。
    系统出现假死现象后,为何还能 Ping 通但又无法建立新的网络连接
    系统出现假死现象后,服务器还可以 Ping 通,但是无法建立新的网络连接。比如:SSH 无法连上去。这是由于 Ping 是在 Linux 系统底层 ( Kernel )处理的,并没有参与进程调度。而 SSHD 是要参与进程调度,但是优先级没 OOM 机制的 Killer 进程高。这样就会一直得不到系统调度,从而始终无法正确的提供服务来与 SSH 客户端建立新的连接。

    Linux 出现假死现象,我们应该怎么办?
    为什么要费那么大的力气把服务器搞死呢?我们知道假死是怎么产生的即可,这样可以针对假死的原因进行预防。 其实假死的情况很少发生,通常只有代码出现 Bug 很多的情况或者某个服务进程未正确配置的情况下才会出现。
    建议使用 nice 命令将 SSHD 的进程优先级调高,这样当系统内存紧张时,还能勉强登陆服务器进行调试,然后分析故障。

    linux企业应用

    禁止了 WordPress 5.0 的 Gutenberg 块编辑器,改为经典编辑器

    WordPress 5.0 的 Gutenberg 块编辑器太折腾人了,一点都不好用,不习惯,不喜欢。

    可以修改wp-includes下的function.php文件,在php函数内也就是<?php  下找个合适的位置加入以下代码:

    //禁止 WordPress5.0 使用 Gutenberg 块编辑器
    add_filter(‘use_block_editor_for_post’, ‘__return_false’);
    remove_action( ‘wp_enqueue_scripts’, ‘wp_common_block_scripts_and_styles’ );

    就可以了。

    linux企业应用

    Python写一个安卓APP一(搭建环境)

    安装kivy的大体步骤:
    1、python -m pip install –upgrade pip wheel setuptools
    2、Ensure you have the latest pip and wheel:
    python -m pip install –upgrade pip wheel setuptools
    python -m pip install docutils pygments pypiwin32 kivy.deps.sdl2 kivy.deps.glew 这个文件太大,我用下面的方法进行安装的,这个命令也执行了,可以找到下载地址,然后根据这个地址,下载安装文件。下载kivy.deps.gstreamer,地址:https://files.pythonhosted.org/packages/aa/92/d8dc5a29864d44d4c28169b222f7371a77ee087bf918e0a6d1a3084d9deb/kivy.deps.gstreamer-0.1.13-cp37-cp37m-win_amd64.whl
    安装kivy.deps.gstreamer,在cmd命令行下:
    pip install kivy.deps.gstreamer-0.1.13-cp37-cp37m-win_amd64.whl
    3、For Python 3.5 only we additionally offer angle which can be used instead of glewand can be installed with:
    python -m pip install kivy.deps.angle
    4、Install kivy:安装kivy
    python -m pip install kivy
    (Optionally) Install the kivy examples:安装kivy examples
    python -m pip install kivy_examples

    在Geany下新建一个py文件,输入下面的内容:运行成功就可以了。

    #导入App,然后让TestApp这个类继承
    from kivy.app import App
    #导入一个Button,运维有这个button,当你点击的时候才会有所反应
    from kivy.uix.button importButton

    #定义类,名字必须是xxxApp
    class TestApp(App):
    #build一个Button
    def build(self):
    #返回一个Button,文字内容是“Hello,kivy”
    return Button(text=’Hello,kivy’)

    #运行,因为继承了App,所以才有的run这个方法
    TestApp().run()

    linux企业应用

    python写的一个大乐透蓝区杀号算法,能准就好了

    随便写了一个大乐透蓝区杀号的代码,不准。就当写代码的练习了。

    import urllib.request
    import csv
    import numpy as np
    import pandas as pd

    #将最新一期大乐透的数据下载下来,根据上一起大乐透蓝区的号,计算下一期蓝区可选的号。 #大乐透历史数据是txt格式的,先保存到txt文本中,然后再保存到csv文件中,如果能直接将下载的数据保存到csv文件就更好了。

    print(“downloading with requests”)

    #大乐透历史数据连接如下:

    url = ‘http://e.17500.cn/getData/dlt3.TXT’
    txtfile = urllib.request.urlopen(url)
    data = txtfile.read()
    filepath = ‘d:\dlt3.txt’
    with open(filepath,’wb’) as f:
    f.write(data)

    #将大乐透历史数据写入到csv中

    csvfile = ‘d:\dlt3.csv’
    data_txt = np.loadtxt(filepath,dtype=str,usecols=None)

    #DataFrame会给数据加上行号,

    data_txtDF = pd.DataFrame(data_txt,index=None, columns=None)
    data_txtDF.to_csv(csvfile,sep=’,’,columns=None,header=False)

    def lan_jisuan(row,mo,hongQuZuiDuo):
    #先将CSV文件中的字符数值转换为整型数值
    rowValue = []
    for i in row:
    rowValue.append(int(i))
    #蓝区的号码
    lan_qu = [1,2,3,4,5,6,7,8,9,10,11,12]
    #蓝区杀号:根据上期蓝区2个号计算
    #1、两个号的和+3,如果大于12,则取模10
    #2、两个号的差
    #3、两个号相乘,如果大于12,则取模10
    #4、根据红区5个号,最小值+1,如果大于12,则取模
    he = int(rowValue[5]) + rowValue[6] + 3
    if he > 12:
    he = he % mo
    if he == 0:
    he = mo
    if he in lan_qu:
    lan_qu.remove(he)

    if rowValue[5] > rowValue[6]:
        cha = rowValue[5] - rowValue[6]
    else:
        cha = rowValue[6] - rowValue[5]
    if cha in lan_qu:
        lan_qu.remove(cha)
    
    chengji = rowValue[6] * rowValue[5]
    if chengji > 12:
        chengji = chengji % mo
    if chengji == 0:
        chengji = mo
    if chengji in lan_qu:
        lan_qu.remove(chengji)
    
    zuixiaoshu = min(rowValue[0:5]) + 1
    if zuixiaoshu > 12:
        zuixiaoshu = zuixiaoshu % mo
    if zuixiaoshu == 0:
        zuixiaoshu = mo
    if zuixiaoshu in lan_qu:
        lan_qu.remove(zuixiaoshu)
    
    if hongQuZuiDuo in lan_qu:
        lan_qu.remove(hongQuZuiDuo)
    
    print(lan_qu)
    print('\n')

    with open(csvfile) as csvfile:
    mLines = csvfile.readlines()
    targetLine = mLines[-1]
    shangYiQi=targetLine.split(‘,’)

    hongqu = []
    for row in range(-10,0):
        targetLine = mLines[row]
        a=targetLine.split(',')[3:8]
        for value in a:
            hongqu.append(int(value))
    #print("五分区,最近十期出的多的去掉,出的最多的数是: ")
    hongQuZuiDuo = max(hongqu,key=hongqu.count)
    
    #设置模的值为10,这个mo的取值,根据个人经验来。
    mo = 10
    print("当模 = 10,蓝区可选号码为:")
    lan_jisuan(shangYiQi[3:10],mo,hongQuZuiDuo)
    linux企业应用

    VMware 6.0虚拟机迁移磁盘文件变成flat.vmdk的问题记录,待解决

    因业务需求,需要对存储A上的虚拟机迁移到存储B上,按照经验,白天业务繁忙期,迁移速度大约为2TB/小时,但是这台1TB的虚拟机竟然迁移了3个多小时,最后弹出错误提示:对象已删除或未完全创建。这个错误以前真没有见过。
    经查看存储A上依然有该虚拟机的目录,该目录下只有该虚拟机对应的vmdk文件:VM_name.vmdk,存储B上该虚拟机对应的目录下有vmdk文件,但是名字变成了:VM_name-flat.vmdk,且图标和虚拟机名.vmdk的图标也不一样。各后缀文件名参照下面。
    而且该虚拟机关机后VM_name-flat.vmdk就变成了VM_name.vmdk,再开机就变成了VM_name-flat.vmdk。此问题先观察,待解决。
    另外,还迁移了一台虚拟机,3T的置备延迟置零磁盘,迁移用时40分钟左右,从存储C迁移到存储D,最后弹出错误提示:对象已删除或未完全创建。经核实,存储C上没有该虚拟机对应的目录,存储D上对应的该虚拟机目录下,vmdk文件正常。记录一下。

    配置文件———-VM_name.vmx
    交换文件———-VM_name.vswp vmx_VM_name.vswp
    BIOS文件———-VM_name.nvram
    日志文件———-VM_name.log
    模板文件———-VM_name.vmtx
    裸设备映射文件—-VM_name-rdm.vmdk
    磁盘描述符文件—-VM_name.vmdk
    磁盘数据文件——VM_name-flat.vmdk
    挂起状态文件——VM_name.vmss
    快照数据文件——VM_name.vmsd
    快照状态文件——VM_name-Snapshot.vmsn
    快照磁盘文件——VM_name-###.delta.vmdk
    快照活动内存文件–VM_name-Snapshot#.vmdk


    linux企业应用

    Python报错:module 'pygal' has no attribute 'Worldmap'

    在《Python编程:从入门到实践》书中的一个项目用到pygal.Worldmap,但是报错:module ‘pygal’ has no attribute ‘Worldmap’,提示pygal已经没有Worldmap模块,解决方法如下:

    在windows命令行中运行下面语句(注意pip3/pip)
    pip install pygal_maps_world

    在代码文件中将:
    import pygal
    wm=pygal.Worldmap()
    修改为:
    import pygal
    wm = pygal.maps.world.World()
    就可以了

    linux企业应用

    Python报错:ImportError: No module named 'pygal.i18n'

    在《Python编程:从入门到实践》书中的一个项目用到pygal.i18n获取国别码,但是一直报错:ImportError: No module named ‘pygal.i18n’,提示pygal已经没有i18n模块,网上查了一下要改用pygal_maps_world.i18n,解决方法如下:

    在windows命令行中运行下面语句(注意pip3/pip)
    pip install pygal_maps_world

    在代码文件中将:
    from pygal.i18n import COUNTRIES
    修改为就可以了:
    from pygal_maps_world.i18n import COUNTRIES

    linux企业应用

    OraclRAC迁移中遇到的问题

    简单描述
    2台oracle做RAC需要共享9T的空间,因为oracle识别的硬盘不能大于2T,故,每个硬盘设置为1.9T。
    平台上每个lun大小为8T,所以共享的9T空间在2个lun上。
    oracleRAC1:系统盘500G在LUN 1上,5个1.9T的厚置备磁盘,在LUN 1上3块,在LUN 2上2块
    OracleRAC2:系统盘500G在LUN 2上,共享lun 1上的3块盘,和LUN 2上的2块盘,共享盘添加顺序和OracleRAC1上的顺序一致。
    问题:
    因存储电源故障,需要更新电源模块并升级微码,需要将上述OracleRAC迁移到另一套没有故障的存储上。
    操作步骤:
    1、关机,编辑OracleRAC2虚拟机,将共享磁盘从虚拟机中移除(千万不要选择从虚拟机中移除并从磁盘删除文件)。移除完成后,将虚拟机迁移到LUN 4上。
    2、迁移OracleRAC1虚拟机,迁移中,将LUN1上的3块磁盘选择LUN3,将LUN2上的2块磁盘选择LUN4,由于迁移磁盘较大,总共10T,用时5个小时左右。
    3、编辑OracleRAC2虚拟机,按照OracleRAC1中的共享磁盘顺序,依次添加上。
    4、因该过程用时较多,迁移完成已是晚上11点左右,所以将2台服务器启动,确认业务正常后下班。
    存在问题:
    第二天查看2台OracleRAC虚拟机的状态,发现OracleRAC1占用了3个LUN,LUN 1,LUN 3,LUN 4,状态不正常,OracleRAC2占用LUN 3和LUN 4的磁盘空间,属于正常现象。经核查,发现OracleRAC1的vmx文件和log文件没有迁移到LUN3上。
    解决方法:
    1、OracleRAC1关机,在client中,右键该虚拟机,选择“从清单中移除”
    2、浏览LUN1存储,找到OracleRAC1的文件夹,将关于虚拟机的vmx和几个log文件下载到本地磁盘上
    3、将下载到本地的vmx文件和log文件上传到LUN3存储上OracleRAC1的目录下,右键vmx,将该虚拟机添加到清单中
    4、启动OracleRAC1,业务正常,占用磁盘在LUN3和LUN4,一切恢复正常了。

    linux企业应用

    自动草稿

    linux企业应用

    ubuntu16.04修改网卡名称,配置静态IP

    ubuntu16.04也像Centos7一样不使用eth来命名了,如果还想像传统一样使用eth,需要修改配置文件了。
    步骤如下:

    1. 修改grub文件:
      $ sudo vim /etc/default/grub

      GRUB_CMDLINE_LINUX=””
      改为:
      GRUB_CMDLINE_LINUX=”net.ifnames=0 biosdevname=0″
    2. 更新配置,重新生成启动文件:
      $ sudo grub-mkconfig -o /boot/grub/grub.cfg
    3. 修改静态ip
      $ sudo vim /etc/network/interfaces
      在末尾添加:
      auto eth0
      iface eth0 inet static
      address IP
      netmask NETMASK
      gateway GATEWAY
    4. 重启服务:
      $ /etc/init.d/networking restart 或者用下面的命令
      $ sudo systemctl restart networking.service
    linux企业应用

    TypeError: argument 1 must be 2-item sequence, not int

    书上代码有需要改进的地方
    screen=pygame.display.set_mode(1200,800)运行的时候回报错TypeError: argument 1 must be 2-item sequence, not int,改成下面的就好了:
    screen_width=800
    screen_height=600
    screen=pygame.display.set_mode((screen_width,screen_height),0,32)

    完整代码如下:
    import sys
    import pygame

    def run_game():
    pygame.init()
    screen_width=800
    screen_height=600
    screen=pygame.display.set_mode((screen_width,screen_height),0,32)
    pygame.display.set_caption(“Alien Invasion”)

    while True:
        for event in pygame.event.get():
            if event.type ==pygame.QUIT:
                sys.exit()
        pygame.display.flip()

    run_game()

    linux企业应用

    python3.7.2 + pygame1.9.4实现游戏《外星人入侵》

    下载的pygame库名中cp27代表python2.7,其它同理。
    我现在的python版本是3.7.2,所以按照道理,应该去下面的网址https://www.lfd.uci.edu/~gohlke/pythonlibs/
    Pygame, a library for writing games based on the SDL library.

    pygame-1.9.4-cp27-cp27m-win32.whl
    pygame-1.9.4-cp27-cp27m-win_amd64.whl
    pygame-1.9.4-cp35-cp35m-win32.whl
    pygame-1.9.4-cp35-cp35m-win_amd64.whl
    pygame-1.9.4-cp36-cp36m-win32.whl
    pygame-1.9.4-cp36-cp36m-win_amd64.whl
    pygame-1.9.4-cp37-cp37m-win32.whl
    pygame-1.9.4-cp37-cp37m-win_amd64.whl

    我的电脑是64位的,所以下载了最后一个个,同理,如果你们的电脑是32位的请下载对应的版本。
    https://bitbucket.org/pygame/pygame/downloads/ 这个网址里,我暂时没有下载到3.7.2对应的版本。
    下载后终于安装成功了:
    D:\TensorFlow\python_work>pip install pygame-1.9.4-cp37-cp37m-win_amd64.whl
    Processing d:\tensorflow\python_work\pygame-1.9.4-cp37-cp37m-win_amd64.whl
    Installing collected packages: pygame
    Successfully installed pygame-1.9.4
    You are using pip version 19.0.2, however version 19.0.3 is available.
    You should consider upgrading via the ‘python -m pip install –upgrade pip’ command.

    linux企业应用

    文件权限导致ssh无法启动、启动后无法连接

    今天一个客户的linux连接不上了,启动的时候有一个错误一闪而过,没能看清,重启完成后,telnet IP 22端口没通。进入操作系统,telnet -tlunp | grep sshd,也没有sshd的影子,service sshd start,提示错误如下:
    Starting sshd: /var/empty/sshd must be owned by root and not group or world-writable.      [FAILED]
    根据上面的提示,这个是权限的问题
    可采取以下几步解决
    chown   -R   root.root    /var/empty/sshd
    chmod 744 /var/empty/sshd
    service sshd restart
    提示sshd重启成功,但是提示了很多信息,没有拍照,只记住了一点:ssh_host_rsa_key too open,而且使用putty无法登录系统。进入/etc/ssh目录,发现该目录下所有文件都可执行,感觉不对,找同样的一台linux,对照着,将所有文件权限修改,再用putty连接系统,连接成功。

    linux企业应用

    linux世界里/,叫根分区,根目录

    linux世界里/,叫根分区,根目录,不会叫,叫根文件夹也行,怎么会叫根磁盘呢,我是不是得维护根分区,根目录。

    根磁盘,我真心接受不了。第一次听说的时候我纳闷了很久想不出这个根磁盘表达的是什么意思,现在虽然理解了,但是听到了心里还是很不舒坦。很不愿接受根磁盘这个叫法,哈哈哈哈哈哈哈哈哈哈哈哈哈哈!

    linux企业应用

    FreeBSD11.2开启SSH远程登录

    一、安装时选择上SSH,或者源码安装SSH
    二、使用root登陆系统
    三、使用vi编辑器编辑/etc/inetd.conf,去掉ssh前的#,有2处
    四、编辑/etc/rc.conf,添加一行sshd_enable=”YES”
    五、编辑/etc/ssh/sshd_config,将
    #PermitRootLogin no                 改为  PermitRootLogin yes                 //允许root登陆
    #PasswordAuthentication no    改为  PasswordAuthentication yes    //使用系统PAM认证
    #PermitEmptyPasswords no     改为  PermitEmptyPasswords no     //不允许空密码
    保存退出
    六、重启SSHD服务,/etc/rc.d/sshd start
    七、使用putty或者,Xshell等,使用root账号和密码就可以登录了。

    linux企业应用

    Freebsd修改密码提示错误passwd:pam_chauthtok(): error in service module

    freebsd输入用户名和密码,提示密码错误,无法进入系统,但是密码没有修改过,可以确定是某个地方出问题了。
    重启进入单用户模式,使用passwd root修改密码,提示passwd:pam_chauthtok(): error in service module.
    执行命令touch /root/1.txt,提示系统只读,
    单用户模式下如何让根分区可读写很简单,执行
    mount -uw / 就可以了,但是又提示文件系统报错,需要执行fsck命令进行磁盘文件检查,fsck命令执行完成后,再修改用户的密码,就没有报错了(也许直接重启,然后使用root和密码登录看一下更好)。
    重启后可以进入了。

    问题的原因还是文件系统出现了问题,也许在单用户模式下执行fsck -y进行文件系统检查就好了,不用修改密码。

    linux企业应用

    Ubuntu 18.04版本设置root账户本地和远程登录


    Ubuntu18.04默认是不允许root账户本地和远程登录的,因此想要使用root本地和远程登录,可以使用以下步骤:
    1.首先获得临时的root权限,因为后面的一些操作需要root权限才可以,打开终端输入以下命令
    sudo -s
    之后直接输入当前账户的密码,就可以获得临时的root权限
    2.先创建root账户的密码:passwd root根据提示输入密码(这里的密码是以后登录root账户时的密码)
    3.修改配置文件,文件路径/usr/share/lightdm/lightdm.conf.d/50-unity-greeter.conf,这个文件默认没有,需要自己创建,并添加两行信息,命令如下:
    cd /usr/share/lightdm/lightdm.conf.d/
    vi 50-unity-greeter.conf
    greeter-show-manual-login = true
    all-guest = false
    保存退出
    4.去除gdm登陆用户名检测:
    修改/etc/pam.d/gdm-autologin  文件
    vi /etc/pam.d/gdm-autologin
    删除 或注释掉以下语句
    auth required pam_succeed_if.so user != root quiet_success
    修改 /etc/pam.d/gdm-password 文件
    vi /etc/pam.d/gdm-password
    同样删除 或注释掉上面的语句
    5.修改/root/.profile文件
    vi /root/.profile文档最后一行
    mesg n || true 前添加  tty -s && 即修改为:
    tty -s && mesg n || true
    6.重启系统,终端界面输入
    #reboot
    重启完成后,登陆界面选择 “未列出”,之后用户名输入 root 进行登录即可。但是还不能远程登录,需要再执行步骤7.

    7、允许root远程登录
    vi /etc/ssh/sshd_config
    #PermitRootLogin prohibit-password 默认只有这一行,在这一行下面添加下面这一行信息
    PermitRootLogin yes
    重启ssh服务,service ssh restart 即可进行远程登录了。

    linux企业应用

    Netstat 中 Recv-Q和Send-Q状态

    运行netstat -anp发现recv-q 和 send-q 状态不是很正常,对这2个参数不了解,特意学习了一下,简单总结如下:

    recv-Q 表示网络接收队列
    表示收到的数据已经在本地接收缓冲,但是还有多少没有被进程取走,recv()
    如果接收队列Recv-Q一直处于阻塞状态,可能是遭受了拒绝服务 denial-of-service 攻击。

    send-Q 表示网路发送队列
    对方没有收到的数据或者说没有Ack的,还是本地缓冲区.
    如果发送队列Send-Q不能很快的清零,可能是有应用向外发送数据包过快,或者是对方接收数据包不够快。

    这两个值通常应该为0,如果不为0可能是有问题的。packets在两个队列里都不应该有堆积状态。可接受短暂的非0情况。

    从运行netstat -anp中可以看到是大量的 send-Q ,可以判定是发送数据给目的地址的时候出现了阻塞的问题,导致了包堆积在本地缓存中,不能成功发出去。那么问题就产生在了客户端,根据公司的业务逻辑发现是客户端发送的TCP长连接数量过多。验证办法,尝试减少客户端和服务的长连接.查看效果

    linux企业应用

    failed to load selinux policy,freezing错误修复

    今天一个客户说两台centos7.2系统的服务器修改配置文件,重启后连接不上了。在系统界面,按ESC键,在启动界面,看到!!!!failed to load selinux policy,freezing,还好,知道是修改SELINUX配置文件引起的。
    处理过程如下:
    1、开机时随便按下键盘,进入内核菜单,选择最上边的项;
    2、定位到 ro(linux 16 or linuxefi)
    3、把ro改成 “rw init=/sysroot/bin/sh”(或者“rw init= /bin/sh”,这是指定shell环境) 完成之后按 “Ctrl+x”, 就进入单用户模式了。
    4、系统出现#后,执行chroot /sysroot/
    5、vi /etc/selinux/config
    查看修改的位置,
    SELINUX=disabled
    SELINUXTYPE=targeted,
    修改错误,保存退出
    6、冷启动系统,系统正常进入。

    linux企业应用

    VMware虚拟机有大量磁盘IO错误的真相!

    症状:
    有一台mysql数据库服务器,启动一会,系统报大量的IO错误,进入数据库,尝试将表导出,导出的速度慢的受不了,在导出的过程中,报数据文件的磁盘IO错误。

    尝试:
    登录同在一个LUN上的虚拟机查看他们的状态,一切正常。将该LUN上的其他虚拟机全部迁走,只留下这台mysql服务器,mysql数据库依然有磁盘IO错误。
    在网上查系统IO错误的问题,数据库IO错误的问题,怀疑系统与数据库版本之间兼容性不行。后来查到这篇文章:
    https://blog.csdn.net/sinat_22679101/article/details/79293979
    赶紧将存储上告警的电池替换。再启动mysql数据库,没有错误了,将表导出的速度也恢复正常。

    控制器电池的作用是存储电源宕掉后,将缓存里的数据写入磁盘。但是电池故障怎么会造成磁盘IO错误呢,以前也遇到过N次电池故障啊,和上层的应用有毛毛关系啊。

    总结:
    如果有io错误,很可能和存储有关!
    控制器的电池会影响cache,但是和IO之间有神马关系。。。求解
    啥东西坏了都先看看线!都在线也未必都好用,真的不好说,是什么原因造成的问题啊。