扫二维码与项目经理沟通
我们在微信上24小时期待你的声音
解答本文疑问/技术咨询/运营咨询/技术建议/互联网交流
mysql数据库连接造量sleep状态办
创新互联从2013年成立,先为海兴等服务建站,海兴等地企业,进行企业商务咨询服务。为海兴企业网站制作PC+手机+微官网三网同步一站式服务解决您的所有建站问题。
用navicat自备份mysql数据库:
1、启navicat软件使用连接mysql数据库
2、随弹随意起连接名;输入主机名/ip填写mysql数据库所服务器ip址用户名密码mysql数据库root密码
3、左边列数据库连接名快捷式双击列mysql面所数据库等同于show databases命令图172..16.20.69:
4、单击选定需要备份数据库点项计划任务翻译计画任务图:
5、点击创建批处理任务
6、弹新窗口双击用任务Backup【数据库名称】面选择任务框现选取Backup 【数据库名称】备份库比图wakawaka数据库
7、点击"保存" 随意输入文件名比 chuxuefeng-wakawaka
8、返 Navicat for MySQL 窗口打hl2库计画任务看计画任务chuxuefeng-wakawakachuxuefeng-wakawaka点右键选择设置计画任务
9、新窗口选择计划页新建计划高级选项勾选重复任务
10、打高级选项设定每少备份持续间选择9999设置每每隔3备份实际般设定每0:00备份行具体间间隔视服务器情况定
11、设置完计划任务系统要求输入windows本机administrator密码
12、现做计划任务数据库每隔设定段间自备份自备份文件名按间排序名称按照设定名称备份需要恢复备份按间恢复数据
13、需要恢复数据双击相应备份文件点击始恢复数据
第一阶段:
1,一定要正确设计索引
2,一定要避免SQL语句全表扫描,所以SQL一定要走索引(如:一切的 != 等等之类的写法都会导致全表扫描)
3,一定要避免 limit 10000000,20 这样的查询
4,一定要避免 LEFT JOIN 之类的查询,不把这样的逻辑处理交给数据库
5,每个表索引不要建太多,大数据时会增加数据库的写入压力
第二阶段:
1,采用分表技术(大表分小表)
a)垂直分表:将部分字段分离出来,设计成分表,根据主表的主键关联
b)水平分表:将相同字段表中的记录按照某种Hash算法进行拆分多个分表
2,采用mysql分区技术(必须5.1版以上,此技术完全能够对抗Oracle),与水平分表有点类似,但是它是在逻辑层进行的水平分表
第三阶段(服务器方面):
1,采用memcached之类的内存对象缓存系统,减少数据库读取操作
2,采用主从数据库设计,分离数据库的读写压力
3,采用Squid之类的代理服务器和Web缓存服务器技术
PS:由于篇幅问题,我只简单说一些基本概念,其实里面每个知识点关系到的内容都很多。特别是第一阶段,很多工作几年的程序员,都不能完全理解。我觉得要真正理解索引,最好的办法就是在1000W-亿级以上的数据,进行测试SQL语句,再结合 explain 命令进行查看SQL语句索引情况。
我们经常会遇到操作一张大表,发现操作时间过长或影响在线业务了,想要回退大表操作的场景。在我们停止大表操作之后,等待回滚是一个很漫长的过程,尽管你可能对知道一些缩短时间的方法,处于对生产环境数据完整性的敬畏,也会选择不做介入。最终选择不作为的原因大多源于对操作影响的不确定性。实践出真知,下面针对两种主要提升事务回滚速度的方式进行验证,一种是提升操作可用内存空间,一种是通过停实例,禁用 redo 回滚方式进行进行验证。
仔细阅读过官方手册的同学,一定留意到了对于提升大事务回滚效率,官方提供了两种方法:一是增加 innodb_buffer_pool_size 参数大小,二是合理利用 innodb_force_recovery=3 参数,跳过事务回滚过程。第一种方式比较温和,innodb_buffer_pool_size 参数是可以动态调整的,可行性也较高。第二种方式相较之下较暴力,但效果较好。
两种方式各有自己的优点,第一种方式对线上业务系统影响较小,不会中断在线业务。第二种方式效果更显著,会短暂影响业务连续,回滚所有没有提交的事务。
-- 判断存储test是否存在,如果存在则删除
DROP PROCEDURE IF EXISTS test;
-- 创建存储过程
CREATE PROCEDURE test()
BEGIN
-- 声明循环变量int型 i
DECLARE i INT DEFAULT 1;
-- 设置i=0
set i=0;
-- 循环100次
while i100 do
-- if判断i为偶数
if i%2 = 0 THEN
-- 要实现的操作 CONCAT(str1,str2,...) concat函数用于拼接子串和数字类型
INSERT into user(name,addr) VALUES(CONCAT('test',i,'ss'),'addr');
end if;
-- i自增
set i=i+1;
END WHILE;
END;
-- 调用存储过程
CALL test()
我们在微信上24小时期待你的声音
解答本文疑问/技术咨询/运营咨询/技术建议/互联网交流