一. 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进程还在运行。

  1. #检查服务器是否已安装数据库
  2. checkinstalldb()
  3. {
  4. if [ `sudo /usr/bin/rpm -qa | grep -i "MySQL-" | wc -l` -eq 1 ]
  5. then
  6. echo "mysql installed, please uninstall."
  7. exit 1
  8. fi
  9. # 卸载centos自带的mariadb
  10. mariadbpkgname=`sudo /usr/bin/rpm -qa | grep "^mariadb-"`
  11. if [ "${mariadbpkgname}" != "" ]
  12. then
  13. for onepkg in ${mariadbpkgname}
  14. do
  15. sudo /usr/bin/rpm -ev --nodeps ${onepkg}
  16. done
  17. fi
  18. if [ `ps -ef|grep -i "mysqld" | wc -l` -ge 2 ]
  19. then
  20. echo "mysql is running, please uninstall."
  21. exit 1
  22. fi
  23. }

2. 执行数据库安装操作

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

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

2.2 为了方便,拷贝启动/etc/init.d/mysql和 客户端程序/usr/bin/mysql。以便service mysql stop/start能运行,以及客户端登录不必使用mysql绝对路径。

其中/etc/init.d/mysql做了改写,使用mysql用户去执行安装解压后目录下的mysql.server。核心内容如下:

  1. mode=$1 # start or stop
  2. MYSQL_BASE_DIR=/opt/mysql/iemsmysql
  3. case "$mode" in
  4. 'start')
  5. su -s /bin/bash mysql ${MYSQL_BASE_DIR}/support-files/mysql.server start
  6. ;;
  7. 'stop')
  8. su -s /bin/bash mysql ${MYSQL_BASE_DIR}/support-files/mysql.server stop
  9. ;;
  10. 'restart')
  11. su -s /bin/bash mysql ${MYSQL_BASE_DIR}/support-files/mysql.server restart
  12. ;;
  13. 'status')
  14. su -s /bin/bash mysql ${MYSQL_BASE_DIR}/support-files/mysql.server status
  15. ;;
  16. *)
  17. basename=`basename "$0"`
  18. echo "Usage: $basename {start|stop|restart|status} [ MySQL server options ]"
  19. exit 1
  20. ;;
  21. esac

2.3 这里再附上my.cnf配置

  1. [mysqld]
  2. port=3307
  3. bind-address=${bindip}
  4. max_connections=1024
  5. max_connect_errors=512
  6. wait_timeout=7200
  7. interactive_timeout=7200
  8. slave_net_timeout=3000
  9. server-id=0
  10. datadir=/opt/mysql/data
  11. basedir=${MYSQL_BASE_DIR}
  12. ## log配置
  13. log-bin=/opt/mysql/data/mysql-bin
  14. slow_query_log=1
  15. long_query_time=3
  16. general_log=1
  17. log_error_verbosity=2
  18. expire_logs_days=30
  19. key_buffer_size=1G
  20. max_allowed_packet=64M
  21. sort_buffer_size=32M
  22. thread_cache_size=150
  23. query_cache_size=256M
  24. join_buffer_size=8M
  25. tmp_table_size=64M
  26. read_buffer_size=128M
  27. read_rnd_buffer_size=16M
  28. skip-external-locking
  29. innodb_lock_wait_timeout=100
  30. innodb_buffer_pool_size=$innodbBufferPoolSize
  31. event_scheduler=1
  32. ## ssl证书配置
  33. ssl-ca=${SSL_CA}
  34. ssl-cert=${SSL_CERT}
  35. ssl-key=${SSL_KEY}
  36. ssl_cipher=AES128-SHA:AES128-SHA256:AES256-SHA:AES256-SHA256:ECDHE-RSA-AES128-SHA:ECDHE-RSA-AES128-SHA256
  37. local-infile=0
  38. safe-user-create
  39. skip-symbolic-links
  40. sql_mode=STRICT_ALL_TABLES,NO_AUTO_CREATE_USER
  41. master_info_repository=TABLE
  42. relay_log_info_repository=TABLE
  43. skip_show_database=1
  44. ## 密码复杂度校验插件
  45. plugin-load-add=validate_password.so
  46. validate-password=FORCE_PLUS_PERMANENT
  47. validate_password_length=8
  48. validate_password_policy= MEDIUM
  49. validate_password_number_count=0
  50. validate_password_mixed_case_count=1
  51. validate_password_special_char_count=1
  52. validate_password_check_user_name=1
  53. ## 防暴力破解插件
  54. plugin-load-add=connection_control.so
  55. connection-control=FORCE_PLUS_PERMANENT
  56. connection-control-failed-login-attempts=FORCE_PLUS_PERMANENT
  57. connection-control-failed-connections-threshold=3
  58. connection-control-min-connection-delay=1000
  59. connection-control-max-connection-delay=2147483647
  60. socket =/opt/mysql/data/mysql.sock
  61. [client]
  62. socket=/opt/mysql/data/mysql.sock
  63. default-character-set=utf8

3.初步验证

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

  1. #启动数据库
  2. start_mysql()
  3. {
  4. nStart=$(sudo /usr/sbin/service mysql start | grep 'Starting MySQL' | grep 'SUCCESS' | grep -v grep | wc -l)
  5. if [ ${nStart} -eq 1 ]
  6. then
  7. echo "Start mysql success"
  8. else
  9. echo "Start mysql failed"
  10. exit 1
  11. fi
  12. }

4.配置账号

设置管理员账号

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

创建业务账号

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

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

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

