與 CentOS 6 下 Yum 安裝 MySQL 5.7 備忘 基本沒有特別大的變化。一路 yum ,非常簡單。
環境說明
CentOS 7(Minimal Install)
$ cat /etc/redhat-release CentOS Linux release 7.3.1611 (Core)
安裝和配置步驟
1.配置 yum 源
去 MySQL 官網下載 YUM 的 RPM 安裝包,http://dev.mysql.com/downloads/repo/yum/
下載 mysql 源安裝包
$ curl -LO http://dev.mysql.com/get/mysql57-community-release-el7-11.noarch.rpm
安裝 mysql 源
$ sudo yum localinstall mysql57-community-release-el7-11.noarch.rpm
檢查 yum 源是否安裝成功
$ sudo yum repolist enabled | grep "mysql.*-community.*" mysql-connectors-community MySQL Connectors Community 21 mysql-tools-community MySQL Tools Community 38 mysql57-community MySQL 5.7 Community Server 130
如上所示,找到了 mysql 的安裝包
2.安裝
$ sudo yum install mysql-community-server
3.啟動
安裝服務
$ sudo systemctl enable mysqld
啟動服務
$ sudo systemctl start mysqld
查看服務狀態
$ sudo systemctl status mysqld
4.修改 root 默認密碼
MySQL 5.7 啟動後,在 /var/log/mysqld.log 文件中給 root 生成了一個默認密碼。通過下面的方式找到 root 默認密碼,然後登錄 mysql 進行修改:
$ grep 'temporary password' /var/log/mysqld.log [Note] A temporary password is generated for root@localhost: **********
登錄 MySQL 並修改密碼
$ mysql -u root -p Enter password: mysql> ALTER USER 'root'@'localhost' IDENTIFIED BY 'MyNewPass4!';
注意:MySQL 5.7 默認安裝了密碼安全檢查插件(validate_password),默認密碼檢查策略要求密碼必須包含:大小寫字母、數字和特殊符號,並且長度不能少於 8 位。
通過 MySQL 環境變量可以查看密碼策略的相關信息:
mysql> SHOW VARIABLES LIKE 'validate_password%'; +--------------------------------------+--------+ | Variable_name | Value | +--------------------------------------+--------+ | validate_password_check_user_name | OFF | | 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)
具體修改,參見 http://dev.mysql.com/doc/refman/5.7/en/validate-password-options-variables.html#sysvar_validate_password_policy
指定密碼校驗策略
$ sudo vi /etc/my.cnf [mysqld] # 添加如下鍵值對, 0=LOW, 1=MEDIUM, 2=STRONG validate_password_policy=0
禁用密碼策略
$ sudo vi /etc/my.cnf [mysqld] # 禁用密碼校驗策略 validate_password = off
重啟 MySQL 服務,使配置生效
$ sudo systemctl restart mysqld
5.添加遠程登錄用戶
MySQL 默認只允許 root 帳戶在本地登錄,如果要在其它機器上連接 MySQL,必須修改 root 允許遠程連接,或者添加一個允許遠程連接的帳戶,為了安全起見,本例添加一個新的帳戶:
mysql> GRANT ALL PRIVILEGES ON *.* TO 'admin'@'%' IDENTIFIED BY 'secret' WITH GRANT OPTION;
6.配置默認編碼為 utf8
MySQL 默認為 latin1, 一般修改為 UTF-8
$ vi /etc/my.cnf [mysqld] # 在myslqd下添加如下鍵值對 character_set_server=utf8 init_connect='SET NAMES utf8'
重啟 MySQL 服務,使配置生效
$ sudo systemctl restart mysqld
查看字符集
mysql> SHOW VARIABLES LIKE 'character%'; +--------------------------+----------------------------+ | Variable_name | Value | +--------------------------+----------------------------+ | character_set_client | utf8 | | character_set_connection | utf8 | | character_set_database | utf8 | | character_set_filesystem | binary | | character_set_results | utf8 | | character_set_server | utf8 | | character_set_system | utf8 | | character_sets_dir | /usr/share/mysql/charsets/ | +--------------------------+----------------------------+ 8 rows in set (0.00 sec
7.開啟端口
$ sudo firewall-cmd --zone=public --add-port=3306/tcp --permanent $ sudo firewall-cmd --reload
8.mysql 5.x創建表、創建函數報錯1055
Err1055,出現這個問題往往是在執行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
解決方法:
mysql> set global sql_mode='STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION';
mysql> set session sql_mode='STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION';
9.mysql 5.x插入空值報錯(空值為null也可以解決)
insert into log values('','admin','31','002t')
這樣寫就會報錯: Incorrect integer value: '' for column 'id' at row 1
一般我們是認為應該沒錯誤的。後來查了下MYSQL的資料。發現5以上的版本如果是空值應該要寫NULL
這種問題一般mysql 5.x上出現。我用的mysql5.1
官方解釋說:得知新版本mysql對空值插入有"bug",要在安裝mysql的時候去除默認勾選的enable strict SQL mode
那麼如果我們安裝好了mysql怎麼辦了,解決辦法是更改mysql中的配置 my.ini
my.ini中查找sql-mode,
默認為sql-mode="STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION",
將其修改為sql-mode="NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION",重啟mysql後即可
MySQL配置文件在Windows下叫my.ini,在MySQL的安裝根目錄下;在Linux下叫my.cnf,該文件位於/etc/my.cnf。
vi /etc/my.cnf
# 添加如下鍵值對, 0=LOW, 1=MEDIUM, 2=STRONG
validate_password_policy=0
# 禁用密碼校驗策略
validate_password = off
# 在myslqd下添加如下鍵值對
character_set_server=utf8
init_connect='SET NAMES utf8'
sql-mode="NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION"
重啟 MySQL 服務,使配置生效
$ systemctl restart mysqld