1. 程式人生 > 資料庫 >mysql5.6與5.7版本的區別

mysql5.6與5.7版本的區別

一、編譯安裝區別

  • Mysql5.7版本更新後有很多變化,比如json等,連安裝都有變化,他安裝必須要BOOST庫。mysql的官網原始碼有帶boost庫的原始碼和不帶boost庫的原始碼兩種,不帶boost庫原始碼的需要單獨安裝boost。
  • mysql5.7 支援多主一從 ,做高可用方式不同

下載軟體

wget http://downloads.sourceforge.net/project/boost/boost/1.59.0/boost_1_59_0.tar.gz
wget http://cdn.mysql.com//Downloads/MySQL-5.7/mysql-boost-5.7.20.tar.gz
wget http://cdn.mysql.com//Downloads/MySQL-5.7/mysql-5.7.20.tar.gz

 

帶boost的mysql原始碼安裝

1.安裝依賴包

yum -y install make gcc-c++ cmake bison-devel  ncurses-devel   bison perl perl-devel  perl perl-devel

 

2.編譯安裝

cd /usr/local/mysql-5.7.20/
cmake -DDEFAULT_CHARSET=utf8 -DDEFAULT_COLLATION=utf8_general_ci -DWITH_BOOST=boost
make
make install

 

不帶boost的mysql原始碼安裝

1.安裝依賴包

yum -y install gcc gcc-c++ ncurses ncurses-devel cmake

 

2.編譯安裝

cmake . -DCMAKE_INSTALL_PREFIX=/application/mysql-5.7.20 \
-DMYSQL_DATADIR=/application/mysql-5.7.20/data \
-DMYSQL_UNIX_ADDR=/application/mysql-5.7.20/tmp/mysql.sock \
#開啟BOOST庫
-DDOWNLOAD_BOOST=1 \
#指定boost庫位置
-DWITH_BOOST=/usr/local/boost_1_59_0 \
-DDEFAULT_CHARSET=utf8 \
-DDEFAULT_COLLATION=utf8_general_ci \
-DWITH_EXTRA_CHARSETS=all \
-DWITH_INNOBASE_STORAGE_ENGINE=1 \
-DWITH_FEDERATED_STORAGE_ENGINE=1 \
-DWITH_BLACKHOLE_STORAGE_ENGINE=1 \
-DWITHOUT_EXAMPLE_STORAGE_ENGINE=1 \
-DWITH_ZLIB=bundled \
-DWITH_SSL=bundled \
-DENABLED_LOCAL_INFILE=1 \
-DWITH_EMBEDDED_SERVER=1 \
-DENABLE_DOWNLOADS=1 \
-DWITH_DEBUG=0 

make
make install

 

二、初識化時的區別

#【5.6版本初識化】
cd /usr/local/mysql/scripts/
./mysql_install_db --user=mysql --basedir=/usr/local/mysql --datadir=/usr/local/mysql/data

#【5.7版本初識化】這種初始化方式,預設密碼在一個檔案中
/usr/local/mysql/bin/mysqld --initialize --user=mysql --basedir=/usr/local/mysql --datadir=/usr/local/mysql/data

–initialize 生成一個隨機密碼寫到一個檔案
–initialize-insecure 不生成隨機密碼

三、功能和特性的區別

安全性

  • 使用者表 mysql.user 的 plugin欄位不允許為空, 預設值是mysql_native_password,而不是 mysql_old_password,不再支援舊密碼格式;
  • 增加密碼過期機制,過期後需要修改密碼,否則可能會被禁用,或者進入沙箱模式;
  • 增加密碼過期機制,過期後需要修改密碼,否則可能會被禁用,或者進入沙箱模式;
  • 提供了更為簡單SSL安全訪問配置,並且預設連線就採用SSL的加密方式。

