标签 mysql 下的文章

系统负载达到某值自动重启mysql脚本

记得以前VPS压力很大,每天某些时间段负载很高,而且会卡很久,有可能是某些程序/插件造成(网站多,服务器复杂),也很难排除,当然也很难舍弃当前的一些东西,根据我的观察有时候重启一下mysql一会就恢复,不重启mysql会持续很久,那么就想到一个想法,根据系统负载来重启mysqll服务,当然也可以重启任何服务,比如php等,自己修改!
今天记起来,收拾一下顺手记录一下,分享给大家:
系统:centos 5,其他系统均未测试!
#!/bin/sh TOP_SYS_LOAD_NUM=20 #系统负载的值 SYS_LOAD_NUM=`uptime | awk '{print $(NF-2)}' | sed 's/,//'` echo $(date +"%y-%m-%d") `uptime` if [ `echo "$TOP_SYS_LOAD_NUM < $SYS_LOAD_NUM"|bc` -eq 1 ] then echo "#0#" $(date +"%y-%m-%d %H:%M:%S") "pkill mysql" `ps -ef | grep mysql | wc -l` /etc/init.d/mysql restart sleep 60 for i in 1 2 3 do if [ `pgrep mysql | wc -l` -le 0 ] then echo "#1#" $(date +"%y-%m-%d %H:%M:%S") "start mysql" `ps -ef | grep mysql | wc -l` /etc/init.d/mysql start sleep 30 fi done else if [ `pgrep mysql | wc -l` -le 0 ] then echo "#2#" $(date +"%y-%m-%d %H:%M:%S") "start mysql" `ps -ef | grep mysql | wc -l` /etc/init.d/mysql start sleep 30 fi fi

下面就是加入系统计划任务了:
crontab -e
#下面两个任选,或者自己定义,一般是在某段时间5分钟左右执行一次比较合适,也解决了我很多烦恼! */1 * * * * /root/kmysql.sh >>/root/kmysql.log #每分钟都执行,全部时间 */2 13-14 * * * /root/kmysql.sh >>/root/kmysql.log #没两分钟执行一次,仅限于13点到14点
因为nginx+php-fpm,可能php-fpm挂掉了引起502或者php-fpm进程不够引起的502,那么这里可以稍微修改一下重启php-fpm!
记录php-cgi进程数
netstat -anpo | grep "php-cgi" | wc -l
重启php命令,根据自己实际情况处理
/usr/local/php/sbin/php-fpm restart

脚本执行如果报错
bc: command not found
表示没有bc命令,centos可以用 yum -y install bc 安装它.

好了,不多说了,灵活用吧!

Linux自动备份网站文件和数据库上传到FTP空间和发送到Email附件

连续发力,服务器环境配置完成了,博客也搭建完成了,那么接下来的问题就是数据备份了,因为我很懒,如果让我每天去人肉备份,那真的太难受,而且那么多服务器那么多网站...
这里我发一个自动备份的脚本.

本备份主要功能:

1.可以自动定时备份指定的网站数据跟数据库到指定的FTP空间!

2.自动删除旧的备份数据,可以随意设置保留天数!

3.数据库备份采取三保险,备份到FTP同时也备份到设置的EMAIL(附件),直接打包数据库,可到处数据库双备份!
MYSQL_USER=root                  #mysql用户名 MYSQL_PASS=123456                #mysql密码 [email protected]        #数据库发送到的邮箱 FTP_USER=whhack                  #ftp用户名 FTP_PASS=123456                  #ftp密码 FTP_IP=whhack.com                #ftp地址 FTP_backup=backup                #ftp上存放备份文件的目录,自己上ftp上面建 WEB_DATA=/home/www               #要备份的网站数据
这里要说明一点就是:备份大文件一定硬挨考虑到自己服务器/VPS的负载能力/性能,虽然本脚本没有局限性,但是数据大了,经不起折腾,而且数据库过大也可能发不了附件...

