新版本mysql二進制安裝遇到不少坑(慢慢磨合吧)
系統環境:centos7.6
這里我安裝的是mysql-8.0.21-linux-glibc2.17-x86_64-minimal.tar.xz (官網有各種大小的包,這里我下載的是二進制的包,便於修改配置)
官網下載:https://dev.mysql.com/downloads/mysql/

下載好后,開始安裝:
1,第一步 先卸載可能會影響安裝的包
[root@localhost ~]# rpm -q mysql mysql-server mariadb mariadb-server
未安裝軟件包 mysql
未安裝軟件包 mysql-server
未安裝軟件包 mariadb
未安裝軟件包 mariadb-server
如果出現沒有卸載的包,需全部卸載
2,第二步上傳mysql8.0.21這個包,開始安裝
#tar xf mysql-8.0.21-linux-glibc2.17-x86_64-minimal.tar.xz -C /usr/local/ //這里解壓到/usr/local下
#cd /usr/local
#mv mysql-8.0.21-linux-glibc2.17-x86_64-minimal/ mysql //改個名
#useradd -M -s /sbin/nologin mysql //創建個用戶
#chown -R mysql:mysql /usr/local/mysql/ //給個權限
#/usr/local/mysql/bin/mysqld --user=mysql --basedir=/usr/local/mysql --datadir=/usr/local/mysql/data --initialize //初始化一下數據庫(初始前先做配置文件,如下步驟)
3,第二步,修改my.conf配置文件
==================================================================
-----這里先對配置文件進行一個說明(適用於實際生成環境下)--------
# 監聽端口
port=3306
# 安裝目錄
basedir=/usr/local/mysql
# 數據目錄
datadir=/usr/local/mysql/data
# 最大連接數
max_connections = 100
# 默認數據庫引擎
default-storage-engine = InnoDB
# 字符集
character-set-server=utf8
log-error = /usr/local/mysql/log/error.log
slow_query_log = 1
# 慢查詢日志時間閾值 默認是10S
long-query-time = 30
# 慢查詢日志存放路徑
slow_query_log_file = /usr/local/mysql/log/show.log
# 記錄那些由於查找了多余1000次而引發的慢查詢
min_examined_row_limit = 1000
# 記錄由Slave所產生的慢查詢
log-slow-slave-statements
# 如果運行的SQL語句沒有使用索引,則將這條SQL語句記錄到慢查詢日志文件中
log-queries-not-using-indexes
--------------------------配置文件是以上內容,保存退出后,開始初始化---------------------------------
# mkdir data
# mkdir log
# touch log/error.log
# chown -R mysql. *
# ./bin/mysqld --initialize --user=mysql --basedir=/usr/local/mysql --datadir=/usr/local/mysql/data
這里生成的密碼等下會用到
# cp ./support-files/mysql.server /etc/rc.d/init.d/mysqld
# chmod +x /etc/rc.d/init.d/mysqld
# chkconfig --add mysqld
# service mysqld start
# ss -naltp
# echo "PATH=$PATH:/usr/local/mysql/bin" >> /etc/profile
# source /etc/profile
# mysql_secure_installation
# mysql -uroot -p
==================================================================================
這里我沒有用到以上配置修改,只針對此次演示做了簡單配置,如下:
datadir=/usr/local/mysql/data
socket=/tmp/mysql.sock
symbolic-links=0
log-error=/usr/local/mysql/data/mysql.log
pid-file=/usr/local/mysql/data/mysql.pid
#
!includedir /etc/my.cnf.d
(我是為了測試,這里我沒再往下修改密碼了,我選擇放空密碼,但Mysqladmin不能直接放空密碼,沒辦法,新版本嚴謹性還是很強的!)
[root@localhost ~]# ps aux | grep mysqld
#mysqld_safe --skip-grant-tables &
#mysql / / 進入mysql
修改密碼
mysql> show databases; //查詢庫
mysql> use mysql //進入庫
mysql> show tables; //查詢表
mysql> desc user;
mysql> select user,authentication_string from user; //查看用戶詳細表信息
mysql> update user set authentication_string=PASSWORD('123456') where user='root'; //修改密碼
mysql> flush privileges; //生效
mysql> exit
這里又遇到一個尷尬的問題(也是我發現新版本的變態地方)
當我按以上步驟走,到修改密碼這一步,出現報錯,提示說一個一個輸入??????

(這里我以為我語法有問題,另開了一台以前mysql版本5.6試了一下沒問題!!!!!我靠??)
之后找了官方文檔,才明白怎么回事,mysql8.0新版本sql語句有一點點的變化,簡單說就是兩種操作不能同時一起執行,需分開一個一個執行???(具體可以上官網查看官方文檔)
我只能改進命令(將root登陸密碼改為空)如圖:
#update user set authentication_string = '' where user = 'root';

退出mysql后,再用空密碼進一次mysql
然后執行以下操作:
# ALTER USER USER() IDENTIFIED BY 'new password'; ##這里就可以添加你需要的密碼......了

此時再就沒有報修改密碼錯誤了!!
