升级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. 安装流程小结
- begin: 检查服务器上是否已安装了数据库
- 执行数据库安装操作
- 安装后初步验证
- 配置mysql账号:管理员账号/业务账号
- 创建database,初始化数据库表
- 设置mysql安全加固
- 设置mysql开机自启
- 安装完成删除安装文件 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的一些变化
升级MySQL5.7.22版本_总结记录的更多相关文章
- 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 [ ...
- Mysql5.7.22版本,插入中文乱码的问题
首先,mysql5.7.22版本的免安装版本的,需要自己配置信息,而且容易出现问题,这里还是建议下载安装版本.msi,按照安装教程进行安装:安装成功后会在数据存储的data文件下找到参数配置文件my. ...
- mysql5.7.22的安装与配置(适用mysql5.7.20至mysql5.7.22版本)
一.解压Mysql5.7.20安装包,刚解压是没有 data 这个文件夹的 二.配置mysql环境变量,创建MYSQL_HOME,然后在Path上添加%MYSQL_HOME%\bin; 三.配置m ...
- centos6.8 Mysql5.6.22 升级 mysql-5.7.20
一.检查系统环境 二.备份数据库 mysqldump –all-databases > allbackupfile.sql (建议:有条件的话可使用图形化界面备份,操作灵活) 三.下载安装文件 ...
- MySQL升级-5.6升级到5.7版本&切换GTID模式
目前未在生产环境中升级过数据库版本,倒是在测试环境跟开发环境升级过. 可以通过mysqldump sql文件进行升级,也可以通过mysql_upgrade升级,前者耗时较长,且 ...
- [转]MySQL5.6.22 安装
原文路径 http://jifeng3321.iteye.com/blog/2181517?utm_source=tuicool 由于一直做银行项目,所以一直在用oracle和db2,但最近自己想 ...
- centos7搭建mysql-5.7.22主从复制
mysql7.7.22主从复制 本项目是根据真实环境搭建编写出文档,文档中的目录也是根据自己公司环境所创建.公司原来是一台服务器搭建的数据库(5.7.22),由于业务的扩展需要搭建一台从服务器,减轻主 ...
- 升级 mysql5.6 配置文件my.cnf sql_mode 解析与设置问题
sql_mode是个很容易被忽视的变量,默认值是空值,在这种设置下是可以允许一些非法操作的,比如允许一些非法数据的插入.在生产环境必须将这个值设置为严格模式,所以开发.测试环境的数据库也必须要设置,这 ...
- CentOS7.5安装Mysql5.7.22
一 下载 下载地址:https://www.mysql.com/downloads/ 1 点击第一个链接地址,进入MySQL官方网站,单击“Downloads”下载Tab页,进入下载界面 2 找到Co ...
随机推荐
- WebBug靶场基础篇 — 03
基础篇 6 - 16 关... 在记录之前,先说一件事 = =! 小学生真多 = =!好心提供一个靶场,玩玩就算了,他挂黑页 ?现在好了,以后这个靶场不对外啊!你高兴了?爽了吧? 都是新手过来的,好心 ...
- 百度API实例——google地图数据转化为百度地图数据
前段时间做的项目前端都是用Google地图,最近在一个地方需要用到百度地图,因为不同地图都有自己的处理,同一个经纬度在不同地图上显示的位置并不相同,因此,要把以前的数据直接拿过来用需要做一个转换.查阅 ...
- 3.5 compose redux sages
基于 redux-thunk 的实现特性,可以做到基于 promise 和递归的组合编排,而 redux-saga 提供了更容易的更高级的组合编排方式(当然这一切要归功于 Generator 特性), ...
- HDU 6651 Final Exam (思维)
2019 杭电多校 7 1006 题目链接:HDU 6651 比赛链接:2019 Multi-University Training Contest 7 Problem Description Fin ...
- B. Light bulbs(2019 ICPC上海站)
There are NN light bulbs indexed from 00 to N-1N−1. Initially, all of them are off. A FLIP operation ...
- 利用dynamic解决匿名对象不能赋值的问题
原文:利用dynamic解决匿名对象不能赋值的问题 关于匿名对象 匿名对象是.Net Framework 3.0提供的新类型,例如: }; 就是一个匿名类,搭配Linq,可以很灵活的在代码中组合数据, ...
- 我要多开梦幻手游PC端(梦幻手游PC端多开的简单分析及实现办法)(二)
上一篇,多开方法,适用于一年前的版本 http://www.cnblogs.com/suanguade/p/5646776.html 前言: 一转眼一年过去了,日子越来越无聊了,于是,准备再玩一玩梦幻 ...
- 《代码大全2》读书笔记 Week4
<代码大全2>第8章:防御式编程 防御式编程的主要思想是子程序应该不因为非法的输入值被破坏,就好比开车时的防御式驾驶:你无法预估其他司机将会做什么,但你要采取措施保证当他人做出危险动作时自 ...
- session复制
环境描述:(三台服务器 系统:7.6)192.168.200.111 nginx192.168.200.112 tomcat192.168.200.113 tomcat环境配置:192.168.200 ...
- QT开发资料
QT开发入门资料 https://tmr.js.org/p/cc37608/ QT学习之路: https://www.devbean.net/