存档

‘MySQL’ 分类的存档

Mysql备份脚本 带压缩 显示压缩率 日志

2008年3月21日

#!/bin/sh
#
# Copyright (C), 2007 bug All Rights Reserved

# Title       : Database Backup Script
# Author      : BUG
# File        : db_bak.sh
# Version     : 1.1.0
# Date        : 2008-03-21
# Email       : efbbb27115@homtail.com
# License     : General Public License (GPL) v2
# Description : Database Backup Script
#

initial() {

    echo -en "\33[2J"

    echo -en "\33[0;0H"

    echo -en "\33[32m"

    echo "------------------------------------------------------------"

    echo "---                Database Backup Script                ---"

    echo "------------------------------------------------------------"

    echo -en "\33[37m"

    stty -echo

    umask 077

    mysqln=`echo 'show databases;' | /usr/local/mysql/bin/mysql -psjldafhkg | sed -n '3,$p'`

    mysqlu="root"

    mysqlp="********"

    binpath="/usr/local/mysql/bin"

    dstpath="/pri/bak/sql_bak/"

    runuser=`ps aux | grep $$ | sed -n "1p" | awk '{ print $1 }'`

    mkdir -p $dstpath/`date +%y%m%d`

    exec 3>>$dstpath/`date +%y%m%d`/db_bak.log

}initialecho -e "\n[`date +%y/%m/%d\ %H:%M:%S`] Database Backup Script start by $runuser PID:$$" >&3if [ -f "$dstpath/`date +%y%m%d`/lock" ]

then

    echo -e "\33[33mIt's has completed by `cat $dstpath/\`date +%y%m%d\`/lock`!!!\33[37m"

    echo "[`date +%y/%m/%d\ %H:%M:%S`] It's has completed by `cat $dstpath/\`date +%y%m%d\`/lock`!!!" >&3

else

    echo -e "Database\tExport\tCompress\tSql\tTgz\tRate"

    echo -e "\33[32m------------------------------------------------------------\33[37m"

    cd $dstpath/`date +%y%m%d`

    for db in $mysqln

    do

    echo -n "$db"

    $binpath/mysqldump --opt -u$mysqlu -p$mysqlp $db > $dstpath/`date +%y%m%d`/$db.sql 2> /dev/null

    RETVAL1=$?

    if [ $RETVAL1 -eq 0 ]

    then

    sqlsize=`du -k $db.sql | cut -f1`

    echo -n "[`date +%y/%m/%d\ %H:%M:%S`]" >&3

    echo -n "$db" | awk '{printf " %-17s", $1}' >&3

    echo -n "OK  " >&3

    echo -en "\r\t\t  \33[32mOK\33[37m\t"

    tar -czvf $db.tgz $db.sql > /dev/null 2>&1

        RETVAL2=$?

        if [ $RETVAL2 -eq 0 ]

        then

        tgzsize=`du -k $db.tgz | cut -f1`

        echo "OK" >&3

        rm -f $dstpath/`date +%y%m%d`/$db.sql

        echo -en "   \33[32mOK\33[37m"

        echo -en "\33[33m"

        echo -en "$sqlsize" | awk '{printf "%12dKB", $1}'

        echo -en "$tgzsize" | awk '{printf "%6sKB", $1}'

        echo "$sqlsize $tgzsize" | awk '{printf "%8.0f%",$2/$1*100}'

        echo -e "\33[37m"

        else

        echo "Compress fail return $RETVAL2" >&3

        echo -e "  \33[31mfail\33[37m"

        fi

    else

    echo -n "[`date +%y/%m/%d\ %H:%M:%S`]" >&3

    echo -n "$db" | awk '{printf " %-17s ", $1}' >&3

    echo "Export fail return $RETVAL1" >&3

    echo -en "\r\t\t   \33[31mfail\33[37m"

    fi

    done

    echo "`date +%H:%M:%S`">$dstpath/`date +%y%m%d`/lock

fi

作者: admin 分类: MySQL, Shell 标签:

Mysql磁盘限额脚本 后期准备加入到主机系统内

2008年3月5日

mysql用户限额的实现

原理:
由于每个用户的数据库都是以目录的形式存在于 ar /mysql或者其他目录下。
一个目录就是一个数据库。所以可以通过检测目录的大小得到数据库大小,判断
容量是否超过限额,如果超过限额就取消该用户的insert,create,update,create temp table
权限,允许select,delete等其他权限。

实现的脚本如下:
su-2.05b# cat quotamysql.sh
#!/bin/sh
#hmy-2004-8-19 v-0.1
mysqldir=/usr /mysql
infofiledir=/root/hmywork
limitfile=limitmysql
userfile=user_mysql
#定义初始变量
while [ 1 ];
do
sleep 10
#每隔10秒检查一次

for i in `cat ${infofiledir}/${userfile}`
do
now=`du ${mysqldir}/$i |tail -n 1 |awk '{print $1}'`
#取得当前目录大小
limit=`grep $i  ${infofiledir}/${limitfile}|awk '{print $2}'`
#取得限额大小
if [ "$now" -gt "$limit" ];
#如果大于限额就执行下面的mysql语句
then
mysql --user=MySql@AdminU_ser --password=***********<<EOF
use mysql
update db set insert_priv='N' ,update_priv='N', create_priv='N',Create_tmp_table_priv='N'  where db='$i';
flush privileges ;
EOF
echo $i database full! `date`>;>;fulluser
sed /`echo $i`/d $userfile >;tempfile
fi
done
cp tempfile $userfile