6. 设置安全加固

主要进行目录/文件权限的设置,以及业务账号权限的限制。做到权限最小化。

具体加固项可参考网络安全系列 之 MySQL数据库安全,此处略。

7. 设置开机自启

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

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

二. mysql5.7的一些变化

MySQL 5.7 新特性详解

升级MySQL5.7.22版本_总结记录的更多相关文章

  1. MySQL5.7.22版本的安装和调试

    1:安装前的准备工作 需要的软件: boost_1_59_0.tar.gz,cmake-3.6.1.tar.gz,mysql-5.7.22.tar.gz 开始安装MySQL 2.1 检查cmake [ ...

  2. Mysql5.7.22版本,插入中文乱码的问题

    首先,mysql5.7.22版本的免安装版本的,需要自己配置信息,而且容易出现问题,这里还是建议下载安装版本.msi,按照安装教程进行安装:安装成功后会在数据存储的data文件下找到参数配置文件my. ...

  3. mysql5.7.22的安装与配置(适用mysql5.7.20至mysql5.7.22版本)

    一.解压Mysql5.7.20安装包,刚解压是没有  data  这个文件夹的 二.配置mysql环境变量,创建MYSQL_HOME,然后在Path上添加%MYSQL_HOME%\bin; 三.配置m ...

  4. centos6.8 Mysql5.6.22 升级 mysql-5.7.20

    一.检查系统环境 二.备份数据库 mysqldump –all-databases > allbackupfile.sql (建议:有条件的话可使用图形化界面备份,操作灵活) 三.下载安装文件 ...

  5. MySQL升级-5.6升级到5.7版本&切换GTID模式

          目前未在生产环境中升级过数据库版本,倒是在测试环境跟开发环境升级过.       可以通过mysqldump sql文件进行升级,也可以通过mysql_upgrade升级,前者耗时较长,且 ...

  6. [转]MySQL5.6.22 安装

    原文路径 http://jifeng3321.iteye.com/blog/2181517?utm_source=tuicool   由于一直做银行项目,所以一直在用oracle和db2,但最近自己想 ...

  7. centos7搭建mysql-5.7.22主从复制

    mysql7.7.22主从复制 本项目是根据真实环境搭建编写出文档,文档中的目录也是根据自己公司环境所创建.公司原来是一台服务器搭建的数据库(5.7.22),由于业务的扩展需要搭建一台从服务器,减轻主 ...

  8. 升级 mysql5.6 配置文件my.cnf sql_mode 解析与设置问题

    sql_mode是个很容易被忽视的变量,默认值是空值,在这种设置下是可以允许一些非法操作的,比如允许一些非法数据的插入.在生产环境必须将这个值设置为严格模式,所以开发.测试环境的数据库也必须要设置,这 ...

  9. CentOS7.5安装Mysql5.7.22

    一 下载 下载地址:https://www.mysql.com/downloads/ 1 点击第一个链接地址,进入MySQL官方网站,单击“Downloads”下载Tab页,进入下载界面 2 找到Co ...

随机推荐

  1. hibernate使用手写sql以及对结果list的处理

    Session sees=simpleDAO.getSessionFactory().openSession(); String sql = "select * from fhcb_08_t ...

  2. mysql怎样更改密码和用户名

    mysql怎样更改密码和用户名 更改密码(老版本): mysql -u root -p Enter password:*** mysql>use mysql; --选择数据库-- Databas ...

  3. Hadoop生态上几个技术的关系与区别:hive、pig、hbase 关系与区别  Pig

    Hadoop生态上几个技术的关系与区别:hive.pig.hbase 关系与区别 Pig 一种操作hadoop的轻量级脚本语言,最初又雅虎公司推出,不过现在正在走下坡路了.当初雅虎自己慢慢退出pig的 ...

  4. jsp2自定义标签+属性

    前面说过jsp2自定义标签如果要加入属性需要设置属性的getter和setter方法.代码如下: public class GetParam extends SimpleTagSupport { pr ...

  5. 【Java多线程系列随笔一】浅析 Java Thread.join()

    一.在研究join的用法之前,先明确两件事情. 1.join方法定义在Thread类中,则调用者必须是一个线程, 例如: Thread t = new CustomThread(); //这里一般是自 ...

  6. D-Ubuntu中修改MySQL的默认数据集(client和server)

    Ubuntu16.04,MySQL5.7 1, sudo vim /etc/mysql/mysql.conf.d/mysqld.cnf 使用vim编辑MySQL的配置文件,不同版本的MySQL配置文件 ...

  7. splay模版

    //splay模版 #include<iostream> #include<cstdio> #include<cstdlib> #include<cstrin ...

  8. 令人清爽的异步函数async、await

    1.什么是async.await? async用于声明一个函数是异步的.而await从字面意思上是"等待"的意思,就是用于等待异步完成.并且await只能在async函数中使用; ...

  9. 网络编程之 OSI七层协议

    内容目录: 1.软件开发架构 2.OSI七层协议 3.每层协议介绍 1.软件开发架构 c/s架构: c:客户端 s:服务端 b/s架构: b:浏览器 s:服务器 本质:b/s其实也是c/s 2.OSI ...

  10. CKEditor与CKFinder学习--自定义界面及按钮事件捕获

    原文地址:CKEditor与CKFinder学习--自定义界面及按钮事件捕获  讨厌CSDN的广告,吃香太难看! 效果图 界面操作图 原始界面 调整后的界面(删除了flush,表单元素等) 该界面的皮 ...