分类目录归档:MySQL

mysqld_safe启动报错

使用二进制编译文件的mysqld_safe启动报错,如下:
[mysql@ECP-UC-DB1 ~]$ mysqld_safe
110707 21:31:19 mysqld_safe Logging to ‘/opt/mysql/mysqldata/ECP-UC-DB1.err’.
110707 21:31:19 mysqld_safe The file /usr/local/mysql/bin/mysqld
does not exist or is not executable. Please cd to the mysql installation
directory and restart this script from there as follows:
./bin/mysqld_safe&
See http://dev.mysql.com/doc/mysql/en/mysqld-safe.html for more information

解决方法:
su – root
mkdir /usr/local/mysql/bin
ln -s /opt/mysql/product/5.5/bin/mysqld /usr/local/mysql/bin/mysqld

再次执行mysqld_safe
[mysql@ECP-UC-DB1 ~]$ mysqld_safe
110707 21:32:37 mysqld_safe Logging to ‘/opt/mysql/mysqldata/ECP-UC-DB1.err’.
110707 21:32:37 mysqld_safe Starting mysqld daemon with databases from /opt/mysql/mysqldata

启动结果:
mysql 26885 23452 0 21:32 pts/0 00:00:00 /bin/sh /opt/mysql/product/5.5/bin/mysqld_safe
mysql 27653 26885 0 21:32 pts/0 00:00:00 /usr/local/mysql/bin/mysqld –basedir=/opt/mysql/product/5.5 –datadir=/opt/mysql/mysqldata –plugin-dir=/usr/local/mysql/lib/plugin –log-error=/opt/mysql/mysqldata/ECP-UC-DB1.err –open-files-limit=8192 –pid-file=/var/run/mysqld/mysqld.pid –socket=/var/run/mysqld/mysqld.sock –port=3306

问题存在原因:
1、mysqld_safe只认识/usr/local/mysql/bin/mysqld(也许是配置问题)
2、my.cnf只能放置在/etc/下面,不然使用–defaults-file也不能读取my.cnf文件(有疑惑)

发表在 MySQL安装配置 | 评论关闭

mysql 安装并启动多个实例

1、数据库实例目录
drwxrwxrwx 6 mysql mysql 4096 Jul 6 23:25 mysqldata
drwxrwxr-x 5 mysql mysql 4096 Jul 6 23:23 mysqldata1
drwxrwxr-x 5 mysql mysql 4096 Jul 6 23:27 mysqldata2

2、创建实例
/opt/mysql/product/5.5/scripts/mysql_install_db –basedir=/opt/mysql/product/5.5 –datadir=/opt/mysql/mysqldata –user=mysql
/opt/mysql/product/5.5/scripts/mysql_install_db –basedir=/opt/mysql/product/5.5 –datadir=/opt/mysql/mysqldata1 –user=mysql
/opt/mysql/product/5.5/scripts/mysql_install_db –basedir=/opt/mysql/product/5.5 –datadir=/opt/mysql/mysqldata2 –user=mysql

3、修改my.cnf文件
[mysqld_multi]
mysqld = /opt/mysql/product/5.5/bin/mysqld
mysqladmin = /opt/mysql/product/5.5/bin/mysqladmin
user = root
password = passw0rd

[mysqld3306]
port = 3306
socket = /var/run/mysqld/mysqld3306.sock
pid-file = /var/run/mysqld/mysqld3306.pid
basedir = /opt/mysql/product/5.5
datadir = /opt/mysql/mysqldata

[mysqld3307]
port = 3307
socket = /var/run/mysqld/mysqld3307.sock
pid-file = /var/run/mysqld/mysqld3307.pid
basedir = /opt/mysql/product/5.5
datadir = /opt/mysql/mysqldata1

[mysqld3307]
port = 3307
socket = /var/run/mysqld/mysqld3308.sock
pid-file = /var/run/mysqld/mysqld3308.pid
basedir = /opt/mysql/product/5.5
datadir = /opt/mysql/mysqldata2
注:其他无关参数省略,日志等文件路径也不能相同(未写明)

