MySQL数据库的优化

我们究竟应该如何对MySQL数据库进行优化?下面我就从MySQL对硬件的选择、MySQL的安装、my.cnf的优化、MySQL如何进行架构设计及数据切分等方面来说明这个问题。

服务器物理硬件的优化

在挑选硬件服务器时,我们应该从下面几个方面着重对MySQL服务器的硬件配置进行优化,也就是说将项目中的资金着重投入到如下几处:

1、磁盘寻道能力(磁盘I/O),我们现在用的都是SAS15000转的硬盘,用6快这样的硬盘作RAID1+0。MySQL每一秒钟都在进行大量、复杂的查询操作,对磁盘的读写量可想而知,所以,通常认为磁盘I/O是约制MySQL性能的最大因素之一。对于日均访问量在100万PV以上的论坛(Discuz)、博客(Wordpress),如果性能不好,造成的直接后果就是MySQL的性能会非常低下!解决这一制约因素可以考虑解决访问是:使用RAID1+0磁盘阵列,注意不要尝试RAID5,MySQL在PAID5磁盘阵列上的效率不会像你期待的那样快,如果资金允许,可以选择固态硬盘SSD来替代SAS硬盘做RAID1+0。

2、CPU对于MySQL的影响也是不容忽视的,建议选择运算能力强悍的CPU。推荐使用DELL R710(双四核),商家的卖点也是其强大的虚拟化和数据库能力。

3、对于一台使用MySQL的Database Server来说,建议服务器的内存不要小于2GB,推荐使用4GB以上的物理内存,不过内存对于现在的服务器而言可以说是一个可以忽略的问题,如果是高端服务器,基本上内存都超过了32GB,我们的数据流服务器都是32GB内存。

我在工作中用的比较多的数据库服务器是DELL R710/R720,其稳定性和性能都不错,同时我也发现许多同行都是采用它作为数据库的服务器,所以在这里也向大家推荐一下。

MySQL应采用编译方式安装

关于MySQL数据库的线上环境安装,我建议采取编译安装的方式,这样性能会有较大的提升。服务器系统则建议CentOS6.7 X86_64,源码包的编译参数会默认以Debug模式生成二进制代码,而Debug模式给MySQL带来的性能损失是比较大的,所以当我们编译准备安装的产品代码时,一定不要忘记使用–without-debug参数禁止Debug模式。如果把–with-mysqld-ldflags和–with-client-ld-flags两个编译参数设置为–all-static的话,可以告诉编译器以静态的方式编译,编译结果将得到最高的性能。使用静态编译和使用动态编译的代码相比,性能差距可能会达到5%至10%之多。在后面我会跟大家分享我们线上MySQL数据库的编译参数,大家可以参考下,然后根据自己的线上环境自行修改内容。

MySQL配置文件优化

[client]

port = 3306 #客户端端口号为3306

socket = /data/3306/mysql.sock #

default-character-set = utf8 #客户端字符集,(控制character_set_client、character_set_connection、character_set_results)

[mysql]

no-auto-rehash #仅仅允许使用键值的updates和deletes

[mysqld] #组包括了mysqld服务启动的参数,它涉及的方面很多,其中有MySQL的目录和文件,通信、网络、信息安全,内存管理、优化、查询缓存区,还有MySQL日志设置等。

user = mysql #mysql_safe脚本使用MySQL运行用户(编译时–user=mysql指定),推荐使用mysql用户。

port = 3306 #MySQL服务运行时的端口号。建议更改默认端口,默认容易遭受攻击。

socket = /data/3306/mysql.sock #socket文件是在Linux/Unix环境下特有的,用户在Linux/Unix环境下客户端连接可以不通过TCP/IP网络而直接使用unix socket连接MySQL。

basedir = /application/mysql #mysql程序所存放路径,常用于存放mysql启动、配置文件、日志等

datadir = /data/3306/data #MySQL数据存放文件(极其重要)

character-set-server = utf8 #数据库和数据库表的默认字符集。(推荐utf8,以免导致乱码)

log-error=/data/3306/mysql_xuliangwei.err #mysql错误日志存放路径及名称(启动出现错误一定要看错误日志,百分之百都能通过错误日志排插解决。)

pid-file=/data/3306/mysql_xuliangwei.pid #MySQL_pid文件记录的是当前mysqld进程的pid,pid亦即 ProcessID。

skip-locking #避免MySQL的外部锁定,减少出错几率,增强稳定性。

skip-name-resolv #禁止MySQL对外部连接进行DNS解析,使用这一选项可以消除MySQL进行DNS解析的时候。但是需要注意的是,如果开启该选项,则所有远程主机连接授权都要使用IP地址方式了,否则MySQL将无法正常处理连接请求!

skip-networking #开启该选项可以彻底关闭MySQL的TCP/IP连接方式,如果Web服务器是以远程连接的方式访问MySQL数据库服务器的,则不要开启该选项,否则无法正常连接!

open_files_limit = 1024 #MySQLd能打开文件的最大个数,如果出现too mant open files之类的就需要调整该值了。

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/dc684b0a6e8b22048fd131a35425358c.html