开始前,需要安装或者事前的工作:
1.mkdir -p /home/backup #建立备份目录
2.安装Email发送组件 yum install sendmail mutt
3.安装zip压缩 yum install zip
4.安装crontab
yum -y install gcc gcc-c++ autoconf vixie-cron
yum -y install gcc gcc-c++ autoconf crontabs
#要修改的地方开始 MYSQL_USER=root                     #mysql用户名 MYSQL_PASS=123456                   #mysql密码 [email protected]           #数据库发送到的邮箱 FTP_USER=whhack                     #ftp用户名 FTP_PASS=123456                     #ftp密码 FTP_IP=whhack.com                   #ftp地址 FTP_backup=backup                   #ftp上存放备份文件的目录,这个要自己得ftp上面建的 WEB_DATA=/home/www                  #要备份的网站数据 #要修改的地方结束 #定义数据库的名字和旧数据库的名字 DataBakName=Data_$(date +"%Y%m%d").tar.gz WebBakName=Web_$(date +%Y%m%d).tar.gz OldData=Data_$(date -d -5day +"%Y%m%d").tar.gz OldWeb=Web_$(date -d -5day +"%Y%m%d").tar.gz #删除本地3天前的数据 rm -rf /home/backup/Data_$(date -d -3day +"%Y%m%d").tar.gz /home/backup/Web_$(date -d -3day +"%Y%m%d").tar.gz cd /home/backup #导出数据库,一个数据库一个压缩文件 for db in `/usr/local/mysql/bin/mysql -u$MYSQL_USER -p$MYSQL_PASS -B -N -e 'SHOW DATABASES' | xargs`; do (/usr/local/mysql/bin/mysqldump -u$MYSQL_USER -p$MYSQL_PASS ${db} | gzip -9 - > ${db}.sql.gz) done #压缩数据库文件为一个文件 zip -r /home/backup/data.zip /usr/local/mysql/var/ #这里是数据库目录直接打包,可以选择性打包 zip -r /home/backup/sqldata.zip /home/backup/*.sql.gz tar zcf /home/backup/$DataBakName /home/backup/*.zip rm -rf /home/backup/*.zip rm -rf /home/backup/*.sql.gz #发送数据库到Email,如果数据库压缩后太大,请注释这行 echo "主题:数据库备份" | mutt -a /home/backup/$DataBakName -s "内容:数据库备份" $MAIL_TO #压缩网站数据 tar zcf /home/backup/$WebBakName $WEB_DATA #上传到FTP空间,删除FTP空间5天前的数据 ftp -v -n $FTP_IP << END user $FTP_USER $FTP_PASS type binary cd $FTP_backup delete $OldData delete $OldWeb put $DataBakName put $WebBakName bye END

如果保存以上代码脚本为aotoback.sh

这里顺便说下: bash脚本:/bin/sh^M:bad interpreter: No such file or directory

原因: 与一些windows文件在linux下打开后出现^M符号类似。

解决方法: 在vim中查看文件的fileformat, 如果为DOS则改为unix

set fileformat

set fileformat=unix

给备份脚本权限 chmod +x aotoback.sh

crontab 实现自动备份 crontab -e

每天晚上4点开始备份 00 4 * * * /home/aotoback.sh

下面说一下一些技巧:
如果你只想备份某一个数据库,可以建立一个只对你要备份的数据库有权限的用户,在上面填写此用户即可实现!
然后就是备份网站不需要连程序都备份,如果数据太大,那么备份时间又长,还会导致一些问题,可以只备份附件等目录即可,可以自行修改,灵活处理!

