参考
MySQL-5.7
实践
vim mysql.sh
#!/bin/bashv_fileName=$1#获取当前脚本路径v_curPath=$(cd `dirname $0`; pwd)v_log=${v_curPath}"/"$0".log"#声明消息提醒前缀方法f_msg(){echo $(date "+%Y-%m-%d %H:%M:%S")$LINENO" "$1"==>"}#判断日志文件是否存在若不存在则创建if [ ! -f ${v_log} ]thentouch ${v_log}echo $(f_msg INFO)$LINENO" 创建日志文件" >> ${v_log}elseecho "=======================================">>${v_log}fi#校验工具是否存在方法f_checkRpm(){v_name1=$1v_check=$(rpm -qa ${v_name1})if [ ${#v_check} -eq 0 ]thenecho $(f_msg ERROR)$LINENO " "${v_name1}"工具不存在,请安装"${v_name1}"工具">>${v_log}return 0elseecho $(f_msg INFO)$LINENO " "${v_name1}"工具的版本号为"${v_check}>>${v_log}return 1fi}v_yum=$(rpm -qa yum)if [ ${#v_yum} -eq 0 ]thenecho $(f_msg ERROR)$LINENO" 未检测到yum,请安装yum"echo $(f_msg ERROR)$LINENO" 未检测到yum,请安装yum" >> ${v_log}exit 0elseecho $(f_msg INFO)$LINENO" yum的版本为"${v_yum} >> ${v_log}fiv_tcl=$(rpm -qa tcl)if [ ${#v_tcl} -eq 0 ]thenecho $(f_msg INFO)$LINENO" 未检测到tcl,请安装tcl"echo "执行语句 yum -y install tcl "echo $(f_msg INFO)$LINENO" 未检测到tcl,请安装tcl" >> ${v_log}exit 0elseecho $(f_msg INFO)$LINENO" tcl的版本为"${v_tcl} >> ${v_log}fiv_expect=$(rpm -qa expect)if [ ${#v_expect} -eq 0 ]thenecho $(f_msg INFO)$LINENO" 未检测到expect,请安装expect"echo "执行语句 yum -y install expect "echo $(f_msg INFO)$LINENO" 未检测到expect,请安装expect" >> ${v_log}exit 0elseecho $(f_msg INFO)$LINENO" expect的版本为"${v_expect} >> ${v_log}fi#判断文件是否存在,若不存在则下载if [ ${#v_fileName} -eq 0 ]thenf_checkRpm wgetv_rqmReturn=$?#检测当前目录下是否有mysql文件if [ ${v_rqmReturn} -eq 0 ]thenecho $(f_msg INFO)$LINENO" 未检测到wget,请安装wget" >> ${v_log}exit 0fiv_mysqlC=$(ls -ld mysql* |grep ^-|wc -l)if [ ${v_mysqlC} -lt 1 ]then#若不存在则下载wget http://dev.MySQL.com/get/Downloads/MySQL-5.7/mysql-5.7.11-Linux-glibc2.5-x86_64.tar.gzfielseif [ ! -f ${v_fileName} ]thenwget http://dev.MySQL.com/get/Downloads/MySQL-5.7/${v_fileName}fifi#检验tar是否存在v_tar=$(rpm -qa tar)if [ ${#v_tar} -le 0 ]thenecho $(f_msg ERROR)$LINENO" tar工具不存在,请安装tar工具">>${v_log}exit 0elseecho $(f_msg INFO)$LINENO" tar工具的版本号为"${v_tar}>>${v_log}fi#获取文件名for fileName in `ls -d mysql*`doif [ -f fileName ]thenv_fileName=${fileName}fidoneecho $(f_msg INFO)$LINENO" 获取mysql压缩包文件名"${v_fileName}>>${v_log}#解压文件mkdir mysqltar -xvf ${v_fileName} -C mysqlcd mysqlv_mysqlChildC=$(ls -l|grep ^d|wc -l)v_tempFileName=""for fileName in `ls`dov_tempFileName=${fileName}donecd ${v_tempFileName}mv * ../cd ..rm -rf ${v_tempFileName}#创建data目录mkdir -p /usr/local/mysql/data#创建mysql用户组及其用户if [ ! $(grep mysql /etc/group) ]thengroupadd mysqlecho $(f_msg INFO)$LINENO" 创建mysql组成功">>${v_log}elseecho $(f_msg INFO)$LINENO" mysql组已存在无需创建">>${v_log}fi#判断密码是否输入,若不输入则默认值为rootv_pwd=${2}if [ ${#v_pwd} -eq 0 ]thenv_pwd="mmsql"fi#创建用户if [ ! $(grep mysql /etc/passwd) ]thenuseradd -r -s /sbin/nologin -g mysql mysql -p v_pwdecho $(f_msg INFO)$LINENO" 创建mysql用户成功">>${v_log}elseecho $(f_msg INFO)$LINENO" mysql组已存在无需创建">>${v_log}fi#初始化mysql数据cd /usr/local/mysql/./bin/mysql_install_db --user=mysql --basedir=/usr/local/mysql/ --datadir=/usr/local/mysql/data/echo $(f_msg INFO)$LINENO" 初始化mysql数据">>${v_log}#判断my.cnf 是否存在若存在则删除if [ $(ls -l /etc/my.cnf | wc -l) -ne 0 ]thenrm -rf /etc/my.cnffiif [ $(ls -l /etc/init.d/mysqld | wc -l) -ne 0 ]thenrm -rf /etc/init.d/mysqldfi#拷贝文件cp -a ./support-files/my-default.cnf /etc/my.cnfcp -a ./support-files/mysql.server /etc/init.d/mysqldecho $(f_msg INFO)$LINENO" 拷贝mysql配置文件">>${v_log}#修改my.cnf内容sed -i "s/# basedir = ...../basedir = \/usr\/local\/mysql/g" /etc/my.cnfsed -i "s/# datadir = ...../datadir = \/usr\/local\/mysql\/data/g" /etc/my.cnfsed -i "s/# port = ...../port = 3306/g" /etc/my.cnfsed -i "s/# socket = ...../socket = \/tmp\/mysql.sock/g" /etc/my.cnf#echo "skip-grant-tables " >>/etc/my.cnf#判断character-set-server 是否存在,若存在则删除if [ $(grep character-set-server /etc/my.cnf) ]thensed -i "/character-set-server/d" /etc/my.cnffiecho "character-set-server = utf8" >> /etc/my.cnfif [ $(grep client /etc/my.cnf) ]thensed -i "/client/d" /etc/my.cnffi#echo "[client]" >> /etc/my.cnf#echo "host = localhost" >> /etc/my.cnf#echo "user = root" >> /etc/my.cnf#echo "password ="123456 >> /etc/my.cnf#echo $(f_msg INFO)$LINENO" 修改my.cnf文件">>${v_log}#将mysql 添加到环境变量中echo "export PATH=$PATH:/usr/local/mysql/bin" >> /etc/profile#重新加载profile文件/usr/bin/expect<<EOFset timeout -1spawn su - rootexpect "*"send "source /etc/profile\n"expect "*"send "exit\n"expect eofEOF#source /etc/profile#echo $(f_msg INFO)$LINENO" 配置MySQL的环境变量,使mysql命令生效">>${v_log}#创建Inln -s /usr/local/mysql/ /usr/bin/#启动服务service mysqld start#获取mysql 初始密码v_mysqlinitpwd=$(cat /root/.mysql_secret | awk 'END {print}')#修改MySQL初始密码<<!/usr/local/mysql/bin/mysql -u root -p${v_mysqlinitpwd} -e "alter user root@localhost identified by '123456';flush privileges;"echo $(f_msg INFO)$LINENO" 修改root用户初始密码">>${v_log}#查询mysql用户是否有外网登录权限v_msyqlC=$(/usr/local/mysql/bin/mysql -N -s -u root -p${v_mysqlinitpwd} -D mysql -e "select count(1) from user where host ='%' and user='mysql';")if [ ${v_msyqlC} -le 0 ]then#创建用户mysql/usr/local/mysql/bin/mysql -N -s -u root -p${v_mysqlinitpwd} -D mysql -e "CREATE USER 'mysql'@'host' IDENTIFIED BY '123456';flush privileges;"#给用户mysql 授权/usr/local/mysql/bin/mysql -N -s -u root -p${v_mysqlinitpwd} -D mysql -e "grant all privileges on *.* to mysql@'%' identified by '123456';flush privileges;"fiecho $(f_msg INFO)$LINENO" 添加mysql用户,并给mysql用户授权">>${v_log}!/usr/bin/expect<<EOFset timeout -1spawn su - rootexpect "*" { send "/usr/local/mysql/bin/mysql -u root -p\n" }expect "Enter password:" { send "${v_mysqlinitpwd}\n" }expect "mysql>" { send "alter user root@localhost identified by '123456';\n" }expect "mysql>" { send "flush privileges;\n" }expect "mysql>" { send "use mysql;\n"}expect "mysql>" { send "CREATE USER 'mysql'@'host' IDENTIFIED BY '123456';\n" }expect "mysql>" { send "flush privileges;\n" }expect "mysql>" { send "grant all privileges on *.* to mysql@'%' identified by '123456';\n" }expect "mysql>" { send "flush privileges;\n" }expect "mysql>" { send "exit\n" }expect "*"send "exit\n"expect eofEOFecho $(f_msg INFO)$LINENO" 初始化数据库信息">>${v_log}#设置开机启动 mysqlsystemctl enable mysqldsystemctl daemon-reloadecho $(f_msg INFO)$LINENO" 设置mysql开机启动">>${v_log}echo "需要手动执行 source /etc/profile"echo "如外网无法调用请检查防火墙的端口是否打开"echo "执行完毕"
注意
- 133 行创建用户时 不要用这里的密码请自行设置防止被攻击
 - 数据库默认密码为123456请提前更换后执行脚本或mysql启动后更改
 - 脚本启动是要设置 chmod -R 777 xx.sh 要不然不能执行sh文件
 - 脚本要放置在 usr/local/文件夹下 要不然会报 