作者: admin 分类: MySQL 标签:

Mysql安全优化

2007年9月27日

前段时间登陆了一台别人的服务器无意发现在运行中的MYSQL服务居然没有占用任何端口,且网站运行正常。了解后原来这是是Mysql的另一个连接方式,当在配置文件中my.cnf的[mysqld]字段加入skip-networking选项后,服务会不占用任何端口,而是采用文件mysql.sock的形式进行连接。

在启用该选项后,程序连接本机数据库时必须使用localhost的主机名进行连接。

由于此连接方式采用非TCP/IP的连接,可以杜绝从外来主机对数据库的攻击,建议开启

hibernate不支持此方式的连接

作者: admin 分类: MySQL 标签:

MySQL备份脚本

2007年8月30日

#!/bin/sh
#
# Copyright (C), 2007 bug All Rights Reserved
# Author     : BUG
# Version    : 1.0
# Date       : 2007-03-31
# Email      : efbbb27115@homtail.com
# License    : General Public License (GPL) v2
# Description: Database Backup Script
#
# mysqln    : mysql database name default is all-databases
# mysqlu    : mysql database user default is root
# mysqlp    : mysql database password default is null
# srcpath   : mysql bin path
# dstpath   : backup destination path
# logfile   : logfile name
# loghead   : logfile date info
# runuser   : current script running by users

mysqln="mysql"
mysqlu=root
mysqlp=******
srcpath=/usr/local/mysql/var/
dstpath="/mnt/bak/"
logfile=/mnt/bak/log/`date +%y%m%d`.log
loghead=[`date +%y/%m/%d\ %H:%M:%S`]
runuser=`ps aux | grep $$ | sed -n "1p" | awk '{ print $1 }'`

echo -en "\33[2J"
echo -en "\33[0;0H"
echo -en "\33[32m"
echo "$loghead Database Backup Script start by $runuser PID:$$" >> $logfile
echo "--------------------------------------------------"
echo "---        Database Backup Script Start        ---"
echo "--------------------------------------------------"
echo -en "\33[37m"

rm -rf "$dstpath$(date +%y%m%d -d'-3 day')"
mkdir -p "$dstpath$(date +%y%m%d)"

for file in $mysqln
do
/usr/local/mysql/bin/mysqldump --opt -u$mysqlu -p$mysqlp $file > $dstpath$(date +%y%m%d)/$file`date +%y$m%d`.sql 2> /dev/null
re1=$?
if [ "$re1" -eq 0 ]
then
echo -n "$loghead" >> $logfile
echo -n "$file" | awk '{printf " %-17s", $1}' >> $logfile
echo -n "database Export OK  " >> $logfile
  echo -en "$file" | awk '{printf "%-17s  ", $1}'
echo -en "database Export \33[32mOK\33[37m  "
tar -czvf "$dstpath$(date +%y%m%d)/$file`date +%y$m%d`.tgz" -P "$dstpath$(date +%y%m%d)/$file`date +%y$m%d`.sql" > /dev/null 2>&1
re2=$?
if [ "$re2" -eq 0 ]
then
echo "tgz OK" >> $logfile
rm -f "$dstpath$(date +%y%m%d)/$file`date +%y$m%d`.sql"
echo -e "tgz \33[32mOK\33[37m"
else
echo "tgz file fail return $re2" >> $logfile
echo -e "tgz \33[31mfail\33[37m"
fi
else
echo -n "$loghead" >> $logfile
echo -n "$file" | awk '{printf " %-17s", $1}' >> $logfile
echo "database Export fail return $re1" >> $logfile
echo -en "$file" | awk '{printf "%-17s  ", $1}'
echo -e "database Export \33[31mfail\33[37m"
fi
done
echo "" >> $logfile

作者: admin 分类: MySQL 标签:

从源代码编译安装MySQL

2007年8月29日

groupadd -g 2000 mysql
useradd -u 2000 -g 2000 -M -s /sbin/nologin mysql 

 #./configure \
--prefix=/usr/local/mysql \
--without-debug \
--without-man \
--without-docs \
--without-bench \
--with-charset=utf8 \
--with-extra-charsets=gbk,big5,gb2312 \
--enable-thread-safe-client
--sharedstatedir=/var/lib/mysql \
--sysconfdir=/usr/local/etc \

#make
#make install
#/usr/local/mysql/bin/mysql_install_db
#chown mysql.mysql /usr/local/mysql/var

#cp mysql-5.0.45/support-files/my-medium.cnf /usr/local/etc/my.cnf
#cp mysql.server /etc/init.d/mysql
#chmod 755 /etc/init.d/mysql
#chkconfig --add mysql
#service mysql start

作者: admin 分类: MySQL 标签:

修复 Table 'xxx' is marked as crashed and should be repaired!!

2007年8月29日

  今天在用自己写的脚本导出SQL的时候发生了错误,提示Table XXX is marked as crashed and should be repaired when using LOCK TABLES,应该是数据表结构或内容损坏,使用命令myisamchk修复数据库的MYI文件即可

myisamchk -c -r *.MYI

作者: admin 分类: MySQL 标签: