MySQL從5.7升到8.0.16

歡迎關注微信公衆號:程序員小圈圈
原文首發於:www.zhangruibin.com
本文出自於:RebornChang的博客
轉載請標明出處^_^

那些年我把MySQL從5.7升到8.0.16

爲什麼要升級

筆者之前linux本地安裝的MySQL5.7,但是由於服務器內存較小等原因,時不時的數據庫就崩了,藍瘦,而且早就將redis等服務應用到了docker中,而且想試試MySQL8的新特性,所以想着切換成MySQL8,然後就直接docker安裝了,省的本地維護。

升級前的準備

準備MySQL8.0.16環境

docker安裝MySQL8.0.16

拉取鏡像

$ docker pull mysql:8.0.16

配置本地文件用於掛載到鏡像

將全部的配置文件和關聯的文件夾統一放到/opt/docker-mysql


$ mkdir -p /opt/docker-mysql/conf.d

$ vim /opt/docker-mysql/config-file.cnf

$ mkdir -p /opt/docker-mysql/var/lib/mysql

config-file.cnf內容如下:


[mysqld]
# 表名不區分大小寫
lower_case_table_names=1 
#server-id=1
datadir=/var/lib/mysql
#socket=/var/lib/mysql/mysqlx.sock
#symbolic-links=0
# sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES 
[mysqld_safe]
log-error=/var/log/mysqld.log
pid-file=/var/run/mysqld/mysqld.pid

啓動鏡像

docker run --name mysql \
    --restart=always \
    -p 3306:3306 \
    -v /opt/docker-mysql/conf.d:/etc/mysql/conf.d \
    -v /opt/docker-mysql/var/lib/mysql:/var/lib/mysql \
    -e MYSQL_ROOT_PASSWORD=Aa123456! \
    -d mysql:8.0.16

設置可以遠程登錄

linux本地登錄上MySQL環境:

$ docker exec -it mysql bash

進入到bash環境下,登錄MySQL

msyql -uroot -pAa123456!
查看用戶登錄及密碼等信息
>select host,user,plugin,authentication_string from mysql.user;

列出來的數據類似如下:

host user plugin authentication_string
% root caching_sha2_password *066C39CBB06FD4D073E2EB842453110EE953F9B6
localhost mysql.infoschema caching_sha2_password $A005005THISISACOMBINATIONOFINVALIDSALTANDPASSWORDTHATMUSTNEVERBRBEUSED
localhost mysql.session caching_sha2_password $A005005THISISACOMBINATIONOFINVALIDSALTANDPASSWORDTHATMUSTNEVERBRBEUSED
localhost mysql.sys caching_sha2_password $A005005THISISACOMBINATIONOFINVALIDSALTANDPASSWORDTHATMUSTNEVERBRBEUSED
localhost root mysql_native_password *066C39CBB06FD4D073E2EB842453110EE953F9B6
修改密碼更改plugin形式

此時我們看第一條數據,此時的plugin項爲caching_sha2_password,如果我們想要使用Navicat,datagrip之類的軟件遠程鏈接數據庫的話需要修改第一條數據的密碼,修方式如下:

>ALTER user 'root'@'%' IDENTIFIED WITH mysql_native_password BY '123456';

修改之後,一定要刷新權限:

>FLUSH PRIVILEGES;

修改之後我們再使用select host,user,plugin,authentication_string from mysql.user;
進行查看的時候,發現第一條數據的 plugin方式變成了:mysql_native_password 。
此時再重新使用客戶端軟件進行連接就可以連接了。
注意:host爲%,則爲不限IP可遠程登錄,但是安裝過8.0.16直接登錄,會提示你 authentication_string授權錯誤,客戶端解析不了caching_sha2_password加密方式。

數據的備份與導入

數據庫備份

備份使用的是mysqldump插件。

非docker環境下備份

mysqldump -u $username -p$password $database_name > $backup_dir/$database_name.sql

docker環境下備份

docker exec mysql sh -c 'exec mysqldump $database_name -u $username -p$password' > $backup_dir/$database_name.sql

數據庫導入

非docker環境下導入

mysql -uroot -p"password" databasename < /app/sel/blog/mysqlbackup/tale_sel-selblog.sql

docker環境下導入

	docker exec -i mysql sh -c 'exec mysql -uroot -p"password"' < /app/sel/blog/mysqlbackup/tale_sel-selblog.sql

注意:如果是全量備份整個數據庫的話,將指定的database_name 換成–all-databases即可。

升級後關於項目的改動

MySQL依賴版本更換

mysql-connector-java版本更改爲8.0.16,截止到20191204,沒有8.0.16版本的,所以用8.0.X都行。

mysql
mysql-connector-java
8.0.13

驅動更換

8以下

Class.forName("com.mysql.jdbc.Driver"); //MYSQL驅動

8.0.16

Class.forName("com.mysql.cj.jdbc.Driver"); //MYSQL驅動

如果驅動沒有修改會報如下錯誤:

Loading class `com.mysql.jdbc.Driver'. This is deprecated. The new driver class is `com.mysql.cj.jdbc.Driver'. The driver is automatically registered via the SPI and manual loading of the driver class is generally unnecessary.

數據庫連接增加參數

useSSL

要在數據庫連接上明確指定是否啓用SSL加密,加密的話肯定是影響數據傳輸速度的,故筆者直接設置:
useSSL=false。
否則會報如下錯誤:

 Establishing SSL connection without server's identity verification is not recommended. According to MySQL 5.5.45+, 5.6.26+ and 5.7.6+ requirements SSL connection must be established by default if explicit option isn't set. For compliance with existing applications not using SSL the verifyServerCertificate property is set to 'false'. You need either to explicitly disable SSL by setting useSSL=false, or set useSSL=true and provide truststore for server certificate verification.

設置時區

serverTimezone=GMT%2B8

修改後的數據庫URL連接例如下所示:

jdbc:mysql:jdbc:mysql://localhost:3306/db_name?useUnicode=true&characterEncoding=utf-8&zeroDateTimeBehavior=convertToNull&useSSL=false&serverTimezone=GMT%2B8

,博主的微信公衆號
程序員小圈圈’開始持續更新了喲~~
識別二維碼或者直接搜索名字 ‘程序員小圈圈’ 即可關注本公衆號喲~~
不只是有技術喲~~
還有很多的學習娛樂資源免費下載哦~~
還可以學下教育知識以及消遣娛樂喲~~
求關注喲~~

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章