靈活性

  • MySQL資料庫從5.7.8版本開始,也提供了對JSON的支援。
  • 可以混合儲存結構化資料和非結構化資料,同時擁有關係型資料庫和非關係型資料庫的優點
  • 能夠提供完整的事務支援
  • generated column是MySQL 5.7引入的新特性,所謂generated column,就是資料庫中這一列由其他列計算而得

易用性

  • 在MySQL 5.7 之前,如果使用者輸入了錯誤的SQL語句,按下 ctrl+c ,雖然能夠”結束”SQL語句的執行,但是,也會退出當前會話,MySQL 5.7對這一違反直覺的地方進行了改進,不再退出會話。
  • MySQL 5.7可以explain一個正在執行的SQL,這對於DBA分析執行時間較長的語句將會非常有用。
  • sys schema是MySQL 5.7.7中引入的一個系統庫,包含了一系列檢視、函式和儲存過程, 該專案專注於MySQL的易用性。

可用性

  • 線上設定 複製的過濾規則 不再需要重啟MySQL,只需要停止SQLthread,修改完成以後,啟動SQLthread。
  • 線上修改buffer pool的大小。
  • Online DDL MySQL 5.7支援重新命名索引和修改varchar的大小,這兩項操作在之前的版本中,都需要重建索引或表。
  • 線上開啟GTID ,在之前的版本中,由於不支援線上開啟GTID,使用者如果希望將低版本的資料庫升級到支援GTID的資料庫版本,需要先關閉資料庫,再以GTID模式啟動,所以導致升級起來特別麻煩。

效能

  • 臨時表的效能改進。
    臨時表只在當前會話中可見
    臨時表的生命週期是當前連線(MySQL宕機或重啟,則當前連線結束)
  • 只讀事務效能改進。
    MySQL 5.7通過 避免為只讀事務分配事務ID ,不為只讀事務分配回滾段,減少鎖競爭等多種方式,優化了只讀事務的開銷,提高了資料庫的整體效能。
    -加速連線處理
    在MySQL 5.7之前,變數的初始化操作(THD、VIO)都是在連線接收執行緒裡面完成的,現在將這些工作下發給工作執行緒,以減少連線接收執行緒的工作量,提高連線的處理速度。這個優化對那些頻繁建立短連線的應用,將會非常有用。
  • 複製效能的改進 (支援多執行緒複製(Multi-Threaded Slaves, 簡稱MTS)
    MySQL的預設配置是庫級別的並行複製,為了充分發揮MySQL 5.7的並行複製的功能,我們需要將slave-parallel-type配置成LOGICAL_CLOCK。
  • 支援多源複製(Multi-source replication)

嚴格性改變

  • 預設啟用 STRICT_TRANS_TABLES 模式。
  • 對 ONLY_FULL_GROUP_BY 模式實現了更復雜的特性支援,並且也被預設啟用。
  • 其他被預設啟用的sql mode還有 NO_ENGINE_SUBSTITUTION。

預設引數的改變

  • 預設binlog格式調整為ROW格式
  • 預設binlog錯誤後的操作調整為ABORT_SERVER
    在先前的選項下(binlog_error_action=IGNORE_ERROR),如果一個錯誤發生,導致無法寫入binlog,mysql-server會在錯誤日誌中記錄錯誤並強制關閉binlog功能。這會使mysql-server在不記錄binlog的模式下繼續執行,導致從庫無法繼續獲取到主庫的binlog。
  • 預設開啟mysql崩潰時的binlog安全。
  • 預設調低slave_net_timeout。

安裝不同

    • mysql_install_db已經不再推薦使用了,建議改成mysqld --initialize 完成例項初始化。如果 datadir 指向的目標目錄下已經有資料檔案,則會有[ERROR] Aborting;
    • 在初始化時如果加上 --initial-insecure,則會建立空密碼的 root@localhost 賬號,否則會建立帶密碼的 root@localhost 賬號,密碼直接寫在 log-error 日誌檔案中;新使用者登入後需要立刻修改密碼,否則無法繼續後續的工作。