内容摘要:使用mysql服务的一些经验,主要从以下几个方面考虑的mysql服务规划设计。对于高负载站点来说php和mysql运行在一起(或者说任何应用和数据库运行在一起的规划)都是性能最大的瓶颈,这样的设计有如让人一手画圆一手画方, 这样2个人的工作效率肯定不如让一个人专门画圆一个人专门画方效率高,让应用和数据库都跑在一台高性能服务器上说不定还不如跑在2台普通服务器上快。 mysql服务的安装/配置的通用性; 为了以后维护,升级备份的方便和数据的安全性,最好将mysql程序文件和数据分别安装在“不同的硬件”上。 mysql服务的安装和服务的启动: mysql一般使用当前stable的版本: 尽量不使用--with-charset=选项,我感觉with-charset只在按字母排序的时候才有用,这些选项会对数据的迁移带来很多麻烦。 尽量不使用innodb,innodb主要用于需要外键,事务等企业级支持,代价是速度比myisam有数量级的下降。 ./configure --prefix=/home/mysql --without-innodb 1.复制缺省的mysql/var/mysql到 /data/app_1/目录下, #!/bin/sh 注释: 修改不同的服务到不同的端口后,在rc.local文件中加入: /data/app_1/start_mysql.sh 注意:必须写全路径 #!/bin/sh 使用这个脚本的好处在于: 1.多个服务启动:对于不同服务只需要修改脚本中的--port[=端口号]参数。单个目录下的数据和服务脚本都是可以独立打包的。 2.所有服务相应文件都位于/data/app_1/目录下:比如:mysql.pid mysql.sock,当一台服务器上启动多个服务时,多个服务不会互相影响。但都放到缺省的/tmp/下则有可能被其他应用误删。 服务启动后/data/app_1/下相应的文件和目录分布如下: /data/app_1/ 查看所有的应用进程id: cat /data/*/mysql.pid 查看所有数据库的错误日志: cat /data/*/var/*.err 个人建议:mysql的主要瓶颈在port的连接数上,因此,将表结构优化好以后,相应单个mysql服务的cpu占用仍然在10%以上,就要考虑将服务拆分到多个port上运行了。
Java
Asp
PHP
.Net
XML
C/C++
CGI
VB
Jsp
J2ee
J2se
J2me
EJB
Servlet
Tomcat
Resin
Struts
Weblogic
Eclipse
ANT
GUI
JMS
Web servise
IDEA
Webphere
Hibernate
Spring
Jboss
Applet
Swing
Socket
Javamail
Perl
Ajax
P2P
安全
模式
框架
测试
开源
游戏
Windows XP
Windows 2000
Windows 2003
Windows Me
Windows 9.x
Linux
UNIX
注册表
操作系统
服务器
应用服务器
系统的升级和数据迁移方便性;
备份和系统快速恢复;
数据库应用的设计要点;
一次应用优化实战;
/
/
/usr<== 操作系统
/home/mysql
<== mysql主目录,为了方便升级,这只是一个最新版本目录的链接 硬盘1==>
/home/mysql-3.23.54/
<== 最新版本的mysql /home/mysql链接到这里
\
/home/mysql-old/
<== 以前运行的旧版本的mysql
/
/data/app_1/
<== 应用数据和启动脚本等硬盘2==>
/data/app_2/
\
/data/app_3/
make
make install[page] 服务的启动和停止
2.mysqld的启动脚本:start_mysql.sh
rundir=`dirname "$0"`
echo "$rundir"
/home/mysql/bin/safe_mysqld --user=mysql --pid-file="$rundir"/mysql.pid --datadir="$rundir"/var "$@"\
-o max_connections=500 -o wait_timeout=600 -o key_buffer=32m --port=3402 --socket="$rundir"/mysql.sock &
--pid-file="$rundir"/mysql.pid --socket="$rundir"/mysql.sock --datadir="$rundir"/var
目的都是将相应数据和应用临时文件放在一起;
-o 后面一般是服务器启动全局变量优化参数,有时候需要根据具体应用调整;
--port: 不同的应用使用port参数分布到不同的服务上去,一个服务可以提供的连接数一般是mysql服务的主要瓶颈;
/data/app_2/start_mysql.sh
/data/app_3/start_mysql.sh
rundir=`dirname "$0"`
echo "$rundir"
/home/mysql/bin/mysqladmin -u mysql -s"$rundir"/mysql.sock shutdown
3.当硬盘1出问题以后,直接将硬盘2放到一台装好mysql的服务器上就可以立刻恢复服务(如果放到my.cnf里则还需要备份相应的配置文件)。
start_mysql.sh 服务启动脚本
stop_mysql.sh 服务停止脚本
mysql.pid 服务的进程id
mysql.sock 服务的sock
var/ 数据区
mysql/ 用户库
app_1_db_1/ 应用库
app_1_db_2/
...
/data/app_2/
...
关键字 本文所属关键字
相关 与本文相关文章
分类 所有文章关键字导航
源码编程相关
操作系统/服务器相关
标准 网站致力的规范