本文实现了mysql8.x版本(下载)在centos7.x操作系统下的一键安装,将文中代码复制到脚本文件,例如install-mysql.sh,将脚本文件与mysql-8.0.17-el7-x86_64.tar.gz放在同一目录下,执行sh install-mysql.sh即可,代码如下:
#! /bin/bash
config(){
echo "**************初始化数据"
mysql_bin="/usr/local/mysql/bin"
mysql_sock="/opt/apps/tmp/mysql/mysql.sock"
param="-h127.0.0.1 -uroot -proot"
#将root的密码设置为root
$mysql_bin/mysqladmin -S $mysql_sock -u root password 'root' 2>/dev/null
#设置编码为UTF8
$mysql_bin/mysql -S $mysql_sock $param -e"SET character_set_client = utf8" 2>/dev/null
$mysql_bin/mysql -S $mysql_sock $param -e"SET character_set_connection = utf8" 2>/dev/null
$mysql_bin/mysql -S $mysql_sock $param -e"SET character_set_database = utf8" 2>/dev/null
$mysql_bin/mysql -S $mysql_sock $param -e"SET character_set_results = utf8" 2>/dev/null
$mysql_bin/mysql -S $mysql_sock $param -e"SET character_set_server = utf8" 2>/dev/null
#设置时区
$mysql_bin/mysql -S $mysql_sock $param -e"set global time_zone=\"+8:00\"" 2>/dev/null
$mysql_bin/mysql -S $mysql_sock $param -e"FLUSH PRIVILEGES" 2>/dev/null
}
install(){
echo "**************安装mysql"
#判断存在mysql进程,存在则关闭
if [[ 2 -gt `ps -ef|grep mysql|wc -l` ]];then
echo " "
else
echo "**************关闭mysql"
`ps -ef|grep mysql|grep -v 'grep'|awk '{print $2}'|xargs kill -9` 2>/dev/null
fi
#卸载系统自带mysql
rpm -e --nodeps `rpm -qa|grep mysql`
#配置文件所在目录
my_cnf="/etc/my.cnf"
#将解压后的mysql复制到/usr/local,也可以选择移动
cp -r mysql /usr/local/
echo "[mysqld]" >$my_cnf
echo "server-id = 1" >>$my_cnf
echo "port = 3306" >>$my_cnf
echo "mysqlx_port = 33060" >>$my_cnf
echo "mysqlx_socket = /opt/apps/tmp/mysql/mysqlx.sock" >>$my_cnf
echo "datadir = /opt/apps/data/mysqldata" >>$my_cnf
echo "socket = /opt/apps/tmp/mysql/mysql.sock" >>$my_cnf
echo "pid-file = /opt/apps/tmp/mysql/mysqld.pid" >>$my_cnf
echo "log-error = error.log" >>$my_cnf
echo "slow-query-log = 1" >>$my_cnf
echo "slow-query-log-file = slow.log" >>$my_cnf
echo "long_query_time = 0.2" >>$my_cnf
echo "log-bin = bin.log" >>$my_cnf
echo "relay-log = relay.log" >>$my_cnf
echo "binlog_format =ROW" >>$my_cnf
echo "relay_log_recovery = 1" >>$my_cnf
echo "character-set-client-handshake = FALSE" >>$my_cnf
echo "character-set-server = utf8mb4" >>$my_cnf
echo "collation-server = utf8mb4_unicode_ci" >>$my_cnf
echo "init_connect ='SET NAMES utf8mb4'" >>$my_cnf
echo "innodb_buffer_pool_size = 1G" >>$my_cnf
echo "join_buffer_size = 128M" >>$my_cnf
echo "sort_buffer_size = 2M" >>$my_cnf
echo "read_rnd_buffer_size = 2M" >>$my_cnf
echo "log_timestamps = SYSTEM" >>$my_cnf
echo "lower_case_table_names = 1" >>$my_cnf
echo "default-authentication-plugin = mysql_native_password" >>$my_cnf
echo "default-time-zone = '+8:00'" >>$my_cnf
usergroup="mysql : mysql"
groupadd -f mysql
isusergroup=`groups mysql`
#判断是否存在mysql用户
if [ "$usergroup" = "$isusergroup" ];then
echo "**************mysql用户已经在mysql组"
else
echo "**************添加mysql用户到mysql组"
useradd mysql -g mysql
fi
rm -rf /opt/apps/tmp/mysql
rm -rf /opt/apps/data/mysqldata
#配置mysql临时目录,防治在/tmp目录下被清理
mkdir -p /opt/apps/tmp/mysql
#配置数据目录,也可以改
mkdir -p /opt/apps/data/mysqldata
chown -R mysql:mysql /opt/apps/data/mysqldata
chown -R mysql:mysql /opt/apps/tmp/mysql
chmod -R 775 /opt/apps/data/mysqldata
chmod -R 775 /usr/local/mysql
/usr/local/mysql/bin/mysqld --user=mysql --basedir=/usr/local/mysql --datadir=/opt/apps/data/mysqldata --initialize-insecure
cp /usr/local/mysql/support-files/mysql.server /etc/init.d/mysql
/etc/init.d/mysql start
config
}
if [[ ! -d "/opt/apps/mysql" ]];then
echo "**************解压mysql"
tar -zxf mysql-8.0.17-el7-x86_64.tar.gz
mv mysql-8.0.17-el7-x86_64.tar.gz mysql
fi
if [[ ! -d "/usr/local/mysql" ]];then
install
else
echo "**************检查到mysql已经安装,跳过"
fiinstall