1. 程式人生 > >centos6安裝mysql資料庫

centos6安裝mysql資料庫

以下博文參照 https://www.linuxidc.com/Linux/2016-09/135288.htm   centos7安裝

1.檢測系統是否已經安裝過mysql或其依賴,若已裝過要先將其刪除,否則第4步使用yum安裝時會報錯:


1 # yum list installed | grep mysql
2 mysql-libs.i686         5.1.71-1.el6      @anaconda-CentOS-201311271240.i386/6.5
3 # yum -y remove mysql-libs.i686

或者
rpm -qa | grep -i mysql
yum -y remove ....

2.配置YUM源,從mysql的官網下載mysql57-community-release-el6-5.noarch.rpm(注意這裡的el6-5即適配RHEL6.5的版本,如果下載了其它版本後面的安裝過程中可能會報錯)如果是centos7就要是http://dev.mysql.com/get/mysql57-community-release-el7-8.noarch.rpm

wget dev.mysql.com/get/mysql-community-release-el6-5.noarch.rpm
安裝
yum install mysql-community-release-el6-5.noarch.rpm

安裝成功後,我們可以看到/etc/yum.repos.d/目錄下增加了以下兩個檔案

1 # ls /etc/yum.repos.d
2 mysql-community-source.repo
3 mysql-community.repo

檢查mysql源是否安裝成功

shell> yum repolist enabled | grep "mysql.*-community.*"

看到上圖所示表示安裝成功。 可以修改vim /etc/yum.repos.d/mysql-community.repo源,改變預設安裝的mysql版本。比如要安裝5.6版本,將5.7源的enabled=1改成enabled=0。然後再將5.6源的enabled=0改成enabled=1即可。

3..使用yum安裝mysql:

yum install mysql-community-server

5.啟動mysql服務:

service mysqld start

檢視root密碼:

1 # grep "password" /var/log/mysqld.log
2 2016-08-10T15:03:02.210317Z 1 [Note] A temporary password is generated for [email protected]: AYB(&-3Cz-rW

現在必須立刻修改密碼,不然會報錯:

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

修改密碼(如果在此步報錯ERROR 1819,請向下翻檢視原因及解決方法):

mysql> SET PASSWORD FOR 'root'@'localhost' = PASSWORD('newpass');
或者
ALTER USER 'root'@'localhost' IDENTIFIED BY 'MyNewPass4!';

6.檢視mysqld是否開機自啟動,並設定為開機自啟動:

1 chkconfig --list | grep mysqld
2 chkconfig mysqld on

7.修改字符集為UTF-8:

vim /etc/my.cnf

在[mysqld]部分新增:

character-set-server=utf8

在檔案末尾新增[client]段,並在[client]段新增:

default-character-set=utf8

修改好之後重啟mysqld服務:

service mysqld restart

檢視修改結果:

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)

注:在修改密碼步驟,若設定的密碼為簡單密碼,可能會出現如下錯誤:

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

這一錯誤其實與validate_password_policy值的設定有關:

validate_password_policy值預設為1,即MEDIUM,所以剛開始設定的密碼必須符合長度要求,且必須含有數字,小寫或大寫字母,特殊字元

如果我們只是做為測試用而不需要如此複雜的密碼,可使用如下方式修改validate_password_policy值

mysql> set global validate_password_policy=0;
Query OK, 0 rows affected (0.00 sec)

這樣,對密碼要求就只有長度了,而密碼的最小長度由validate_password_length值決定

validate_password_length引數預設為8,它有最小值的限制,最小值為:

validate_password_number_count+ validate_password_special_char_count+ (2 * validate_password_mixed_case_count)

其中,validate_password_number_count指定了密碼中數字的長度,validate_password_special_char_count指定了密碼中特殊字元的長度,validate_password_mixed_case_count指定了密碼中大小字母的長度。這些引數的預設值均為1,所以validate_password_length最小值為4,如果顯性指定validate_password_length的值小於4,儘管不會報錯,但validate_password_length的值將設為4

設定validate_password_length的值:

mysql> set global validate_password_length=4;
Query OK, 0 rows affected (0.00 sec)

  如果修改了validate_password_number_count,validate_password_special_char_count,validate_password_mixed_case_count中任何一個值,則validate_password_length將進行動態修改。

8  新增遠端登入使用者

預設只允許root帳戶在本地登入,如果要在其它機器上連線mysql,必須修改root允許遠端連線,或者新增一個允許遠端連線的帳戶,為了安全起見,我新增一個新的帳戶:

mysql> GRANT ALL PRIVILEGES ON *.* TO 'yangxin'@'%' IDENTIFIED BY 'Yangxin0917!' WITH GRANT OPTION;

預設配置檔案路徑: 配置檔案:/etc/my.cnf 日誌檔案:/var/log//var/log/mysqld.log 服務啟動指令碼:/usr/lib/systemd/system/mysqld.service socket檔案:/var/run/mysqld/mysqld.pid

裝的過程中遇到的問題  

1 設定密碼時set password for 'root'@'localhost'=password('123456');  報錯bash: syntax error near unexpected token `(' 的錯誤      原因是 發現linux5.0之後,是不能帶有括號的,這個時候就需要轉譯了。轉譯的方法有下面兩種:

     set password for 'root'@'localhost'=password\('123456'\);

2   web專案啟動後不報錯,當與資料庫互動時報錯,報表不存在。找了好久,表明明存在啊,後來老師傅的提醒試試是不是mysql區分大小寫,果然是這樣。在my.cnf中更改lower_case_tables_name = 1,並重啟mysql資料庫。ok,解決

3. 禍不單行,然後寫了個jdbc寫了個groupby發現報錯

[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

原因:下載安裝的是最新版的mysql5.7.x版本,預設是開啟了 only_full_group_by 模式的,但開啟這個模式後,原先的 group by 語句就報錯,然後又把它移除了。

一旦開啟 only_full_group_by ,感覺,group by 將變成和 distinct 一樣,只能獲取受到其影響的欄位資訊,無法和其他未受其影響的欄位共存,這樣,group by 的功能將變得十分狹窄了

only_full_group_by 模式開啟比較好。

因為在 mysql 中有一個函式: any_value(field) 允許,非分組欄位的出現(和關閉 only_full_group_by 模式有相同效果)。

檢視sql_mode

01

select @@global.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

去掉ONLY_FULL_GROUP_BY

01

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';

上面是改變了全域性的,對於新建的資料庫有效,已經存在的資料庫,還要在對應資料庫下執行

1

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

  解決的方法有兩種

一:在sql查詢語句中不需要group by的欄位上使用any_value()函式

這種對於已經開發了不少功能的專案不太合適,畢竟要把原來的sql都給修改一遍

二:修改my.cnf(windows下是my.ini),刪掉only_full_group_by這一項

若我們專案的mysql安裝在ubuntu上面,找到這個檔案開啟一看,裡面並沒有sql_mode這一配置項,想刪都沒得刪。

當然,還有別的辦法,開啟mysql命令列,執行命令

1

select @@sql_mode;

這樣就可以查出sql_mode的值,複製這個值,在my.cnf中新增配置項(把查詢到的值刪掉only_full_group_by這個選項,其他的都複製過去):

1

sql_mode=STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION;

如果 [mysqld] 這行被註釋掉的話記得要開啟註釋。然後重重啟mysql服務

注:使用命令

1

set sql_mode=STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION

這樣可以修改一個會話中的配置項,在其他會話中是不生效的。