使用方法
source install_mysql.sh
install_mysql.sh
接收$1
参数,设置mysql密码,默认密码为mysql初始密码,会打印出来。
$2
为安装路径,默认安装路径为/usr/local
.
$3
为数据存储路径,默认安装路径为/usr/local/mysql/data
.
install_mysql.sh
#!/bin/bash
. /etc/init.d/functions
password=$1
directory=$2
data_dir=$3
current_dir=`pwd`
function select_installation_directory(){
if [[ -z ${directory} ]];
then
directory='/usr/local'
fi
if [[ -z ${data_dir} ]];
then
data_dir=${directory}/mysql/data
fi
}
function delete_mariadb(){
for i in $(rpm -qa | grep mariadb | grep -v grep)
do
echo "卸载mariadb -> "$i
rpm -e --nodeps $i
done
}
function check_gcc(){
if [[ -z $(rpm -qa | grep ^gcc | grep -v grep) ]];
then
cd gcc && rpm -Uvh *.rpm --nodeps --force && cd ..
fi
}
function create_mysql_config(){
[[ -f /etc/my.cnf ]] && mv /etc/my.cnf /etc/my.cnf-$(date +%F-%H:%H:%S)
cd "${current_dir}" && cp my.cnf /etc/
system_mem_size=$(grep "^MemTotal" /proc/meminfo |awk '{print $2}')
innodb_buffer_pool_size="$(echo "${system_mem_size}"/1024/10*6|bc)M"
sed -i "s#^socket.*#socket = ${data_dir}/mysql.sock#g" /etc/my.cnf
sed -i "s#^slow_query_log_file.*#slow_query_log_file = ${data_dir}/slow.log#g" /etc/my.cnf
sed -i "s#^log-error.*#log-error = ${data_dir}/error.log#g" /etc/my.cnf
sed -i "s#^log-bin.*#log-bin = ${data_dir}/mybinlog#g" /etc/my.cnf
sed -i "s#^innodb_buffer_pool_size.*#innodb_buffer_pool_size = ${innodb_buffer_pool_size}M#g" /etc/my.cnf
sed -i "s#^innodb_undo_directory.*#innodb_undo_directory = ${data_dir}/undolog#g" /etc/my.cnf
sed -i "s#^basedir.*#basedir = ${directory}/mysql#g" /etc/my.cnf
sed -i "s#^datadir.*#datadir = ${data_dir}#g" /etc/my.cnf
echo -e "\n"
}
function add_mysql_user(){
id mysql >& /dev/null
if [[ $? -ne 0 ]];
then
echo "用户不存在,开始创建mysql用户"
groupadd mysql
useradd -g mysql mysql
fi
}
function install_mysql(){
tar_name=$(ls .|grep mysql-.*.tar.gz)
tar_dir=${tar_name%.tar.gz*}
tar -zxvf "${current_dir}"/"${tar_name}"
mv "${current_dir}"/"${tar_dir}" ${directory}/mysql
if [ ! -d ${data_dir} ];then
mkdir ${data_dir}
fi
echo -e "开始初始化数据库"
cd ${directory}/mysql && bin/mysqld --initialize --user=mysql --basedir=${directory}/mysql --datadir=${data_dir}
if [[ $? -eq 0 ]];then
action "MySQL初始化完毕" /bin/true
mysql_init_pwd=$(grep "temporary password" ${data_dir}/error.log |awk -F "[: ]" '{print $NF}')
echo "MySQL初始化密码为:${mysql_init_pwd}"
chown -R mysql:mysql ${directory}/mysql
echo -e "\n"
else
action "MySQL初始化失败请查看${data_dir}/error.log日志" /bin/false
exit
fi
}
function powered_up_mysql(){
cd ${directory}/mysql/support-files && cp mysql.server /etc/init.d/mysql
sed -i "s#^basedir=.*#basedir=${directory}/mysql#g" /etc/init.d/mysql
sed -i "s#^datadir=.*#datadir=${data_dir}#g" /etc/init.d/mysql
service mysql start
chkconfig mysql on
}
function login_mysql(){
if [[ -z ${password} ]];
then
password=${mysql_init_pwd}
fi
login_mysql="${directory}/mysql/bin/mysql -uroot -p${mysql_init_pwd} --connect-expired-password"
${login_mysql} <<EOF
alter user 'root'@'localhost' identified by '${password}';
use mysql;
update user set host='%' where user='root' and host='localhost';
flush privileges;
EOF
}
function Main(){
select_installation_directory;
delete_mariadb;
check_gcc;
create_mysql_config;
add_mysql_user;
install_mysql;
powered_up_mysql;
login_mysql;
}
Main;