最后发一个DZX2备份的实例,可以参考:
#!/bin/bash MYSQL_USER=webback MYSQL_PASS=123456 [email protected] FTP_USER=whhack FTP_PASS=123456 FTP_IP=whhack.com FTP_backup=web.com/day DataBakName=Data_$(date +"%Y%m%d").tar.gz WebBakName=Web_$(date +%Y%m%d).tar.gz OldData=Data_$(date -d -5day +"%Y%m%d").tar.gz OldWeb=Web_$(date -d -32day +"%Y%m%d").tar.gz rm -rf /home/backup/day/Data_$(date -d -3day +"%Y%m%d").tar.gz /home/backup/day/Web_$(date -d -3day +"%Y%m%d").tar.gz cd /home/backup/day for db in `/usr/local/mysql/bin/mysql -u$MYSQL_USER -p$MYSQL_PASS -B -N -e 'SHOW DATABASES' | xargs`; do (/usr/local/mysql/bin/mysqldump -u$MYSQL_USER -p$MYSQL_PASS ${db} --skip-lock-tables | gzip -9 - > ${db}.sql.gz) done zip -r /home/backup/day/web001.zip /usr/local/mysql/var/web/ zip -r /home/backup/day/sql000.zip /home/backup/day/*.sql.gz tar zcf /home/backup/day/$DataBakName /home/backup/day/*.zip rm -rf /home/backup/day/*.zip rm -rf /home/backup/day/*.sql.gz echo "数据库:web-mysql-beifen_$(date +"%Y%m%d")" | mutt -a /home/backup/day/$DataBakName -s "数据库:web-mysql-beifen_$(date +"%Y%m%d")" $MAIL_TO WEB_DATA1=/home/wwwroot/web.com/data/attachment/forum/$(date -d -1day +"%Y%m/%d")/ WEB_DATA2=/home/wwwroot/web.com/data/attachment/album/$(date -d -1day +"%Y%m/%d")/ WEB_DATA3=/home/wwwroot/web.com/data/attachment/portal/$(date -d -1day +"%Y%m/%d")/ zip -r /home/backup/day/forum.zip $WEB_DATA1 zip -r /home/backup/day/album.zip $WEB_DATA2 zip -r /home/backup/day/portal.zip $WEB_DATA3 tar zcf /home/backup/day/$WebBakName /home/backup/day/*.zip rm -rf /home/backup/day/*.zip echo "每日附件:web-web-beifen_$(date +"%Y%m%d")" | mutt -a /home/backup/day/$WebBakName -s "每日附件:web-web-beifen_$(date +"%Y%m%d")" $MAIL_TO /usr/local/php/sbin/php-fpm restart ftp -v -n $FTP_IP << END user $FTP_USER $FTP_PASS type binary cd $FTP_backup delete $OldData delete $OldWeb put $DataBakName put $WebBakName bye END
实例附件下载:dzx2back.sh

本站环境Litespeed+php+mysql+ZendGuardLoader配置教程

一直想好好做个博客记录一下东西,毕竟很多东西一段时间后会忘记,记得研究Litespeed是前年(2010年)的事情了,而一直没有用于生产,于是本博客也经常夭折,因为WP实在是太耗服务器资源,nginx,apache,kloxo等环境跑起来有点吃力,内存也占用过多!
今天我用一台128M内存的闲置VPS安装环境,放此博客,系统:centos5;内存:128M;CPU:Intel(R) Xeon(R) CPU E5620(限制单核).
可能大家会对Litespeed比较陌生,而且Litespeed也是一款商业软件,不过有免费版的,免费版限制就是只有150个连接数,一般站点150个连接数是足够的,如果不够可以考虑采用nginx前端Litespeed后端的模式,静态内容全部走nginx并发,Litespeed走动态并发!每天IP不超过1W的使用免费版问题不大.
这里我选择的软件版本为:
Litespeed:lsws-4.1.10-std,php:5.3.8,mysql:mysql-5.1.60
首先,安装一些所需的程序:
yum -y install yum-fastestmirror yum -y remove httpd yum -y update yum -y install patch make gcc gcc-c++ gcc-g77 flex bison file yum -y install libtool libtool-libs autoconf kernel-devel yum -y install libjpeg libjpeg-devel libpng libpng-devel libpng10 libpng10-devel gd gd-devel yum -y install freetype freetype-devel libxml2 libxml2-devel zlib zlib-devel yum -y install glib2 glib2-devel bzip2 bzip2-devel libevent libevent-devel yum -y install ncurses ncurses-devel curl curl-devel e2fsprogs yum -y install e2fsprogs-devel krb5 krb5-devel libidn libidn-devel yum -y install openssl openssl-devel vim-minimal nano sendmail yum -y install fonts-chinese gettext gettext-devel yum -y install ncurses-devel yum -y install gmp-devel pspell-devel yum -y install unzip export PHP_AUTOCONF=/usr/bin/autoconf-2.13 export PHP_AUTOHEADER=/usr/bin/autoheader-2.13
安装PHP 5.3.8所需的支持库:
wget -c http://whhack.googlecode.com/files/libiconv-1.13.1.tar.gz tar zxvf libiconv-1.13.1.tar.gz cd libiconv-1.13.1/ ./configure --prefix=/usr/local make make install cd ../

