[toc] ## 一、步骤总述 这个基于脚本的自动化mysql安装,是基于源码版本编译并完成安装的脚本,整个安装过程不是非常快,主要占用时间的过程是源码编译。 > 1-下载mysql 5.7的安装包,注意请下载对应的**源码包**; > 2-上传脚本放置到和安装包同目录下; > 3-运行脚本自动安装脚本; > 4-设置自启动。 ## 二、安装步骤 ### 1-下载安装包 ```shell wget https://downloads.mysql.com/archives/get/p/23/file/mysql-boost-5.7.31.tar.gz ``` ### 2-编写脚本 在mysql安装包路径下添加以下脚本: ``` #!/bin/bash source_dir="/home" #这里填写安装包的路径 mysql_dir="/usr/local/mysql" mysql_package="mysql-5.7.24-linux-glibc2.12-x86_64.tar.gz" #这里需要修改为安装包的名称 mysql_SRC_first=$(echo $mysql_package | sed 's/.tar.gz//g') mysql_SRC=$(echo $mysql_SRC_first | sed 's/boost-//g') function init() { # close selinux sed -i 's/SELINUX=enforcing/SELINUX=disabled/' /etc/selinux/config setenforce 0 # check yes/no x86_64 if [ `uname -m` != "x86_64" ];then echo "your system is 32bit ,not install libunwind lib!" fi # download depend on the packages LANG=C yum -y install gperftools make cmake gcc gcc-c++ autoconf automake libjpeg libjpeg-devel libpng libpng-devel freetype freetype-devel libxml2 libxml2-devel zlib zlib-devel glibc glibc-devel glib2 glib2-devel bzip2 bzip2-devel ncurses ncurses-devel curl curl-devel e2fsprogs e2fsprogs-devel krb5 krb5-devel libidn libidn-devel openssl openssl-devel openldap openldap-devel nss_ldap openldap-clients openldap-servers pcre pcre-devel mkdir $log_dir groupadd mysql && useradd mysql -s /sbin/nologin -g mysql echo "www and mysql user && group create!" } function mysql_install() { echo "######## start install mysql ########" ##test yes/no have mysqld/mariadb progress ps -ef|grep -w mysqld|grep -v "grep" &> /dev/null if [ $? -eq 0 ];then mysqlbasedir=`ps -ef|grep -w "mysqld"|grep -v "grep"|awk '{print $9}'|tr -d '\-\-'` mysqldatadir=`ps -ef|grep -w "mysqld"|grep -v "grep"|awk '{print $10}'|tr -d '\-\-'` fi rpm -qa | grep mariadb* &> /dev/null if [ $? -eq 0 ];then yum remove mariadb* -y fi ls /etc/my.cnf &> /dev/null if [ $? -eq 0 ];then mv /etc/my.cnf /etc/my.cnf.bak fi ls /etc/init.d/mysql &> /dev/null tar zxvf $mysql_package cd $mysql_SRC echo "start cmake..." cmake -DCMAKE_INSTALL_PREFIX=$mysql_dir -DMYSQL_UNIX_ADDR=$mysql_dir/mysql.sock -DSYSCONFDIR=$mysql_dir/etc -DSYSTEMD_PID_DIR=$mysql_dir -DDEFAULT_CHARSET=utf8 -DDEFAULT_COLLATION=utf8_general_ci -DMYSQL_TCP_PORT=3306 -DWITH_INNOBASE_STORAGE_ENGINE=1 -DWITH_ARCHIVE_STORAGE_ENGINE=1 -DWITH_BLACKHOLE_STORAGE_ENGINE=1 -DWITH_PERFSCHEMA_STORAGE_ENGINE=1 -DMYSQL_DATADIR=$mysql_dir/data -DWITH_BOOST=boost -DWITH_SYSTEMD=1 > $log_dir/configure_mysql.log sleep 1 echo "start make && make install..." make && make install sleep 2 chown -R mysql.mysql $mysql_dir/ cd $mysql_dir/ echo '######create my.cnf######' if [ ! -s my.cnf ];then cat >> my.cnf << EOF [client] port = 3306 default-character-set=utf8 socket = /usr/local/mysql/mysql.sock [mysql] port = 3306 default-character-set=utf8 socket = /usr/local/mysql/mysql.sock [mysqld] user = mysql basedir = /usr/local/mysql datadir = /usr/local/mysql/data port = 3306 default-character-set=utf8 pid-file = /usr/local/mysql/mysqld.pid socket = /usr/local/mysql/mysql.sock server-id = 1 # Remove leading # to set options mainly useful for reporting servers. # The server defaults are faster for transactions and fast SELECTs. # Adjust sizes as needed, experiment to find the optimal values. # join_buffer_size = 128M # sort_buffer_size = 2M # read_rnd_buffer_size = 2M sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES EOF else continue fi chown mysql.mysql my.cnf cp $mysql_dir/support-files/mysql.server /etc/init.d/mysqld chmod +x /etc/init.d/mysqld echo 'PATH=/usr/local/mysql/bin:/usr/local/mysql/lib:$PATH' >> /etc/profile echo 'export PATH' >> /etc/profile source /etc/profile rm -rf $mysql_dir/data/* mysqld --initialize-insecure --user=mysql --basedir=/usr/local/mysql --datadir=/usr/local/mysql/data cp usr/lib/systemd/system/mysqld.service /usr/lib/systemd/system/ systemctl daemon-reload systemctl start mysqld systemctl enable mysqld ps -ef|grep mysql systemctl status mysqld echo '######mysql is install completed done.######' } init sleep 1 mysql_install ``` ### 3-执行脚本 运行脚本等待执行完毕,经测试这个过程是非常缓慢的,大概需要2个小时: ``` sh mysql.sh ``` ### 4-设置自启动 ``` systemctl status mysqld ``` ### 5-mysql初始化设置 进入数据库中(默认密码为空) ```shell mysql -uroot -p mysql> use mysql; mysql> alter user `root`@`%` identified by "123456" ; mysql> GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY '123456' WITH GRANT OPTION; mysql> flush privileges; mysql> exit ``` > 参考材料:https://blog.csdn.net/hotkoko/article/details/106064642