4、启动数据库
mysqld_multi –defaults-file=/etc/mysql/my.cnf start 3306
mysqld_multi –defaults-file=/etc/mysql/my.cnf start 3307
mysqld_multi –defaults-file=/etc/mysql/my.cnf start 3308

5、登录数据库修改root密码
mysql -S /var/run/mysqld/mysqld3306.sock
mysql -S /var/run/mysqld/mysqld3307.sock
mysql -S /var/run/mysqld/mysqld3308.sock

use mysql
UPDATE user SET password=PASSWORD(‘passw0rd’) WHERE user=’root’;
FLUSH PRIVILEGES;
说明:三个库上分别操作

6、关闭数据库
mysqld_multi –defaults-file=/etc/mysql/my.cnf stop 3306
mysqld_multi –defaults-file=/etc/mysql/my.cnf stop 3307
mysqld_multi –defaults-file=/etc/mysql/my.cnf stop 3308

7、全部启动/关闭
mysqld_multi –defaults-file=/etc/mysql/my.cnf start 3306-3308
mysqld_multi –defaults-file=/etc/mysql/my.cnf stop 3306-3308

发表在 MySQL安装配置 | 评论关闭

基于innobackupex的mysql备份脚本

#! /bin/bash
#数据库相关信息
dbuser=root
dbpasswd=password
mycnf=/etc/mysql/my.cnf
#如果bin-log没有指定路径
dir_bin=/opt/mysql/mysqldata/mysqllog

#数据库备份的路径
install_dir=/opt/MySqlBackUp
data_dir=$install_dir/data
temp_dir=$install_dir/temp
log_dir=$install_dir/logs
bin_dir=$install_dir/bin

#接受邮箱
mail=chengfei@srt.com.cn

#备份文件名、日志名、备份日志
sj=`date +\%Y``date +\%m``date +\%d``date +\%H``date +\%M``date +\%S`
datafile=$sj"_data.tar.gz"
log=$sj".log"
binlogfile=$sj"_bin.tar.gz"

#使用mysqldump备份
#是否启动dump功能(0表示不启用,1表示启用)
dump_flag=1
#需要dump出来的数据库名
dumpdb=srtair
#dump文件名
dumpfile=$sj"_"$dumpdb".sql.gz"

#是否备份至远程
#是否启用ftp传输功能
ftp_flag=0
#ftp IP地址
ftp_ip=
#ftp 用户名
ftp_user=
#ftp 密码
ftp_passwd=
#上传ftp 路径
ftp_dir=

#读取my.cnf文件
process_readconfig()
{
echo "-----------开始读my.cnf文件--`date`-------------"
#没有具体路径情况或者有具体路径   
bin_log=`cat $mycnf | grep -i '^log-bin' | awk -F = '{print $2}'|sed s/\ //g`
#数据文件路径
datadir=`cat $mycnf | grep -i '^datadir' | awk -F = '{print $2}'|sed s/\ //g`
#需要判断是否有/,然后决定是否是全路径
#basedir路径
basedir=`cat $mycnf | grep -i '^basedir' | awk -F = '{print $2}'|sed s/\ //g`
}

#日志处理
process_binlog()
{
echo "……………………………开始备份日志文件--`date`………………………………">>"$log_dir/$log"
echo "……………………………开始备份日志文件--`date`………………………………"
echo "需要备份二进制日志列表……">>"$log_dir/$log"
ls -tl "$bin_log."[0-9]* >>"$log_dir/$log"
echo "开始备份二进制日志文件……"`date`>>"$log_dir/$log"
tar czvfP "$data_dir/$binlogfile" "$bin_log".[0-9]*
echo "结束备份二进制日志文件……"`date`>>"$log_dir/$log"

#删除一天以前的日志文件
echo "删除过期二进制日志文件……"`date`>>"$log_dir/$log"
echo "删除过期二进制日志列表……">>"$log_dir/$log"
find $dir_bin -type f -mtime +1>>"$log_dir/$log"
find $dir_bin -type f -mtime +1 -exec rm -f {} \;
echo "删除过期二进制日志文件结束……"`date`>>"$log_dir/$log"
echo "…………………………备份日志文件结束--`date`……………………………………">>"$log_dir/$log"
echo "…………………………备份日志文件结束--`date`……………………………………"
}

