转自 http://www.blogjava.net/baoyaer/articles/209466.htmlphp
设置建议:html
对于单台运行的WEB服务器,建议加上:java
skip-lockingmysql
skip-name-resolvelinux
skip-networkingweb
在PHP连接数据库时使用"LOCALHOST".这样MySQL 客户端库将覆盖之并尝试链接到本地套接字.(sql
咱们能够从PHP.INI中数据库
代码:apache
; Default socket name for local MySQL connects. If empty, uses the built-inwindows
; MySQL defaults.
mysql.default_socket = /tmp/mysql.sock看出 默认状况下 UNIX 将访问/tmp/mysql.sock)
如下是部分选项解释:
my.cnf默认是不存在的.你能够在/usr/local/share/mysql/下看到:
my-huge.cnf
my-innodb-heavy-4G.cnf
my-large.cnf
my-medium.cnf
my-small.cnf
等文件.将其中合适你机器配置的文件拷贝到/etc/my.cnf或mysql data目录/my.cnf(/var/db/mysql)下或~/.my.cnf.文件内都有详细的说明
[mysqld]
port = 3306
serverid = 1
socket = /tmp/mysql.sock
skip-locking
# 避免MySQL的外部锁定,减小出错概率加强稳定性。
skip-name-resolve
禁止MySQL对外部链接进行DNS解析,使用这一选项能够消除MySQL进行DNS解析的时间。但须要注意,若是开启该选项,则全部远程主机链接受权都要使用IP地址方式,不然MySQL将没法正常处理链接请求!
back_log = 384
指定MySQL可能的链接数量。当MySQL主线程在很短的时间内接收到很是多的链接请求,该参数生效,主线程花费很短的时间检查链接而且启动一个新线程。
back_log参数的值指出在MySQL暂时中止响应新请求以前的短期内多少个请求能够被存在堆栈中。若是系统在一个短期内有不少链接,则须要增大该参数的值,该参数值指定到来的TCP/IP链接的侦听队列的大小。不一样的操做系统在这个队列大小上有它本身的限制。
试图设定back_log高于你的操做系统的限制将是无效的。默认值为50。对于Linux系统推荐设置为小于512的整数。
key_buffer_size = 256M
# key_buffer_size指定用于索引的缓冲区大小,增长它可获得更好的索引处理性能。
对于内存在4GB左右的服务器该参数可设置为256M或384M。
注意:该参数值设置的过大反而会是服务器总体效率下降!
max_allowed_packet = 4M
thread_stack = 256K
table_cache = 128K
sort_buffer_size = 6M
查询排序时所能使用的缓冲区大小。注意:该参数对应的分配内存是每链接独占!若是有100个链接,那么实际分配的总共排序缓冲区大小为100 × 6 = 600MB。因此,对于内存在4GB左右的服务器推荐设置为6-8M。
read_buffer_size = 4M
读查询操做所能使用的缓冲区大小。和sort_buffer_size同样,该参数对应的分配内存也是每链接独享!
join_buffer_size = 8M
联合查询操做所能使用的缓冲区大小,和sort_buffer_size同样,该参数对应的分配内存也是每链接独享!
myisam_sort_buffer_size = 64M
table_cache = 512
thread_cache_size = 64
query_cache_size = 64M
指定MySQL查询缓冲区的大小。能够经过在MySQL控制台执行如下命令观察:
代码:
# > SHOW VARIABLES LIKE '%query_cache%';
# > SHOW STATUS LIKE 'Qcache%';若是Qcache_lowmem_prunes的值很是大,则代表常常出现缓冲不够的状况;
若是Qcache_hits的值很是大,则代表查询缓冲使用很是频繁,若是该值较小反而会影响效率,那么能够考虑不用查询缓冲;Qcache_free_blocks,若是该值很是大,则代表缓冲区中碎片不少。
tmp_table_size = 256M
max_connections = 768
指定MySQL容许的最大链接进程数。若是在访问论坛时常常出现Too Many Connections的错误提 示,则须要增大该参数值。
max_connect_errors = 10000000
wait_timeout = 10
指定一个请求的最大链接时间,对于4GB左右内存的服务器能够设置为5-10。
thread_concurrency = 8
该参数取值为服务器逻辑CPU数量×2,在本例中,服务器有2颗物理CPU,而每颗物理CPU又支持H.T超线程,因此实际取值为4 × 2 = 8
skip-networking
开启该选项能够完全关闭MySQL的TCP/IP链接方式,若是WEB服务器是以远程链接的方式访问MySQL数据库服务器则不要开启该选项!不然将没法正常链接!
1、 关于MySQL5
MySQL5系列数据库是MySQL的最新版本的数据库,比较流行的发行版是mysql-5.0.18。MySQL 英文官方网站是http://www.mysql.com
2、 得到MySQL5
全部的关于MySQL数据库的程序,均可以在它的英文官方网站下载到,可是,鉴于不不是全部人的英文都很好,因此建议你们尽可能区MySQL的中文官方网站下载本身所需的程序,若是找不到,再去找英文的网站。
MySQL5有安装版和免安装版之分,顾名思义,安装版就是须要安装之后才可使用;免安装版的MySQL下载下来以后就可使用,或者进行简单的设置就可使用。
MySQL5安装版下载地址:
Windows版本:http://download.mysql.cn/src/2006/0218/199.html
Linux版本(源码包):http://download.mysql.cn/src/2006/0208/62.html
MySQL5免安装版下载地址:
Windows版本:http://download.mysql.cn/src/2006/0302/205.html
3、 MySQL5安装
Windows版安装手册:http://bbs.mysql.cn/thread-261-1-1.html
Linux版本(源码包)安装手册:http://bbs.mysql.cn/thread-493-1-2.html
MySQL有安装版本和免安装版本,免安装版本解压后的文件夹内没有安装程序,能够直接使用。
Windows免安装版本使用手册:http://bbs.mysql.cn/thread-552-1-1.html
4、 备份与恢复
常规备份命令是mysqldump,这里以tm数据库为例,作简单介绍,详细资料参考
http://info.mysql.cn/install/2006/0410/5521.html
备份:
#mysqldump -u root -p tm > tm_20060101.sql
按提示输入密码,这就把tm数据库全部的表结构和数据备份到tm_20060101.sql了,由于要总进行备份工做,若是数据量大会占用很大空间,
这是能够利用gzip压缩数据,命令以下:
#mysqldump -u root -p tm | gzip > tm_20060101.sql.gz
还能够备份到远程机器,用-h制定,如
#mysqldump -u root -p tm > tm_20060101.sql -h xxx.xxx.xxx.xxx
能够直接备份到IP地址为xxx.xxx.xxx.xxx的远程计算机。
系统崩溃,重建系统,或恢复数据库时,能够这样恢复数据:
#mysql -u root -p tm < tm_20060101.sql
从压缩文件直接恢复:
#gunzip < tm_20060101.sql.gz | mysql -u root -p tm
5、 FAQ
Q:为何我下在的“安装程序”里面没有安装文件?
A:你下载的多是免安装版本。请给出详细的版本信息。
Q:如何启动和关闭mysql?
A:linux下:好比个人mysql是用源码方式安装在/usr/local/mysql
自动:将/usr/local/mysql/share/mysql/mysql.server拷贝到/etc/rc.d/init.d/下,而后
chkconfig --add mysql.server就能够开机就启动mysql服务了。
手动:以root身份执行/usr/local/mysql/bin/mysqld_safe --user=mysql
windows下:
自动:
用cmd方式,到mysql安装路径的bin文件夹下,执行:mysqld-nt --install
手动:直接到到mysql安装路径的bin文件夹下执行net start mysql便可。
若是不想让mysql在计算机启动时候就启动服务,执行:mysqld-nt --remove
也能够在HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services中删除对应服务并重启计算机。
关闭mysql:mysqladmin -uroot -p shutdown
启动mysql:
mysqld-nt --install
net start mysql
Q:如何修改mysql的用户密码?
A :在这里请区分链接mysql数据库的用户密码和系统的用户密码!!
mysql -uroot -p
输入密码
#登陆mysql
>use mysql
>update user set password=password("new_pass") where user="userName"; #userName换成你要修改的用户名的密码,好比root
>flush privileges;
>exit;
Q:如何登陆mysql?
A:mysql -uroot -p回车后,输入密码,再回车便可。若是本身没有修改的话,默认密码为空。
Q:mysql如何很好的变成图形化数据库呢?自身有自带的图形化工具没有?
A:mysql自带一个字符的客户端,可是还有好多的像mysql_center、SQLyog、phpMyAdmin、Mysql Query Browser,Mysql Administrator、mysqlcc这样好的图形管理工具。
mysql_centerd在本站的下载地址:http://bbs.mysql.cn/thread-517-1-1.html
SQLyog去网上搜索,不少的,SQLyog407版本不错。
phpMyAdmin下载地址:http://download.mysql.cn/opencode/2006/0207/55.html
mysql.com提供的管理软件下载地址:http://dev.mysql.com/downloads/gui-tools/5.0.html
其它的我就不一一提供下载地址,本身到网上搜索下载。
Q:为何用mysql -uusername -p登陆mysql服务器时出现以下提示:
Host 'xxx.xxx.xxx.xxx' is not allowed to connect to this MySQL server!("xxx.xxx.xxx.xxx"表明要登陆的服务器)
A:这是由于你要登陆的mysql服务器不容许用户username从xxx.xxx.xxx.xxx这个ip地址登陆。
解决办法是在服务器登陆mysql,操做步骤为:
mysql -uroot -p
(输入密码)
use mysql
update user set Host="%" where User="username";
flush privileges;
Q:什么是phpMyAdmin?
A:phpMyAdmin 是一个用PHP编写的,能够经过互联网控制和操做MySQL。经过phpMyAdmin能够彻底对数据库进行操做,例如创建、复制/删除数据等等。
有了phpMyAdmin 就能够彻底不使用mysql命令,直接使用phpMyAdmin就能管理mysql的全部数据和数据库
Q:如何使用phpMyAdmin?
A:要使用phpMyAdmin,下载后,把它释放到web服务器的根目录下,取个名字,好比就叫phpMyAdmin,而后在浏览器的地址栏输入:
http://X.X.X.X/phpMyAdmin/index.php
就能够了。
若是是phpMyAdmin 2.8.0.2以上版本的,这样使用会报错,由于默认没有这个软件须要的配置文件config.default.php,在2.6.X版本下都有这个文件,只是口令不对。对于2.6.X版本的,能够直接用文本编辑器打开这个文件,把其中第一个$cfg中内容修改为本身的用户名及密码就能够了:
$cfg['Servers'][$i]['auth_type'] = 'config'; // Authentication method (config, http or cookie based)?
$cfg['Servers'][$i]['user'] = 'root'; // MySQL user
$cfg['Servers'][$i]['password'] = '本身的密码';
不设置密码的话,系统会提示:
Access denied for user 'root'@'localhost' (using password: NO)
若是是2.8.0.2版本的,程序会提示请运行scripts/setup.php或者index.php这样的文件进行配置以生成config.inc.php文件。
Q:为何我使用mysql出现乱码?
A:安装mysql5时默认的字符集是瑞典编码latin1,不支持中文。而且出现乱码的缘由不少,建议到bbs.mysql.cn论坛寻找答案。发贴的话请详细说明本身的环境、安装过程及使用的信息,以便你们能快速分析你的问题。
Q:如何修改字符集?
A:
mysql -uroot -p
输入密码
选择你的目标数据库
mysql> use dbname
显示当前字符集
mysql> show variables like '%char%';
+--------------------------+----------------------------------------+
| Variable_name | Value |
+--------------------------+----------------------------------------+
| character_set_client | gb2312 |
| character_set_connection | gb2312 |
| character_set_database | gb2312 |
| character_set_results | gb2312 |
| character_set_server | gb2312 |
| character_set_system | utf8 |
| character_sets_dir | /usr/local/mysql/share/mysql/charsets/ |
+--------------------------+----------------------------------------+
7 rows in set (0.00 sec)
最好是保持字符集统一。若是你要修改哪一个字符集,用set命令,如:
mysql> set character_set_client gbk;
Query OK, 0 rows affected (0.00 sec)
mysql> show variables like '%char%';
+--------------------------+----------------------------------------+
| Variable_name | Value |
+--------------------------+----------------------------------------+
| character_set_client | gbk |
| character_set_connection | gb2312 |
| character_set_database | gb2312 |
| character_set_results | gb2312 |
| character_set_server | gb2312 |
| character_set_system | utf8 |
| character_sets_dir | /usr/local/mysql/share/mysql/charsets/ |
+--------------------------+----------------------------------------+
再改回来:
mysql> set character_set_client=gb2312;
Query OK, 0 rows affected (0.00 sec)
mysql> show variables like '%char%';
+--------------------------+----------------------------------------+
| Variable_name | Value |
+--------------------------+----------------------------------------+
| character_set_client | gb2312 |
| character_set_connection | gb2312 |
| character_set_database | gb2312 |
| character_set_results | gb2312 |
| character_set_server | gb2312 |
| character_set_system | utf8 |
| character_sets_dir | /usr/local/mysql/share/mysql/charsets/ |
+--------------------------+----------------------------------------+
7 rows in set (0.00 sec)
本身试试就知道了。
Q:为何个人phpmyadmin提示不能载入mysql扩展?
A: 1、看下你的PHP目录和PHP\EXT下有没有php_mysql.dll这个文件。
2、配制一下环境变量把php_mysql.dll所在的目录加入的PATH里。
3、有的php安装程序安装好之后,在安装路径下,并无ext文件夹(不知道为何),最好下载个配置的php,而后,将exe文件夹拷贝到安装目录下,再进行相应的配置。
4、看一下c:\winnt 或者是 c:\windows下的php.ini文件里的php_mysql.dll前面的;(分号)是否去掉了,若是没有去掉请去掉,而后,将mysql安装路径下bin文件夹下的libmysql.dll放在安装php的根目录通常为C:\php ,同时也在 C:\windows 下也放各一个,以后从新启动IIS或者是APACHE。有的时候老是刷新一页,即便去掉分号也仍是不能载入mysql扩展,最后新打开一个窗口,再试。
Q:为何提示:"没有发现 PHP 的扩展设置mbstring, 而当前系统好像在使用宽字符集。没有 mbstring 扩展的 phpMyAdmin 不能正确识别字符串,可能产生不可意料的结果."
A:由于你没有打开mbstring在扩展,解决办法:打开php的配置文件php.ini,将
extension=php_mbstring.dll前面的分号";"去掉,并改到正确的路径,通常为
ext/php_mbstring.dll
Q:为何PHP链接mysql会有下面的提示?
Fatal error: Call to undefined function mysql_connect() ……
A:颇有多是没有载入mysql扩展,如何解决,请参考上面的方法。
由于若是你的系统没有载入mysql扩展的话,phpmyadmin能给出提示,而通常的程序则不能给出。
若是phpmyadmin没有给出提示,而你刚好用的apache服务器,尝试一下方法:
首先是去掉;extension=php_mysql.dll前面的“;”(;为注释)
第二步是将C:\php\ext中的php_mysql.dll复制到C:\WINDOWS(C:\WINNT)中便可,
并重起Apache。
Q:为何我不能看孵化池资料?
A:MYSQL.CN的孵化池是专门为初学者提供学习的地方,这里我就很少介绍了,详情请访问:http://bbs.mysql.cn/thread-369-1-1.html。
Q:能中文数据库名称么?
A:能够,可是不推荐,用起来不方便。
Q:若是我忘记了root密码,怎么办?
A:
在windows下:
打开命令行窗口,中止mysql服务: Net stop mysql
启动mysql,通常到mysql的安装路径,找到 mysqld-nt.exe
执行:mysqld-nt --skip-grant-tables
另外打开一个命令行窗口,执行mysql
>use mysql
>update user set password=password("new_pass") where user="root";
>flush privileges;
>exit
用Ctrl+Alt+Del,找到mysqld-nt的进程杀掉它,在从新启动mysql-nt服务,就能够用新密码登陆了
在linux下:
若是 MySQL 正在运行,首先杀之: killall -TERM mysqld。
启动 MySQL :bin/safe_mysqld --skip-grant-tables &
就能够不须要密码就进入 MySQL 了。
而后就是
>use mysql
>update user set password=password("new_pass") where user="root";
>flush privileges;
从新杀 MySQL ,用正常方法启动 MySQL 。
Q:为何出现以下的提示:
[root@0-8-2-df-fa-ee ~]# mysql
ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/tmp/mysql.sock' (2)
注:也多是其它路径下的mysql.sock
A:说明mysql服务没有启动,mysql.sock是mysql服务启动后启动生成的文件,
通常先杀掉mysql服务:killall mysql
而后,再根据本身的安装状况启动mysql便可。好比,安装的时候,用的是
./configure --prefix=/usr/local/mysql的
用下面的命令启动:
/usr/local/mysql/bin/mysqld_safe --user=mysql &
以后再去执行/usr/local/mysql/bin/mysql -u root -p 登陆进入mysql数据库
还不行的话,一次执行下面的命令:
sync
reboot ;重启计算机,执行时请当心!!!
Q:为何出现下面的错误
#1251 - Client does not support authentication protocol requested by server; consider upgrading MySQL client
A:你使用的数据库是4.1以上,用命令行链接MySQL数据库后,执行下面的命令:
UPDATE mysql.user SET password=OLD_PASSWORD("your_password") WHERE Host="your_host" AND User="your_username" ;
便可解决。
your_password:改为你链接数据库的密码,好比 123
your_host:改为你链接数据库的主机,若是是本地的话,就是localhostyour_username:改为你链接数据库的用户,好比 rootQ:为何mysql提示我:Data too long for column ……A:首先确保你的数据大小符合你的字段大小。再检查你的数据库编码,数据库的编码是否与操做数据库工具的编码一致!Q:为何我修改wait_timeout没有生效A: 须要同时修改interactive_timeoutwait_timeout才会生效(show variables;)不断添加中,若有错误,欢迎指正!