前言
运维的数据库数量比较大,并且管理规范,可以采用自动化脚本的方式提升工作效率,减少人为操作的成本。
前提条件
操作系统 redhat 6.8
shell版本 gzu bash 4.1.2
脚本明细
[root@standbygtid mysql_media_dir]# more shell_dir/auto_install_mysql.sh
#!/bin/sh
#定义变量
source_mysql_dir=/mysql_rpm_5_6_27_dir
mysql_media_dir=/mysql_media_dir
dir_is_exist=$(ls -l ${mysql_media_dir}|awk '{print $2}')
#定义函数
#表明目录中已经有文件,则直接退出不再继续执行脚本的后续代码
function dir_exist_exit() {
if [ ${dir_is_exist} -ne 0 ]; then
echo "${mysql_media_dir} have files,exit main shell script,not continue!!!"
exit 32
fi
}
#定义函数
#删除mysql已安装的rpm相关软件
function delete_installed_mysql_rpm() {
rpmlist=$(rpm -qa|grep -i mysql)
for mysql_rpm in $rpmlist
do
rpm -e --nodeps ${mysql_rpm}
done
}
#判断mysql安装介质目录是否存在
if [ -z ${mysql_media_dir} ]; then
mkdir -p ${mysql_media_dir}
cd ${source_mysql_dir}
cp MySQL-client-advanced-5.6.25-1.el6.x86_64* ${mysql_media_dir}
cp MySQL-server-advanced-5.6.25-1.el6.x86_64* ${mysql_media_dir}
else
#调用上述函数
dir_exist_exit
if [ $? -ne 32 ]; then
cd ${source_mysql_dir}
cp MySQL-client-advanced-5.6.25-1.el6.x86_64* ${mysql_media_dir}
cp MySQL-server-advanced-5.6.25-1.el6.x86_64* ${mysql_media_dir}
fi
fi
#判断mysql是否已经安装
mysql_cnt=$(rpm -qa|grep -i --color mysql|wc -l)
if [ ${mysql_cnt} -gt 0 ]; then #已安装mysql软件
#判断mysql正在运行
mysql_running=$(ps -ef|grep -i mysqld|grep -v grep)
if [ "${mysql_running}" -gt "0" ]; then
#关闭mysql
kill -9 ${mysql_running}
#删除默认数据库
rm -Rf var/lib/mysql
#删除mysql已安装的rpm相关软件
delete_installed_mysql_rpm
fi
#删除mysql已安装的rpm相关软件
delete_installed_mysql_rpm
cd ${mysql_media_dir}
rpm -ivh MySQL-server-advanced-5.6.25-1.el6.x86_64.rpm
rpm -ivh MySQL-client-advanced-5.6.25-1.el6.x86_64.rpm
else #未安装mysql软件
cd ${mysql_media_dir}
rpm -ivh MySQL-server-advanced-5.6.25-1.el6.x86_64.rpm
rpm -ivh MySQL-client-advanced-5.6.25-1.el6.x86_64.rpm
fi
#启动mysql数据库
mysqld_safe --user=mysql --skip-grant-tables >/dev/null 2>&1 &
sleep 2
mysql -uroot -psystem -e "select version();"
sleep 2
#配置root用户密码
mysql -uroot -e "flush privileges;"
mysql -uroot -e "set password for 'root'@'localhost'=password('system')"
sleep 2
#关闭mysql数据库
running_mysql_cnt=$(ps -ef|grep -i mysqld|grep -v grep|awk '{print $2}')
kill -9 ${running_mysql_cnt}
sleep 2
#以配置好密码重启mysql
mysqld_safe --user=mysql >/dev/null 2>&1 &
#打印安装及启动数据库完毕
echo "install mysql server and startup mysql have been completed!"
脚本执行
[root@standbygtid mysql_media_dir]# sh shell_dir/auto_install_mysql.sh
/shell_dir/auto_install_mysql.sh: line 14: [: too many arguments
/shell_dir/auto_install_mysql.sh: line 56: [: root 16151 1 0 17:04 pts/0 00:00:00 bin/sh usr/bin/mysqld_safe --user=mysql
mysql 16319 16151 0 17:04 pts/0 00:00:00 usr/sbin/mysqld --basedir=/usr --datadir=/var/lib/mysql --plugin-dir=/usr/lib64/mysql/plugin --user=mysql --log-error=/var/lib/mysql/standbygtid.err --pid-file=/var/lib/mysql/standbygtid.pid --socket=/var/lib/mysql/mysql.sock --port=3306: integer expression expected
Preparing... ########################################### [100%]
1:MySQL-server-advanced ########################################### [100%]
Preparing... ########################################### [100%]
1:MySQL-client-advanced ########################################### [100%]
Warning: Using a password on the command line interface can be insecure.
+-------------------------------------------+
| version() |
+-------------------------------------------+
| 5.6.25-enterprise-commercial-advanced-log |
+-------------------------------------------+
ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: NO)
/shell_dir/auto_install_mysql.sh: line 100: 16490 已杀死 mysqld_safe --user=mysql --skip-grant-tables > dev/null 2>&1
总结
采用sh或者bash或source或者. 这几种方式执行shell脚本,对于语法的校验规不同,请采用统一的某种sh版本进行调试,以防出现语法不兼容问题
oracle数据库培训课件
(费用:20元)
联系方式