MySQL 8.0 正式版 8.0.11 已發佈,官方表示 MySQL 8 要比 MySQL 5.7 快 2 倍,還帶來了大量的改進和更快的性能!html
從 MySQL 5.7 升級到 MySQL 8.0 僅支持經過使用 in-place 方式進行升級,而且不支持從 MySQL 8.0 降級到 MySQL 5.7(或從某個 MySQL 8.0 版本降級到任意一個更早的 MySQL 8.0 版本)。惟一受支持的替代方案是在升級以前對數據進行備份。mysql
性能:linux
MySQL 8.0 的速度要比 MySQL 5.7 快 2 倍。MySQL 8.0 在如下方面帶來了更好的性能:讀/寫工做負載、IO 密集型工做負載、以及高競爭("hot spot"熱點競爭問題)工做負載。sql
NoSQL數據庫
MySQL 從 5.7 版本開始提供 NoSQL 存儲功能,目前在 8.0 版本中這部分功能也獲得了更大的改進。該項功能消除了對獨立的 NoSQL 文檔數據庫的需求,而 MySQL 文檔存儲也爲 schema-less 模式的 JSON 文檔提供了多文檔事務支持和完整的 ACID 合規性。數組
窗口函數(Window Functions)安全
從 MySQL 8.0 開始,新增了一個叫窗口函數的概念,它能夠用來實現若干新的查詢方式。窗口函數與 SUM()、COUNT() 這種集合函數相似,但它不會將多行查詢結果合併爲一行,而是將結果放回多行當中。即窗口函數不須要 GROUP BYbash
隱藏索引app
在 MySQL 8.0 中,索引能夠被「隱藏」和「顯示」。當對索引進行隱藏時,它不會被查詢優化器所使用。咱們可使用這個特性用於性能調試,例如咱們先隱藏一個索引,而後觀察其對數據庫的影響。若是數據庫性能有所降低,說明這個索引是有用的,而後將其「恢復顯示」便可;若是數據庫性能看不出變化,說明這個索引是多餘的,能夠考慮刪掉。less
降序索引
MySQL 8.0 爲索引提供按降序方式進行排序的支持,在這種索引中的值也會按降序的方式進行排序。
通用表表達式(Common Table Expressions CTE)
在複雜的查詢中使用嵌入式表時,使用 CTE 使得查詢語句更清晰。
UTF-8 編碼
從 MySQL 8 開始,使用 utf8mb4 做爲 MySQL 的默認字符集。
JSON
MySQL 8 大幅改進了對 JSON 的支持,添加了基於路徑查詢參數從 JSON 字段中抽取數據的 JSON_EXTRACT() 函數,以及用於將數據分別組合到 JSON 數組和對象中的 JSON_ARRAYAGG() 和 JSON_OBJECTAGG() 聚合函數。
可靠性
InnoDB 如今支持表 DDL 的原子性,也就是 InnoDB 表上的 DDL 也能夠實現事務完整性,要麼失敗回滾,要麼成功提交,不至於出現 DDL 時部分紅功的問題,此外還支持 crash-safe 特性,元數據存儲在單個事務數據字典中。
高可用性(High Availability)
InnoDB 集羣爲您的數據庫提供集成的原生 HA 解決方案。
對 OpenSSL 的改進、新的默認身份驗證、SQL 角色、密碼強度、受權。
https://dev.mysql.com/get/Downloads/MySQL-8.0/mysql-8.0.11-linux-glibc2.12-x86_64.tar
[root@sea_bj_master ~]# cat /etc/redhat-release CentOS Linux release 7.3.1611 (Core) [root@sea_bj_master ~]# uname -r 3.10.0-514.21.1.el7.x86_64
[root@sea_bj_master ~]# cd /usr/local/src/ [root@sea_bj_master src]# wget https://dev.mysql.com/get/Downloads/MySQL-8.0/mysql-8.0.11-linux-glibc2.12-x86_64.tar --2018-06-05 00:19:12-- https://dev.mysql.com/get/Downloads/MySQL-8.0/mysql-8.0.11-linux-glibc2.12-x86_64.tar
[root@sea_bj_master src]# useradd -r -s /sbin/nologin -c 'mysql application run user' mysql
[root@sea_bj_master src]# tar xf mysql-8.0.11-linux-glibc2.12-x86_64.tar [root@sea_bj_master src]# ll mysql-*8.0.11-linux-glibc2.12-x86_64.tar* -rw-r--r-- 1 root root 654131200 Apr 8 14:30 mysql-8.0.11-linux-glibc2.12-x86_64.tar -rw-r--r-- 1 7161 31415 603019898 Apr 8 16:29 mysql-8.0.11-linux-glibc2.12-x86_64.tar.gz -rw-r--r-- 1 7161 31415 51099557 Apr 8 16:27 mysql-test-8.0.11-linux-glibc2.12-x86_64.tar.gz [root@sea_bj_master src]# tar xf mysql-8.0.11-linux-glibc2.12-x86_64.tar.gz [root@sea_bj_master src]# mv mysql-8.0.11-linux-glibc2.12-x86_64 /usr/local/ -v ‘mysql-8.0.11-linux-glibc2.12-x86_64’ -> ‘/usr/local/mysql-8.0.11-linux-glibc2.12-x86_64’
[root@sea_bj_master src]# ln -s /usr/local/mysql-8.0.11-linux-glibc2.12-x86_64 /usr/local/mysql -v ‘/usr/local/mysql’ -> ‘/usr/local/mysql-8.0.11-linux-glibc2.12-x86_64’
[root@sea_bj_master src]# mkdir -v /usr/local/mysql/mysql-files mkdir: created directory ‘/usr/local/mysql/mysql-files’
[root@sea_bj_master src]# mkdir /application/mysql/data -v mkdir: created directory ‘/application/mysql/data’
[root@sea_bj_master src]# chown root.mysql -R /usr/local/mysql-8.0.11-linux-glibc2.12-x86_64
[root@sea_bj_master src]# chown mysql.mysql -R /application/mysql/data /usr/local/mysql/mysql-files -v ownership of ‘/application/mysql/data’ retained as mysql:mysql ownership of ‘/usr/local/mysql/mysql-files’ retained as mysql:mysql
[root@sea_bj_master src]# mv /etc/my.cnf{,.old} -v mv: overwrite ‘/etc/my.cnf.old’? y ‘/etc/my.cnf’ -> ‘/etc/my.cnf.old’
[root@sea_bj_master src]# /usr/local/mysql/bin/mysqld --initialize --user=mysql --datadir=/application/mysql/data --basedir=/usr/local/mysql 2018-06-04T16:32:33.389541Z 0 [System] [MY-013169] [Server] /usr/local/mysql/bin/mysqld (mysqld 8.0.11) initializing of server in progress as process 681 2018-06-04T16:32:39.406682Z 5 [Note] [MY-010454] [Server] A temporary password is generated for root@localhost: mD4Tbl#0d8:W 2018-06-04T16:32:42.307915Z 0 [System] [MY-013170] [Server] /usr/local/mysql/bin/mysqld (mysqld 8.0.11) initializing of server has completed
[root@sea_bj_master src]# /usr/local/mysql/bin/mysql_ssl_rsa_setup --user=mysql --datadir=/application/mysql/data --basedir=/usr/local/mysql
[root@sea_bj_master src]# cat /usr/lib/systemd/system/mysqld.service # # Simple MySQL systemd service file # # systemd supports lots of fancy features, look here (and linked docs) for a full list: # http://www.freedesktop.org/software/systemd/man/systemd.exec.html # # Note: this file ( /usr/lib/systemd/system/mysql.service ) # will be overwritten on package upgrade, please copy the file to # # /etc/systemd/system/mysql.service # # to make needed changes. # # systemd-delta can be used to check differences between the two mysql.service files. # [Unit] Description=MySQL Community Server After=network.target After=syslog.target [Install] WantedBy=multi-user.target Alias=mysql.service [Service] User=mysql Group=mysql # Execute pre and post scripts as root PermissionsStartOnly=true # Needed to create system tables etc. #ExecStartPre=/usr/bin/mysql-systemd-start pre # Start main service ExecStart=/usr/local/mysql/bin/mysqld_safe # Don't signal startup success before a ping works #ExecStartPost=/usr/bin/mysql-systemd-start post # Give up if ping don't get an answer TimeoutSec=600 Restart=always PrivateTmp=false
[root@sea_bj_master src]# systemctl daemon-reload
[root@sea_bj_master src]# cat /etc/my.cnf [mysqld] user = mysql bind_address = 0.0.0.0 character_set_server=utf8mb4 skip_name_resolve = 1 max_connections = 800 max_connect_errors = 1000 datadir = /application/mysql/data
[root@sea_bj_master src]# systemctl start mysqld [root@sea_bj_master src]# systemctl status mysqld ● mysqld.service - MySQL Community Server Loaded: loaded (/usr/lib/systemd/system/mysqld.service; disabled; vendor preset: disabled) Active: active (running) since Tue 2018-06-05 00:42:23 CST; 5s ago Main PID: 2273 (mysqld_safe) CGroup: /system.slice/mysqld.service ├─2273 /bin/sh /usr/local/mysql/bin/mysqld_safe └─2424 /usr/local/mysql/bin/mysqld --basedir=/usr/local/mysql --datadir=/application/mysql/data --plugin... Jun 05 00:42:23 sea_bj_master systemd[1]: Started MySQL Community Server. Jun 05 00:42:23 sea_bj_master systemd[1]: Starting MySQL Community Server... Jun 05 00:42:23 sea_bj_master mysqld_safe[2273]: 2018-06-04T16:42:23.125697Z mysqld_safe Logging to '/applicati...rr'. Jun 05 00:42:23 sea_bj_master mysqld_safe[2273]: 2018-06-04T16:42:23.144258Z mysqld_safe Starting mysqld daemon...data Hint: Some lines were ellipsized, use -l to show in full.
[root@sea_bj_master src]# mysql -p'mD4Tbl#0d8:W' mysql: [Warning] Using a password on the command line interface can be insecure. Welcome to the MySQL monitor. Commands end with ; or \g. Your MySQL connection id is 8 Server version: 8.0.11 Copyright (c) 2000, 2018, Oracle and/or its affiliates. All rights reserved. Oracle is a registered trademark of Oracle Corporation and/or its affiliates. Other names may be trademarks of their respective owners. Type 'help;' or '\h' for help. Type '\c' to clear the current input statement. mysql> set password = '123'; Query OK, 0 rows affected (0.04 sec) mysql> \s -------------- mysql Ver 8.0.11 for linux-glibc2.12 on x86_64 (MySQL Community Server - GPL) Connection id: 8 Current database: Current user: root@localhost SSL: Not in use Current pager: stdout Using outfile: '' Using delimiter: ; Server version: 8.0.11 Protocol version: 10 Connection: Localhost via UNIX socket Server characterset: utf8mb4 Db characterset: utf8mb4 Client characterset: utf8mb4 Conn. characterset: utf8mb4 UNIX socket: /tmp/mysql.sock Uptime: 1 min 0 sec Threads: 2 Questions: 7 Slow queries: 0 Opens: 238 Flush tables: 2 Open tables: 73 Queries per second avg: 0.116 --------------