wget -c http://whhack.googlecode.com/files/libevent-1.4.14b-stable.tar.gz tar zxvf libevent-1.4.14b-stable.tar.gz cd libevent-1.4.14b-stable/ ./configure --prefix=/usr make make install cd ../

wget -c http://whhack.googlecode.com/files/libmcrypt-2.5.8.tar.gz tar zxvf libmcrypt-2.5.8.tar.gz cd libmcrypt-2.5.8/ ./configure make make install /sbin/ldconfig cd libltdl/ ./configure --enable-ltdl-install make make install cd ../../

wget -c http://whhack.googlecode.com/files/mhash-0.9.9.9.tar.gz tar zxvf mhash-0.9.9.9.tar.gz cd mhash-0.9.9.9/ ./configure make make install cd ../

ln -s /usr/local/lib/libmcrypt.la /usr/lib/libmcrypt.la ln -s /usr/local/lib/libmcrypt.so /usr/lib/libmcrypt.so ln -s /usr/local/lib/libmcrypt.so.4 /usr/lib/libmcrypt.so.4 ln -s /usr/local/lib/libmcrypt.so.4.4.8 /usr/lib/libmcrypt.so.4.4.8 ln -s /usr/local/lib/libmhash.a /usr/lib/libmhash.a ln -s /usr/local/lib/libmhash.la /usr/lib/libmhash.la ln -s /usr/local/lib/libmhash.so /usr/lib/libmhash.so ln -s /usr/local/lib/libmhash.so.2 /usr/lib/libmhash.so.2 ln -s /usr/local/lib/libmhash.so.2.0.1 /usr/lib/libmhash.so.2.0.1 ln -s /usr/local/bin/libmcrypt-config /usr/bin/libmcrypt-config

wget -c http://whhack.googlecode.com/files/mcrypt-2.6.8.tar.gz tar zxvf mcrypt-2.6.8.tar.gz cd mcrypt-2.6.8/ ./configure make make install cd ../

(可选)安装Google的开源TCMalloc库google-perftools-1.9.1,提高MySQL在高并发情况下的性能:
wget -c http://whhack.googlecode.com/files/google-perftools-1.9.1.tar.gz tar zxvf google-perftools-1.9.1.tar.gz cd google-perftools-1.9.1/ ./configure make && make install echo "/usr/local/lib" > /etc/ld.so.conf.d/usr_local_lib.conf /sbin/ldconfig cd ../

安装mysql:
wget -c http://whhack.googlecode.com/files/mysql-5.1.60.tar.gz tar -zxvf mysql-5.1.60.tar.gz cd mysql-5.1.60 ./configure --prefix=/usr/local/mysql --with-extra-charsets=all --enable-thread-safe-client --enable-assembler --with-charset=utf8 --enable-thread-safe-client --with-extra-charsets=all --with-big-tables --with-readline --with-ssl --with-embedded-server --enable-local-infile --without-debug --with-mysqld-ldflags=-ltcmalloc_minimal make && make install cd ../ groupadd mysql useradd -g mysql mysql cp /usr/local/mysql/share/mysql/my-medium.cnf /etc/my.cnf /usr/local/mysql/bin/mysql_install_db --user=mysql chown -R mysql /usr/local/mysql/var chgrp -R mysql /usr/local/mysql/. cp /usr/local/mysql/share/mysql/mysql.server /etc/init.d/mysql chmod 755 /etc/init.d/mysql chkconfig --level 345 mysql on echo "/usr/local/mysql/lib/mysql" >> /etc/ld.so.conf echo "/usr/local/lib" >>/etc/ld.so.conf ldconfig ln -s /usr/local/mysql/lib/mysql /usr/lib/mysql ln -s /usr/local/mysql/include/mysql /usr/include/mysql service mysql start /usr/local/mysql/bin/mysqladmin -u root password root //密码自己修改 service mysql restart

