本帖最后由 summer123 于 2016-8-3 20:05 编辑
#!/bin/bash
log_file=install_mysql5.5_log
user=mysql
group=mysql
MasterIP=192.168.10.103
MasterMysqlPort=3306
Slave1IP=192.168.10.106
Slave2IP=192.168.10.125
MasterUser=realcloud
MasterPassword=realcloud
function checkOK()
{
if [ $? -ne 0 ];then
exit 1;
fi
}
function write_log()
{
now_time='['$(date +"%Y-%m-%d %H:%M:%S")']'
echo ${now_time} $1 | tee -a ${log_file}
}
function ClearInstallLog{}
{
#清除日志
if [ -s ${log_file} ]; then
cp /dev/null ${log_file}
fi
}
function CheckIdentity()
{
#检查当前用户是否root
if [ $(id -u) -ne 0 ];then
write_log "Error ------> Please use the root user to install"
exit 1;
else
write_log "Infor ------> The current user is root, installation to continue..."
fi
}
function CheckSourceCode()
{
if [ -f cmake-2.8.8.tar.gz ] && [ -f mysql-5.5.32.tar.gz ];then
write_log "Infor ------> start install mysql5.5"
else
if [ ! -f cmake-2.8.8.tar.gz ]; then
write_log "Infor ------> check the source src code cmake-2.8.8.tar.gz is not exist.pls check"
fi
if [ ! -f mysql-5.5.32.tar.gz ];then
write_log "Infor ------> check the source src code mysql-5.5.32.tar.gz is not exist.pls check ... "
fi
exit 1;
fi
}
function InstallCmake()
{
#判断cmake是否已经安装
which cmake
if [ $? -eq 0 ]; then
write_log "Infor ------> the current system has installed cmake,so skip..."
write_log "Infor ------> the current system cmake exec path $(which cmake)..."
else
#安装cmake
if [ ! -f cmake-2.8.8.tar.gz ];then
write_log "Error ------> the source src code cmake-2.8.8.tar.gz is not exist.pls check"
else
write_log "Infor ------> install cmake......"
tar -xf cmake-2.8.8.tar.gz
checkOK
write_log "Infor ------> cmake-2.8.8.tar.gz Decompression finished "
cd cmake-2.8.8
checkOK
./configure
checkOK
gmake && gmake install
checkOK
write_log "Infor ------> cmake have installed"
fi
fi
}
function InstallMysql()
{
#判断mysql是否已经安装
which mysql
if [ $? -eq 0 ]; then
write_log "Infor ------> the current system has installed mysql,so skip..."
write_log "Infor ------> the current system cmake exec path $(which mysql)..."
else
#安装mysql
if [ -f mysql-5.5.32.tar.gz ];then
yum install -y ncurses-devel
#create group if not exists
egrep "^$group" /etc/group >& /dev/null
if [ $? -ne 0 ];then
groupadd $group
fi
#create user if not exists
egrep "^$user" /etc/passwd >& /dev/null
if [ $? -ne 0 ];then
useradd mysql -g mysql -M -s /bin/false
fi
tar -xf mysql-5.5.32.tar.gz
checkOK
write_log "Infor ------> mysql 5.5.32.tar.gz is installing"
cd mysql-5.5.32
write_log "Infor ------> mysql 5.5.32.tar.gz is compiling"
cmake . -DCMAKE_INSTALL_PREFIX=/application/mysql-5.5.32 \
-DMYSQL_DATADIR=/application/mysql-5.5.32/data \
-DMYSQL_UNIX_ADDR=/application/mysql-5.5.32/tmp/mysql.sock \
-DDEFAULT_CHARSET=utf8 \
-DDEFAULT_COLLATION=utf8_general_ci \
-DEXTRA_CHARSET=gbk,gb2312,utf8,ascii \
-DENABLED_LOCAL_INFILE=on \
-DWITH_INNOBASE_STORAGE_ENGINE=1 \
-DWITH_FEDERATED_STORAGE_ENGINE=1 \
-DWITH_BLACKHOLE_STORAGE_ENGINE=1 \
-DWITHOUT_EXAMPL_ESTORAGE_ENGINE=1 \
-DWITHOUT_PARTITION_ESTORAGE_ENGINE=1 \
-DWITH_FAST_MUTEXES=1 \
-DWITH_ZLIB=bundled \
-DENABLED_LOCAL_INFILE=1 \
-DWITH_READLINE=1 \
-DWITH_ENBEDDED_SERVER=1 \
-DWITH_DEBUG=0
checkOK
write_log "Infor ------> mysql 5.5.32 have configured......"
write_log "Infor ------> mysql 5.5.32.tar.gz has make and make install"
make && make install
checkOK
write_log "Infor ------> mysql 5.5.32 have make installed......"
/bin/cp support-files/my-small.cnf /etc/my.cnf
ln -s /application/mysql-5.5.32/ /application/mysql
echo "export PATH=/application/mysql/bin:$PATH" >>/etc/profile
source /etc/profile
chmod -R 1777 /tmp/
cd /application/mysql/scripts/
write_log "Infor ------> To initialize the mysql 5.5.32 database!"
./mysql_install_db --basedir=/application/mysql --datadir=/application/mysql/data/ --user=mysql
write_log "Infor ------> Create the database data storage folder!"
mkdir -p /application/mysql/data
chown -R mysql.mysql /application/mysql/
cd /usr/local/src/mysql-5.5.32/
/bin/cp support-files/mysql.server /etc/init.d/mysqld
chmod 700 /etc/init.d/mysqld
/etc/init.d/mysqld start
write_log "Infor ------> mysql 5.5.32 is starting....."
checkOK
chkconfig mysqld on
chkconfig --list mysqld
checkOK
write_log "Infor ------> set the launcInfor ------> of set up the boot"
ps aux|grep mysqld|grep -v grep
checkOK
write_log "Infor ------> mysql 5.5.32 is running......"
source /etc/profile
else
write_log "Error ------> the source src code mysql-5.5.32.tar.gz is not exist.pls check ... "
fi
fi
}
# 配置主从同步
#设置主mysql
function configureMasterMy_cnf()
{
cp /etc/my.cnf /etc/my.cnf.bak
sed -i "s/#log-bin=mysql-bin/log-bin=mysql-bin/g" /etc/my.cnf
service mysqld restart
checkOK
write_log "Infor ------> restart master mysql"
mysql -e "CREATE USER 'realcloud'@'192.168.10.106' IDENTIFIED BY 'realcloud';"
#mysql -e "GRANT REPLICATION SLAVE ON *.* TO 'realcloud'@'192.168.10.125' IDENTIFIED BY 'realcloud';"
mysql -e "GRANT REPLICATION SLAVE ON *.* TO 'realcloud'@'${Slave1IP}' IDENTIFIED BY 'realcloud';"
mysql -e "GRANT REPLICATION SLAVE ON *.* TO 'realcloud'@'${Slave2IP}' IDENTIFIED BY 'realcloud';"
mysql -e "FLUSH TABLES WITH READ LOCK;"
mysqldump -uroot --all-databases --lock-tables=false -- > /root/all.sql
scp /root/all.sql root@192.168.10.106:/root
mysql -e "UNLOCK TABLES;"
#找到 bin的Position值
mysql -e "SHOW MASTER STATUS;"|grep "mysql-bin"|awk -F" " '{print $2}'
}
function configureSlave1My_cnf()
{
cp /etc/my.cnf /etc/my.cnf.bak
sed -i "s/#log-bin=mysql-bin/log-bin=mysql-bin/g" /etc/my.cnf
MasterLogFile=$(mysql -e "SHOW MASTER STATUS;"|grep mysql-bin|awk -F" " '{print $1}')
MasterLogPos=$(mysql -e "SHOW MASTER STATUS;"|grep mysql-bin|awk -F" " '{print $2}')
IP_lastbit=${echo ${Slave1IP}| awk -F"." '{print $4}'}
#此处需要优化
sed "s/server-id = 1/server-id = 2/g" /etc/my.cnf
mysql -u root < /root/all.sql
service mysqld restart
#mysql -e "change master to master_host='192.168.10.103',master_port=3306,master_user='realcloud',master_password='realcloud',master_log_file='realcloud.000001',master_log_pos=502;"
mysql -e "change master to master_host='${MasterIP}',master_port=${MasterMysqlPort},master_user='${MasterUser}',master_password='${MasterPassword}',master_log_file='${MasterLogFile}',master_log_pos=${MasterLogPos};"
mysql -e "flush privileges;"
mysql -e "slave start;"
Slave_IO_Running=$(mysql -e "show slave status\G;"|grep Slave_IO_Running|awk -F":" '{print $2}')
Slave_SQL_Running=$(mysql -e "show slave status\G;"|grep Slave_SQL_Running|awk -F":" '{print $2}')
if [ ${Slave_IO_Running} != "Yes" ] && [ ${Slave_SQL_Running} != "Yes" ];then
write_log "Error ------> MySQL master slave mode settings is Successful"
else
write_log "Error ------> MySQL master slave mode settings is fail"
exit 1
fi
}
function main()
{
#检查源码包是否存在
CheckSourceCode
write_log "Infor ------> 检查源码存在"
#检查身份,必须是root用户执行
CheckIdentity
write_log "Infor ------> 当前是root用户"
#清理安装日志
ClearInstallLog
write_log "Infor ------> 日志已经清理完毕"
#安装cmake
InstallCmake
write_log "Infor ------> cmake安装完毕"
#安装mysql
InstallMysql
write_log "Infor ------> mysql安装完毕"
#配置主从模式的主mysql
#configureMasterMy_cnf
}
main
#!/bin/bash
log_file=install_mysql5.5_log
user=mysql
group=mysql
MasterIP=192.168.10.103
MasterMysqlPort=3306
Slave1IP=192.168.10.106
Slave2IP=192.168.10.125
MasterUser=realcloud
MasterPassword=realcloud
function checkOK()
{
if [ $? -ne 0 ];then
exit 1;
fi
}
function write_log()
{
now_time='['$(date +"%Y-%m-%d %H:%M:%S")']'
echo ${now_time} $1 | tee -a ${log_file}
}
function ClearInstallLog{}
{
#清除日志
if [ -s ${log_file} ]; then
cp /dev/null ${log_file}
fi
}
function CheckIdentity()
{
#检查当前用户是否root
if [ $(id -u) -ne 0 ];then
write_log "Error ------> Please use the root user to install"
exit 1;
else
write_log "Infor ------> The current user is root, installation to continue..."
fi
}
function CheckSourceCode()
{
if [ -f cmake-2.8.8.tar.gz ] && [ -f mysql-5.5.32.tar.gz ];then
write_log "Infor ------> start install mysql5.5"
else
if [ ! -f cmake-2.8.8.tar.gz ]; then
write_log "Infor ------> check the source src code cmake-2.8.8.tar.gz is not exist.pls check"
fi
if [ ! -f mysql-5.5.32.tar.gz ];then
write_log "Infor ------> check the source src code mysql-5.5.32.tar.gz is not exist.pls check ... "
fi
exit 1;
fi
}
function InstallCmake()
{
#判断cmake是否已经安装
which cmake
if [ $? -eq 0 ]; then
write_log "Infor ------> the current system has installed cmake,so skip..."
write_log "Infor ------> the current system cmake exec path $(which cmake)..."
else
#安装cmake
if [ ! -f cmake-2.8.8.tar.gz ];then
write_log "Error ------> the source src code cmake-2.8.8.tar.gz is not exist.pls check"
else
write_log "Infor ------> install cmake......"
tar -xf cmake-2.8.8.tar.gz
checkOK
write_log "Infor ------> cmake-2.8.8.tar.gz Decompression finished "
cd cmake-2.8.8
checkOK
./configure
checkOK
gmake && gmake install
checkOK
write_log "Infor ------> cmake have installed"
fi
fi
}
function InstallMysql()
{
#判断mysql是否已经安装
which mysql
if [ $? -eq 0 ]; then
write_log "Infor ------> the current system has installed mysql,so skip..."
write_log "Infor ------> the current system cmake exec path $(which mysql)..."
else
#安装mysql
if [ -f mysql-5.5.32.tar.gz ];then
yum install -y ncurses-devel
#create group if not exists
egrep "^$group" /etc/group >& /dev/null
if [ $? -ne 0 ];then
groupadd $group
fi
#create user if not exists
egrep "^$user" /etc/passwd >& /dev/null
if [ $? -ne 0 ];then
useradd mysql -g mysql -M -s /bin/false
fi
tar -xf mysql-5.5.32.tar.gz
checkOK
write_log "Infor ------> mysql 5.5.32.tar.gz is installing"
cd mysql-5.5.32
write_log "Infor ------> mysql 5.5.32.tar.gz is compiling"
cmake . -DCMAKE_INSTALL_PREFIX=/application/mysql-5.5.32 \
-DMYSQL_DATADIR=/application/mysql-5.5.32/data \
-DMYSQL_UNIX_ADDR=/application/mysql-5.5.32/tmp/mysql.sock \
-DDEFAULT_CHARSET=utf8 \
-DDEFAULT_COLLATION=utf8_general_ci \
-DEXTRA_CHARSET=gbk,gb2312,utf8,ascii \
-DENABLED_LOCAL_INFILE=on \
-DWITH_INNOBASE_STORAGE_ENGINE=1 \
-DWITH_FEDERATED_STORAGE_ENGINE=1 \
-DWITH_BLACKHOLE_STORAGE_ENGINE=1 \
-DWITHOUT_EXAMPL_ESTORAGE_ENGINE=1 \
-DWITHOUT_PARTITION_ESTORAGE_ENGINE=1 \
-DWITH_FAST_MUTEXES=1 \
-DWITH_ZLIB=bundled \
-DENABLED_LOCAL_INFILE=1 \
-DWITH_READLINE=1 \
-DWITH_ENBEDDED_SERVER=1 \
-DWITH_DEBUG=0
checkOK
write_log "Infor ------> mysql 5.5.32 have configured......"
write_log "Infor ------> mysql 5.5.32.tar.gz has make and make install"
make && make install
checkOK
write_log "Infor ------> mysql 5.5.32 have make installed......"
/bin/cp support-files/my-small.cnf /etc/my.cnf
ln -s /application/mysql-5.5.32/ /application/mysql
echo "export PATH=/application/mysql/bin:$PATH" >>/etc/profile
source /etc/profile
chmod -R 1777 /tmp/
cd /application/mysql/scripts/
write_log "Infor ------> To initialize the mysql 5.5.32 database!"
./mysql_install_db --basedir=/application/mysql --datadir=/application/mysql/data/ --user=mysql
write_log "Infor ------> Create the database data storage folder!"
mkdir -p /application/mysql/data
chown -R mysql.mysql /application/mysql/
cd /usr/local/src/mysql-5.5.32/
/bin/cp support-files/mysql.server /etc/init.d/mysqld
chmod 700 /etc/init.d/mysqld
/etc/init.d/mysqld start
write_log "Infor ------> mysql 5.5.32 is starting....."
checkOK
chkconfig mysqld on
chkconfig --list mysqld
checkOK
write_log "Infor ------> set the launcInfor ------> of set up the boot"
ps aux|grep mysqld|grep -v grep
checkOK
write_log "Infor ------> mysql 5.5.32 is running......"
source /etc/profile
else
write_log "Error ------> the source src code mysql-5.5.32.tar.gz is not exist.pls check ... "
fi
fi
}
# 配置主从同步
#设置主mysql
function configureMasterMy_cnf()
{
cp /etc/my.cnf /etc/my.cnf.bak
sed -i "s/#log-bin=mysql-bin/log-bin=mysql-bin/g" /etc/my.cnf
service mysqld restart
checkOK
write_log "Infor ------> restart master mysql"
mysql -e "CREATE USER 'realcloud'@'192.168.10.106' IDENTIFIED BY 'realcloud';"
#mysql -e "GRANT REPLICATION SLAVE ON *.* TO 'realcloud'@'192.168.10.125' IDENTIFIED BY 'realcloud';"
mysql -e "GRANT REPLICATION SLAVE ON *.* TO 'realcloud'@'${Slave1IP}' IDENTIFIED BY 'realcloud';"
mysql -e "GRANT REPLICATION SLAVE ON *.* TO 'realcloud'@'${Slave2IP}' IDENTIFIED BY 'realcloud';"
mysql -e "FLUSH TABLES WITH READ LOCK;"
mysqldump -uroot --all-databases --lock-tables=false -- > /root/all.sql
scp /root/all.sql root@192.168.10.106:/root
mysql -e "UNLOCK TABLES;"
#找到 bin的Position值
mysql -e "SHOW MASTER STATUS;"|grep "mysql-bin"|awk -F" " '{print $2}'
}
function configureSlave1My_cnf()
{
cp /etc/my.cnf /etc/my.cnf.bak
sed -i "s/#log-bin=mysql-bin/log-bin=mysql-bin/g" /etc/my.cnf
MasterLogFile=$(mysql -e "SHOW MASTER STATUS;"|grep mysql-bin|awk -F" " '{print $1}')
MasterLogPos=$(mysql -e "SHOW MASTER STATUS;"|grep mysql-bin|awk -F" " '{print $2}')
IP_lastbit=${echo ${Slave1IP}| awk -F"." '{print $4}'}
#此处需要优化
sed "s/server-id = 1/server-id = 2/g" /etc/my.cnf
mysql -u root < /root/all.sql
service mysqld restart
#mysql -e "change master to master_host='192.168.10.103',master_port=3306,master_user='realcloud',master_password='realcloud',master_log_file='realcloud.000001',master_log_pos=502;"
mysql -e "change master to master_host='${MasterIP}',master_port=${MasterMysqlPort},master_user='${MasterUser}',master_password='${MasterPassword}',master_log_file='${MasterLogFile}',master_log_pos=${MasterLogPos};"
mysql -e "flush privileges;"
mysql -e "slave start;"
Slave_IO_Running=$(mysql -e "show slave status\G;"|grep Slave_IO_Running|awk -F":" '{print $2}')
Slave_SQL_Running=$(mysql -e "show slave status\G;"|grep Slave_SQL_Running|awk -F":" '{print $2}')
if [ ${Slave_IO_Running} != "Yes" ] && [ ${Slave_SQL_Running} != "Yes" ];then
write_log "Error ------> MySQL master slave mode settings is Successful"
else
write_log "Error ------> MySQL master slave mode settings is fail"
exit 1
fi
}
function main()
{
#检查源码包是否存在
CheckSourceCode
write_log "Infor ------> 检查源码存在"
#检查身份,必须是root用户执行
CheckIdentity
write_log "Infor ------> 当前是root用户"
#清理安装日志
ClearInstallLog
write_log "Infor ------> 日志已经清理完毕"
#安装cmake
InstallCmake
write_log "Infor ------> cmake安装完毕"
#安装mysql
InstallMysql
write_log "Infor ------> mysql安装完毕"
#配置主从模式的主mysql
#configureMasterMy_cnf
}
main
编辑回复