#数据备份
process_backup()
{
process_readconfig
#备份数据库
echo "……………………………开始备份数据文件--`date`………………………………"
echo "……………………………开始备份数据文件--`date`………………………………">>"$log_dir/$log"
source /root/.bash_profile
$bin_dir/innobackupex --user="$dbuser" --password="$dbpasswd" --defaults-file="$mycnf" --stream=tar "$temp_dir" 2>"$temp_dir/$sj"_tmp.log | gzip>"$data_dir/$datafile"
echo "……………………………备份数据文件结束--`date`………………………………">>"$log_dir/$log"
echo "……………………………备份数据文件结束--`date`………………………………"

cat "$temp_dir/$sj"_tmp.log>>"$log_dir/$log"
#删除7天以前备份数据和信息
echo "清理7天前备份数据与相关信息……"`date`>>"$log_dir/$log"
find $data_dir -type f -mtime +7>>"$log_dir/$log"
find $data_dir -type f -mtime +7 -exec rm -f {} \;

#mysqldump操作
if [ "$dump_flag" == 1 ]; then
echo "……………… mysqldump操作开始--`date`……………"
echo "……………… mysqldump操作开始--`date`………">>"$log_dir/$log"
 exp_sql
echo "……………… mysqldump操作结束--`date`…………">>"$log_dir/$log"
echo "……………… mysqldump操作结束--`date`……………………………"
fi

#登录mysql,切换日志
$basedir/bin/mysql -u$dbuser -p$dbpasswd<<XFF
flush logs;
exit
XFF
#备份日志文件
process_binlog

#ftp(没有写是否上传失败,成功)
if [ "$ftp_flag" == 1 ]; then
echo "……………… ftp操作开始--`date`……………"
echo "……………… ftp操作开始--`date`…………">>"$log_dir/$log"
 exec_ftp
echo "……………… ftp操作结束--`date`…………">>"$log_dir/$log"
echo "……………… ftp操作结束--`date`……………………………"
fi

#发送邮件 
process_send
}

process_send()
{
  #查找错误
  grep "Error" "$temp_dir/$sj"_tmp.log > "$temp_dir/$sj".err
  IP=`/sbin/ifconfig ${eth} | grep 'inet addr:'| awk '{print $2}' | awk -F : '{print $2}'`
  IP=`echo $IP|awk '{print $1}'`
  echo `grep "innobackupex: completed OK\!" "$temp_dir/$sj"_tmp.log | awk -F : '{print $4}'|sed s/\ //g`>"$temp_dir/$sj".good
  GOOD_COUNT=`cat "$temp_dir/$sj".good |wc -l`
  ERROR_COUNT=`cat  "$temp_dir/$sj".err |wc -l`
  if [ "$ERROR_COUNT" == 0 -a "$GOOD_COUNT" == 1 ]; then
     
     echo "`date`-----MySql备份成功-----">>"$log_dir"/result.log
     echo "-----------------------------------">>"$log_dir"/result.log
     echo "……………………………开始发送邮件--`date`………………………………"
     echo "……………………………开始发送邮件--`date`………………………………">>"$log_dir/$log"
     echo "MySql_Backup_Succeed" | mutt -s "$IP"_MySql_Backup_Succeed -a "$log_dir/$log" ${mail}
  else
     echo "`date`-----MySql备份失败,请检查$temp_dir"/"$sj"_tmp.log>>"$log_dir"/result.log
     echo "-----------------------------------">>"$log_dir"/result.log
     echo "……………………………开始发送邮件--`date`………………………………"
     echo "……………………………开始发送邮件--`date`……………………………">>"$log_dir/$log"
     cat "$temp_dir/$sj".err  | mutt -s "$IP"_MySql_Backup_Fail -a "$temp_dir/$sj"_tmp.log ${mail}
  fi 
   #删除7天前的日志文件
   find $temp_dir -type f -mtime +7 -exec rm -f {} \;
   echo "……………………………发送邮件结束--`date`………………………………">>"$log_dir/$log" 
   echo "……………………………发送邮件结束--`date`………………………………"  
}