再来安装LiteSpeed:
wget http://www.litespeedtech.com/packages/4.0/lsws-4.1.10-std-i386-linux.tar.gz tar zxvf lsws-4.1.10-std-i386-linux.tar.gz cd lsws-4.1.10 ./install.sh
出现--More--(27%)的许可协议,可以直接按空格键或者回车跳到最后.
Do you agree with above license? #这里需要输入Yes (Y要大写)
下面的基本一直回车和选Y,Email之类的看着写,很简单...
安装完成就可以访问http://IP:7080来管理LiteSpeed;

安装php:
在litespeed控制面板选择Compile PHP
然后选择要安装的php版本,我这里选择php5.3.8,可以选择eAccelerator/XCache,因为我们这里需要安装ZendGuardLoader,不要选择APC.
然后用以下参数编译:
--with-mysql=mysqlnd --with-mysqli=mysqlnd --with-iconv=/usr/local --with-freetype-dir --with-jpeg-dir --with-png-dir --with-zlib --with-libxml-dir=/usr --enable-xml --disable-rpath --enable-bcmath --enable-shmop --enable-sysvsem --enable-inline-optimization --with-curl --with-curlwrappers --enable-mbregex --enable-mbstring --with-mcrypt --with-gd --enable-gd-native-ttf --with-openssl --with-mhash --enable-pcntl --enable-sockets --with-ldap --with-ldap-sasl --with-xmlrpc --enable-zip --enable-soap --enable-ftp --disable-debug --with-gettext --with-openssl
然后就是下一步,到最后一步的时候出现要求你执行:
/usr/local/lsws/phpbuild/buildphp_manual_run.sh
然后就是等待了,可以在安装界面里面看到详细的进度,一般需要几分钟到十几分钟(或更久)!

如果安装后/usr/local/lsws/lsphp5/lib/php.ini不存在,那么把 /usr/local/lsws/php/php.ini 复制到/usr/local/lsws/lsphp5/lib/目录下。
在php.ini末尾添加eAccelerator:
[eaccelerator] zend_extension="/usr/local/lsws/lsphp5/lib/php/extensions/no-debug-non-zts-20090626/eaccelerator.so" eaccelerator.shm_size="1" eaccelerator.cache_dir="/usr/local/eaccelerator_cache" eaccelerator.enable="1" eaccelerator.optimizer="1" eaccelerator.check_mtime="1" eaccelerator.debug="0" eaccelerator.filter="" eaccelerator.shm_max="0" eaccelerator.shm_ttl="3600" eaccelerator.shm_prune_period="3600" eaccelerator.shm_only="0" eaccelerator.compress="1" eaccelerator.compress_level="9" eaccelerator.keys = "disk_only" eaccelerator.sessions = "disk_only" eaccelerator.content = "disk_only"

最后安装ZendGuardLoader:
wget -c http://whhack.googlecode.com/files/ZendGuardLoader-php-5.3-linux-glibc23-i386.tar.gz tar zxvf ZendGuardLoader-php-5.3-linux-glibc23-i386.tar.gz mkdir -p /usr/local/zend/ cp ZendGuardLoader-php-5.3-linux-glibc23-i386/php-5.3.x/ZendGuardLoader.so /usr/local/zend/
在php.ini末尾添加Zend:
[Zend.loader] zend_loader.enable=1 zend_loader.disable_licensing=1 zend_loader.obfuscation_level_support=3 zend_loader.license_path= zend_extension="/usr/local/zend/ZendGuardLoader.so"

来看看php有没错误:/usr/local/lsws/lsphp5/bin/php -v
最后重启一下,面板中点击Graceful Restart,或者执行:
/etc/init.d/lsws restart

好了,大工告成了,至此环境安装完毕!有什么问题可以在下面留言!