MySQL-5.7.19 在阿里雲 CentOS-7.0 上的安裝

工具準備

查看系統是否安裝了yum工具:html

[root@wangbo srv]# rpm -qa | grep yum
yum-metadata-parser-1.1.4-10.el7.x86_64
yum-3.4.3-161.el7.centos.noarch
yum-plugin-fastestmirror-1.1.31-50.el7.noarch

表示已經安裝了,若是沒有安裝,能夠參考:https://jingyan.baidu.com/article/ce09321bbde1de2bff858f9a.htmlmysql

rpm和yum命令參考:http://www.javashuo.com/article/p-obqlsxup-cm.htmlsql

首先檢查下是否安裝了服務數據庫

[root@wangbo srv]# yum list installed | grep mysql

或者centos

[root@wangbo srv]# rpm -qa | grep mysql

沒有顯示就表示沒有安裝,若是安裝了能夠刪除,以下所示:安全

下載安裝源文件

安裝在 /srv/mysql/ 文件夾下。服務器

[root@wangbo srv]# mkdir mysql
[root@wangbo srv]# cd mysql
[root@wangbo mysql]# 

下載並安裝MySQL官方的 Yum Repository工具

[root@wangbo mysql]# wget -i -c http://dev.mysql.com/get/mysql57-community-release-el7-10.noarch.rpm

文件是紅色的,須要修改文件權限,修改完會看到文件變綠色了。ui

[root@wangbo mysql]# chmod 755 mysql57-community-release-el7-10.noarch.rpm

開始安裝mysql源文件this

[root@wangbo mysql]# yum install -y mysql57-community-release-el7-10.noarch.rpm

接下來會顯示安裝過程,最後顯示Complete! 的時候就表示安裝好了。

檢查mysql源是否安裝成功

[root@wangbo mysql]# yum repolist enabled | grep "mysql.*-community.*"

看到上圖所示表示安裝成功。 

安裝mysql數據庫

開始安裝數據庫服務

[root@wangbo mysql]# yum install -y mysql-community-server

接下來會顯示安裝過程。最後顯示Complete! 的時候就表示安裝好了。

啓動MySQL數據庫

[root@wangbo mysql]# systemctl start mysqld

查看數據庫狀態

[root@wangbo mysql]# systemctl status mysqld

數據庫設置

設置開機啓動

[root@wangbo mysql]# systemctl enable mysqld

通知systemd重載配置文件,若是是在啓動mysql服務以前設置的,則不須要這一步了。

[root@wangbo mysql]# systemctl daemon-reload

修改密碼策略

mysql共有如下幾種密碼策略:

策略 檢查規則
0 or LOW Length
1 or MEDIUM Length; numeric, lowercase/uppercase, and special characters
2 or STRONG Length; numeric, lowercase/uppercase, and special characters; dictionary file

在 /etc/my.cnf 文件添加validate_password_policy配置,指定密碼策略

[root@wangbo mysql]# vi /etc/my.cnf

按 i 進入編輯狀態

# 選擇0(LOW),1(MEDIUM),2(STRONG)其中一種,選擇2須要提供密碼字典文件
validate_password_policy=0

若是不須要密碼策略,添加 my.cnf 文件中添加以下配置禁用便可:

validate_password = off

咱們這裏選擇禁用密碼策略,按 ESC,而後 :wq! 保存退出。

從新啓動mysql服務使配置生效:

[root@wangbo mysql]# systemctl restart mysqld

修改root用戶默認密碼

mysql安裝完成以後,在/var/log/mysqld.log文件中給root生成了一個默認密碼。經過下面的方式找到root默認密碼,而後登陸mysql進行修改:

[root@wangbo mysql]# grep 'temporary password' /var/log/mysqld.log
2019-03-29T09:43:27.569868Z 1 [Note] A temporary password is generated for root@localhost: h<zuy>K-I6RD

用該密碼登陸數據庫,紅框中輸入上面查詢到的默認密碼 h<zuy>K-I6RD

[root@wangbo mysql]# mysql -u root -p

使用SQL修改密碼

mysql> ALTER USER 'root'@'localhost' IDENTIFIED BY 'xxxxxxxx';

若是提示下面內容,表示修改爲功

Query OK, 0 rows affected (0.00 sec)

若是密碼太簡單則會報一個錯誤,這就涉及到密碼策略的修改了。因此咱們這一步應該放在修改密碼策略以後作。

