升級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 新特性詳解


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM