MYSQL教程:MySQL的一些优化配置
服务器的监听端口设置
-
TCP/IP端口3306是MySQL服务器默认的网络监听端口,如用--skip-networking选项启动服务器,则不监听TCP/IP端口。可用--port端口另行指定一个监听端口。如服务器主机有多个IP,还可用--bind-address选项对服务器在监听客户连接时使用的IP地址进行设定。
本文由IT教学网(http://www.itjxue.com)整理发布!转载请注明出处,谢谢! -
在UNIX系统上,MySQL可在一个UNIX域套接字文件上监听有无本地客户在试图以localhost为主机名进行连接。默认的套接字文件是/tmp/mysql.sock,可用--socket选项指定另外一个套接字文件。
-
在基于NT的Windows平台上,有-nt的MySQL服务器都支持命名管道。默认的命名管道是MySql,可用--socket选项另行指定。
启用或禁用LOAD DATA语句的LOCAL能力
-
可在MySQL服务器编译时,用configure脚本的--enable-local-infile或--disable-local-infile选项把LOAD DATA语句的LOCAL能力设置为启用或禁用;
-
在MySQL服务器启动是,可以用--local-infile或--disable-local-infile选项来启用或禁用服务器的LOCAL能力(在MySQL 4.0.2之前的版本里,要用--local-infile=0来禁用它)。
如果在服务器端禁用了LOCAL的能力,则客户端就不能使用该功能;如服务器启用了LOCAL的能力,客户端默认也是禁止使用的,但可用mysql程序的--local-infile选项启用它。
国际化和本地化,国际化是指软件能够在世界多个国家地区使用,而本地化则是指可从国际化软件中选择一套适合本地区的语言和习惯的设置来使用。在MySQL中的国际化和本地化设置有以下几方面内容:
-
时区,如果时区设置不对,则服务器显示的时间将会和当地时间有冲突。设置方法可通过mysqld_safe脚本的--timezone选项来设置,但最好还是在选项文件里设置,如:
[mysqld_safe] timezone=US/Central
-
配置显示信息的语言,MySQL能用多种语言来显示诊断信息与出错信息,默认是英语。查看share/mysql目录下有几个以语言名称作为目录名的目录就可知道有哪些语言可供选择。可用--language启动选项来指定语言,如--language=/usr/local/mysql/share/mysql/french。
-
配置服务器的字符集,MySQL支持多种字符集,可在share/mysql/charsets目录下查询支持的字符集,也可用show variables like 'character_sets'来显示支持的字符集清单。MySQL把latin1作为默认的字符集。可在编译时用--with-charset指定另外一个字符集为默认字符集。如要增加另外的字符集支持,可用--with-extra-charasets选项进行添加。如:
% ./configure --with-extra-charsets=latin1,gb2312,big5
--with-extra-charsets有两个特殊的选项,一个是all,代表所有可用字符集;一个是complex,代表所有的复杂字符集(包括多字节字符集和有特殊排序规则的字符集)。
服务器启动时,使用默认字符集,如需指定另外的字符集,需用--default-character-set选项指明。
在MySQL 4.1以前,如果在创建好数据表后改变服务器的默认字符集,就需对索引重新排序才能保证索引键值能够正确反映出数据表记录在新字符集下的排列顺序。重新排序的操作命令如下:
% myisamchk --recover --quick --set-character-set=gb2312 #在执行该语句需关闭服务器,适用于MyISAM数据表 也可用: % mysqlcheck --repair --quick #不需关闭服务器,适用于各种数据表 或者用: mysql> REPLACE TABLE ... QUICK;
在客户端,可用--default-character-set选项指定客户程序使用的字符集。--character-sets-dir选项可指出字符集文件的安装目录。
升级数据表到4.1,支持多字符集数据表。步骤如下:
-
用mysqldump程序备份数据库:
% mysqldump -p -u root --all-databases --opt > dumpfile.sql --all-databases选项的作用是转储所有数据库; --opt选项的作用是对转储文件进行优化。
-
关闭服务器,升级MySQL服务器软件到4.1版。
-
用备份文件重新加载数据表:
% mysql -p -u root < dumpfile.sql
这样,字符集信息就被分配到每一个数据列中,此后,即使服务器改变了默认的字符集,各数据列的字符集也不会改变。当以后修改某个数据列的字符集时,服务器会自动重索引,以反映最新变化。
配置InnoDB表空间。InnoDB表空间在逻辑上是一个连接的存储区域,但实际上是由一个或多个磁盘文件组成。这些文件可以是普通的文件,也可以是一个未格式化的原始硬盘分区。InnoDB表空间通过一系列的配置选项来设置,其中最重要的有以下两个:
为确保服务器每次启动时都能调用同样的选项,InnoDB的选项最好存放到选文件中。下面是一个例子:
innodb_data_home_dir = innodb_data_file_path=/usr/loca/mysql/data/idbdata1:10M:autoextend:max:100M 说明: InnoDB表空间文件默认存放到了MySQL的数据目录中,名字叫idbdata1; 文件长度为10M; 可自动扩展,以8M为步长扩展,如有多个数据文件,只允许最后一个文件可自动扩展; 规定了最大的可扩展尺寸为100M。
-
innodb_data_home_dir,设置InnoDB表空间各组成文件的父目录,如果没有指出,则默认是MySQL的数据目录。
-
innodb_data_file_path,描述InnoDB主目录中各有关文件,包括文件名,文件长度和一些选项。各文件以分号分隔,各组成文件长度至少为10M。
把选项写入选项文件后,启动服务器就可自动创建和初始化InnoDB表空间。
利用原始磁盘分区作为InnoDB表空间可创建一个非常大的表空间,不受操作系统单文件最大容量的限制。并且能有效减少磁盘碎片的产生。要使用原始磁盘分区,需作如下配置:
-
首先,要进行初始化,在选项文件的[mysqld]中配置:
innodb_data_home_dir= innodb_data_file_path=/dev/hda1:10Gnewraw #初始化/dev/hda1这个10G容量的分区
启动服务器,服务器会对这个10G的分区进行初始化。
-
接着,关闭服务器,修改配置文件,把newraw改为raw,如:
innodb_data_home_dir= innodb_data_file_path=/dev/hda1:10Graw
重新启动服务器,MySQL就会以读/写方式使用该表空间了。在windows平台上配置InnoDB表空间时,windows路径名中的反斜杠可以写成单个的斜线字符(/)。也可写成两个反斜杠(\\)。如:
innodb_data_home_dir= innodb_data_file_path=c:/mysql/data/ibdata1:10M;d:/ibdata2:20M
默认情况下,InnoDB的日志文件会存储在MySQL的数据目录,文件名以ib开头。一旦完成InnoDB表空间的初始化,就不能改变组成文件的大小,但可通过添加数据文件或设置自动扩展来增加表空间容量。如需通过增加文件的方法扩大表空间的容量,可按以下步骤进行:
-
关闭正在运行的MySQL服务器
-
如果InnoDB表空间的最后一个组成文件是可自扩展的,就要先把它改变成一个固定长度文件才能把另一个文件添加到它后面。方法是先计算出该文件的近似大小,重新设置,如:
innodb_data_file_path=ibdata1:100M:autoextend 改成: innodb_data_file_path=ibdata1:150M
-
把新的组成文件添加到文件清单的末尾,该文件可以是普通文件,也可以是一个原始硬盘分区。
-
重启服务器。
还有一种方法重新配置InnoDB表空间,就是先备份,再重新配置,最后重新加载备份。具体步骤如下:
-
使用mysqldump备份整个InnoDB数据库;
-
关闭服务器,删除所有InnoDB表空间、InnoDB日志文件 及InnoDB数据表的.frm文件;
-
重新配置InnoDB表空间;
-
配置完成后,用备份文件重载数据,生成新的InnoDB数据表。