本文前提,一定要把原來的數據庫産品卸載干淨,否則可能會各種奇怪的錯誤彈出來。以下說正文:
阿裡雲7.x的公共鏡像系統初始化之後,已經爲用戶安裝了大量必須的依賴,例如gcc4.8.5,那麽只需要注意卸載yum中自帶的mariadb。
卸載之前的mariadb
卸載命令:
# 查找所有在系統内的mariadb rpm -qa | grep mariadb # 強制卸載mariadb 這裡打比方說安裝了mariadb-libs-5.5.56-2.el7.x86_64 # 那麽就用如下命令來對應卸載 rpm -e --nodeps mariadb-libs-5.5.56-2.el7.x86_64
mysql8.0.11安裝命令
注意之前不要安裝任何一鍵安裝包之類的産品,否則可能會出現無法獲取初始root密碼的錯誤。
# 下載mysql源 wget https://repo.mysql.com//mysql80-community-release-el7-1.noarch.rpm # 本地安裝mysql源 yum localinstall mysql80-community-release-el7-1.noarch.rpm # 檢查本地安裝mysql源是否成功 yum repolist enabled | grep "mysql.*-community.*" # 控制台回複以下說明证明ok # mysql-connectors-community/x86_64 MySQL Connectors Community 51 # mysql-tools-community/x86_64 MySQL Tools Community 63 # mysql80-community/x86_64 MySQL 8.0 Community Server 17 # 正式安裝mysql 8.0.11 yum install mysql-community-server
在執行yum install指令安裝mysql時,可能出現錯誤,屬於正常現象,可以略過,不斷循環重複上述yum install mysql-community-server
這個命令即可,直到安裝成功。
啓動和找回mysql初始root密碼
mysql 8.0.x這個版本不知道搞了什麽幺蛾子,非常難以找回密碼,首次安裝成功之後,先使用systemctl命令啓動mysql:
systemctl start mysqld # 查看mysql啓動狀態的命令是: # systemctl status mysqld # 注意,已經不是mysql 5.x時代的service mysqld start之類的命令了
目前通過以下命令來查看log下告知用戶的初始密碼:
grep 'temporary password' /var/log/mysqld.log # 控制台可能回複以下類似内容 # 2018-06-24T01:00:33.381829Z 5 [Note] [MY-010454] [Server] A temporary password is generated for root@localhost: ./GblDs7r1cu
這個時候看控制台回複,尾部就是密碼。輸入登錄命令進行登錄:
mysql -uroot -p # Enter Password:
這個時候需要你按照控制台給出的初始密碼來進mysql。
修改mysql初始root密碼
進入mysql之後輸入以下sql語句修改密碼
use mysql; ALTER USER 'root'@'localhost' IDENTIFIED BY '你的新密碼' PASSWORD EXPIRE NEVER;
另外,很多人發現用navicat沒辦法遠程登錄mysql 8.0.11的服務器,登錄時會報一個considering update client的建議叫你更新客戶耑,怎麽辦呢? 原來是mysql 8.0.x把原來mysql 5.x的加密槼則給改了,用以下方法修改加密槼則(注意:同時允許任何ip地址登錄)。
update user set host = '%' where user = 'root'; # 此命令使得用戶可以遠程任何地點使用root賬號登錄mysql # 修改mysql密碼算法,採用原生算法 ALTER USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY '新密碼';
順便提一嘴,給不太懂mysql的新手看的,如果沒有運行第一行命令update掉mysql root賬號的可允許登錄範圍,則下面的修改密碼算法的sql命令就是:
ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY '新密碼';
最後,嚕囌了這麽多,運行了這麽多命令,別忘了用以下命令讓mysql重新讀新的權限設定。根本不需要重啓mysql服務器。
FLUSH PRIVILEGES;
疑難問題
修改root密碼提示密碼複雜度不夠
真他娘的嚕囌, 老子愛起什麽密碼起什麽密碼,用的著你他娘的管?
設定全局變量validate_password.policy, 將它修改成0即可。這個變量的意思是安全級別,默認爲MEDIUM
set global validate_password.policy = 0;
其他變量可以通過下方語句來進行微調
mysql> show variables like 'validate_password%'; +--------------------------------------+--------+ | Variable_name | Value | +--------------------------------------+--------+ | validate_password.check_user_name | ON | | validate_password.dictionary_file | | | validate_password.length | 8 | | validate_password.mixed_case_count | 1 | | validate_password.number_count | 1 | | validate_password.policy | MEDIUM | | validate_password.special_char_count | 1 | +--------------------------------------+--------+ 7 rows in set (0.01 sec)
遷移完數據目錄發現無法啓動mysqld服務, 報錯: Error: 13 (Permission denied)
解決思路, 先以下命令查看mysql的錯誤日志
vim /var/log/mysqld.log
發現報錯關鍵内容是:
mysqld: File './binlog.index' not found (OS errno 13 - Permission denied)
網上千篇一律說chown -R mysql:mysql 你的新數據文档路徑就可以了, 如果千篇一律都可以, 那還要答案干啥?
如果按照網上衆口一詞的轉述方法重啓mysql仍然解決不了問題, 那麽你的問題可能是selinux引起的, 首先編輯selinux配置文档:
vim /etc/selinux/config
找到以下内容
# This file controls the state of SELinux on the system. # SELINUX= can take one of these three values: # enforcing - SELinux security policy is enforced. # permissive - SELinux prints warnings instead of enforcing. # disabled - No SELinux policy is loaded. SELINUX=enforcing
把等號後面改成另外兩者: permissive或者disabled
記得重啓一下服務器