关闭 x
IT技术网
    技 采 号
    ITJS.cn - 技术改变世界
    • 实用工具
    • 菜鸟教程
    IT采购网 中国存储网 科技号 CIO智库

    IT技术网

    IT采购网
    • 首页
    • 行业资讯
    • 系统运维
      • 操作系统
        • Windows
        • Linux
        • Mac OS
      • 数据库
        • MySQL
        • Oracle
        • SQL Server
      • 网站建设
    • 人工智能
    • 半导体芯片
    • 笔记本电脑
    • 智能手机
    • 智能汽车
    • 编程语言
    IT技术网 - ITJS.CN
    首页 » HTML5 »一次网站迁移故障及分析

    一次网站迁移故障及分析

    2014-11-13 00:00:00 出处:Kriry
    分享

    公司运营项目迁移,这个项目最重要的就是充值和让玩家能玩游戏,还有后台统计,就是类似支付宝这样的第三方平台的支付工具,由于涉及的到钱,所以上个月就做好迁移的准备,将代码和数据库都已转移完毕,并提交运营那边测试,最后跟运营讨论说凌晨0点充值的人最少,开始切域名,考虑到切换DNS后无法立即生效,所以做了301跳转,整个迁移流程是:

    1.暂停原服务器数据库,导出相关数据库

    2.将导出的数据库同步到杭州xx服务器上面并导入到数据库中

    3.切换域名指向到xx服务器

    4.原服务器上面做301跳转到xx服务器(保证不写入新数据到原运营服务器上面)

    5.运营协助测试新服务器数据是否正常

    按照上面的流程操作,结果出现了很多意想不到的问题,因为这次迁移的LNMP环境不同,特别的是数据库,以前用的是Ver 14.14 Distrib 5.1.60,新服务器用的是Ver 14.14 Distrib 5.6.16,还有一个mysql的主辅同步,做了过滤,只同步了某些表,当时凌晨迁移,将最新的数据再次导入新服务器mysql,由于版本的问题,发现有个mysql存储过程无法导入,还有默认值问题,如下图:默认值要改为”NULL”,不能是”无”,原mysql中还有些定时任务无法导出,只能重新创建了。

    wKioL1RgIQCypKaRAADnLKibCSI525.jpg

    好了,解决了上面的问题,重新做了mysql主辅同步和过滤,当时测试也是正常的,结果第二天早上8点半用户流量过来了,网站都打不开了,首先查看了php日志,出现下面这个问题:

    wKiom1RgIX7QK9iWAAMJY17ZGUs576.jpg然后不断的修改下面的参数,感觉调到2048后已经是临界值了,因为这台机器只有8G内存,max_children = 2048后发现内存基本满了,在调高可能内存就爆了,当时调整php后发现可以短时间的正常访问,功能也正常,但是过了10分钟左右,又出现访问很慢的问题,继续看php日志,还是上图的提示,感觉这个不是php的问题,因为这个网站原服务器没有开启这么多php进程,但是运行正常,整个站的出口流量也不大。

    wKiom1RgId3QbEvxAAETcEKJZrc924.jpg

    综上分析,发现应该是php连接mysql出现了堵塞,导致php进程一直在排队,当新的请求过来后,由于其他的php进程都在排队,只能在开启新的php进程,php进程永远提示繁忙,不够用,要调整max_children值,于是就看mysql是不是有问题?

    进mysql,show processlist查看mysql的全部的线程,发现pay库里面有张uc_members表大量lock,

    wKioL1RgJg-gvdZlAAPbC55JhBc254.jpg

    大量的锁表,询问开发这张表是用户表,也就是用户每次登录都要查询这张表,这下终于找到原因了,就是php执行用户登录的时候,要读取mysql中这张uc_members表,每个用户登录都要锁表然后查询用户登录信息,导致这张表一直处于被锁死的状态,随着用户请求越来越多,php进程也增多,一直等待mysql返回用户登录信息,但是mysql一直处于锁表状态,结果就导致了这种现象,php进程卡死,用户无法登录,网站最后也打不开。

    查看这张表用的是MyISAM的引擎:

    wKiom1RgJ67Al7UvAACMsXKr1wc834.jpg

    MyISAM引擎是表级锁,更换为InnoDB引擎为行级锁,再次show processlist发现锁表大量减少,页面可以正常打开,用户也可以登录了,问题解决。

    InnoDB与Myisam的六大区别:

    wKiom1RgKzyhnkeWAAKESjE-BRk751.jpg

    参考:http://www.ha97.com/4197.html

    总结:

    已经建议开发部门,以后开发程序不要再mysql里面写定时任务,因为mysql里面写定时任务,执行成功与否很难看到,迁移mysql的时候也会很麻烦,可以写crontab让php去执行定时任务即可,还有存储过程,假如一定需要在mysql里面写存储过程,尽量要规范,防止以后迁移由于mysql版本问题导致很多奇怪的现象。

    出现这次故障主要是事先没有做压力测试,只是做了网站基本功能的测试,下次迁移网站之前一定要做好压力测试,用户登录测试及回滚方案,一个完整的迁移流程应该是:

    1.暂停原服务器数据库,导出相关数据库

    2.将导出的数据库同步到杭州xx服务器上面并导入到数据库中

    3.对xx服务器进行压力测试及用户登录测试

    4.回滚方案,出现问题及时回滚到原服务器,保证用户正常访问

    5.切换域名指向到xx服务器

    6.原服务器上面做301跳转到xx服务器(保证不写入新数据到原运营服务器上面)

    7.运营协助测试新服务器数据是否正常

    上一篇返回首页 下一篇

    声明: 此文观点不代表本站立场;转载务必保留本文链接;版权疑问请联系我们。

    别人在看

    帝国CMS7.5编辑器上传图片取消宽高的三种方法

    帝国cms如何自动生成缩略图的实现方法

    Windows 12即将到来,将彻底改变人机交互

    帝国CMS 7.5忘记登陆账号密码怎么办?可以phpmyadmin中重置管理员密码

    帝国CMS 7.5 后台编辑器换行,修改回车键br换行为p标签

    Windows 11 版本与 Windows 10比较,新功能一览

    Windows 11激活产品密钥收集及专业版激活方法

    如何从 Windows 11 中完全删除/卸载 OneNote?无解!

    抖音安全与信任开放日:揭秘推荐算法,告别单一标签依赖

    ultraedit编辑器打开文件时,总是提示是否转换为DOS格式,如何关闭?

    IT头条

    华为Pura80系列新机预热,余承东力赞其复杂光线下的视频拍摄实力

    01:28

    阿里千问3开源首战告捷:全球下载破千万,国产AI模型崛起新高度!

    01:22

    DeepSeek R1小版本试升级:网友实测编程能力已达到国际一线水平

    23:15

    NVIDIA 与 Dell 合作,大规模交付 Blackwell AI 系统

    20:52

    Cerebras 以最快的 Llama 4 Maverick 性能引领 LLM 推理竞赛

    20:51

    技术热点

    PHP中的随机性——你觉得自己幸运吗?

    搞定Ubuntu Linux下WPA无线上网

    Java使用内存映射实现大文件的上传

    MySQL安全性指南

    MySQL两项性能的基本测试浅谈

    教您使用UniqueIdentifier选取SQL Server主键

      友情链接:
    • IT采购网
    • 科技号
    • 中国存储网
    • 存储网
    • 半导体联盟
    • 医疗软件网
    • 软件中国
    • ITbrand
    • 采购中国
    • CIO智库
    • 考研题库
    • 法务网
    • AI工具网
    • 电子芯片网
    • 安全库
    • 隐私保护
    • 版权申明
    • 联系我们
    IT技术网 版权所有 © 2020-2025,京ICP备14047533号-20,Power by OK设计网

    在上方输入关键词后,回车键 开始搜索。Esc键 取消该搜索窗口。