选择显示字体大小

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

服务的启动和停止

1 复制缺省的mysql/var/mysql到 /data/app_1/目录下。

2 mysqld的启动脚本:start_mysql.sh

#!/bin/shrundir=`dirname "&#36;0"`echo "&#36;rundir"/home/mysql/bin/safe_mysqld --user=mysql --pid-file="&#36;rundir"/mysql.pid --datadir="&#36;rundir"/var "&#36;@"\-o max_connections=500 -o wait_timeout=600 -o key_buffer=32m --port=3402 --socket="&#36;rundir"/mysql.sock &


注释:

--pid-file="&#36;rundir"/mysql.pid --socket="&#36;rundir"/mysql.sock --datadir="&#36;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/shrundir=`dirname "&#36;0"`echo "&#36;rundir"/home/mysql/bin/mysqladmin -u mysql -s"&#36;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上运行了。

服务的备份

尽量使用mysql dump而不是直接备份数据文件,以下是一个按weekday将数据轮循备份的脚本:备份的间隔和周期可以根据备份的需求确定

/home/mysql/bin/mysqldump -s/data/app_1/mysql.sock -umysql db_name gzip -f>/path/to/backup/db_name.`data +&#37;w`.dump.gz

因此写在crontab中一般是:

15 4 * * * /home/mysql/bin/mysqldump -s/data/app_1/mysql.sock -umysql db_name gzip -f>/path/to/backup/db_name.`data +\&#37;w`.dump.gz

注意:

1 在crontab中'&#37;'需要转义成'\&#37;'
2 根据日志统计,应用负载最低的时候一般是在早上4-6点

先备份在本地然后传到远程的备份服务器上,或者直接建立一个数据库备份帐号,直接在远程的服务器上备份,远程备份只需要将以上脚本中的-s /path/to/msyql.sock改成-h ip.address即可。

数据的恢复和系统的升级

日常维护和数据迁移:在数据盘没有被破坏的情况下,硬盘一般是系统中寿命最低的硬件。而系统(包括操作系统mysql应用)的升级和硬件升级,都会遇到数据迁移的问题。
只要数据不变,先装好服务器,然后直接将数据盘(硬盘2)安装上,只需要将启动脚本重新加入到rc.local文件中,系统就算是很好的恢复了。

灾难恢复:数据库数据本身被破坏的情况下,确定破坏的时间点,然后从备份数据中恢复。


 


关键字 本文所属关键字

相关 与本文相关文章

分类 所有文章关键字导航

源码编程相关

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   多媒体   图形图像

标准 网站致力的规范

Valid CSS!

无不良内容,无不良广告,无恶意代码

Valid XHTML 1.0 Transitional

creativecommons