#导出sql语句
exp_sql()
{
  mysqldump -u "$dbuser" -p"$dbpasswd"   --single-transaction --allow-keywords --add-locks   --add-drop-table  -F -q "$dumpdb" |gzip 1>"$data_dir/$dumpfile"
}

#ftp操作
exec_ftp()
{
  echo "#!/bin/bash">"$temp_dir/$sj"_ftp.sh
  echo "ftp -n $ftp_ip <<XFF">>"$temp_dir/$sj"_ftp.sh
  echo "user $ftp_user $ftp_passwd">>"$temp_dir/$sj"_ftp.sh
  echo "bin">>"$temp_dir/$sj"_ftp.sh
  echo "cd $ftp_dir">>"$temp_dir/$sj"_ftp.sh
  echo "lcd $data_dir">>"$temp_dir/$sj"_ftp.sh
  echo "put $datafile">>"$temp_dir/$sj"_ftp.sh
  echo "put $dumpfile">>"$temp_dir/$sj"_ftp.sh
  echo "put $binlogfile">>"$temp_dir/$sj"_ftp.sh
  echo "lcd $log_dir">>"$temp_dir/$sj"_ftp.sh
  echo "put $log">>"$temp_dir/$sj"_ftp.sh
  echo "close">>"$temp_dir/$sj"_ftp.sh
  echo "bye" >>"$temp_dir/$sj"_ftp.sh
  echo "XFF">>"$temp_dir/$sj"_ftp.sh
  chmod 777 "$temp_dir/$sj"_ftp.sh
  sh  "$temp_dir/$sj"_ftp.sh
}

#执行备份
process_backup

mysql_backup.sh程序安装说明

1、安装mysqlbackup程序
上传mysqlbackup到服务器/tmp目录
cd /tmp
unzip mysqlbackup.zip
cp /tmp/mysqlbackup/* /opt/mysql/product/5.1/bin
mkdir -p /opt/MySqlBackUp/bin
mkdir -p /opt/MySqlBackUp/data
mkdir -p /opt/MySqlBackUp/logs
mkdir -p /opt/MySqlBackUp/temp
ln -s /opt/mysql/product/5.1/bin/innobackupex /opt/MySqlBackUp/bin/innobackupex

对innobackupex进行授权
cd /opt/mysql/product/5.1/bin/
chmod +x innobackupex*
chmod +x xtrabackup*
chmod +x tar4ibd

cp /tmp/mysqlbackup/mysql_backup.sh /opt/MySqlBackUp/bin/
chmod 775 /opt/MySqlBackUp/bin/mysql_backup.sh

2、修改mysql_backup.sh中的相关数据
dbuser
dbpasswd
mail
dumpdb

3、配置mysql环境变量到root中
export MYSQL_BASE=/opt/mysql
export BASEDIR=$MYSQL_BASE/product/5.1
export DATADIR=$MYSQL_BASE/mysqldata
export LD_LIBRARY_PATH=$BASEDIR/lib:/lib:/usr/lib:/usr/local/lib
export TMPDIR=/tmp
export PATH=${PATH}:/usr/bin:/bin:/usr/bin/X11:/usr/local/bin
export PATH=${PATH}:$BASEDIR/bin:$MYSQL_BASE:$BASEDIR:$LD_LIBRARY_PATH

添加到/root/.bash_profile文件中

4、测试备份
cd /opt/MySqlBackUp/bin
./mysql_backup.sh

5、查看备份是否成功
cat /opt/MySqlBackUp/logs/result.log
如果提示备份成功,则表示程序安装成功,可能不熟到crontab中

6、部署crontab
0 1 * * * (cd /opt/MySqlBackUp/bin;sh ./mysql_backup.sh)

说明:参数配置,均是基于按照mysql安装路径配置

发表在 Linux, MySQL | 评论关闭