选择显示字体大小

mysql服务维护笔记

 

  内容摘要:使用mysql服务的一些经验,主要从以下几个方面考虑的mysql服务规划设计。对于高负载站点来说phpmysql运行在一起(或者说任何应用和数据库运行在一起的规划)都是性能最大的瓶颈,这样的设计有如让人一手画圆一手画方, 这样2个人的工作效率肯定不如让一个人专门画圆一个人专门画方效率高,让应用和数据库都跑在一台高性能服务器上说不定还不如跑在2台普通服务器上快。

  以下就是针对mysql作为专门的数据库服务器的优化建议:

  mysql服务的安装/配置的通用性;
  系统的升级和数据迁移方便性;
  备份和系统快速恢复;
  数据库应用的设计要点;
  一次应用优化实战;

  mysql服务器的规划

  为了以后维护,升级备份的方便和数据的安全性,最好将mysql程序文件和数据分别安装在“不同的硬件”上。


    /
  /
 
/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/

  mysql服务的安装和服务的启动:

  mysql一般使用当前stable的版本:

  尽量不使用--with-charset=选项,我感觉with-charset只在按字母排序的时候才有用,这些选项会对数据的迁移带来很多麻烦。

  尽量不使用innodb,innodb主要用于需要外键,事务等企业级支持,代价是速度比myisam有数量级的下降。

  ./configure --prefix=/home/mysql --without-innodb
  make
  make install[page]

  服务的启动和停止

  1.复制缺省的mysql/var/mysql到 /data/app_1/目录下,
  2.mysqld的启动脚本:start_mysql.sh

  #!/bin/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服务的主要瓶颈;

  修改不同的服务到不同的端口后,在rc.local文件中加入:

  /data/app_1/start_mysql.sh
  /data/app_2/start_mysql.sh
  /data/app_3/start_mysql.sh

  注意:必须写全路径

  3 mysqld的停止脚本:stop_mysql.sh

  #!/bin/sh
  rundir=`dirname "$0"`
  echo "$rundir"
  /home/mysql/bin/mysqladmin -u mysql -s"$rundir"/mysql.sock shutdown

  使用这个脚本的好处在于:

  1.多个服务启动:对于不同服务只需要修改脚本中的--port[=端口号]参数。单个目录下的数据和服务脚本都是可以独立打包的。

  2.所有服务相应文件都位于/data/app_1/目录下:比如:mysql.pid mysql.sock,当一台服务器上启动多个服务时,多个服务不会互相影响。但都放到缺省的/tmp/下则有可能被其他应用误删。

  3.当硬盘1出问题以后,直接将硬盘2放到一台装好mysql服务器上就可以立刻恢复服务(如果放到my.cnf里则还需要备份相应的配置文件)。

  服务启动后/data/app_1/下相应的文件和目录分布如下:

  /data/app_1/
    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/
  ...

  查看所有的应用进程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   安全   模式   框架   测试   开源   游戏

SQL数据库相关

My-SQL   Ms-SQL   Access   DB2   Oracle   Sybase   SQLserver   索引   存储过程   加密   数据库   分页   视图  

手机无线相关

3G   Wap   CDMA   GRPS   GSM   IVR   彩信   短信   无线   增值业务

网页设计制作相关

HTML   CSS   网页配色   网页特效   Javascript   VBscript   Dreamweaver   Frontpage   JS   Web   网站设计

网站建设推广相关

建站经验   网站优化   网站排名   推广   Alexa

操作系统/服务器相关

Windows XP   Windows 2000   Windows 2003   Windows Me   Windows 9.x   Linux   UNIX   注册表   操作系统   服务器   应用服务器

图形图像多媒体相关

Photoshop   Fireworks   Flash   Coreldraw   Illustrator   Freehand   Photoimpact   多媒体   图形图像

标准 网站致力的规范