[{"data":1,"prerenderedAt":333},["ShallowReactive",2],{"site-data":3,"article-91":143,"article-show-hot-91":167,"article-show-new-91":257},{"settings":4,"categorys":35,"tree":97,"models":118,"search_model_select":128,"nav_list":130},{"changefreq":5,"changyan_app_id":6,"changyan_app_key":6,"copy":7,"description":8,"editor":9,"file":6,"guest_feedback":10,"head_html":6,"icp":11,"index_banner":12,"index_banner_bg":13,"is_excel":14,"is_watermark":10,"keywords":15,"links":16,"logo":17,"lzcms_banner":6,"lzcms_banner_link":18,"member_register_enabled":14,"qq_app_id":6,"qq_app_key":6,"qr_code":6,"search_model":19,"site_closedreason":6,"site_idea":6,"site_idea1":20,"site_idea2":21,"site_idea3":22,"site_name":23,"site_statistice":6,"site_status":14,"site_url":18,"sitemap_model":19,"stationmaster_motto":24,"stationmaster_name":25,"stationmaster_occupation":26,"stationmaster_qq":27,"stationmaster_qqnet":28,"stationmaster_qqnet_code":29,"threshold":14,"title_add":30,"watermark":6,"watermark_alpha":31,"watermark_height":32,"watermark_locate":33,"watermark_width":34},"weekly","","版权所有 © \u003Ca class=\"site_url\" href=\"https://zhl123.com\">2026 zhl123.com\u003C/a>","linux、Python、mysql、docker、k8s技术交流","layedit","0","粤ICP备15054664号-1","/uploads/images/20181109/7a86191de8b8bb60e9c6b54d8b27c5cc.jpg","#xe604","1","linux、Python、mysql、docker、k8s","{\"1\":{\"id\":\"1\",\"link_url\":\"https://linux.org\",\"logo\":\"\",\"name\":\"linux\",\"sort\":\"0\",\"status\":\"1\"}}","/uploads/images/20181109/e7305012448aed257176dd591846f50a.png","https://zhl123.com","2","学无止境\n学习，探索，研究，从不了解到了解，从无知到掌握，到灵活运用，在不断的学习中加深认识。由浅入深，由表及里。","业精于勤\n“业精于勤荒于嬉”，精深的业技靠的是勤学、刻苦努力，靠的是争分夺秒的勤学苦练才会有精深的技术。得在认真，失在随便。","工匠精神\n精益求精，注重细节，追求完美和极致，不惜花费时间精力，孜孜不倦，反复改进产品，把99%提高到99.99%。","linux","业精于勤、学无止境、工匠精神","廖地金","高级Linux运维工程师","1256636645","592958303","\u003Ca target=\"_blank\" href=\"//shang.qq.com/wpa/qunwpa?idkey=09be7d1a682073783fd636102e666393169b8a8aac8f3393da1de57bcaa821a0\">\u003Cimg border=\"0\" src=\"//pub.idqqimg.com/wpa/images/group.png\" alt=\"Linux技术\" title=\"Linux技术\">\u003C/a>"," | Python | mysql | docker | k8s 技术交流","100","300","9","500",{"0":36,"17":51,"18":60,"19":63,"20":67,"21":71,"22":76,"25":80,"26":83,"27":89,"29":94},{"children":37},{"0":38,"25":43,"26":48},[39,40,41,42],25,21,22,26,[44,45,46,47],17,18,19,20,[49,50],27,29,{"create_time":6,"description":6,"id":44,"image_url":6,"index_template":52,"is_cover":53,"is_menu":53,"keywords":6,"list_template":54,"model_code":55,"model_id":56,"model_name":57,"name":23,"parent_id":39,"seo_description":6,"seo_keywords":6,"seo_title":6,"show_template":58,"sort":53,"subtitle":6,"update_time":6,"url":59},"index",1,"list","article",2,"文章模型","show","/article/lists?category_id=17",{"create_time":6,"description":6,"id":45,"image_url":6,"index_template":52,"is_cover":53,"is_menu":53,"keywords":6,"list_template":54,"model_code":55,"model_id":56,"model_name":57,"name":61,"parent_id":39,"seo_description":6,"seo_keywords":6,"seo_title":6,"show_template":58,"sort":56,"subtitle":6,"update_time":6,"url":62},"python","/article/lists?category_id=18",{"create_time":6,"description":6,"id":46,"image_url":6,"index_template":52,"is_cover":53,"is_menu":53,"keywords":6,"list_template":54,"model_code":55,"model_id":56,"model_name":57,"name":64,"parent_id":39,"seo_description":6,"seo_keywords":6,"seo_title":6,"show_template":58,"sort":65,"subtitle":6,"update_time":6,"url":66},"容器技术",3,"/article/lists?category_id=19",{"create_time":6,"description":6,"id":47,"image_url":6,"index_template":52,"is_cover":53,"is_menu":53,"keywords":6,"list_template":54,"model_code":55,"model_id":56,"model_name":57,"name":68,"parent_id":39,"seo_description":6,"seo_keywords":6,"seo_title":6,"show_template":58,"sort":69,"subtitle":6,"update_time":6,"url":70},"负载均衡",4,"/article/lists?category_id=20",{"create_time":6,"description":6,"id":40,"image_url":6,"index_template":52,"is_cover":53,"is_menu":53,"keywords":6,"list_template":54,"model_code":55,"model_id":56,"model_name":57,"name":72,"parent_id":73,"seo_description":6,"seo_keywords":6,"seo_title":6,"show_template":58,"sort":74,"subtitle":6,"update_time":6,"url":75},"分享无价",0,5,"/article/lists?category_id=21",{"create_time":6,"description":6,"id":41,"image_url":6,"index_template":52,"is_cover":53,"is_menu":53,"keywords":6,"list_template":54,"model_code":55,"model_id":56,"model_name":57,"name":77,"parent_id":73,"seo_description":6,"seo_keywords":6,"seo_title":6,"show_template":58,"sort":78,"subtitle":6,"update_time":6,"url":79},"随笔",6,"/article/lists?category_id=22",{"create_time":6,"description":6,"id":39,"image_url":6,"index_template":52,"is_cover":53,"is_menu":53,"keywords":6,"list_template":54,"model_code":55,"model_id":56,"model_name":57,"name":81,"parent_id":73,"seo_description":6,"seo_keywords":6,"seo_title":6,"show_template":58,"sort":73,"subtitle":6,"update_time":6,"url":82},"学无止境","/article/lists?category_id=25",{"create_time":6,"description":6,"id":42,"image_url":6,"index_template":52,"is_cover":53,"is_menu":53,"keywords":6,"list_template":54,"model_code":84,"model_id":65,"model_name":85,"name":86,"parent_id":73,"seo_description":6,"seo_keywords":6,"seo_title":6,"show_template":58,"sort":87,"subtitle":6,"update_time":6,"url":88},"picture","图集模型","关于",8,"/picture/lists?category_id=26",{"create_time":6,"description":6,"id":49,"image_url":6,"index_template":52,"is_cover":53,"is_menu":73,"keywords":6,"list_template":54,"model_code":90,"model_id":53,"model_name":91,"name":92,"parent_id":42,"seo_description":6,"seo_keywords":6,"seo_title":6,"show_template":58,"sort":47,"subtitle":6,"update_time":6,"url":93},"page","单页模型","关于博主","/page/27",{"create_time":6,"description":6,"id":50,"image_url":6,"index_template":52,"is_cover":73,"is_menu":73,"keywords":6,"list_template":54,"model_id":73,"name":95,"parent_id":42,"seo_description":6,"seo_keywords":6,"seo_title":6,"show_template":58,"sort":47,"subtitle":6,"update_time":6,"url":96},"留言","/feedback",[98,108,110,112],{"children":99,"create_time":6,"description":6,"id":39,"image_url":6,"index_template":52,"is_cover":53,"is_menu":53,"keywords":6,"list_template":54,"model_code":55,"model_id":56,"model_name":57,"name":81,"parent_id":73,"seo_description":6,"seo_keywords":6,"seo_title":6,"show_template":58,"sort":73,"subtitle":6,"update_time":6,"url":82},[100,102,104,106],{"children":101,"create_time":6,"description":6,"id":44,"image_url":6,"index_template":52,"is_cover":53,"is_menu":53,"keywords":6,"list_template":54,"model_code":55,"model_id":56,"model_name":57,"name":23,"parent_id":39,"seo_description":6,"seo_keywords":6,"seo_title":6,"show_template":58,"sort":53,"subtitle":6,"update_time":6,"url":59},[],{"children":103,"create_time":6,"description":6,"id":45,"image_url":6,"index_template":52,"is_cover":53,"is_menu":53,"keywords":6,"list_template":54,"model_code":55,"model_id":56,"model_name":57,"name":61,"parent_id":39,"seo_description":6,"seo_keywords":6,"seo_title":6,"show_template":58,"sort":56,"subtitle":6,"update_time":6,"url":62},[],{"children":105,"create_time":6,"description":6,"id":46,"image_url":6,"index_template":52,"is_cover":53,"is_menu":53,"keywords":6,"list_template":54,"model_code":55,"model_id":56,"model_name":57,"name":64,"parent_id":39,"seo_description":6,"seo_keywords":6,"seo_title":6,"show_template":58,"sort":65,"subtitle":6,"update_time":6,"url":66},[],{"children":107,"create_time":6,"description":6,"id":47,"image_url":6,"index_template":52,"is_cover":53,"is_menu":53,"keywords":6,"list_template":54,"model_code":55,"model_id":56,"model_name":57,"name":68,"parent_id":39,"seo_description":6,"seo_keywords":6,"seo_title":6,"show_template":58,"sort":69,"subtitle":6,"update_time":6,"url":70},[],{"children":109,"create_time":6,"description":6,"id":40,"image_url":6,"index_template":52,"is_cover":53,"is_menu":53,"keywords":6,"list_template":54,"model_code":55,"model_id":56,"model_name":57,"name":72,"parent_id":73,"seo_description":6,"seo_keywords":6,"seo_title":6,"show_template":58,"sort":74,"subtitle":6,"update_time":6,"url":75},[],{"children":111,"create_time":6,"description":6,"id":41,"image_url":6,"index_template":52,"is_cover":53,"is_menu":53,"keywords":6,"list_template":54,"model_code":55,"model_id":56,"model_name":57,"name":77,"parent_id":73,"seo_description":6,"seo_keywords":6,"seo_title":6,"show_template":58,"sort":78,"subtitle":6,"update_time":6,"url":79},[],{"children":113,"create_time":6,"description":6,"id":42,"image_url":6,"index_template":52,"is_cover":53,"is_menu":53,"keywords":6,"list_template":54,"model_code":84,"model_id":65,"model_name":85,"name":86,"parent_id":73,"seo_description":6,"seo_keywords":6,"seo_title":6,"show_template":58,"sort":87,"subtitle":6,"update_time":6,"url":88},[114,116],{"children":115,"create_time":6,"description":6,"id":49,"image_url":6,"index_template":52,"is_cover":53,"is_menu":73,"keywords":6,"list_template":54,"model_code":90,"model_id":53,"model_name":91,"name":92,"parent_id":42,"seo_description":6,"seo_keywords":6,"seo_title":6,"show_template":58,"sort":47,"subtitle":6,"update_time":6,"url":93},[],{"children":117,"create_time":6,"description":6,"id":50,"image_url":6,"index_template":52,"is_cover":73,"is_menu":73,"keywords":6,"list_template":54,"model_id":73,"name":95,"parent_id":42,"seo_description":6,"seo_keywords":6,"seo_title":6,"show_template":58,"sort":47,"subtitle":6,"update_time":6,"url":96},[],{"1":119,"2":120,"3":121,"4":122,"5":125},{"id":53,"index_template":52,"list_template":54,"name":91,"show_template":58,"status":73,"tablename":90},{"id":56,"index_template":52,"list_template":54,"name":57,"show_template":58,"status":73,"tablename":55},{"id":65,"index_template":52,"list_template":54,"name":85,"show_template":58,"status":73,"tablename":84},{"id":69,"index_template":52,"list_template":54,"name":123,"show_template":58,"status":73,"tablename":124},"链接模型","link",{"id":74,"index_template":52,"list_template":54,"name":126,"show_template":58,"status":73,"tablename":127},"下载模型","download",[129],{"id":56,"name":57,"tablename":55},[131,137,139,141],{"children":132,"create_time":6,"description":6,"id":39,"image_url":6,"index_template":52,"is_cover":53,"is_menu":53,"keywords":6,"list_template":54,"model_code":55,"model_id":56,"model_name":57,"name":81,"parent_id":73,"seo_description":6,"seo_keywords":6,"seo_title":6,"show_template":58,"sort":73,"subtitle":6,"update_time":6,"url":82},[133,134,135,136],{"create_time":6,"description":6,"id":44,"image_url":6,"index_template":52,"is_cover":53,"is_menu":53,"keywords":6,"list_template":54,"model_code":55,"model_id":56,"model_name":57,"name":23,"parent_id":39,"seo_description":6,"seo_keywords":6,"seo_title":6,"show_template":58,"sort":53,"subtitle":6,"update_time":6,"url":59},{"create_time":6,"description":6,"id":45,"image_url":6,"index_template":52,"is_cover":53,"is_menu":53,"keywords":6,"list_template":54,"model_code":55,"model_id":56,"model_name":57,"name":61,"parent_id":39,"seo_description":6,"seo_keywords":6,"seo_title":6,"show_template":58,"sort":56,"subtitle":6,"update_time":6,"url":62},{"create_time":6,"description":6,"id":46,"image_url":6,"index_template":52,"is_cover":53,"is_menu":53,"keywords":6,"list_template":54,"model_code":55,"model_id":56,"model_name":57,"name":64,"parent_id":39,"seo_description":6,"seo_keywords":6,"seo_title":6,"show_template":58,"sort":65,"subtitle":6,"update_time":6,"url":66},{"create_time":6,"description":6,"id":47,"image_url":6,"index_template":52,"is_cover":53,"is_menu":53,"keywords":6,"list_template":54,"model_code":55,"model_id":56,"model_name":57,"name":68,"parent_id":39,"seo_description":6,"seo_keywords":6,"seo_title":6,"show_template":58,"sort":69,"subtitle":6,"update_time":6,"url":70},{"children":138,"create_time":6,"description":6,"id":40,"image_url":6,"index_template":52,"is_cover":53,"is_menu":53,"keywords":6,"list_template":54,"model_code":55,"model_id":56,"model_name":57,"name":72,"parent_id":73,"seo_description":6,"seo_keywords":6,"seo_title":6,"show_template":58,"sort":74,"subtitle":6,"update_time":6,"url":75},[],{"children":140,"create_time":6,"description":6,"id":41,"image_url":6,"index_template":52,"is_cover":53,"is_menu":53,"keywords":6,"list_template":54,"model_code":55,"model_id":56,"model_name":57,"name":77,"parent_id":73,"seo_description":6,"seo_keywords":6,"seo_title":6,"show_template":58,"sort":78,"subtitle":6,"update_time":6,"url":79},[],{"children":142,"create_time":6,"description":6,"id":42,"image_url":6,"index_template":52,"is_cover":53,"is_menu":53,"keywords":6,"list_template":54,"model_code":84,"model_id":65,"model_name":85,"name":86,"parent_id":73,"seo_description":6,"seo_keywords":6,"seo_title":6,"show_template":58,"sort":87,"subtitle":6,"update_time":6,"url":88},[],{"article":144,"breadcrumb":155,"category":158,"next":159,"prev":162,"second_categorys":165,"seo":166},{"id":145,"category_id":40,"title":146,"keywords":147,"description":148,"image_url":6,"content":149,"content_md":150,"url":151,"hits":152,"is_recommend":73,"is_top":73,"create_time":153,"update_time":154},91,"10 个 MySQL 经典错误","MySQL,经典,错误","今天就给大家列举 MySQL 数据库中，最经典的十大错误案例，并附有处理问题的解决思路和方法，希望能给刚入行，或数据库爱好者一些帮助。今后再遇到任何报错，我们都可以很淡定地去处理。学习任何一门技术的同时，其实就是自我修炼的过程。沉下心，尝试去拥抱数据的世界！Top 1：Too many connections（连接数过多，导致连接不上数据库，业务无法正常进行）问题还原mysql&gt; show variables like '%max_connection%';\n| Variable_name","\u003Cblockquote style=\"text-align: justify;\">\u003Cp>\u003Cspan>今天就给大家列举 MySQL 数据库中，最经典的十大错误案例，并附有处理问题的解决思路和方法，希望能给刚入行，或数据库爱好者一些帮助。\u003C/span>\u003C/p>\u003Cp>\u003Cspan>今后再遇到任何报错，我们都可以很淡定地去处理。学习任何一门技术的同时，其实就是自我修炼的过程。沉下心，尝试去拥抱数据的世界！\u003C/span>\u003C/p>\u003C/blockquote>\u003Cp style=\"text-align: justify;\">\u003Cspan>\u003Cstrong>Top 1：\u003C/strong>\u003C/span>\u003Cspan>\u003Cstrong>Too many connections\u003C/strong>\u003Cstrong>（连接数过多，导致连接不上数据库，业务无法正常进行）\u003C/strong>\u003C/span>\u003C/p>\u003Cp style=\"text-align: justify;\">\u003Cspan>\u003Cstrong>问题还原\u003C/strong>\u003C/span>\u003C/p>\u003Cpre style=\"text-align: justify;\">\u003Ccode>\u003Cspan>mysql&gt; show variables like '%max_connection%';\n| Variable_name &nbsp; | Value |\nmax_connections | 151 &nbsp; | \nmysql&gt; set global max_connections=1;Query OK, 0 rows affected (0.00 sec)\n[root@node4 ~]# mysql -uzs -p123456 -h 192.168.56.132\nERROR 1040 (00000): Too many connections\u003C/span>\u003C/code>\u003C/pre>\u003Cp style=\"text-align: justify;\">\u003Cspan>\u003Cstrong>解决问题的思路：\u003C/strong>\u003C/span>\u003C/p>\u003Cp style=\"text-align: justify;\">\u003Cspan>1、首先先要考虑在我们 MySQL 数据库参数文件里面，对应的 max_connections 这个参数值是不是设置的太小了，导致客户端连接数超过了数据库所承受的最大值。\u003C/span>\u003C/p>\u003Cul class=\"list-paddingleft-2\" style=\"text-align: justify;\">\u003Cli>\u003Cp>\u003Cspan>该值默认大小是151，我们可以根据实际情况进行调整。\u003C/span>\u003C/p>\u003C/li>\u003Cli>\u003Cp style=\"text-align: left;\">\u003Cspan>对应解决办法：set global max_connections=500\u003C/span>\u003C/p>\u003C/li>\u003C/ul>\u003Cp style=\"text-align: justify;\">\u003Cspan>但这样调整会有隐患，因为我们无法确认数据库是否可以承担这么大的连接压力，就好比原来一个人只能吃一个馒头，但现在却非要让他吃 10 个，他肯定接受不了。反应到服务器上面，就有可能会出现宕机的可能。\u003C/span>\u003C/p>\u003Cp style=\"text-align: justify;\">\u003Cspan>所以这又反应出了，我们在新上线一个业务系统的时候，要做好压力测试。保证后期对数据库进行优化调整。\u003C/span>\u003C/p>\u003Cp>\u003Cspan>2、其次可以限制 Innodb 的并发处理数量，如果 innodb_thread_concurrency = 0（这种代表不受限制） 可以先改成 16 或是 64 看服务器压力。如果非常大，可以先改的小一点让服务器的压力下来之后,然后再慢慢增大,根据自己的业务而定。个人建议可以先调整为 16 即可。\u003C/span>\u003C/p>\u003Cp>\u003Cspan>MySQL 随着连接数的增加性能是会下降的，可以让开发配合设置 thread pool，连接复用。在MySQL商业版中加入了thread pool这项功能，另外对于有的监控程序会读取 information_schema 下面的表，可以考虑关闭下面的参数\u003C/span>\u003C/p>\u003Cpre style=\"text-align: justify;\">\u003Ccode>\u003Cspan>innodb_stats_on_metadata=0\nset global innodb_stats_on_metadata=0\u003C/span>\u003C/code>\u003C/pre>\u003Cp>\u003Cspan>\u003Cstrong>\u003Cspan>Top 2:\u003C/span>\u003C/strong>\u003C/span>\u003Cspan>\u003Cstrong>\u003Cspan>（主从复制报错类型）\u003C/span>\u003C/strong>\u003C/span>\u003C/p>\u003Cp style=\"text-align: justify;\">\u003Cspan>Last_SQL_Errno: 1062 &nbsp;（从库与主库数据冲突）\u003C/span>\u003C/p>\u003Cpre style=\"text-align: justify;\">\u003Ccode>\u003Cspan>Last_Errno: 1062\n &nbsp; Last_Error: Could not execute Write_rows event on table test.t; \n &nbsp; Duplicate entry '4' for key 'PRIMARY', \n &nbsp; Error_code: 1062; handler error HA_ERR_FOUND_DUPP_KEY; \n &nbsp; the event's master log mysql-bin.000014, end_log_pos 1505\u003C/span>\u003C/code>\u003C/pre>\u003Cp style=\"text-align: justify;\">\u003Cspan>针对这个报错，我们首先要考虑是不是在\u003Cstrong>从库中误操作导致的。\u003C/strong>结果发现，我们在从库中进行了一条针对有主键表的 sql 语句的插入，导致主库再插入相同 sql 的时候，主从状态出现异常。发生主键冲突的报错。\u003C/span>\u003C/p>\u003Cp style=\"text-align: justify;\">\u003Cspan>\u003Cstrong>解决方法：\u003C/strong>\u003C/span>\u003C/p>\u003Cp style=\"text-align: justify;\">\u003Cspan>在确保主从数据一致性的前提下，可以在从库进行错误跳过。一般使用 percona-toolkit 中的 pt-slave-restart 进行。\u003C/span>\u003C/p>\u003Cp style=\"text-align: justify;\">\u003Cspan>在从库完成如下操作\u003C/span>\u003C/p>\u003Cpre style=\"text-align: justify;\">\u003Ccode>\u003Cspan>[root@zs bin]# ./pt-slave-restart -uroot -proot123\n2017-07-20T14:05:30 p=...,u=root node4-relay-bin.000002 &nbsp; 1506 1062\u003C/span>\u003C/code>\u003C/pre>\u003Cblockquote style=\"text-align: justify;\">\u003Cp>\u003Cspan>之后最好在从库中开启 read_only 参数，禁止在从库进行写入操作\u003C/span>\u003C/p>\u003C/blockquote>\u003Cp style=\"text-align: justify;\">\u003Cspan>Last_IO_Errno: 1593（server-id冲突）\u003C/span>\u003C/p>\u003Cpre style=\"text-align: justify;\">\u003Ccode>\u003Cspan>Last_IO_Error: \n &nbsp;Fatal error: The slave I/O thread stops because master and slave have equal MySQL server ids; \n &nbsp;these ids must be different for replication to work \n &nbsp;(or the --replicate-same-server-id option must be used on slave but this \n &nbsp;does not always make sense; please check the manual before using it)\n#这个报错出现之后，就看一目了然看到两台机器的 server-id 是一样的。\u003C/span>\u003C/code>\u003C/pre>\u003Cp style=\"text-align: justify;\">\u003Cspan>在搭建主从复制的过程中，我们要确保两台机器的 server-id 是唯一的。这里再强调一下 server-id 的命名规则（服务器 ip 地址的最后一位+本 MySQL 服务的端口号）\u003C/span>\u003C/p>\u003Cp style=\"text-align: justify;\">\u003Cspan>\u003Cstrong>解决方法：\u003C/strong>\u003Cbr>在主从两台机器上设置不同的 server-id。\u003C/span>\u003C/p>\u003Cp style=\"text-align: justify;\">\u003Cspan>Last_SQL_Errno: 1032（从库少数据，主库更新的时候，从库报错）\u003C/span>\u003C/p>\u003Cpre style=\"text-align: justify;\">\u003Ccode>\u003Cspan>Last_SQL_Error:\nCould not execute Update_rows event on table test.t; Can't find record \nin 't', Error_code: 1032; handler error HA_ERR_KEY_NOT_FOUND; the \nevent's master log mysql-bin.000014, end_log_pos 1708\u003C/span>\u003C/code>\u003C/pre>\u003Cp style=\"text-align: justify;\">\u003Cspan>\u003Cstrong>解决办法：\u003C/strong>\u003Cbr>\u003C/span>根据报错信息，我们可以获取到报错日志和position号，然后就能找到主库执行的哪条sql，导致的主从报错。\u003C/p>\u003Cp style=\"text-align: justify;\">在主库执行：\u003C/p>\u003Cpre style=\"text-align: justify;\">\u003Ccode>\u003Cspan>/usr/local/mysql/bin/mysqlbinlog --no-defaults -v -v --base64-output=decode-rows /data/mysql/mysql-bin.000014 |grep -A 10 1708 &gt; 1.log\ncat 1.log\n#170720 14:20:15 server id 3 &nbsp;end_log_pos 1708 CRC32 0x97b6bdec &nbsp; &nbsp; Update_rows: table id 113 flags: STMT_END_F\n### UPDATE `test`.`t`\n### WHERE\n### &nbsp; @1=4 /* INT meta=0 nullable=0 is_null=0 */\n### &nbsp; @2='dd' /* VARSTRING(60) meta=60 nullable=1 is_null=0 */\n### SET\n### &nbsp; @1=4 /* INT meta=0 nullable=0 is_null=0 */\n### &nbsp; @2='ddd' /* VARSTRING(60) meta=60 nullable=1 is_null=0 */\n# at 1708\n#170720 14:20:15 server id 3 &nbsp;end_log_pos 1739 CRC32 0xecaf1922 &nbsp; &nbsp; Xid = 654\nCOMMIT/*!*/;\nDELIMITER ;\n# End of log file\nROLLBACK /* added by mysqlbinlog */;\n/*!50003 SET COMPLETION_TYPE=@OLD_COMPLETION_TYPE*/;\n/*!50530 SET @@SESSION.PSEUDO_SLAVE_MODE=0*/;\u003C/span>\u003C/code>\u003C/pre>\u003Cp style=\"text-align: justify;\">获取到 sql 语句之后，就可以在从库反向执行 sql 语句。把从库缺少的 sql 语句补全，解决报错信息。\u003C/p>\u003Cp style=\"text-align: justify;\">在从库依次执行：\u003C/p>\u003Cpre style=\"text-align: justify;\">\u003Ccode>\u003Cspan>mysql&gt; insert into t (b) values ('ddd');\nQuery OK, 1 row affected (0.01 sec)\nmysql&gt; stop slave;\nQuery OK, 0 rows affected (0.00 sec)\nmysql&gt; exit\nBye\n[root@node4 bin]# ./pt-slave-restart -uroot -proot123\n2017-07-20T14:31:37 p=...,u=root node4-relay-bin.000005 &nbsp; &nbsp; &nbsp; &nbsp; 283 1032\u003C/span>\u003C/code>\u003C/pre>\u003Cp>\u003Cspan>\u003Cstrong>\u003Cspan>Top 3：\u003C/span>\u003C/strong>\u003C/span>\u003Cspan>\u003Cstrong>\u003Cspan>MySQL 安装过程中的报错\u003C/span>\u003C/strong>\u003C/span>\u003C/p>\u003Cpre style=\"text-align: justify;\">\u003Ccode>\u003Cspan>[root@zs data]# /usr/local/mysql/bin/mysqld_safe --defaults-file=/etc/my.cnf &amp;[1] 3758\n[root@zs data]# 170720 14:41:24 mysqld_safe Logging to '/data/mysql/error.log'.\n170720 14:41:24 mysqld_safe Starting mysqld daemon with databases from /data/mysql170720 \n14:41:25 mysqld_safe mysqld from pid file /data/mysql/node4.pid ended\n170720 14:41:24 mysqld_safe Starting mysqld daemon with databases from /data/mysql2017-07-20 \n14:41:25 0 [Warning] TIMESTAMP with implicit DEFAULT value is deprecated. \nPlease use --explicit_defaults_for_timestamp server option \n(see documentation for more details)./usr/local/mysql/bin/mysqld: \nFile '/data/mysql/mysql-bin.index' not found (Errcode: 13 - Permission denied)\n2017-07-20 14:41:25 4388 [ERROR] Aborting\u003C/span>\u003C/code>\u003C/pre>\u003Cp style=\"text-align: justify;\">\u003Cspan>\u003Cstrong>解决思路：\u003C/strong>\u003Cbr>遇到这样的报错信息，我们要学会时时去关注错误日志 error log 里面的内容。看见了关键的报错点\u003Cstrong>Permission denied。证明当前 MySQL 数据库的数据目录没有权限。\u003C/strong>\u003C/span>\u003C/p>\u003Cp style=\"text-align: justify;\">\u003Cspan>\u003Cstrong>解决方法：\u003C/strong>\u003C/span>\u003C/p>\u003Cpre style=\"text-align: justify;\">\u003Ccode>\u003Cspan>[root@zs data]# chown mysql:mysql -R mysql\n[root@zs data]# /usr/local/mysql/bin/mysqld_safe --defaults-file=/etc/my.cnf &amp;\n[1] 4402\n[root@zs data]# 170720 14:45:56 mysqld_safe Logging to '/data/mysql/error.log'.\n170720 14:45:56 mysqld_safe Starting mysqld daemon with databases from /data/mysql\n#启动成功。\u003C/span>\u003C/code>\u003C/pre>\u003Cp style=\"text-align: justify;\">\u003Cspan>\u003Cstrong>如何避免这类问题，个人建议在安装MySQL初始化的时候，一定加上—user=mysql，这样就可以避免权限问题。\u003C/strong>\u003C/span>\u003C/p>\u003Cpre style=\"text-align: justify;\">\u003Ccode>\u003Cspan>./mysql_install_db --basedir=/usr/local/mysql/ --datadir=/data/mysql/ --defaults-file=/etc/my.cnf --user=mysql\u003C/span>\u003C/code>\u003C/pre>\u003Cp>\u003Cspan>\u003Cstrong>Top 4：数据库密码忘记的问题\u003C/strong>\u003C/span>\u003C/p>\u003Cpre style=\"text-align: justify;\">\u003Ccode>\u003Cspan>[root@zs ~]# mysql -uroot -p\nEnter password: \nERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: YES)\n[root@zs ~]# mysql -uroot -p\nEnter password: \nERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: YES)\n#我们有可能刚刚接手别人的 MySQL 数据库，而且没有完善的交接文档。root 密码可以丢失或者忘记了。\u003C/span>\u003C/code>\u003C/pre>\u003Cp style=\"text-align: justify;\">\u003Cspan>\u003Cstrong>解决思路：\u003C/strong>\u003Cbr>目前是进入不了数据库的情况，所以我们要考虑是不是可以跳过权限。因为在数据库中，mysql数据库中user表记录着我们用户的信息。\u003C/span>\u003C/p>\u003Cp style=\"text-align: justify;\">\u003Cspan>\u003Cstrong>解决方法：\u003C/strong>\u003Cbr>启动 MySQL 数据库的过程中，可以这样执行：\u003C/span>\u003C/p>\u003Cpre style=\"text-align: justify;\">\u003Ccode>\u003Cspan>/usr/local/mysql/bin/mysqld_safe --defaults-file=/etc/my.cnf &nbsp;--skip-grant-tables &amp;\n这样启动，就可以不用输入密码，直接进入 mysql 数据库了。然后在修改你自己想要改的root密码即可。\nupdate mysql.user set password=password('root123') where user='root';\u003C/span>\u003C/code>\u003C/pre>\u003Cp>\u003Cspan>\u003Cstrong>\u003Cspan>Top 5：\u003C/span>\u003C/strong>\u003C/span>\u003Cspan>\u003Cstrong>\u003Cspan>truncate 删除数据，导致自动清空自增ID，前端返回报错 not found。\u003C/span>\u003C/strong>\u003C/span>\u003C/p>\u003Cp style=\"text-align: justify;\">\u003Cspan>这个问题的出现，就要\u003Cstrong>考虑下truncate 和 delete 的区别了。\u003C/strong>\u003C/span>\u003C/p>\u003Cp style=\"text-align: justify;\">\u003Cspan>看下实验演练：\u003C/span>\u003C/p>\u003Cpre style=\"text-align: justify;\">\u003Ccode>\u003Cspan>#首先先创建一张表；\n\nCREATE TABLE `t` (\n &nbsp;`a` int(11) NOT NULL AUTO_INCREMENT,\n &nbsp;`b` varchar(20) DEFAULT NULL,\n &nbsp;PRIMARY KEY (`a`),\n &nbsp;KEY `b` (`b`)\n) ENGINE=InnoDB AUTO_INCREMENT=300 DEFAULT CHARSET=utf8\n#插入三条数据：\nmysql&gt; insert into t (b) values ('aa');\nQuery OK, 1 row affected (0.00 sec)\nmysql&gt; insert into t (b) values ('bb');\nQuery OK, 1 row affected (0.00 sec)\nmysql&gt; insert into t (b) values ('cc');\nQuery OK, 1 row affected (0.00 sec)\nmysql&gt; select * from t;\n+-----+------+\n| a &nbsp; | b &nbsp; &nbsp;|\n+-----+------+\n| 300 | aa &nbsp; |\n| 301 | bb &nbsp; |\n| 302 | cc &nbsp; |\n+-----+------+\n3 rows in set (0.00 sec)\n#先用 delete 进行删除全表信息，再插入新值。\u003C/span>\u003C/code>\u003C/pre>\u003Cp style=\"text-align: justify;\">\u003Cspan>结果发现truncate把自增初始值重置了，自增属性从1开始记录了。当前端用主键id进行查询时，就会报没有这条数据的错误。\u003C/span>\u003C/p>\u003Cp style=\"text-align: justify;\">\u003Cspan>个人建议不要使用truncate对表进行删除操作，虽然可以回收表空间，但是会涉及自增属性问题。这些坑，我们不要轻易钻进去。\u003C/span>\u003C/p>\u003Cp>\u003Cstrong>\u003Cspan>Top 6：\u003C/span>\u003C/strong>\u003Cspan>\u003Cstrong>\u003Cspan>阿里云 MySQL 的配置文件中，需要注意一个参数设置就是：\u003C/span>\u003C/strong>\u003C/span>\u003C/p>\u003Cpre style=\"text-align: justify;\">\u003Ccode>\u003Cspan>lower_case_table_names = 0;默认情况\nlower_case_table_names = 1;是不区分大小写 . 如果报你小写的表名找不到, 那你就把远端数据库的表名改成小写 , 反之亦然 . 注意 Mybatis 的 Mapper 文件的所有表名也要相应修改\u003C/span>\u003C/code>\u003C/pre>\u003Cp style=\"text-align: justify;\">\u003Cspan>\u003Cstrong>\u003Cspan>Top 7：\u003C/span>\u003C/strong>\u003C/span>\u003Cspan>\u003Cstrong>\u003Cspan>数据库总会出现中文乱码的情况\u003C/span>\u003C/strong>\u003C/span>\u003C/p>\u003Cp style=\"text-align: justify;\">\u003Cspan>\u003Cstrong>解决思路：\u003C/strong>\u003C/span>\u003Cbr>\u003C/p>\u003Cp style=\"text-align: justify;\">对于中文乱码的情况，记住老师告诉你的三个统一就可以。还要知道在目前的mysql数据库中字符集编码都是默认的UTF8\u003C/p>\u003Cp style=\"text-align: justify;\">\u003Cspan>\u003Cstrong>处理办法：\u003C/strong>\u003C/span>\u003C/p>\u003Cblockquote style=\"text-align: justify;\">\u003Cp>\u003Cspan>1、数据终端，也就是我们连接数据库的工具设置为 utf8\u003Cbr>2、操作系统层面；可以通过 cat /etc/sysconfig/i18n 查看；也要设置为 utf8\u003Cbr>3、数据库层面；在参数文件中的 mysqld 下，加入 character-set-server=utf8。\u003C/span>\u003C/p>\u003C/blockquote>\u003Cp style=\"text-align: justify;\">\u003Cspan>Emoji 表情符号录入 mysql 数据库中报错。\u003C/span>\u003C/p>\u003Cpre style=\"text-align: justify;\">\u003Ccode>\u003Cspan>Caused by: java.sql.SQLException: Incorrect string value: '\\xF0\\x9F\\x98\\x97\\xF0\\x9F...' for column 'CONTENT' at row 1\nat com.mysql.jdbc.SQLError.createSQLException(SQLError.java:1074)\nat com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:4096)\nat com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:4028)\nat com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:2490)\nat com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:2651)\nat com.mysql.jdbc.ConnectionImpl.execSQL(ConnectionImpl.java:2734)\nat com.mysql.jdbc.PreparedStatement.executeInternal(PreparedStatement.java:2155)\nat com.mysql.jdbc.PreparedStatement.execute(PreparedStatement.java:1379)\u003C/span>\u003C/code>\u003C/pre>\u003Cp style=\"text-align: justify;\">\u003Cspan>\u003Cstrong>解决思路\u003C/strong>：针对表情插入的问题，一定还是字符集的问题。\u003Cbr>\u003Cstrong>处理方法\u003C/strong>：我们可以直接在参数文件中，加入\u003C/span>\u003C/p>\u003Cpre style=\"text-align: justify;\">\u003Ccode>\u003Cspan>vim /etc/my.cnf\n[mysqld]\ninit-connect='SET NAMES utf8mb4'\ncharacter-set-server=utf8mb4\n注：utf8mb4 是 utf8 的超集。\u003C/span>\u003C/code>\u003C/pre>\u003Cp>\u003Cspan>\u003Cstrong>\u003Cspan>Top 8：使用 binlog_format=statement 这种格式，跨库操作，导致从库丢失数据，用户访问导致出现错误数据信息。\u003C/span>\u003C/strong>\u003C/span>\u003C/p>\u003Cpre style=\"text-align: justify;\">\u003Ccode>\u003Cspan>#当前数据库二进制日志的格式为：binlog_format=statement\n在主库设置binlog-do-db=mydb1（只同步mydb1这一个库）\n在主库执行use mydb2；\ninsert into mydb1.t1 values ('bb');这条语句不会同步到从库。\n但是这样操作就可以；\nuse mydb1;\ninsert into mydb1.t1 values ('bb');因为这是在同一个库中完成的操作。\n#在生产环境中建议使用binlog的格式为row，而且慎用binlog-do-db参数。\u003C/span>\u003C/code>\u003C/pre>\u003Cp>\u003Cspan>\u003Cstrong>\u003Cspan>Top 9：\u003C/span>\u003C/strong>\u003C/span>\u003Cspan>\u003Cstrong>\u003Cspan>MySQL 数据库连接超时的报错\u003C/span>\u003C/strong>\u003C/span>\u003C/p>\u003Cpre style=\"text-align: justify;\">\u003Ccode>\u003Cspan>org.hibernate.util.JDBCExceptionReporter - SQL Error:0, SQLState: 08S01\norg.hibernate.util.JDBCExceptionReporter - The last packet successfully received from the server was43200 milliseconds ago.The last packet sent successfully to the server was 43200 milliseconds ago, which is longer than the server configured value of 'wait_timeout'. You should consider either expiring and/or testing connection validity before use in your application, increasing the server configured values for client timeouts, or using the Connector/J connection 'autoReconnect=true' to avoid this problem.\norg.hibernate.event.def.AbstractFlushingEventListener - Could not synchronize database state with session\norg.hibernate.exception.JDBCConnectionException: Could not execute JDBC batch update\ncom.mysql.jdbc.exceptions.jdbc4.MySQLNonTransientConnectionException: Connection.close() has already been called. Invalid operation in this state.\norg.hibernate.util.JDBCExceptionReporter - SQL Error:0, SQLState: 08003\norg.hibernate.util.JDBCExceptionReporter - No operations allowed after connection closed. Connection was implicitly closed due to underlying exception/error:\n ** BEGIN NESTED EXCEPTION **\n#大多数做 DBA 的同学，可能都会被开发人员告知，你们的数据库报了这个错误了。赶紧看看是哪里的问题。\u003C/span>\u003C/code>\u003C/pre>\u003Cp style=\"text-align: justify;\">\u003Cspan>这个问题是由两个参数影响的，wait_timeout 和 interactive_timeout。数据默认的配置时间是28800（8小时）意味着，超过这个时间之后，MySQL 数据库为了节省资源，就会在数据库端断开这个连接，Mysql服务器端将其断开了，但是我们的程序再次使用这个连接时没有做任何判断，所以就挂了。\u003C/span>\u003C/p>\u003Cp style=\"text-align: justify;\">\u003Cspan>\u003Cstrong>解决思路：\u003C/strong>\u003Cbr>先要了解这两个参数的特性；这两个参数必须同时设置，而且必须要保证值一致才可以。\u003C/span>\u003C/p>\u003Cp style=\"text-align: justify;\">\u003Cspan>我们可以适当加大这个值，8小时太长了，不适用于生产环境。因为一个连接长时间不工作，还占用我们的连接数，会消耗我们的系统资源。\u003C/span>\u003C/p>\u003Cp style=\"text-align: justify;\">\u003Cspan>\u003Cstrong>解决方法：\u003C/strong>\u003Cbr>可以适当在程序中做判断；强烈建议在操作结束时更改应用程序逻辑以正确关闭连接；然后设置一个比较合理的timeout的值（根据业务情况来判断）\u003C/span>\u003C/p>\u003Cp>\u003Cspan>\u003Cstrong>Top 10 ：can’t open file&nbsp;\u003C/strong>\u003C/span>\u003Cspan>\u003Cstrong>(errno:24)\u003C/strong>\u003C/span>\u003C/p>\u003Cp style=\"text-align: justify;\">\u003Cspan>有的时候，数据库跑得好好的，突然报不能打开数据库文件的错误了。\u003C/span>\u003C/p>\u003Cp style=\"text-align: justify;\">\u003Cspan>\u003Cstrong>解决思路：\u003C/strong>\u003Cbr>首先我们要先查看数据库的error log。然后判断是表损坏，还是权限问题。还有可能磁盘空间不足导致的不能正常访问表；操作系统的限制也要关注下；用 perror 工具查看具体错误！\u003C/span>\u003C/p>\u003Cpre style=\"text-align: justify;\">\u003Ccode>\u003Cspan>linux:/usr/local/mysql/bin # ./perror 24\nOS error code &nbsp;24: &nbsp;Too many open files\u003C/span>\u003C/code>\u003C/pre>\u003Cp style=\"text-align: justify;\">\u003Cspan>超出最大打开文件数限制！ulimit -n查看系统的最大打开文件数是65535，不可能超出！那必然是数据库的最大打开文件数超出限制！\u003C/span>\u003C/p>\u003Cblockquote style=\"text-align: justify;\">\u003Cp style=\"text-align: left;\">\u003Cspan>在 MySQL 里查看最大打开文件数限制命令：show variables like ‘open_files_limit’;\u003C/span>\u003C/p>\u003C/blockquote>\u003Cp style=\"text-align: justify;\">\u003Cspan>发现该数值过小，改为2048，重启 MySQL，应用正常\u003C/span>\u003C/p>\u003Cp style=\"text-align: justify;\">\u003Cspan>\u003Cstrong>处理方法：\u003C/strong>\u003C/span>\u003C/p>\u003Cpre style=\"text-align: justify;\">\u003Ccode>\u003Cspan>repair table ；\nchown mysql权限\n#清理磁盘中的垃圾数据\u003C/span>\u003C/code>\u003C/pre>\u003Cp style=\"text-align: justify;\">\u003Cspan>今后还会继续总结 MySQL 中的各种报错处理思路与方法，希望跟各位老铁们，同学们一起努力。多沟通多交流！\u003C/span>\u003C/p>\u003Cblockquote style=\"text-align: justify;\">\u003Cp style=\"text-align: left;\">来源：民工哥技术之路\u003C/p>\u003Cp style=\"text-align: left;\">\u003Cspan>链接：http://blog.51cto.com/sumongodb/1949426\u003C/span>\u003C/p>\u003C/blockquote>","> 今天就给大家列举 MySQL 数据库中，最经典的十大错误案例，并附有处理问题的解决思路和方法，希望能给刚入行，或数据库爱好者一些帮助。今后再遇到任何报错，我们都可以很淡定地去处理。学习任何一门技术的同时，其实就是自我修炼的过程。沉下心，尝试去拥抱数据的世界！\n\n**Top 1：**\n\n**Too many connections****（连接数过多，导致连接不上数据库，业务无法正常进行）**\n\n**问题还原**\n\n```\nmysql> show variables like '%max_connection%';\n| Variable_name   | Value |\nmax_connections | 151   |\nmysql> set global max_connections=1;Query OK, 0 rows affected (0.00 sec)\n[root@node4 ~]# mysql -uzs -p123456 -h 192.168.56.132\nERROR 1040 (00000): Too many connections\n```\n\n**解决问题的思路：**\n\n1、首先先要考虑在我们 MySQL 数据库参数文件里面，对应的 max_connections 这个参数值是不是设置的太小了，导致客户端连接数超过了数据库所承受的最大值。\n\n- 该值默认大小是151，我们可以根据实际情况进行调整。\n- 对应解决办法：set global max_connections=500\n\n但这样调整会有隐患，因为我们无法确认数据库是否可以承担这么大的连接压力，就好比原来一个人只能吃一个馒头，但现在却非要让他吃 10 个，他肯定接受不了。反应到服务器上面，就有可能会出现宕机的可能。\n\n所以这又反应出了，我们在新上线一个业务系统的时候，要做好压力测试。保证后期对数据库进行优化调整。\n\n2、其次可以限制 Innodb 的并发处理数量，如果 innodb_thread_concurrency = 0（这种代表不受限制） 可以先改成 16 或是 64 看服务器压力。如果非常大，可以先改的小一点让服务器的压力下来之后,然后再慢慢增大,根据自己的业务而定。个人建议可以先调整为 16 即可。\n\nMySQL 随着连接数的增加性能是会下降的，可以让开发配合设置 thread pool，连接复用。在MySQL商业版中加入了thread pool这项功能，另外对于有的监控程序会读取 information_schema 下面的表，可以考虑关闭下面的参数\n\n```\ninnodb_stats_on_metadata=0\nset global innodb_stats_on_metadata=0\n```\n\n**\nTop 2:\n**\n\n**\n（主从复制报错类型）\n**\n\nLast_SQL_Errno: 1062  （从库与主库数据冲突）\n\n```\nLast_Errno: 1062\n   Last_Error: Could not execute Write_rows event on table test.t;\n   Duplicate entry '4' for key 'PRIMARY',\n   Error_code: 1062; handler error HA_ERR_FOUND_DUPP_KEY;\n   the event's master log mysql-bin.000014, end_log_pos 1505\n```\n\n针对这个报错，我们首先要考虑是不是在**从库中误操作导致的。**结果发现，我们在从库中进行了一条针对有主键表的 sql 语句的插入，导致主库再插入相同 sql 的时候，主从状态出现异常。发生主键冲突的报错。\n\n**解决方法：**\n\n在确保主从数据一致性的前提下，可以在从库进行错误跳过。一般使用 percona-toolkit 中的 pt-slave-restart 进行。\n\n在从库完成如下操作\n\n```\n[root@zs bin]# ./pt-slave-restart -uroot -proot123\n2017-07-20T14:05:30 p=...,u=root node4-relay-bin.000002   1506 1062\n```\n\n> 之后最好在从库中开启 read_only 参数，禁止在从库进行写入操作\n\nLast_IO_Errno: 1593（server-id冲突）\n\n```\nLast_IO_Error:\n  Fatal error: The slave I/O thread stops because master and slave have equal MySQL server ids;\n  these ids must be different for replication to work\n  (or the --replicate-same-server-id option must be used on slave but this\n  does not always make sense; please check the manual before using it)\n#这个报错出现之后，就看一目了然看到两台机器的 server-id 是一样的。\n```\n\n在搭建主从复制的过程中，我们要确保两台机器的 server-id 是唯一的。这里再强调一下 server-id 的命名规则（服务器 ip 地址的最后一位+本 MySQL 服务的端口号）\n\n**解决方法：**\n在主从两台机器上设置不同的 server-id。\n\nLast_SQL_Errno: 1032（从库少数据，主库更新的时候，从库报错）\n\n```\nLast_SQL_Error:\nCould not execute Update_rows event on table test.t; Can't find record\nin 't', Error_code: 1032; handler error HA_ERR_KEY_NOT_FOUND; the\nevent's master log mysql-bin.000014, end_log_pos 1708\n```\n\n**解决办法：**\n\n根据报错信息，我们可以获取到报错日志和position号，然后就能找到主库执行的哪条sql，导致的主从报错。\n\n在主库执行：\n\n```\n/usr/local/mysql/bin/mysqlbinlog --no-defaults -v -v --base64-output=decode-rows /data/mysql/mysql-bin.000014 |grep -A 10 1708 > 1.log\ncat 1.log\n#170720 14:20:15 server id 3  end_log_pos 1708 CRC32 0x97b6bdec     Update_rows: table id 113 flags: STMT_END_F\n### UPDATE `test`.`t`\n### WHERE\n###   @1=4 /* INT meta=0 nullable=0 is_null=0 */\n###   @2='dd' /* VARSTRING(60) meta=60 nullable=1 is_null=0 */\n### SET\n###   @1=4 /* INT meta=0 nullable=0 is_null=0 */\n###   @2='ddd' /* VARSTRING(60) meta=60 nullable=1 is_null=0 */\n# at 1708\n#170720 14:20:15 server id 3  end_log_pos 1739 CRC32 0xecaf1922     Xid = 654\nCOMMIT/*!*/;\nDELIMITER ;\n# End of log file\nROLLBACK /* added by mysqlbinlog */;\n/*!50003 SET COMPLETION_TYPE=@OLD_COMPLETION_TYPE*/;\n/*!50530 SET @@SESSION.PSEUDO_SLAVE_MODE=0*/;\n```\n\n获取到 sql 语句之后，就可以在从库反向执行 sql 语句。把从库缺少的 sql 语句补全，解决报错信息。\n\n在从库依次执行：\n\n```\nmysql> insert into t (b) values ('ddd');\nQuery OK, 1 row affected (0.01 sec)\nmysql> stop slave;\nQuery OK, 0 rows affected (0.00 sec)\nmysql> exit\nBye\n[root@node4 bin]# ./pt-slave-restart -uroot -proot123\n2017-07-20T14:31:37 p=...,u=root node4-relay-bin.000005         283 1032\n```\n\n**\nTop 3：\n**\n\n**\nMySQL 安装过程中的报错\n**\n\n```\n[root@zs data]# /usr/local/mysql/bin/mysqld_safe --defaults-file=/etc/my.cnf &[1] 3758\n[root@zs data]# 170720 14:41:24 mysqld_safe Logging to '/data/mysql/error.log'.\n170720 14:41:24 mysqld_safe Starting mysqld daemon with databases from /data/mysql170720\n14:41:25 mysqld_safe mysqld from pid file /data/mysql/node4.pid ended\n170720 14:41:24 mysqld_safe Starting mysqld daemon with databases from /data/mysql2017-07-20\n14:41:25 0 [Warning] TIMESTAMP with implicit DEFAULT value is deprecated.\nPlease use --explicit_defaults_for_timestamp server option\n(see documentation for more details)./usr/local/mysql/bin/mysqld:\nFile '/data/mysql/mysql-bin.index' not found (Errcode: 13 - Permission denied)\n2017-07-20 14:41:25 4388 [ERROR] Aborting\n```\n\n**解决思路：**\n遇到这样的报错信息，我们要学会时时去关注错误日志 error log 里面的内容。看见了关键的报错点**Permission denied。证明当前 MySQL 数据库的数据目录没有权限。**\n\n**解决方法：**\n\n```\n[root@zs data]# chown mysql:mysql -R mysql\n[root@zs data]# /usr/local/mysql/bin/mysqld_safe --defaults-file=/etc/my.cnf &\n[1] 4402\n[root@zs data]# 170720 14:45:56 mysqld_safe Logging to '/data/mysql/error.log'.\n170720 14:45:56 mysqld_safe Starting mysqld daemon with databases from /data/mysql\n#启动成功。\n```\n\n**如何避免这类问题，个人建议在安装MySQL初始化的时候，一定加上—user=mysql，这样就可以避免权限问题。**\n\n```\n./mysql_install_db --basedir=/usr/local/mysql/ --datadir=/data/mysql/ --defaults-file=/etc/my.cnf --user=mysql\n```\n\n**Top 4：数据库密码忘记的问题**\n\n```\n[root@zs ~]# mysql -uroot -p\nEnter password:\nERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: YES)\n[root@zs ~]# mysql -uroot -p\nEnter password:\nERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: YES)\n#我们有可能刚刚接手别人的 MySQL 数据库，而且没有完善的交接文档。root 密码可以丢失或者忘记了。\n```\n\n**解决思路：**\n目前是进入不了数据库的情况，所以我们要考虑是不是可以跳过权限。因为在数据库中，mysql数据库中user表记录着我们用户的信息。\n\n**解决方法：**\n启动 MySQL 数据库的过程中，可以这样执行：\n\n```\n/usr/local/mysql/bin/mysqld_safe --defaults-file=/etc/my.cnf  --skip-grant-tables &\n这样启动，就可以不用输入密码，直接进入 mysql 数据库了。然后在修改你自己想要改的root密码即可。\nupdate mysql.user set password=password('root123') where user='root';\n```\n\n**\nTop 5：\n**\n\n**\ntruncate 删除数据，导致自动清空自增ID，前端返回报错 not found。\n**\n\n这个问题的出现，就要**考虑下truncate 和 delete 的区别了。**\n\n看下实验演练：\n\n```\n#首先先创建一张表；\n\nCREATE TABLE `t` (\n  `a` int(11) NOT NULL AUTO_INCREMENT,\n  `b` varchar(20) DEFAULT NULL,\n  PRIMARY KEY (`a`),\n  KEY `b` (`b`)\n) ENGINE=InnoDB AUTO_INCREMENT=300 DEFAULT CHARSET=utf8\n#插入三条数据：\nmysql> insert into t (b) values ('aa');\nQuery OK, 1 row affected (0.00 sec)\nmysql> insert into t (b) values ('bb');\nQuery OK, 1 row affected (0.00 sec)\nmysql> insert into t (b) values ('cc');\nQuery OK, 1 row affected (0.00 sec)\nmysql> select * from t;\n+-----+------+\n| a   | b    |\n+-----+------+\n| 300 | aa   |\n| 301 | bb   |\n| 302 | cc   |\n+-----+------+\n3 rows in set (0.00 sec)\n#先用 delete 进行删除全表信息，再插入新值。\n```\n\n结果发现truncate把自增初始值重置了，自增属性从1开始记录了。当前端用主键id进行查询时，就会报没有这条数据的错误。\n\n个人建议不要使用truncate对表进行删除操作，虽然可以回收表空间，但是会涉及自增属性问题。这些坑，我们不要轻易钻进去。\n\n**\nTop 6：\n**\n**\n阿里云 MySQL 的配置文件中，需要注意一个参数设置就是：\n**\n\n```\nlower_case_table_names = 0;默认情况\nlower_case_table_names = 1;是不区分大小写 . 如果报你小写的表名找不到, 那你就把远端数据库的表名改成小写 , 反之亦然 . 注意 Mybatis 的 Mapper 文件的所有表名也要相应修改\n```\n\n**\nTop 7：\n**\n\n**\n数据库总会出现中文乱码的情况\n**\n\n**解决思路：**\n\n对于中文乱码的情况，记住老师告诉你的三个统一就可以。还要知道在目前的mysql数据库中字符集编码都是默认的UTF8\n\n**处理办法：**\n\n> 1、数据终端，也就是我们连接数据库的工具设置为 utf82、操作系统层面；可以通过 cat /etc/sysconfig/i18n 查看；也要设置为 utf83、数据库层面；在参数文件中的 mysqld 下，加入 character-set-server=utf8。\n\nEmoji 表情符号录入 mysql 数据库中报错。\n\n```\nCaused by: java.sql.SQLException: Incorrect string value: '\\xF0\\x9F\\x98\\x97\\xF0\\x9F...' for column 'CONTENT' at row 1\nat com.mysql.jdbc.SQLError.createSQLException(SQLError.java:1074)\nat com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:4096)\nat com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:4028)\nat com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:2490)\nat com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:2651)\nat com.mysql.jdbc.ConnectionImpl.execSQL(ConnectionImpl.java:2734)\nat com.mysql.jdbc.PreparedStatement.executeInternal(PreparedStatement.java:2155)\nat com.mysql.jdbc.PreparedStatement.execute(PreparedStatement.java:1379)\n```\n\n**解决思路**：针对表情插入的问题，一定还是字符集的问题。\n**处理方法**：我们可以直接在参数文件中，加入\n\n```\nvim /etc/my.cnf\n[mysqld]\ninit-connect='SET NAMES utf8mb4'\ncharacter-set-server=utf8mb4\n注：utf8mb4 是 utf8 的超集。\n```\n\n**\nTop 8：使用 binlog_format=statement 这种格式，跨库操作，导致从库丢失数据，用户访问导致出现错误数据信息。\n**\n\n```\n#当前数据库二进制日志的格式为：binlog_format=statement\n在主库设置binlog-do-db=mydb1（只同步mydb1这一个库）\n在主库执行use mydb2；\ninsert into mydb1.t1 values ('bb');这条语句不会同步到从库。\n但是这样操作就可以；\nuse mydb1;\ninsert into mydb1.t1 values ('bb');因为这是在同一个库中完成的操作。\n#在生产环境中建议使用binlog的格式为row，而且慎用binlog-do-db参数。\n```\n\n**\nTop 9：\n**\n\n**\nMySQL 数据库连接超时的报错\n**\n\n```\norg.hibernate.util.JDBCExceptionReporter - SQL Error:0, SQLState: 08S01\norg.hibernate.util.JDBCExceptionReporter - The last packet successfully received from the server was43200 milliseconds ago.The last packet sent successfully to the server was 43200 milliseconds ago, which is longer than the server configured value of 'wait_timeout'. You should consider either expiring and/or testing connection validity before use in your application, increasing the server configured values for client timeouts, or using the Connector/J connection 'autoReconnect=true' to avoid this problem.\norg.hibernate.event.def.AbstractFlushingEventListener - Could not synchronize database state with session\norg.hibernate.exception.JDBCConnectionException: Could not execute JDBC batch update\ncom.mysql.jdbc.exceptions.jdbc4.MySQLNonTransientConnectionException: Connection.close() has already been called. Invalid operation in this state.\norg.hibernate.util.JDBCExceptionReporter - SQL Error:0, SQLState: 08003\norg.hibernate.util.JDBCExceptionReporter - No operations allowed after connection closed. Connection was implicitly closed due to underlying exception/error:\n ** BEGIN NESTED EXCEPTION **\n#大多数做 DBA 的同学，可能都会被开发人员告知，你们的数据库报了这个错误了。赶紧看看是哪里的问题。\n```\n\n这个问题是由两个参数影响的，wait_timeout 和 interactive_timeout。数据默认的配置时间是28800（8小时）意味着，超过这个时间之后，MySQL 数据库为了节省资源，就会在数据库端断开这个连接，Mysql服务器端将其断开了，但是我们的程序再次使用这个连接时没有做任何判断，所以就挂了。\n\n**解决思路：**\n先要了解这两个参数的特性；这两个参数必须同时设置，而且必须要保证值一致才可以。\n\n我们可以适当加大这个值，8小时太长了，不适用于生产环境。因为一个连接长时间不工作，还占用我们的连接数，会消耗我们的系统资源。\n\n**解决方法：**\n可以适当在程序中做判断；强烈建议在操作结束时更改应用程序逻辑以正确关闭连接；然后设置一个比较合理的timeout的值（根据业务情况来判断）\n\n**Top 10 ：can’t open file **\n\n**(errno:24)**\n\n有的时候，数据库跑得好好的，突然报不能打开数据库文件的错误了。\n\n**解决思路：**\n首先我们要先查看数据库的error log。然后判断是表损坏，还是权限问题。还有可能磁盘空间不足导致的不能正常访问表；操作系统的限制也要关注下；用 perror 工具查看具体错误！\n\n```\nlinux:/usr/local/mysql/bin # ./perror 24\nOS error code  24:  Too many open files\n```\n\n超出最大打开文件数限制！ulimit -n查看系统的最大打开文件数是65535，不可能超出！那必然是数据库的最大打开文件数超出限制！\n\n> 在 MySQL 里查看最大打开文件数限制命令：show variables like ‘open_files_limit’;\n\n发现该数值过小，改为2048，重启 MySQL，应用正常\n\n**处理方法：**\n\n```\nrepair table ；\nchown mysql权限\n#清理磁盘中的垃圾数据\n```\n\n今后还会继续总结 MySQL 中的各种报错处理思路与方法，希望跟各位老铁们，同学们一起努力。多沟通多交流！\n\n> 来源：民工哥技术之路链接：http://blog.51cto.com/sumongodb/1949426","/article/91",4822,"2018-11-16 09:22:07","2018-11-16 09:22:46",[156,157],{"id":40,"name":72,"url":75},{"id":145,"name":146,"url":151},{"create_time":6,"description":6,"id":40,"image_url":6,"index_template":52,"is_cover":53,"is_menu":53,"keywords":6,"list_template":54,"model_code":55,"model_id":56,"model_name":57,"name":72,"parent_id":73,"seo_description":6,"seo_keywords":6,"seo_title":6,"show_template":58,"sort":74,"subtitle":6,"update_time":6,"url":75},{"title":160,"url":161},"MySQL高性能优化实战总结","/article/95",{"title":163,"url":164},"10大Nginx优化配置项","/article/89",[],{"description":148,"keywords":147,"title":146},[168,177,186,195,204,213,222,231,240,248],{"id":169,"category_id":44,"title":170,"keywords":171,"description":172,"image_url":6,"url":173,"hits":174,"is_recommend":73,"is_top":73,"create_time":175,"update_time":176},101,"开启 HTTPS 并获得 ssllabs 满分的过程","开启,获得,满分,过程","准备工作确保你要申请证书的域名都解析到了这台服务器上，且能直接通过域名访问。使用官网推荐的CertBot获取证书。在CertBot官网选择一下环境(比如我选Nginx on Ubuntu 17.04)就可以看到入门教程了。安装CertBot12345apt-get updateapt-get install software-properties-commonadd-apt-repository ppa:certbot/certbotapt-get updateapt-get","/article/101",18546,"2019-11-26 16:12:11","2019-11-26 16:23:16",{"id":178,"category_id":44,"title":179,"keywords":180,"description":181,"image_url":6,"url":182,"hits":183,"is_recommend":73,"is_top":73,"create_time":184,"update_time":185},113,"在CentOS 7中添加命令自动补全功能","命令自动补全,centos","在CentOS 7中，默认情况下并不会安装命令补全包，需要手动安装才能使用命令补全功能。以下是在CentOS 7中安装命令补全包的方法：1. bash-completion：这是一个针对Bash shell的命令补全软件包，可以提供对系统命令、用户自定义命令和文件路径的自动补全功能。可以通过以下命令安装：```sudo yum install bash-completion```安装完成后，需要在/etc/profile配置文件中添加以下内容：```if [ -f /etc/bash_compl","/article/113",14948,"2023-05-16 10:54:01","2023-05-16 10:57:28",{"id":187,"category_id":44,"title":188,"keywords":189,"description":190,"image_url":6,"url":191,"hits":192,"is_recommend":53,"is_top":73,"create_time":193,"update_time":194},94,"Centos7 安装 openvas ","openvas,开放式漏洞评估系统，installing openvas centos-7","一、描述OpenVAS，即开放式漏洞评估系统，是一个用于评估目标漏洞的杰出框架。功能十分强大，最重要的是，它是“开源”的——就是免费的意思啦～它与著名的Nessus“本是同根生”，在Nessus商业化之后仍然坚持开源，号称“当前最好用的开源漏洞扫描工具”。最新版的Kali Linux(kali 3.0)不再自带OpenVAS了，所以我们要自己部署OpenVAS漏洞检测系统。其核心部件是一个服务器，包括一套网络漏洞测试程序，可以检测远程系统和应用程序中的安全问题。但是它的最常用用途是检测目标网络或","/article/94",14690,"2019-01-14 17:43:42","2019-01-14 18:16:36",{"id":196,"category_id":44,"title":197,"keywords":198,"description":199,"image_url":6,"url":200,"hits":201,"is_recommend":73,"is_top":73,"create_time":202,"update_time":203},99,"Centos7 利用iptables防止nmap工具防端口扫描","iptables","一、Nmap介绍       Nmap（NetworkMapper）是一款开放源代码的网络探测和安全审核工具。它用于快速扫描一个网络和一台主机开放的端口，还能使用TCP/IP协议栈特征探测远程主机的操作系统类型。nmap支持很多扫描技术，例如：UDP、TCPconnect()、TCPSYN(半开扫描)、ftp代理(bounce攻击)、反向标志、ICMP、FIN、ACK扫描、圣诞树(XmasTree)、SYN扫描和null扫描。Nmap最初是用于Unix系统","/article/99",14415,"2019-07-09 21:27:00","2019-07-09 21:57:53",{"id":205,"category_id":46,"title":206,"keywords":207,"description":208,"image_url":6,"url":209,"hits":210,"is_recommend":73,"is_top":73,"create_time":211,"update_time":212},61,"Docker 推荐的启动方式","推荐,启动,方式","# cat DockerfileFROM openjdk:8-alpineWORKDIR /ADD ./target/*.jar app.jarEXPOSE 9999COPY docker-entrypoint.sh /RUN chmod +x /docker-entrypoint.shENTRYPOINT [“/docker-entrypoint.sh”]CMD [“java”,”-server”,”-Duser.timezone=GMT+08″,”-jar”,”/app.jar”]# cat","/article/61",14347,"2018-10-22 13:55:47","2018-10-22 13:56:10",{"id":214,"category_id":44,"title":215,"keywords":216,"description":217,"image_url":6,"url":218,"hits":219,"is_recommend":73,"is_top":73,"create_time":220,"update_time":221},107,"Acme.sh 给 SSL 证书自动续期失败的解决方法","HTTP/1.1 200 OK,Server: Bayou Tech Web Srv 1.0,Content-Encoding: none,Content-Length: 5,Content-Type","一、Acme.sh 自动续期失败的症状问题描述如下，续期的时候，提示如下错误：root@dc:~# \"/data/acme.sh\"/acme.sh --cron --home \"/data/acme.sh\" &gt; /dev/null[Sun Nov 10 23:52:17 CST 2020] Error, can not get domain token entry example.com[Sun Nov 10 23:52:17 CST 2020] Please check log file","/article/107",12618,"2021-09-03 10:44:18","2021-09-03 10:46:23",{"id":223,"category_id":44,"title":224,"keywords":225,"description":226,"image_url":6,"url":227,"hits":228,"is_recommend":53,"is_top":73,"create_time":229,"update_time":230},93,"ELK+Filebeat+Kafka+ZooKeeper 构建海量日志分析平台","Filebeat,Kafka","一、说明1.Filebeat是一个日志文件托运工具，在你的服务器上安装客户端后，filebeat会监控日志目录或者指定的日志文件，追踪读取这些文件（追踪文件的变化，不停的读）2.Kafka是一种高吞吐量的分布式发布订阅消息系统，它可以处理消费者规模的网站中的所有动作流数据3.Logstash是一根具备实时数据传输能力的管道，负责将数据信息从管道的输入端传输到管道的输出端；与此同时这根管道还可以让你根据自己的需求在中间加上滤网，Logstash提供里很多功能强大的滤网以满足你的各种应用场景4.El","/article/93",12190,"2018-12-24 16:40:08","2018-12-26 11:53:38",{"id":232,"category_id":46,"title":233,"keywords":234,"description":235,"image_url":6,"url":236,"hits":237,"is_recommend":53,"is_top":73,"create_time":238,"update_time":239},81,"kubernetes 1.12.1 高可用安装之部署Dashboard","安装Dashboard","创建Dashboard需要CoreDNS部署成功之后再安装Dashboard。[root@master01 ~]# wget https://zhl123.com/download/k8s/Dashboard.tgz[root@master01 ~]# tar xf Dashboard.tgz[root@master01 ~]# kubectl create -f Dashboard/[root@master01 Dashboard]# kubectl get svc -n kube-syste","/article/81",12037,"2018-10-26 09:54:41","2018-10-26 16:59:19",{"id":241,"category_id":44,"title":242,"keywords":6,"description":243,"image_url":6,"url":244,"hits":245,"is_recommend":73,"is_top":73,"create_time":246,"update_time":247},100,"用 Nginx 给 Cookie 增加 Secure 和 HttpOnly","在 nginx 的 location 中配置12# 只支持 proxy 模式下设置，SameSite 不需要可删除，如果想更安全可以把 SameSite 设置为 Strictproxy_cookie_path / \"/; httponly; secure; SameSite=Lax\";示例1234567891011121314151617181920212223242526server {    listen 443 ssl http2;    server_name www.zhl123.cn","/article/100",11848,"2019-11-26 16:10:57","2019-11-26 16:23:45",{"id":249,"category_id":44,"title":250,"keywords":251,"description":252,"image_url":6,"url":253,"hits":254,"is_recommend":73,"is_top":73,"create_time":255,"update_time":256},41,"Tomcat 安全配置与性能优化","tomcat，性能优化","1. JVM&nbsp;1.1. 使用 Server JRE 替代JDK。&nbsp;服务器上不要安装JDK，请使用 Server JRE. 服务器上根本不需要编译器，代码应该在Release服务器上完成编译打包工作。&nbsp;理由：一旦服务器被控制，可以防止在其服务器上编译其他恶意代码并植入到你的程序中。&nbsp;1.2. JAVA_OPTS&nbsp;export JAVA_OPTS=\"-server -Xms512m -Xmx4096m &nbsp;-XX:PermSize=64M -","/article/41",11623,"2016-09-01 17:06:36","2018-10-18 17:06:58",[258,266,274,282,290,298,306,314,323,332],{"id":259,"category_id":40,"title":260,"keywords":6,"description":261,"image_url":6,"url":262,"hits":263,"is_recommend":73,"is_top":73,"create_time":264,"update_time":265},123,"Agent Skill 精选集：最值得收藏的 Agent Skills Top 10","如果你正在用 Claude Code 或 Codex，一定对&nbsp;Agent Skills&nbsp;不陌生。通过安装&nbsp;Agent Skills，你可以让这些 AI 助手变得更强——不用每次都解释你的需求，它们直接就知道该怎么做。最近有人在 GitHub 上做了一个采样调查，统计了哪些 Skills 的质量最佳和最受欢迎。我整理了这份&nbsp;Top 10 榜单，加上使用场景和适合人群，帮你快速找到最有用的那几个。Top 10 最受欢迎的 Agent Skills1. Skil","/article/123",270,"2026-01-19 18:49:12","2026-01-19 18:52:01",{"id":267,"category_id":44,"title":268,"keywords":6,"description":269,"image_url":6,"url":270,"hits":271,"is_recommend":73,"is_top":73,"create_time":272,"update_time":273},122,"Nginx性能调优18条黄金法则：支撑10万并发的配置模板","一、概述1.1 背景介绍说实话，Nginx调优这事儿我踩过无数坑。记得2019年双11，我们电商平台流量暴涨，Nginx直接扛不住了，QPS从平时的2万飙升到8万，响应时间从50ms飙到了2秒，最后还是靠临时加机器扛过去的。那次事故之后，我花了大半年时间专门研究Nginx的性能极限，总结出了这20条黄金法则。Nginx作为目前最流行的Web服务器和反向代理，官方数据显示单机可以轻松处理10万+的并发连接。但实际生产环境中，很多同学拿到默认配置就直接上了，结果发现连1万并发都扛不住。问题不在Ngi","/article/122",337,"2026-01-12 11:11:50","2026-01-12 11:12:28",{"id":275,"category_id":46,"title":276,"keywords":6,"description":277,"image_url":6,"url":278,"hits":279,"is_recommend":73,"is_top":73,"create_time":280,"update_time":281},121,"Docker 镜像优化与安全扫描：将镜像体积压缩 70%","1. 适用场景 & 前置条件项目要求适用场景容器化应用镜像体积过大（> 500MB），构建时间长（> 10分钟），存在安全漏洞（CVE高危）OSRHEL/CentOS 7.9+ 或 Ubuntu 20.04+内核Linux Kernel 3.10+软件版本Docker 20.10+ 或 Podman 3.0+，Trivy 0.40+（安全扫描工具）资源规格2C4G（最小）/ 4C8G（推荐），磁盘 50GB+（存储镜像与缓存）网络可访问 Docker Hub/阿里云镜像仓库（","/article/121",309,"2026-01-06 11:54:35","2026-01-06 12:01:59",{"id":283,"category_id":44,"title":284,"keywords":6,"description":285,"image_url":6,"url":286,"hits":287,"is_recommend":73,"is_top":73,"create_time":288,"update_time":289},120,"用 Prometheus Recording Rules 把告警噪声砍掉 70%(二)","五、故障排查和监控5.1 故障排查◆ 5.1.1 日志查看# 查看 Prometheus 日志中的规则评估错误journalctl -u prometheus | grep -i&nbsp;\"rule\"&nbsp;|&nbsp;tail&nbsp;-50# 查看规则评估耗时curl -s http://localhost:9090/api/v1/rules | jq&nbsp;'.data.groups[].rules[] | select(.health != \"ok\")'# Kubernet","/article/120",282,"2026-01-06 11:53:50","2026-01-06 11:54:33",{"id":291,"category_id":44,"title":292,"keywords":6,"description":293,"image_url":6,"url":294,"hits":295,"is_recommend":73,"is_top":73,"create_time":296,"update_time":297},119,"用 Prometheus Recording Rules 把告警噪声砍掉 70%(一)","一、概述1.1 背景介绍在大规模微服务架构下，Prometheus 告警系统往往会陷入一个尴尬的境地：告警太多，运维团队开始选择性忽略；告警太少，真正的故障又可能漏掉。我在某电商平台负责监控体系建设时，团队每天要处理超过 2000 条告警，其中 70% 以上是重复的、关联的或者短暂抖动产生的噪声。Recording Rules 是 Prometheus 提供的预计算机制，可以将复杂的查询表达式预先计算并存储为新的时间序列。通过合理设计 Recording Rules，我们不仅能显著降低 Prom","/article/119",301,"2026-01-06 11:51:58","2026-01-06 11:53:45",{"id":299,"category_id":44,"title":300,"keywords":6,"description":301,"image_url":6,"url":302,"hits":303,"is_recommend":73,"is_top":73,"create_time":304,"update_time":305},118,"GitOps 落地实践：ArgoCD + Kustomize 实现声明式基础设施管理(二)","四、最佳实践和注意事项4.1 最佳实践4.1.1 性能优化优化点一：减少 Git 轮询频率# argocd-cm ConfigMapapiVersion:&nbsp;v1kind:&nbsp;ConfigMapmetadata:&nbsp;&nbsp;name:&nbsp;argocd-cm&nbsp;&nbsp;namespace:&nbsp;argocddata:&nbsp;&nbsp;timeout.reconciliation:&nbsp;300s&nbsp;&nbsp;# 默认 180","/article/118",305,"2026-01-06 11:49:00","2026-01-06 11:49:34",{"id":307,"category_id":44,"title":308,"keywords":6,"description":309,"image_url":6,"url":310,"hits":311,"is_recommend":73,"is_top":73,"create_time":312,"update_time":313},117,"GitOps 落地实践：ArgoCD + Kustomize 实现声明式基础设施管理(一)","一、概述1.1 背景介绍GitOps 作为云原生时代的运维范式，将 Git 作为基础设施和应用配置的单一事实来源，通过声明式配置和自动化同步机制，实现了配置管理的版本控制、审计追溯和快速回滚。ArgoCD 作为 CNCF 毕业项目，提供了完整的 GitOps 工作流，支持多集群管理、RBAC 权限控制、SSO 集成等企业级特性。结合 Kustomize 的配置管理能力，能够优雅地解决多环境配置差异、敏感信息管理、配置复用等问题。在传统的 CI/CD 流程中，往往由 CI 工具直接执行 kubec","/article/117",310,"2026-01-06 11:45:03","2026-01-06 11:48:56",{"id":315,"category_id":40,"title":316,"keywords":317,"description":318,"image_url":6,"url":319,"hits":320,"is_recommend":73,"is_top":73,"create_time":321,"update_time":322},116,"运维部门年度2025工作总结与2026工作规划应该如何写？","运维部门年度2025工作总结,2026工作规划","2025年，运维部在公司“数字化转型深化”战略引领下，以“稳定为基、效率为纲、安全为盾、创新为翼”为核心导向，全面支撑核心业务系统运行、推动技术架构迭代、强化团队能力建设。 全年实现核心业务系统可用性99.985%，较2024年提升0.02个百分点；故障平均恢复时间（MTTR）从42分钟压缩至29分钟，下降31%；云资源成本同比降低16.8%，自动化运维覆盖率从65%提升至83%，未发生重大生产安全事故，圆满完成年度目标。现将全年工作及2026年规划汇报如下：2025年核心工作成果（数","/article/116",297,"2026-01-06 11:20:58","2026-01-06 11:44:04",{"id":324,"category_id":40,"title":325,"keywords":326,"description":327,"image_url":6,"url":328,"hits":329,"is_recommend":73,"is_top":73,"create_time":330,"update_time":331},115,"Kubernetes 100个常用命令","100 个 Kubectl 命令","这篇文章是关于使用 Kubectl 进行 Kubernetes 诊断的指南。列出了 100 个 Kubectl 命令，这些命令对于诊断 Kubernetes 集群中的问题非常有用。这些问题包括但不限于：•&nbsp;集群信息•&nbsp;Pod 诊断•&nbsp;服务诊断•&nbsp;部署诊断•&nbsp;网络诊断•&nbsp;持久卷和持久卷声明诊断•&nbsp;资源使用情况•&nbsp;安全和授权•&nbsp;节点故障排除•&nbsp;其他诊断命令：文章还提到了许多其他命令，如资源扩展和自动扩","/article/115",3642,"2023-11-02 14:09:30","2023-11-02 14:10:05",{"id":178,"category_id":44,"title":179,"keywords":180,"description":181,"image_url":6,"url":182,"hits":183,"is_recommend":73,"is_top":73,"create_time":184,"update_time":185},1784716028642]