esayr's blog 有友共尊田舍酒,无事面对古人书

2五/080

如何为 MySQL 选择更合适的服务器硬件

DBA notes为 MySQL 选择更合适的硬件我转摘过来,并根据自己的使用习惯做了点评.以下部分,红色字体为我的话.

-------------------------------------------- 分割线 ----------------------------------------

MySQL 爱好者关注的 2008 MySQL Conference & Expo 落幕后,很多文档都能看到了。今天读了一下这篇 Scaling Out MySQL: Hardware Today and Tomorrow。感兴趣的朋友也不防下载下来研究一下。

用什么样的硬件做 MySQL ,真不是三言两语能说清楚的。不过该讲座中还是能总结出来几点关键点的。

CPU 选择

首先如有可能就选择 64 位CPU,这样才可以安装 64 位操作系统,有了 64 位操作系统才能利用好更大的内存。如果非要抬杠的话,不是 64 位芯片也可以安装 64 位操作系统,也就是 Intel 的 EM64T 的解决方案(这也是文档中没提及的) 。

我个人倒是比较喜欢 AMD 64 位 CPU 的,物美价廉,性能也不错。

注意: MySQL 在多核上的 Bug 问题。

(1.现在配置的服务器,基本上都是64位的CPU.也许出于对稳定和系统兼容性的考虑,很多管理员更喜欢安装32位的操作系统.我前段上线的一台53XX的四核至强CPU服务器,安装的是linux 64位操作系统[ubuntu server 8.0.4] 测试下来,在跑WEB服务这块,似乎没有任何稳定和软件兼容上的问题,大家可放心使用.

2.CPU个数,当然是双路或者四路最好.但如果压力不是非常巨大,我认为一颗CPU也够用了.省下的钱去换好的硬盘和加大内存,效果会更明显)

内存,来者不拒

第二点是尽可能配置比较大的内存,当然,只配置大内存如果 MySQL 参数配置有问题,还是摆设,如何设置各个引擎的 Cache 相关参数,够写一本书的了。

现在市场上内存是越来越便宜了。我个人的感觉内存降价的程度比 CPU 和硬盘都夸张很多。所以,考虑到人力越来越贵,内存越来越便宜,配置服务器的时候就别太吝啬了。

(1. 这点几乎是共识了,个人推荐4G以上内存.参数配置和缓存设置方面我认为,一是别道听途说,自己多测试性能.按自己的实际情况调整参数. 二是认真看官方手册,手册的大多数,基本上算是真理了.)

硬盘--唯快不破

国内用 MySQL ,绝大多数都是直接仍在本机磁盘上的。这个磁盘的选择要慎重一点点。尽量选择 15K 而不要 10K 慢速磁盘,大多数数据库的磁盘问题都在速度上,如果只在磁盘上多花费 30%的钱而能得到总体性能的 30%收益,那么还是值得的,而容量多数情况下不会出现问题,现在的硬盘容量就是一个大。

至于选择什么类型的磁盘,SCSI 与 SAS 都可选,SATA 倒是够便宜,特定的应用再考虑吧。

这三板斧看是简单活,但是实际的应用场景下可未必就能做出更优的选择。最简单的东西也有人不知道不是?

(是的,把CPU节省下来的钱,换上一块好的硬盘吧. 如果有需要,推荐部署单独的数据库服务器)

24一/080

[SQL语句]把所有的数据记录修改成Id = 1的记录 

群里朋友的问题.表名叫test,结构如下

mysql.jpg

就是把ID为2,3...的值,使用一个SQL语句,直接改为dsf

update test set a=(select b from test where id='1') where 1

提示错误:
SQL execution error # 1093 Response from the database:
You can't specify target table 'test' for upadte in FROM clause
早上问过fluke,这句可以实现:

UPDATE test,
(
SELECT b AS sub_data
FROM
test
WHERE Id = 1
)q1
SET
test.b = q1.sub_data WHERE 1

再更新: (by耿勇)
update test as aa,test as bb set bb.b=aa.b where aa.id=1

24五/071

mysqldump 导出的sql文件导入时提示Unknown command ‘\[‘.

两台linux机器的mysql配置一模一样。
#mysqldump forum>forum.sql -u root -p
导出一个2.4G大的forum.sql文件,然后试图导入内网(192.168.0.8)的另一台机器时,出现问题

#mysql forum<forum.sql -u root -p -h 192.168.0.8
Enter password:
ERROR at line 1410: Unknown command '\['.

首先是怀疑有二进制,添加参数--hex-blob 再导,问题依旧。
再想也不可能是字符集什么呀 。
请教imysql,说是: 2边的max_allowed_packet设置的不一样.
明明是一样的,改大一些试试。16M改成64M,也不行。
最后拉到本机去,终于可以正常导入。
问题虽然解决,但根源是什么还是没弄懂。
哪个老师知道此问题的原因,请赐教。

 

最后,学到一个简单的服务器间复制库的办法。
mysqldump -hhost1 xx | mysql -hhost2
从host1导出库xx,然后写入host2