• 升级MySQL5.7.22版本_总结记录


    一. mysql5.7安装

    0. 背景

    之前用的5.6版本,5.6版本有ssl中间人攻击漏洞,建议升级成5.7。

    1. 准备:下载安装包

    安装环境:CentOS7.4
    mysql官网 下载mysql5.7最新版本,本文以tar包形式安装,故下载mysql-5.7.22-el7-x86_64.tar.gz
    与rpm安装方式相比,源码包方式对安装过程和文件的管理更加自主。

    2. 安装流程小结

    1. begin: 检查服务器上是否已安装了数据库
    2. 执行数据库安装操作
    3. 安装后初步验证
    4. 配置mysql账号:管理员账号/业务账号
    5. 创建database,初始化数据库表
    6. 设置mysql安全加固
    7. 设置mysql开机自启
    8. 安装完成删除安装文件 end.

    3. 具体步骤

    1. 安装前检查

    主要检查项可以有: mysql rpm是否安装;centos自带mariadb卸载;检查是否有mysql进程还在运行。

    #检查服务器是否已安装数据库
    checkinstalldb()
    {
    	if [ `sudo /usr/bin/rpm -qa | grep -i "MySQL-" | wc -l` -eq 1 ]
    	then
    		echo "mysql installed, please uninstall."
    		exit 1
    	fi
        # 卸载centos自带的mariadb
    	mariadbpkgname=`sudo /usr/bin/rpm -qa | grep "^mariadb-"`
    	if [ "${mariadbpkgname}" != "" ]
    	then
    		for onepkg in ${mariadbpkgname}
    		do
    			sudo /usr/bin/rpm -ev --nodeps ${onepkg}
    		done
    	fi
    
    	if [ `ps -ef|grep  -i "mysqld" | wc -l` -ge 2 ]
    	then
    		echo  "mysql is running, please uninstall."
    		exit 1
    	fi
    }
    

    2. 执行数据库安装操作

    2.1 必要步骤 比较简单:解压tar——> 执行initialize——>设置my.cnf ,妥了

    #安装数据库tar包形式,这种方式的目的在于让mysql_safe进程也是由mysql用户启动。
    installMysql_TAR()
    {
    	echo  "begin install mysql ..."
    	# step1. 准备工作:修改为普通用户属主,以便后续几步有权限。
    	sudo /opt/mysqlInstall/setfilepower.sh dbdiruser
    	# step2. 删除旧文件
    	removemysqlFile
    
    	# 【step3】. 解压安装包
    	sudo /usr/bin/tar xzf ${MYSQL_INSTALL_PKG_TAR}  -C  /opt/mysql/
    	sudo /usr/bin/mv /opt/mysql/mysql-5.7.22-el7-x86_64 ${MYSQL_BASE_DIR}
    
    	# step4. 设置/opt/mysql 用户属组
    	sudo /opt/mysqlInstall/setfilepower.sh optmysqlpower
    
    	echo "extract ${MYSQL_INSTALL_PKG_TAR} to ${MYSQL_BASE_DIR} ok."
    
    	# 【step5】. 写配置文件/etc/my.cnf
    	set_my_cnf_tar
    
    	# 【step6】. 初始化,生成data目录数据  /opt/mysql/data
    	echo "initialize data begin." >>$db_install_log
    	sudo ${MYSQL_BASE_DIR}/bin/mysqld --initialize --user=mysql
    	echo "initialize data end." >>$db_install_log
    
    	# 【step7】. 保持对外命令操作和以往无差别。
    	#拷贝iemsmysql脚本到/etc/init.d/mysql, 以便service mysql stop/start能运行。
    	sudo /usr/bin/cp /opt/mysqlInstall/iemsmysql /etc/init.d/mysql
    	#mysql -u...能运行
    	sudo /usr/bin/cp ${MYSQL_BASE_DIR}/bin/mysql /usr/bin/mysql
    }
    
    

    2.2 为了方便,拷贝启动/etc/init.d/mysql和 客户端程序/usr/bin/mysql。以便service mysql stop/start能运行,以及客户端登录不必使用mysql绝对路径。
    其中/etc/init.d/mysql做了改写,使用mysql用户去执行安装解压后目录下的mysql.server。核心内容如下:

    mode=$1    # start or stop
    MYSQL_BASE_DIR=/opt/mysql/iemsmysql
    case "$mode" in
      'start')
        su -s /bin/bash mysql ${MYSQL_BASE_DIR}/support-files/mysql.server start
        ;;
      'stop')
    	su -s /bin/bash mysql ${MYSQL_BASE_DIR}/support-files/mysql.server stop
        ;;
      'restart')
    	su -s /bin/bash mysql ${MYSQL_BASE_DIR}/support-files/mysql.server restart
        ;;
      'status')
    	su -s /bin/bash mysql ${MYSQL_BASE_DIR}/support-files/mysql.server status
        ;;
        *)
         basename=`basename "$0"`
          echo "Usage: $basename  {start|stop|restart|status}  [ MySQL server options ]"
          exit 1
        ;;
    esac
    

    2.3 这里再附上my.cnf配置

    [mysqld]
    
    port=3307
    bind-address=${bindip}
    max_connections=1024
    max_connect_errors=512
    wait_timeout=7200
    interactive_timeout=7200
    slave_net_timeout=3000
    
    server-id=0
    
    datadir=/opt/mysql/data
    basedir=${MYSQL_BASE_DIR}
    
    ## log配置
    log-bin=/opt/mysql/data/mysql-bin
    slow_query_log=1
    long_query_time=3
    general_log=1
    log_error_verbosity=2
    expire_logs_days=30
    
    key_buffer_size=1G
    max_allowed_packet=64M
    sort_buffer_size=32M
    thread_cache_size=150
    query_cache_size=256M
    join_buffer_size=8M
    tmp_table_size=64M
    read_buffer_size=128M
    read_rnd_buffer_size=16M
    skip-external-locking
    innodb_lock_wait_timeout=100
    innodb_buffer_pool_size=$innodbBufferPoolSize
    event_scheduler=1
    ## ssl证书配置
    ssl-ca=${SSL_CA}
    ssl-cert=${SSL_CERT}
    ssl-key=${SSL_KEY}
    ssl_cipher=AES128-SHA:AES128-SHA256:AES256-SHA:AES256-SHA256:ECDHE-RSA-AES128-SHA:ECDHE-RSA-AES128-SHA256
    
    local-infile=0
    
    safe-user-create
    skip-symbolic-links
    sql_mode=STRICT_ALL_TABLES,NO_AUTO_CREATE_USER
    master_info_repository=TABLE
    relay_log_info_repository=TABLE
    skip_show_database=1
    
    ## 密码复杂度校验插件
    plugin-load-add=validate_password.so
    validate-password=FORCE_PLUS_PERMANENT
    validate_password_length=8
    validate_password_policy= MEDIUM
    validate_password_number_count=0
    validate_password_mixed_case_count=1
    validate_password_special_char_count=1
    validate_password_check_user_name=1
    
    ## 防暴力破解插件
    plugin-load-add=connection_control.so
    connection-control=FORCE_PLUS_PERMANENT
    connection-control-failed-login-attempts=FORCE_PLUS_PERMANENT
    connection-control-failed-connections-threshold=3
    connection-control-min-connection-delay=1000
    connection-control-max-connection-delay=2147483647
    
    socket =/opt/mysql/data/mysql.sock
    [client]
    socket=/opt/mysql/data/mysql.sock
    default-character-set=utf8
    

    3.初步验证

    完成上述步骤后,就可以启动数据库试试了,能启动成功则上述操作没啥问题。

    #启动数据库  
    start_mysql()
    {
    	nStart=$(sudo /usr/sbin/service mysql start | grep 'Starting MySQL' | grep 'SUCCESS' | grep -v grep | wc -l)
    	if [ ${nStart} -eq 1 ]
    	then
    		echo "Start mysql success"
    	else
    		echo "Start mysql failed"
    		exit 1
    	fi
    }
    

    4.配置账号

    设置管理员账号

    Set_root_pwd()
    {
    
    	#通过mysqld_safe跳过权限表grant-tables启动MySQL
    	sudo ${MYSQL_BASE_DIR}/bin/mysqld_safe --user=mysql --skip-grant-tables --skip-networking 2>&1 >/dev/null &
    	sleep 10
    	if [ $? -ne 0 ]
    	then
    		 echo "use mysqld_safe failed"
    
    		 exit 1
    	fi
    #root用户重命名,设置密码,修改用户权限
    sudo /usr/bin/mysql -uroot mysql <<EOF
    use mysql;
    update user set user='${DBROOTUSER}' where user='root';
    update user set authentication_string=PASSWORD('${DBROOTPWD}') where user='${DBROOTUSER}';
    update user set password_expired="N";
    FLUSH PRIVILEGES;
    exit
    EOF
    
    	#重启mysql服务,以关闭后台运行的mysqld_safe --user=mysql --skip-grant-tables --skip-networking
    	restartmysql
    
    	echo "set root user password success"
    }
    
    

    创建业务账号

    createUser()
    {
    sudo /usr/bin/mysql -u${DBROOTUSER} -p${DBROOTPWD} <<EOF
    use mysql;
    grant all privileges on *.* to ${DBSYSTEMUSER}@"%" Identified by "${DBSYSTEMPWD}";
    flush privileges;
    exit
    EOF
    echo "create user success"
    }
    
    

    5. 创建数据库,初始化数据。

    根据业务需求进行即可,略。

    6. 设置安全加固

    主要进行目录/文件权限的设置,以及业务账号权限的限制。做到权限最小化。
    具体加固项可参考网络安全系列 之 MySQL数据库安全 ,此处略。

    7. 设置开机自启

    8. 安装完毕,清理文件,有始有终。

    删除后续不再使用的安装包和安装脚本。

    二. mysql5.7的一些变化

    MySQL 5.7 新特性详解

  • 相关阅读:
    equals 和 == 的区别
    jenkins
    状态码
    对控制反转和依赖注入的突然顿悟
    分布式事务与Seate框架
    synchronized原理
    VS 添加 Sqlserver
    C# 生成二维码
    jQuery /Date(0000000000000)/日期转换
    什么是Java的序列化,在哪些程序中见过Java序列化?
  • 原文地址:https://www.cnblogs.com/eaglediao/p/9159557.html
Copyright © 2020-2023  润新知