摘要:Mysql数据库优化综合方案教程
1.硬件优化
baidu:a.CPU 8-16颗
b.内存 96G-128G
c.3-4个实例
一般大网站:
a. CPU 2-4颗
b.Mem 32-64G
c. 2 个实例 d.disk 数量越多越好 性能ssd(高并发业务) > sas(普通业务) >sata(线下)
raid RAID0 > RAID 10 > RAID 5 > RAID 1
e.网卡 多块网卡bound,以及buffer,tcp优化
2.软件优化
a. 操作系统:64位
b.软件优化:mysql 编译优化 2.my.cnf参数优化
优化的幅度很小,大部分是架构以及SQL语句优化
InnoDB:innodb_buffer_pool_size = 1024 内存的1/2或1/3
sort_buffer_size = 2M #线程的buffer,不能给太大
join_buffer_size = 2M #线程的buffer,不能给太大
read_buffer_size = 1M #线程的buffer,不能给太大
open_file_limit = 10240 #打开文件描述符的限制
tmp_table_size= 128M
long_quert_time = 2
expire_log_days = 7 #不要手动删除binlog
key_buffer_size = 32M #索引缓存,主要用于MyISAM引擎
skip-name-resolve #避免mysql做DNS反向解析,可能会造成mysql登录权限错误
监控各个参数的使用状态:
命令show global status\G;
工具:mysqlreport
3.SQL语句的优化
a.索引优化,找出慢SQL语句
(1)慢查询日志分析工具--mysqlsla
mysqldumpslow,mysqlsla,myprofi,mysql-explain-slow-log,mysqllogfilter long_query_time = 2 long_slow_queries = /data/3306/slow-log.log #按天轮询
(2)白名单机制,项目开发,DBA参与,减少上线后的慢SQL语句数量
(3)每天晚上0点定时分析慢查询,发到运维,DBA邮箱中,给出优化建议
b.大的复杂的复杂的SQL语句拆分成多个小的SQL语句
拆SQL语句,拆表,拆库
c.数据库是存储数据的地方,但不是计算数据的地方
对数据计算,应用类处理,都要拿到前端应用解决,禁止在数据库上处理
d.搜索功能不要用mysql数据库 4.架构的优化
1.业务拆分:搜索功能,like '%老男孩%',一般不要用Mysql数据库
2.数据库前端必须加cache缓存,例如memcached
3.业务拆分:某些业务应用使用nosql持久化存储,例如:memcachedb,redis,ttserver
例如粉丝关注,好友关系等等
4.动态的数据静态化。整个文件静态化,页面片段静态化
5.数据库集群与读写分离。一主多从,双主多从。通过程序或者dbproxy进行集群读写分离
6.单表超过2000万。
a.根据业务拆库拆表(登录,商品,订单)
b.利用hash算法拆库拆表
5.流程,制度,安全优化
1.项目开发制度流程
办公开发环境-->办公测试环境-->IDC测试环境-->IDC正式环境 2.数据库更新流程
开发人员提交需求-->开发主管审核-->部分领导审核-->DBA(运维)审核
-->DBA(运维)执行项目开发制度及流程控制的数据库更新步骤,最后在IDC正式环境执行 正确的设置执行周期 linux java/http进程高:
**用strace命令跟踪进程 账户权限控制 1.权限申请流程要设置规范,合理,让需求不明确者知难而退
2.办公开发和测试环境可以开放权限,idc测试和正式环境要严格控制数据库写权限,并且对
读权限和对外业务服务分离
3.开发人员正式环境数据库权限分配规则:给单独的不对外服务的正是从库只读权限,不能分配线上正式主库写权限
4.特殊人员如领导需要权限时,要清楚他做什么,发邮件回复,注明用户名、密码、权限范围、注意事项。 web账户权限分配制度
1.写库账号默认权限为select,insert,update,delete,不要给建表该表(create,alter)等权限
2.读库账号默认权限为select(配合mysql read-only参数用),确保从库对所有非super权限是只读的
3.最好专库专账号,不要一个账号管理多个库。库特别多的小公司具体情况具体分析
4.如果lamp,lnmp一体在一台服务器的环境,数据库权限主机要设置为localhost,避免用root账户作为web连接用
5.web和数据库分离的服务器授权可以根据web服务器数量多少按IP或网段来授权
6.安全和管理方便总是互相矛盾的,需要达到一个较好的平衡状态,如何平衡就要根据具体业务来衡量了 数据库客户端访问控制
1.更改默认mysql client端口
2.数据库web client端统一部署在1-2台不对外服务的web上,限制ip及客户端端口只能从内网访问
3.不做公网域名解析,用host实现访问或者用内部IP访问
4.phpmyadmin站点目录独立于所有其他站点根目录外,只能由指定的域名或IP地址访问
5.限制使用web连接的账号管理数据库,根据开发人员用户角色分配指定账号访问
6.按开发及相关人员职位分配适合的管理账号
7.设置指定账号访问权限,如web使用apache/nginx账号验证,数据库使用mysql用户验证
8.统一数据库账号登录入口地址。禁止所有开发人员私自上传phpadmin等数据库管理软件
9.开通VPN,跳板机,只能通过局域网内部IP管理数据库 未雨绸缪,从源头上减少故障的发生
发生事故后,亡羊补牢,采取措施杜绝此次事件再次发生
本文由职坐标整理并发布,了解更多内容,请关注职坐标MySQL数据库频道!
您输入的评论内容中包含违禁敏感词
我知道了
请输入正确的手机号码
请输入正确的验证码
您今天的短信下发次数太多了,明天再试试吧!
我们会在第一时间安排职业规划师联系您!
您也可以联系我们的职业规划师咨询:
版权所有 职坐标-一站式IT培训就业服务领导者 沪ICP备13042190号-4
上海海同信息科技有限公司 Copyright ©2015 www.zhizuobiao.com,All Rights Reserved.
沪公网安备 31011502005948号