ERROR 1819 (HY000): Your password does not satisfy the current policy requirements

查看密碼策略,只有修改完密碼才能執行SQL,否則會報一個錯誤。

mysql> show variables like '%password%';

若是沒有修改完密碼,會報如下錯誤,提示必須先修改密碼。

ERROR 1820 (HY000): You must reset your password using ALTER USER statement before executing this statement.

若是修改完密碼了,則會顯示查詢結果。

添加遠程登陸用戶

默認只容許root賬戶在本地登陸,若是要在其它機器上鍊接mysql,必須修改root容許遠程鏈接,或者添加一個容許遠程鏈接的賬戶,爲了安全起見,我添加一個新的賬戶:

mysql> GRANT ALL PRIVILEGES ON *.* TO 'test'@'%' IDENTIFIED BY '123456789' WITH GRANT OPTION;

提示添加成功

Query OK, 0 rows affected, 1 warning (0.00 sec)

配置默認編碼

這一步通常不須要,默認的就是utf-8。

查看數據庫默認編碼以下所示:

mysql> show variables like '%character%';

修改/etc/my.cnf配置文件,在[mysqld]下添加編碼配置,以下所示:

[mysqld]
character_set_server=utf8
init_connect='SET NAMES utf8'

從新啓動mysql服務使配置生效:

systemctl restart mysqld

阿里雲設置

開啓服務器端口

接下來我用Navicate For MySQL 鏈接數據庫,報了10038的鏈接錯誤,是遠程服務器3306端口未開放。

因此登陸阿里雲後臺管理,找到安全組規則,添加一個安全組規則,

新建數據庫

使用Navicate鏈接上數據庫後,新建一個數據庫

注意排序規則的選擇:

utf8_unicode_ci和utf8_general_ci對中、英文來講沒有實質的差異。

utf8_general_ci 校對速度快,但準確度稍差。

utf8_unicode_ci 準確度高,但校對速度稍慢。

若是你的應用有德語、法語或者俄語,請必定使用utf8_unicode_ci。通常用utf8_general_ci就夠了。

附:

ci是 case insensitive, 即 "大小寫不敏感", a 和 A 會在字符判斷中會被當作同樣的;

bin 是二進制, a 和 A 會別區別對待。

例如你運行:

SELECT * FROM table WHERE txt = 'a'

那麼在utf8_bin中你就找不到 txt = 'A' 的那一行, 而 utf8_general_ci 則能夠。

utf8_general_ci 不區分大小寫,這個你在註冊用戶名和郵箱的時候就要使用。

utf8_general_cs 區分大小寫,若是用戶名和郵箱用這個 就會照成不良後果。

utf8_bin 字符串每一個字符串用二進制數據編譯存儲。 區分大小寫,並且能夠存二進制的內容。

錯誤記錄

mysql設置sql_mode

安裝好後,我用Navicate鏈接上了數據庫,可是每次執行SQL一直報一個錯誤,執行結果倒是正確的。

錯誤以下:

[Err] 1055 - Expression #1 of ORDER BY clause is not in GROUP BY clause and contains nonaggregated column 'information_schema.PROFILING.SEQ' which is not functionally dependent on columns in GROUP BY clause; this is incompatible with sql_mode=only_full_group_by

參考博客地址:http://www.javashuo.com/article/p-evhumeic-by.html

解決辦法:

(1)直接經過SQL語句進行設置。

#查看數據庫版本和sql_mode
select VERSION(),@@sql_mode;
#將ONLY_FULL_GROUP_BY設置爲空
SET sql_mode=(SELECT REPLACE(@@sql_mode,'ONLY_FULL_GROUP_BY',''));

這樣設置後我發現從新鏈接後又恢復了,因此仍是直接修改配置文件吧。

(2)修改 my.cnf 配置文件

首先查詢出數據庫的sql_mode

select VERSION(),@@sql_mode;
ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION

在sql_mode 中去掉only_full_group_by ,將下列內容加入,而後保存配置文件後重啓數據庫,解決問題!

sql_mode='STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION'

具體操做

在 /etc/my.cnf 文件添加 sql_mode 配置

[root@wangbo mysql]# vi /etc/my.cnf

按 i 進入編輯狀態,添加下列內容

sql_mode='STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION'

按 ESC,而後 :wq! 保存退出。

從新啓動mysql服務使配置生效:

[root@wangbo mysql]# systemctl restart mysqld
相關文章
相關標籤/搜索