短连接风暴
连接数量超过max_connections时,新来的连接会被拒绝。这时有一些临时解决办法(注意这些办法都是有损的)
- kill掉那些占用连接但未进行事务操作的线程,注意如果数据库端主动断开连接,客户端是不能立刻感知的。
- 让数据库建立连接时跳过权限验证阶段,重启数据库,并使用
–skip-grant-tables
参数启动,注意这样对于存在外网IP的数据库是十分危险的
慢查询问题
索引没设计好
这时可以用online DDL增加索引。比较理想的是能够在备库先执行。假设你现在的服务是一主一备,主库A、备库B,这个方案的大致流程是这样的:
- 在备库B上执行
set sql_log_bin=off
,也就是不写binlog,然后执行alter table
语句加上索引; - 执行主备切换;
- 这时候主库是B,备库是A。在A上执行
set sql_log_bin=off
,然后执行alter table
语句加上索引。
SQL语句没设计好
可以通过query_rewrite,增加规则使得数据库语句强行改写
索引选错了
用force index
参考文献
MySQL实战45讲