Why you should ignore MySQL’s key cache hit ratio
http://www.mysqlperformanceblog.com/2010/02/28/why-you-should-ignore-mysqls-key-cache-hit-ratio/
不要相信mysql的key cache hit ratio:
key cache hit ratio = 1 - key_reads / key_read_requests
key_reads:从磁盘中读块的数量
key_read_requests:从缓存中请求读块的数量
不好的建议是:
(1)你应当注意这个cache hit ratio
(2)并且你应当根据这个比率设置你的key_buffer_size的大小
以上的建议有两个问题:
(1)这个比率是无量纲,即你不知道key_read_requests和key_reads是处于什么数量级别的,因此你无法评估这个值
(2)它没有时间因素,即这个比值不知道其时间跨度,也无法评估这个值的优劣
如果要确实使用这个值来评估优劣,那需要一些假定:
(1)key_read需对应一次磁盘I/O的物理读取
(2)从磁盘中找此key和从缓存中找此key是更慢的
(3)一个key_read是一次随机的磁盘存取
基于以上几点:则需要减少key_reads的数量
key_cache_miss_rate = key_reads / uptime
怎么样设置key_buffer_size大小呢?
可以设置一个很大的key_buffer_size,然后插入一些数据 ......
存储引擎 支持索引 myisam b-tree,r-tree,full-text,不支持hash innodb b-tree(clustered-index) merge b-tree,r-tree memory b-tree,hash archive 无索引 ......
有时候使用MySQL(和PHP搭配之最佳组合)命令行导入备份时会出现“MySQL(和PHP搭配之最佳组合) server has gone away”错误,这可能是因为其中一些insert语句的大小超出了MySQL(和PHP搭配之最佳组合)目前设置的缓冲区大小。
解决办法
1.使用phpmyadmin 备份MySQL(和PHP搭配之最佳组合)的时候,只选择
数据:
完整插入
扩展插入
扩展插入不要勾选
2.使用 MySQL(和PHP搭配之最佳组合)dump 备份的时候不添加 --opt
这样就只会生成完整的insert语句,导入时候不会出错。
3.修改my.ini
打开my.ini 找到[MySQL(和PHP搭配之最佳组合)d]这一行,下面添加
[MySQL(和PHP搭配之最佳组合)d]
#扩大缓冲区
max_allowed_packet=32M
保存后,重启MySQL(和PHP搭配之最佳组合)
本文来自SunShine,转载请标明出处:http://do.jhost.cn/sunshine/ReadNews?action=read&id=110 ......
今天遇到要导出数据库中表的数据。下面这个就可以搞定。。
#导出指定的表 #导出命令 -u用户名 -p密码 -h主机IP地址 数据库名 表名1 表名2 > 导出文件.sql
mysqldump -uroot -proot -h192.168.0.88 ok_db oktable1 oktable2 > ok_db.sql
另外在更改mysql密码时候,网上有些命令不对:
我用如下:set password=password('malware_qazws');
......
今天遇到要导出数据库中表的数据。下面这个就可以搞定。。
#导出指定的表 #导出命令 -u用户名 -p密码 -h主机IP地址 数据库名 表名1 表名2 > 导出文件.sql
mysqldump -uroot -proot -h192.168.0.88 ok_db oktable1 oktable2 > ok_db.sql
另外在更改mysql密码时候,网上有些命令不对:
我用如下:set password=password('malware_qazws');
......
package com.lovo.cq.shopping10_1.common;
import java.sql.*;
public class DbUtil {
private PreparedStatement pstmt = null;
private Connection con = null;
public DbUtil() {
try {
Class.forName("com.mysql.jdbc.Driver");
con = DriverManager.getConnection("jdbc:mysql://localhost/ShoppingBook10_1",
"root", "root");;
} catch (ClassNotFoundException e) {
e.printStackTrace();
} catch (SQLException e) {
e.printStackTrace();
}
}
public Connection getCon() {
return con;
}
public void close() {
if (pstmt != null) {
try {
pstmt.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
if (con != null) {
try {
con.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
}
......
package com.lovo.cq.shopping10_1.common;
import java.sql.*;
public class DbUtil {
private PreparedStatement pstmt = null;
private Connection con = null;
public DbUtil() {
try {
Class.forName("com.mysql.jdbc.Driver");
con = DriverManager.getConnection("jdbc:mysql://localhost/ShoppingBook10_1",
"root", "root");;
} catch (ClassNotFoundException e) {
e.printStackTrace();
} catch (SQLException e) {
e.printStackTrace();
}
}
public Connection getCon() {
return con;
}
public void close() {
if (pstmt != null) {
try {
pstmt.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
if (con != null) {
try {
con.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
}
......
在Ubuntu9.10上使用sudo apt-get install mysql-server-5.0 安装了mysql,在外面访问不了mysql,但是在Ubuntu上访问是没有问题的。
于是开始查找原因:
3306端口是不是没有打开?
使用nestat命令查看3306端口状态:
~# netstat -an | grep 3306
tcp 0 0
127.0.0.1:3306 0.0.0.0:* LISTEN
从结果可以看出3306端口只是在IP 127.0.0.1上监听,所以拒绝了其他IP的访问。
解决方法
:修改/etc/mysql/my.cnf文件。
打开
文件,找到下面内容:
# Instead of skip-networking the default is now to listen only on
#
localhost which is more compatible and is not less secure.
bind-address =
127.0.0.1
把上面这一行注释掉或者把127.0.0.1换成合适的IP,建议注释掉。
重新启动后,重新使用netstat检测:
~# netstat -an | grep 3306
tcp
0 & ......