日期:2011-01-25 22:43:00 来源:本站整理
<b>MYSQL服务保护笔记</b>[MySQL防范]
本文“<b>MYSQL服务保护笔记</b>[MySQL防范]”是由七道奇为您精心收集,来源于网络转载,文章版权归文章作者所有,本站不对其观点以及内容做任何评价,请读者自行判断,以下是其具体内容:
利用MYSQL服务的一些经验,主要从以下几个方面考虑的MYSQL服务筹划计划. %BSL<X@sQ
1 MYSQL服务的安装/配置的通用性; `0,_0O}
2 系统的进级和数据迁移便利性; HZ"r<{k:wj
3 备份和系统快速恢复; /eeM0}D]
\SY%"I5J
MYSQL服务器的筹划 U<K(: X=
================= =g )YG-'wJ
为了今后保护,进级备份的便利和数据的安全性,最好将MYSQL程序文件和数据辨别安装在“差别的硬件”上. /y K~6P
/ !,K&K_X
/usr <== 操作系统 }==> 硬盘1 Z^fDA ^0
/home/mysql <== mysql利用程序 D Dfp @
... d<~F0bPI
/data/app_1/ <== 利用数据和脚本 }==> 硬盘2 )&{~\c
/data/app_2/ c?Ls6{lo
/data/app_3/ a?Xnm(hmw
<VT $jP
mysql服务的安装和服务的启动: .kUb:?r
MYSQL普通利用当前STABLE的版本,尽大概不利用--with-charset=选项,我感受with-charset只在按字母排序的时刻才有效,这些选项会对数据的迁移带来很多麻烦. Fsa vDyI
configure --prefix=/home/mysql P~&S
make -g]Yyzf
make install LE4|8W
NCTazT
服务的启动和终止 &:^NO1~U
================ d#r4]Oc
1 复制缺省的mysql/var/mysql到 /data/app_1/目录下, k(%7*wK#
2 MYSQLD的启动脚本:start_mysql.sh x':}z|
#!/bin/sh kcI4SNm1>|
rundir=`dirname "$0"` YDs1}Lw-
echo "$rundir" !Fs[%+:
/home/mysql/bin/safe_mysqld --user=mysql --pid-file="$rundir"/mysql.pid --datadir="$rundir"/var "$@"\ Of\ F1;#T
-O max_connections=500 -O wait_timeout=600 -O key_buffer=32M --port=3402 --socket="$rundir"/mysql.sock & [ $Iu3
;SSIM'8``U
注释: IU=gJ@
--pid-file="$rundir"/mysql.pid --socket="$rundir"/mysql.sock --datadir="$rundir"/var \\XmmA
目的都是将呼应数据和利用暂时文件放在一同; v2yX E
-O 背面普通是服务器启动全局变量优化参数,有时刻需求按照具体利用调整; PRV<Ss2
--port: 差别的利用利用PORT参数分布到差别的服务上去,一个服务可以供应的衔接数普通是MYSQL服务的主要瓶颈; YBKv2s{~&*
6yA?iFJ9is
改正差别的服务到差别的端口后,在rc.local文件中加入: el\|KCL`s
/data/app_1/start_mysql.sh |\(P)i ,
/data/app_2/start_mysql.sh oY_aUS7O
/data/app_3/start_mysql.sh Fy4n'ZH$
注意:必须写全途径 +`r4`\
[4rVu
3 MYSQLD的终止脚本:stop_mysql.sh W\if~t2j
#!/bin/sh EpgkG ./G
rundir=`dirname "$0"` nf0J/ | f
echo "$rundir" X5#] `o~
/home/mysql/bin/mysqladmin -u mysql -S"$rundir"/mysql.sock shutdown {1Z#we3c:
h5Y*o>#z4
利用这个脚本的好处在于: &\#58:I
1 多个服务启动:只需求改正脚本中的--port=参数.单个目录下的数据和服务脚本都是可以独立打包的. c 1_aWyhi
2 全部服务呼应文件都位于/data/app_1/目录下:比方:mysql.pid mysql.sock,当一台服务器上启动多个服务时,多个服务不会彼此影响.但都放到缺省的/tmp/下则有大概被其他利用误删. %_5qt(
3 当硬盘1出问题今后,直接将硬盘2放到一台装好MYSQL的服务器上便可以立即恢复服务(假如放到my.cnf里则还需求备份呼应的配置文件). ;x@ey^
M VV79}iy
服务启动后/data/app_1/下呼应的文件和目录分布以下: r.:t 'mi
/data/app_1/ NSIw S#+
start_mysql.sh 服务启动脚本 !$kx$t/+
stop_mysql.sh 服务终止脚本 eh36lSXvU
mysql.pid 服务的进程ID GS}= X,
mysql.sock 服务的SOCK $QGTT` B<u
var/ 数据区 Ae} 39V
mysql/ 用户库 RrBC'KlD
app_1_db_1/ 利用库 `iF\] ds
app_2_db_2/ 5/<Td*2 /
... O 5wk0K*
/data/app_2/ 8NzexxKv
... -DdqB
Xf2e^SEW
查看全部的利用进程ID: ^9y~W*
cat /data/*/mysql.pid N|QK$,EqzI
0'L*w
查看全部数据库的错误日记: VG> Joi6
cat /data/*/var/*.err EUWW/iu
5@q1`,v^
个人倡议:MYSQL的主要瓶颈在PORT的衔接数上,因此,将表构造优化好今后,呼应单个MYSQL服务的CPU占用仍旧在10%以上,就要考虑将服务拆分到多个PORT上运行了. x2@*Pn5
U[ Lt"e1
服务的备份 b$>)i9e,
========== SJ;U?
尽大概利用MYSQL DUMP而不是直接备份数据文件,以下是一个按weekday将数据轮循备份的脚本:备份的隔断和周期可以按照备份的需求肯定 bK[$%p1V\"
/home/mysql/bin/mysqldump -S/data/app_1/mysql.sock -umysql db_name | gzip -f>/path/to/backup/db_name.`data +%w`.dump.gz =.q#A|ue
因此写在CRONTAB中普通是: O>h54XI
* 6 * * * /home/mysql/bin/mysqldump -S/data/app_1/mysql.sock -umysql db_name | gzip -f>/path/to/backup/db_name.`data +\%w`.dump.gz z XA$1V]
注意: qi=XOk3
1 在crontab中´%´需求转义成´\%´ Iw_Sx~ /
2 按照日记统计,利用负载最低的时刻普通是在早上6点 (XJTA
vLF!9"n}h
先备份在本地然后传到远程的备份服务器上,大概直接成立一个数据库备份帐号,直接在远程的服务器上备份,远程备份只需求将以上脚本中的-S /path/to/msyql.sock改成-h IP.ADDRESS便可. nzt6S]fs
WYx"-}}`b
数据的恢复和系统的进级 `)zlk l7
====================== LY>Wz(5sy
平常保护和数据迁移:在数据盘没有被破坏的情形下 {]E4\&
硬盘普通是系统中寿命最低的硬件.而系统(包含操作系统和MYSQL利用)的进级和硬件进级,城市碰到数据迁移的问题. /;^5g!
只要数据不变,先装好服务器,然后直接将数据盘(硬盘2)安装上,只需求将启动脚本重新加入到rc.local文件中,系统就算是很好的恢复了. Fm m:" o T
OeF-%FnYW
灾难恢复:数据本身被破坏的情形下 Vqn54xI&eh
肯定破坏的时间点,然后从备份数据中恢复. {Arbf]_
4yCTrC$M|
利用的计划要点 =/N`@,A p
============== UdT^mGZ
:$}%meQ
非用数据库不可吗? ~ Q@? X
数据库的确可以简化很多利用的构造计划,但本身也是一个系统资源损耗对比大的利用.所以很多利用假如没有很高的及时统计需求的话,完好可以先记录到文件日记中,按期的导入到数据库中做后续统计解析.假如还是需求记录2维表构造,构造充足简单的话可以利用DBM构造.即便需求利用数据库的,利用假如没有太复杂的数据完好性需求的化,完好可以不利用那些支持外键的商业数据库, E I}
数据库服务的主要瓶颈:单个服务的衔接数 {Y*ZiycU
关于一个利用来说,假如数据库表构造的计划可以按照数据库原理的范式来计划的话,并且已经利用了最新版本的MYSQL,并且按照对比优化的方法运行了,那么最后的主要瓶颈普通在于单个服务的衔接数,即便一个数据库可以支持并发500个衔接,最好也不要把利用用到这个地步,因为并发衔接数过大都据库服务本身用于调度的线程的开销也会非常大了.所以假如利用答应的话:让一台机械多跑几个MYSQL服务分担.将服务均衡的筹划到多个MYSQL服务端口上:比方app_1 ==> 3301 app_2 ==> 3302...app_9 ==> 3309.一个1G内存的机械跑上10个MYSQL是很正常的.让10个MYSQLD承当1000个并发衔接效率要比让2个MYSQLD承当1000个效率高的多.当然,这样也会带来一些利用编程上的复杂度; ,HyH|Z'
利用单独的数据库服务器(不要和前台WEB服务抢内存),MYSQL拥有更多的内存便大概能有效的举行后果集的缓存; r,MiCjc_z&
利用尽大概利用PCONNECT和polling机制,用于节俭MYSQL服务成立衔接的开销; +*FIMA8Bf
表的横向拆分:让最常被拜候的10%的数据放在一个小表里,90%的历史数据放在一个归档表里,数据中间通过按期“搬迁”和按期删除无效数据来节俭.这样关于利用来说老是在10%数据中举行挑选,对比有利于数据的缓存,不要期望MYSQL中对单表记录数在10万级以上还有对比高的效率. F4_$G"Qc
表的纵向拆分(过渡范化):将全部的定长字段(char, int等)放在一个表里,全部的变长字段(varchar,text,blob等)放在别的一个表里,2个表之间通过主键关联,这样,定长字段表可以得到很大的优化(乃至可以利用HEAP表范例,数据完好在内存中存取),这里也阐明别的一个原则,关于我们来说,尽大概利用定长字段可以通过空间的丧失换取拜候效率的提高.MYSQL之所以支持多种表范例,实际上是针对差别利用供应了差别的优化方法; F_~m@uq(n
细心的查抄利用的索引计划,乃至在服务启动中加入 --log-slow-queries[=file]用于跟踪解析利用瓶颈. nCKj,K/N
chedong 以上是“<b>MYSQL服务保护笔记</b>[MySQL防范]”的内容,如果你对以上该文章内容感兴趣,你可以看看七道奇为您推荐以下文章:
<b>hosts是什么 hosts文件在什么位置 若何改正hosts</b>
<b>在 Windows 8 中手动安装语言包</b>
<b>五个常见 PHP数据库问题</b>
Windows中Alt键的12个高效快速的利用本领介绍
<b>MySQL ORDER BY 的实现解析</b>
<b>详解MySQL存储历程参数有三种范例(in、out、inout)</b>
<b>Win8系统恢复出来经典的开始菜单的办法</b>
<b>Win8系统花屏怎么办 Win8系统花屏的办理办法</b>
<b>Windows 7系统下无线网卡安装</b>
<b>为什么 Linux不需求碎片整理</b>
<b>Windows 8中删除账户的几种办法(图)</b>
<b>教你如安在win7下配置路由器</b>
1 MYSQL服务的安装/配置的通用性; `0,_0O}
2 系统的进级和数据迁移便利性; HZ"r<{k:wj
3 备份和系统快速恢复; /eeM0}D]
\SY%"I5J
MYSQL服务器的筹划 U<K(: X=
================= =g )YG-'wJ
为了今后保护,进级备份的便利和数据的安全性,最好将MYSQL程序文件和数据辨别安装在“差别的硬件”上. /y K~6P
/ !,K&K_X
/usr <== 操作系统 }==> 硬盘1 Z^fDA ^0
/home/mysql <== mysql利用程序 D Dfp @
... d<~F0bPI
/data/app_1/ <== 利用数据和脚本 }==> 硬盘2 )&{~\c
/data/app_2/ c?Ls6{lo
/data/app_3/ a?Xnm(hmw
<VT $jP
mysql服务的安装和服务的启动: .kUb:?r
MYSQL普通利用当前STABLE的版本,尽大概不利用--with-charset=选项,我感受with-charset只在按字母排序的时刻才有效,这些选项会对数据的迁移带来很多麻烦. Fsa vDyI
configure --prefix=/home/mysql P~&S
make -g]Yyzf
make install LE4|8W
NCTazT
服务的启动和终止 &:^NO1~U
================ d#r4]Oc
1 复制缺省的mysql/var/mysql到 /data/app_1/目录下, k(%7*wK#
2 MYSQLD的启动脚本:start_mysql.sh x':}z|
#!/bin/sh kcI4SNm1>|
rundir=`dirname "$0"` YDs1}Lw-
echo "$rundir" !Fs[%+:
/home/mysql/bin/safe_mysqld --user=mysql --pid-file="$rundir"/mysql.pid --datadir="$rundir"/var "$@"\ Of\ F1;#T
-O max_connections=500 -O wait_timeout=600 -O key_buffer=32M --port=3402 --socket="$rundir"/mysql.sock & [ $Iu3
;SSIM'8``U
注释: IU=gJ@
--pid-file="$rundir"/mysql.pid --socket="$rundir"/mysql.sock --datadir="$rundir"/var \\XmmA
目的都是将呼应数据和利用暂时文件放在一同; v2yX E
-O 背面普通是服务器启动全局变量优化参数,有时刻需求按照具体利用调整; PRV<Ss2
--port: 差别的利用利用PORT参数分布到差别的服务上去,一个服务可以供应的衔接数普通是MYSQL服务的主要瓶颈; YBKv2s{~&*
6yA?iFJ9is
改正差别的服务到差别的端口后,在rc.local文件中加入: el\|KCL`s
/data/app_1/start_mysql.sh |\(P)i ,
/data/app_2/start_mysql.sh oY_aUS7O
/data/app_3/start_mysql.sh Fy4n'ZH$
注意:必须写全途径 +`r4`\
[4rVu
3 MYSQLD的终止脚本:stop_mysql.sh W\if~t2j
#!/bin/sh EpgkG ./G
rundir=`dirname "$0"` nf0J/ | f
echo "$rundir" X5#] `o~
/home/mysql/bin/mysqladmin -u mysql -S"$rundir"/mysql.sock shutdown {1Z#we3c:
h5Y*o>#z4
利用这个脚本的好处在于: &\#58:I
1 多个服务启动:只需求改正脚本中的--port=参数.单个目录下的数据和服务脚本都是可以独立打包的. c 1_aWyhi
2 全部服务呼应文件都位于/data/app_1/目录下:比方:mysql.pid mysql.sock,当一台服务器上启动多个服务时,多个服务不会彼此影响.但都放到缺省的/tmp/下则有大概被其他利用误删. %_5qt(
3 当硬盘1出问题今后,直接将硬盘2放到一台装好MYSQL的服务器上便可以立即恢复服务(假如放到my.cnf里则还需求备份呼应的配置文件). ;x@ey^
M VV79}iy
服务启动后/data/app_1/下呼应的文件和目录分布以下: r.:t 'mi
/data/app_1/ NSIw S#+
start_mysql.sh 服务启动脚本 !$kx$t/+
stop_mysql.sh 服务终止脚本 eh36lSXvU
mysql.pid 服务的进程ID GS}= X,
mysql.sock 服务的SOCK $QGTT` B<u
var/ 数据区 Ae} 39V
mysql/ 用户库 RrBC'KlD
app_1_db_1/ 利用库 `iF\] ds
app_2_db_2/ 5/<Td*2 /
... O 5wk0K*
/data/app_2/ 8NzexxKv
... -DdqB
Xf2e^SEW
查看全部的利用进程ID: ^9y~W*
cat /data/*/mysql.pid N|QK$,EqzI
0'L*w
查看全部数据库的错误日记: VG> Joi6
cat /data/*/var/*.err EUWW/iu
5@q1`,v^
个人倡议:MYSQL的主要瓶颈在PORT的衔接数上,因此,将表构造优化好今后,呼应单个MYSQL服务的CPU占用仍旧在10%以上,就要考虑将服务拆分到多个PORT上运行了. x2@*Pn5
U[ Lt"e1
服务的备份 b$>)i9e,
========== SJ;U?
尽大概利用MYSQL DUMP而不是直接备份数据文件,以下是一个按weekday将数据轮循备份的脚本:备份的隔断和周期可以按照备份的需求肯定 bK[$%p1V\"
/home/mysql/bin/mysqldump -S/data/app_1/mysql.sock -umysql db_name | gzip -f>/path/to/backup/db_name.`data +%w`.dump.gz =.q#A|ue
因此写在CRONTAB中普通是: O>h54XI
* 6 * * * /home/mysql/bin/mysqldump -S/data/app_1/mysql.sock -umysql db_name | gzip -f>/path/to/backup/db_name.`data +\%w`.dump.gz z XA$1V]
注意: qi=XOk3
1 在crontab中´%´需求转义成´\%´ Iw_Sx~ /
2 按照日记统计,利用负载最低的时刻普通是在早上6点 (XJTA
vLF!9"n}h
先备份在本地然后传到远程的备份服务器上,大概直接成立一个数据库备份帐号,直接在远程的服务器上备份,远程备份只需求将以上脚本中的-S /path/to/msyql.sock改成-h IP.ADDRESS便可. nzt6S]fs
WYx"-}}`b
数据的恢复和系统的进级 `)zlk l7
====================== LY>Wz(5sy
平常保护和数据迁移:在数据盘没有被破坏的情形下 {]E4\&
硬盘普通是系统中寿命最低的硬件.而系统(包含操作系统和MYSQL利用)的进级和硬件进级,城市碰到数据迁移的问题. /;^5g!
只要数据不变,先装好服务器,然后直接将数据盘(硬盘2)安装上,只需求将启动脚本重新加入到rc.local文件中,系统就算是很好的恢复了. Fm m:" o T
OeF-%FnYW
灾难恢复:数据本身被破坏的情形下 Vqn54xI&eh
肯定破坏的时间点,然后从备份数据中恢复. {Arbf]_
4yCTrC$M|
利用的计划要点 =/N`@,A p
============== UdT^mGZ
:$}%meQ
非用数据库不可吗? ~ Q@? X
数据库的确可以简化很多利用的构造计划,但本身也是一个系统资源损耗对比大的利用.所以很多利用假如没有很高的及时统计需求的话,完好可以先记录到文件日记中,按期的导入到数据库中做后续统计解析.假如还是需求记录2维表构造,构造充足简单的话可以利用DBM构造.即便需求利用数据库的,利用假如没有太复杂的数据完好性需求的化,完好可以不利用那些支持外键的商业数据库, E I}
数据库服务的主要瓶颈:单个服务的衔接数 {Y*ZiycU
关于一个利用来说,假如数据库表构造的计划可以按照数据库原理的范式来计划的话,并且已经利用了最新版本的MYSQL,并且按照对比优化的方法运行了,那么最后的主要瓶颈普通在于单个服务的衔接数,即便一个数据库可以支持并发500个衔接,最好也不要把利用用到这个地步,因为并发衔接数过大都据库服务本身用于调度的线程的开销也会非常大了.所以假如利用答应的话:让一台机械多跑几个MYSQL服务分担.将服务均衡的筹划到多个MYSQL服务端口上:比方app_1 ==> 3301 app_2 ==> 3302...app_9 ==> 3309.一个1G内存的机械跑上10个MYSQL是很正常的.让10个MYSQLD承当1000个并发衔接效率要比让2个MYSQLD承当1000个效率高的多.当然,这样也会带来一些利用编程上的复杂度; ,HyH|Z'
利用单独的数据库服务器(不要和前台WEB服务抢内存),MYSQL拥有更多的内存便大概能有效的举行后果集的缓存; r,MiCjc_z&
利用尽大概利用PCONNECT和polling机制,用于节俭MYSQL服务成立衔接的开销; +*FIMA8Bf
表的横向拆分:让最常被拜候的10%的数据放在一个小表里,90%的历史数据放在一个归档表里,数据中间通过按期“搬迁”和按期删除无效数据来节俭.这样关于利用来说老是在10%数据中举行挑选,对比有利于数据的缓存,不要期望MYSQL中对单表记录数在10万级以上还有对比高的效率. F4_$G"Qc
表的纵向拆分(过渡范化):将全部的定长字段(char, int等)放在一个表里,全部的变长字段(varchar,text,blob等)放在别的一个表里,2个表之间通过主键关联,这样,定长字段表可以得到很大的优化(乃至可以利用HEAP表范例,数据完好在内存中存取),这里也阐明别的一个原则,关于我们来说,尽大概利用定长字段可以通过空间的丧失换取拜候效率的提高.MYSQL之所以支持多种表范例,实际上是针对差别利用供应了差别的优化方法; F_~m@uq(n
细心的查抄利用的索引计划,乃至在服务启动中加入 --log-slow-queries[=file]用于跟踪解析利用瓶颈. nCKj,K/N
chedong 以上是“<b>MYSQL服务保护笔记</b>[MySQL防范]”的内容,如果你对以上该文章内容感兴趣,你可以看看七道奇为您推荐以下文章:
本文地址: | 与您的QQ/BBS好友分享! |
评论内容只代表网友观点,与本站立场无关!
评论摘要(共 0 条,得分 0 分,平均 0 分)
查看完整评论