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 |
|
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 |
|
上面是改變了全域性的,對於新建的資料庫有效,已經存在的資料庫,還要在對應資料庫下執行
1 |
|
解決的方法有兩種
一:在sql查詢語句中不需要group by的欄位上使用any_value()函式
這種對於已經開發了不少功能的專案不太合適,畢竟要把原來的sql都給修改一遍
二:修改my.cnf(windows下是my.ini),刪掉only_full_group_by這一項
若我們專案的mysql安裝在ubuntu上面,找到這個檔案開啟一看,裡面並沒有sql_mode這一配置項,想刪都沒得刪。
當然,還有別的辦法,開啟mysql命令列,執行命令
1 |
|
這樣就可以查出sql_mode的值,複製這個值,在my.cnf中新增配置項(把查詢到的值刪掉only_full_group_by這個選項,其他的都複製過去):
1 |
|
如果 [mysqld] 這行被註釋掉的話記得要開啟註釋。然後重重啟mysql服務
注:使用命令
1 |
|
這樣可以修改一個會話中的配置項,在其他會話中是不生效的。