通過一番努力下載mysql文件,咱們能夠開始Mysql8.0的安裝了。php
// 解壓文件生成兩個xz格式的壓縮文件 $ tar -xvf mysql-8.0.13-linux-glibc2.12-x86_64.tar mysql-router-8.0.13-linux-glibc2.12-x86_64.tar.xz mysql-test-8.0.13-linux-glibc2.12-x86_64.tar.xz // 咱們須要先刪掉/移除原有文件,才能夠繼續解壓,由於解壓出來的.tar文件和.tar.xz文件重名 mv mysql-8.0.13-linux-glibc2.12-x86_64.tar ../ xz -d mysql-router-8.0.13-linux-glibc2.12-x86_64.tar.xz tar -xvf mysql-8.0.13-linux-glibc2.12-x86_64.tar // 爲了方便查找,改個名字 mv mysql-8.0.13-linux-glibc2.12-x86_64.tar mysql8
咱們須要專門的mysql進程啓動用戶和權限管理:html
// 建立mysql系統用戶和用戶組 useradd -r mysql // 給予安裝目錄mysql權限 chown mysql:mysql -R mysql8
配置本身的mysql配置文件,由於我有多個Mysql庫,我手動指定不少參數:mysql
[client] socket=/home/work/lnmp/mysql8/tmp/mysql.sock default-character-set=utf8 [mysql] basedir=/home/work/lnmp/mysql8/ datadir=/home/work/lnmp/mysql8/data/ socket=/home/work/lnmp/mysql8/tmp/mysql.sock port=3306 user=mysql # 指定日誌時間爲系統時間 log_timestamps=SYSTEM log-error=/home/work/lnmp/mysql8/log/mysql.err # 指定字符集爲utf8,由於mysql8.0中的默認字符集爲utfmb4,會和其餘程序引發兼容性問題 default-character-set=utf8 [mysqld] basedir=/home/work/lnmp/mysql8/ datadir=/home/work/lnmp/mysql8/data/ socket=/home/work/lnmp/mysql8/tmp/mysql.sock port=3306 user=mysql log_timestamps=SYSTEM collation-server = utf8_unicode_ci character-set-server = utf8 # 指定默認認證的加密方式,mysql8.0中默認方式爲caching_sha2_password,引發老版本兼容性問題 default_authentication_plugin= mysql_native_password [mysqld_safe] log-error=/home/work/lnmp/mysql8/log/mysqld_safe.err pid-file=/home/work/lnmp/mysql8/tmp/mysqld.pid socket=/home/work/lnmp/mysql8/tmp/mysql.sock [mysql.server] basedir=/home/work/lnmp/mysql8 socket=/home/work/lnmp/mysql8/tmp/mysql.sock [mysqladmin] socket=/home/work/lnmp/mysql8/tmp/mysql.sock
這個裏面我指定了錯誤日誌的路徑,在接下來的操做中,若是出現錯誤,除了查看終端顯示的錯誤,還要記得去錯誤日誌裏查看詳細的信息。linux
由於我指定了一些文件,因此須要提早建立:sql
mkdir log touch log/mysql.err touch log/mysqld_safe.err mkdir tmp chown mysql:mysql -R ../*
若是咱們不初始化,直接使用bin/mysqld_safe啓動會報錯,由於咱們須要初始化mysql環境,此時參考文章:數據庫
$ bin/mysqld --initialize --user=mysql --basedir=/home/work/lnmp/mysql8/ --datadir=/home/work/lnmp/mysql8/data/ 2018-12-13T06:15:03.159123Z 0 [System] [MY-013169] [Server] /home/work/lnmp/mysql8/bin/mysqld (mysqld 8.0.13) initializing of server in progress as process 1190 2018-12-13T06:15:05.255817Z 5 [Note] [MY-010454] [Server] A temporary password is generated for root@localhost: !/7oy-u%(XfZ 2018-12-13T06:15:06.135143Z 0 [System] [MY-013170] [Server] /home/work/lnmp/mysql8/bin/mysqld (mysqld 8.0.13) initializing of server has completed
提示中提示咱們已經建立了root的用戶和一個臨時密碼,同時初始化成功。segmentfault
這時根據官方文檔咱們使用mysqld_safe 命令來啓動:curl
$ bin/mysqld_safe 2018-12-13T06:16:58.604154Z mysqld_safe Logging to '/home/work/lnmp/mysql8/log/mysql.err'. 2018-12-13T06:16:58.629249Z mysqld_safe Starting mysqld daemon with databases from /home/work/lnmp/mysql8/data
數據庫進程已經啓動,咱們能夠在新終端正常使用mysql數據庫了:socket
$ ps aux | grep mysql root 2141 0.0 0.0 815844 5328 pts/0 S+ 14:16 0:00 /bin/sh bin/mysqld_safe mysql 2319 1.0 0.5 1997492 374448 pts/0 Sl+ 14:16 0:00 /home/work/lnmp/mysql8/bin/mysqld --basedir=/home/work/lnmp/mysql8/ --datadir=/home/work/lnmp/mysql8/data --plugin-dir=/home/work/lnmp/mysql8//lib/plugin --user=mysql --log-error=/home/work/lnmp/mysql8/log/mysql.err --pid-file=/home/work/lnmp/mysql8/tmp/mysqld.pid --socket=/home/work/lnmp/mysql8/tmp/mysql.sock --port=3306 work 25258 0.0 0.0 105356 824 pts/1 S+ 14:18 0:00 grep mysql
可是直接使用mysql命令報錯:ide
$ bin/mysql -uroot ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/tmp/mysql.sock' (2)
根據mysql.sock的做用的說明,咱們指定mysql.sock路徑便可:
bin/mysql -S /home/work/lnmp/mysql8/tmp/mysql.sock -h localhost -uroot -p Enter password:
咱們打開數據庫後使用任何命令會提示咱們修改初始的臨時密碼:
mysql> show databases; ERROR 1820 (HY000): You must reset your password using ALTER USER statement before executing this statement.
修改密碼:
mysql> ALTER USER 'root'@'localhost' IDENTIFIED BY '123456'; Query OK, 0 rows affected (0.05 sec)
從新鏈接,新密碼生效。
此時,咱們調用mysql只能用路徑/home/work/lnmp/mysql8/bin/mysql或相對路徑,須要連接爲全局命令:
$ ln -s /home/work/lnmp/mysql8/bin/mysql /usr/bin/ $ ln -s /home/work/lnmp/mysql8/bin/mysql_safe /usr/bin/
在8.0這個版本,我嘗試了不少方法試圖在my.cnf中修改mysql命令查詢的默認socket路徑,依然不成功,因此只好在默認路徑裏面連接socket文件了:
ln -s /home/work/lnmp/mysql8/tmp/mysql.sock /tmp/
而後咱們再調用mysql命令就不會報錯了。
在過程當中咱們調試參數可能須要重啓數據庫:
// 殺死進程,至關於中止 cat tmp/mysqld.pid | xargs kill // 正常啓動mysql bin/mysqld_safe --defaults-file=/home/work/lnmp/mysql8/my.cnf
在mysql8裏,我建立用戶並賦值,結果報錯:
mysql > grant all privileges on *.* to root@localhost indentified by '123456'; ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'indentified by '123456'' at line 1
根據網上資料,是因爲Mysql8將建立帳戶和賦予權限的操做分開了:
// 建立帳戶 create user '用戶名'@'訪問主機' identified by '密碼'; // 賦予權限(修改權限時在後面加with grant option) grant 權限列表 on 數據庫 to '用戶名'@'訪問主機' ; // 刷新權限 flush privileges;
當我安裝好後鏈接我其餘的數據庫時:
$ mysql -h 10.92.143.15 -uroot -p Enter password: ERROR 1043 (08S01): Bad handshake
這個錯誤是因爲遠程數據庫版本太低(版本:5.1.30
)的問題,在mysql8.0的文檔上,有標明支持的數據庫版本須要>=5.5
才行,所以他們建議升級其他的數據庫爲5.6
版本。
通過解壓文件,建立mysql用戶和用戶組,配置my.cnf配置文件,修改權限,數據庫初始化、啓動,打開數據庫,修改初始密碼,連接全局命令和指定socket文件路徑,全部的安裝工做都已經完成了。