No such file or directory的错- 我尝试修改过,没改成功。
 
 - mysql文件可以使用离线的
 
https://renwole.com/archives/2215
#!/bin/env bash# =================================================# Author: renwole.com ## Description: MySQL automatic installation tool ## =================================================export PATH=/sbin:/bin:/usr/sbin:/usr/bin:/usr/local/sbin:/usr/local/binInstall_MySQL() {# CentOS 8 mysql: error while loading shared libraries: libncurses.so.5yum install ncurses ncurses-compat-libs -y# Install dependenciessetenforce 0yum -y install epel-releaseyum -y install wget tar jemalloc jemalloc-devel gcc gcc-c++# MySQL configurationmysql_version="8.0.21"mysql_password="111"mkdir -p /apps/server/mysql/datamysql_install_dir="/apps/server/mysql"mysql_data_dir="/apps/server/mysql/data"download_mysql="https://mirrors.tuna.tsinghua.edu.cn/mysql/downloads"# Download MySQLcd /mntuseradd -M -s /sbin/nologin mysql >/dev/null 2>&1wget -c ${download_mysql}/MySQL-8.0/mysql-${mysql_version}-linux-glibc2.12-x86_64.tar.xzecho "========== Start installing MySQL ============"tar xJf mysql-${mysql_version}-linux-glibc2.12-x86_64.tar.xz\mv mysql-${mysql_version}-linux-glibc2.12-x86_64/* ${mysql_install_dir}if [[ -d "${mysql_install_dir}/support-files" ]]; thenrm -rf mysql-${mysql_version}-linux-glibc2.12-x86_64elserm -rf ${mysql_install_dir}echo "Error: MySQL install failed, Please contact the author"kill -9 $$fi# Initialize the database${mysql_install_dir}/bin/mysqld --initialize-insecure --user=mysql --basedir=${mysql_install_dir} --datadir=${mysql_data_dir}chown -R root . ${mysql_install_dir}chown -R mysql.mysql ${mysql_data_dir}\cp -f ${mysql_install_dir}/support-files/mysql.server /etc/init.d/mysqldsed -i "s@^basedir=.*@basedir=${mysql_install_dir}@" /etc/init.d/mysqldsed -i "s@^datadir=.*@datadir=${mysql_data_dir}@" /etc/init.d/mysqldsed -i "s@/usr/local/mysql@${mysql_install_dir}@g" ${mysql_install_dir}/bin/mysqld_safesed -i 's@executing mysqld_safe@executing mysqld_safe\nexport LD_PRELOAD=/usr/lib64/libjemalloc.so@' ${mysql_install_dir}/bin/mysqld_safeecho 'PATH=$PATH:'${mysql_install_dir}'/bin' >/etc/profile.d/mariadb_renwole.com.sh# my.conf configurationcat > /etc/my.cnf << EOF[client]port = 3306socket = /tmp/mysql.sockdefault-character-set = utf8mb4[mysql]prompt="MySQL [\\d]> "no-auto-rehash[mysqld]port = 3306socket = /tmp/mysql.sockdefault_authentication_plugin = mysql_native_passwordbasedir = ${mysql_install_dir}datadir = ${mysql_data_dir}pid-file = ${mysql_data_dir}/mysql.piduser = mysqlbind-address = 0.0.0.0server-id = 1init-connect = 'SET NAMES utf8mb4'character-set-server = utf8mb4collation-server = utf8mb4_0900_ai_ciskip-name-resolve#skip-networkingback_log = 300max_connections = 1000max_connect_errors = 6000open_files_limit = 65535table_open_cache = 128max_allowed_packet = 500Mbinlog_cache_size = 1Mmax_heap_table_size = 8Mtmp_table_size = 16Mread_buffer_size = 2Mread_rnd_buffer_size = 8Msort_buffer_size = 8Mjoin_buffer_size = 8Mkey_buffer_size = 4Mthread_cache_size = 8ft_min_word_len = 4log_bin = mysql-binbinlog_format = mixedbinlog_expire_logs_seconds = 604800log_error = ${mysql_data_dir}/mysql-error.logslow_query_log = 1long_query_time = 1slow_query_log_file = ${mysql_data_dir}/mysql-slow.logperformance_schema = 0explicit_defaults_for_timestamp#lower_case_table_names = 1skip-external-lockingdefault_storage_engine = InnoDB#default-storage-engine = MyISAMinnodb_file_per_table = 1innodb_open_files = 500innodb_buffer_pool_size = 64Minnodb_write_io_threads = 4innodb_read_io_threads = 4innodb_thread_concurrency = 0innodb_purge_threads = 1innodb_flush_log_at_trx_commit = 2innodb_log_buffer_size = 2Minnodb_log_file_size = 32Minnodb_log_files_in_group = 3innodb_max_dirty_pages_pct = 90innodb_lock_wait_timeout = 120bulk_insert_buffer_size = 8Mmyisam_sort_buffer_size = 8Mmyisam_max_sort_file_size = 10Gmyisam_repair_threads = 1interactive_timeout = 28800wait_timeout = 28800[mysqldump]quickmax_allowed_packet = 500M[myisamchk]key_buffer_size = 8Msort_buffer_size = 8Mread_buffer = 4Mwrite_buffer = 4MEOF# Set up MySQLchmod 600 /etc/my.cnfchmod +x /etc/init.d/mysqldsystemctl enable mysqldsystemctl start mysqld${mysql_install_dir}/bin/mysql -uroot -hlocalhost -e "create user root@'127.0.0.1' identified by \"${mysql_password}\";"${mysql_install_dir}/bin/mysql -uroot -hlocalhost -e "grant all privileges on *.* to root@'127.0.0.1' with grant option;"${mysql_install_dir}/bin/mysql -uroot -hlocalhost -e "grant all privileges on *.* to root@'localhost' with grant option;"${mysql_install_dir}/bin/mysql -uroot -hlocalhost -e "alter user root@'localhost' identified by \"${mysql_password}\";"${mysql_install_dir}/bin/mysql -uroot -p${mysql_password} -e "reset master;"rm -rf /etc/ld.so.conf.d/{mysql,mariadb,percona,alisql}*.confecho "${mysql_install_dir}/lib" > /etc/ld.so.conf.d/mysql_renwole.com.confldconfigecho "========== MySQL installing Successfully ====="echoecho "=============================================="echo " Thank you for using Renwole.com script"echo "=============================================="echo "MySQL:"echo "account: root"echo "password: ${mysql_password}"echo "database: ${mysql_data_dir}"echo "=============================================="}Install_MySQLsource /etc/profile
