一 安裝環境
(1)CentOS版本:CentOS-7
查看方法:
[root@bogon 桌面]# cat /etc/redhat-release
CentOS Linux release 7.0.1406 (Core)
來源:官網下載
下載地址:http://www.centos.org/
(2)MySQL版本:MySQL-5.6.22
來源:官網下載
下載地址:https://edelivery.oracle.com/EPD/Search/handle_go
或者http://pan.baidu.com/s/1dDu6n9R
名稱:MySQL Database 5.6.22 RPM for Oracle Linux / RHEL 7 x86 (64bit)
在網上搜了一下,Linux下安裝MYSQL有三種方式:
1 通過yum命令在線下載安裝
2 下載離線rpm安裝包安裝
3 下載源碼編譯安裝
方式1不打算用,因為我們大部分項目服務器是不能直接上Internet的,網上關於在線安裝的教程很多,方式3對於只要應用MYSQL的人來說沒必要多此一舉。
1. 解壓下載的zip包,會發現有以下幾個rpm包:
MySQL-client-advanced-5.6.22-1.el7.x86_64.rpm
MySQL-devel-advanced-5.6.22-1.el7.x86_64.rpm
MySQL-embedded-advanced-5.6.22-1.el7.x86_64.rpm
MySQL-server-advanced-5.6.22-1.el7.x86_64.rpm
MySQL-shared-advanced-5.6.22-1.el7.x86_64.rpm
MySQL-shared-compat-advanced-5.6.22-1.el7.x86_64.rpm
MySQL-test-advanced-5.6.22-1.el7.x86_64.rpm
2. 卸載MariaDB
如果直接點擊rpm包安裝會得到錯誤提示。因為CentOS的默認數據庫已經不再是MySQL了,而是MariaDB,為什麼呢?
MariaDB數據庫管理系統是MySQL的一個分支,主要由開源社區在維護,采用GPL授權許可。開發這個分支的原因之一是:甲骨文公司收購了MySQL後,有將MySQL閉源的潛在風險,因此社區采用分支的方式來避開這個風險。MariaDB的目的是完全兼容MySQL,包括API和命令行,使之能輕松成為MySQL的代替品。
查看當前安裝的mariadb包:
[root@bogon 桌面]# rpm -qa | grep mariadb
將它們統統強制性卸載掉:
[root@bogon 桌面]# rpm -e --nodeps mariadb-libs-5.5.35-3.el7.x86_64
[root@bogon 桌面]# rpm -e --nodeps mariadb-5.5.35-3.el7.x86_64
[root@bogon 桌面]# rpm -e --nodeps mariadb-server-5.5.35-3.el7.x86_64
3. 安裝MYSQL
雙擊下面三個包進行自動安裝:
MySQL-client-advanced-5.6.22-1.el7.x86_64.rpm
MySQL-devel-advanced-5.6.22-1.el7.x86_64.rpm
MySQL-server-advanced-5.6.22-1.el7.x86_64.rpm
提示:其實第二個包devel我也不知道是干什麼的,也不知道是不是必須的(上網搜了一下應該不是必須的),沒有測試是否必須就已經點來裝上了,也不想花時間去測試是否必須了,有測試過的朋友麻煩留言告知。
4. 啟動MYSQL
[root@bogon 桌面]#service mysql start
得到錯誤:ERROR!The server quit without updating PID file
我們這裡主要是因為:selinux惹的禍,如果是centos系統,默認會開啟selinux。解決方法是關閉它,打開/etc/selinux/config,把SELINUX=enforcing改為SELINUX=disabled後存盤退出重啟機器。
然後再啟動mysql就沒問題了:
[root@bogon 桌面]#service mysql start
查看MySQL運行狀態:
[root@bogon 桌面]# service mysql status
SUCCESS! MySQL running (2377)
5. 默認root用戶登錄MYSQL
[root@bogon 桌面]# mysql -u root -p
Enter password:
ERROR 1045 (28000):Access denied for user 'root'@'localhost' (using password: YES)
發現有有錯誤,然後在網上查了一下說使用下面命令修改root初始化密碼:
[root@bogon 桌面]# /usr/bin/mysqladmin -u root password 'passok'
/usr/bin/mysqladmin: connect to server at'localhost' failed
error: 'Accessdenied for user 'root'@'localhost' (using password: NO)'
發現MYSQL數據庫默認的root用戶還是沒辦法設置密碼進行登錄,需要做一下操作:
重置MySQL中root用戶密碼及驗證
還是不行,然後在網上又找到一個重置MySQL中root用戶密碼及驗證的方法:
(1) 停止MySQL服務
[root@bogon 桌面]# service mysql stop
Shutting down MySQL.. SUCCESS!
(2) 輸入繞過密碼認證命令
[root@bogon 桌面]# mysqld_safe --user=mysql --skip-grant-tables--skip-networking &
[1] 5807
150117 22:23:31 mysqld_safe Logging to '/var/lib/mysql/bogon.err'.
150117 22:23:31 mysqld_safe Starting mysqlddaemon with databases from /var/lib/mysql
(3) 輸入登錄用戶命令
[root@bogon 桌面]# mysql -u root mysql
Reading table information for completion oftable and column names
You can turn off this feature to get aquicker startup with -A
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 1
Server version:5.6.22-enterprise-commercial-advanced MySQL Enterprise Server - AdvancedEdition (Commercial)
Copyright (c) 2000, 2014, Oracle and/or itsaffiliates. All rights reserved.
Oracle is a registered trademark of OracleCorporation and/or its
affiliates. Other names may be trademarksof their respective
owners.
Type 'help;' or '\h' for help. Type '\c' toclear the current input statement.
(4) 輸入修改root密碼SQL語句
mysql> UPDATEuser SET Password=PASSWORD('passok') where USER='root';
Query OK, 4 rows affected (0.04 sec)
Rows matched: 4 Changed: 4 Warnings: 0
(5) 輸入數據刷新命令
mysql> FLUSHPRIVILEGES;
Query OK, 0 rows affected (0.00 sec)
(6) 退出
mysql> quit
Bye
(7) 啟動MYSQL
[root@bogon 桌面]# service mysql start
Starting MySQL SUCCESS!
登錄mysql,查看所有數據庫:
[root@bogon 桌面]# mysql -u root -p
mysql> show databases;
ERROR 1820 (HY000):You must SET PASSWORD before executing this statement
還是有錯誤啊,提示要再設置一下密碼:
mysql> SETPASSWORD = PASSWORD('passok');
Query OK, 0 rows affected (0.00 sec)
顯示數據庫:
mysql> show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| mysql |
| performance_schema |
| test |
+--------------------+
4 rows in set (0.00 sec)
進入數據庫創建表、顯示表:
mysql> use test;
Database changed
mysql> show tables;
Empty set (0.02 sec)
mysql>create table testTable(name char(15) not null,passwd char(15) not null);
Query OK, 0 rows affected (0.87 sec)
mysql> show tables;
+----------------+
| Tables_in_test |
+----------------+
| testTable |
+----------------+
1 row in set (0.00 sec)
備注:我的設置的密碼是“passok”。大家在執行showdatabases收到錯誤ERROR 1820 (HY000): You must SET PASSWORD before executing this statement後也可以試試以下面方式登錄mysql來執行showdatabases是否就不會有這個錯誤,我沒有條件測試了:
登錄MySQL界面:mysql –uroot -p(修改的新密碼)
例如:mysql -u root -p123456
mysql安裝後三個主要的目錄及其功能:
/var/lib/mysql 數據庫文件
/usr/share/mysql 命令及配置文件
/usr/bin mysqladmin、mysqldump等命令
6. windows7上使用workbench連接到遠端MySQL Server
(1) 下載安裝workbench(MySQL Workbench 6.2.4 MSI for Windows x86(64bit))
(2) Windows下安裝mysql workbench需要具備以下環境:
Microsoft .NET Framework 4 Client Profile
Microsoft Visual C++ 2013 RedistributablePackage (x64)
第一個就不用說了,第二個下載地址在:
http://www.microsoft.com/zh-CN/download/details.aspx?id=40784
(3)安裝完成之後打開,進行連接配置:
發現連不上。
打開cmd命令行輸入telnet 192.168.1.108 3306也提示連接不上(BTY:windows7默認沒有安裝telnet,需要通過控制面板中的打開或者關閉windows功能來打開telnet客戶端功能)。
如果要想遠端訪問MYSQL數據庫,還需要:
(1) 給指定用戶賦予遠端訪問mysql數據庫的權限;
(2) 配置防火牆放開對3306端口的限制;
1給指定用戶賦予遠端訪問mysql數據庫的權限
授權命令是:
grant 權限1,權限2,…權限n on 數據庫名.表名 to用戶名@用戶地址 identified by‘口令’
[root@bogon 桌面]# mysql -uroot-ppassok -e "GRANT ALL PRIVILEGES ON *.* TO'root'@'%' IDENTIFIED BY 'passok' WITH GRANT OPTION;"
Warning: Using a password on the commandline interface can be insecure.
用root用戶的身份執行grant命令(-e參數表示執行一段sql命令),含義是:把在所有數據庫的所有表的所有權限賦值給位於所有IP地址的root用戶。如果你只想讓位於192.168.1.108機器上面的root用戶訪問,命令如下:
mysql -uroot -ppassok -e "GRANT ALL PRIVILEGES ON *.* TO'root'@'192.168.1.108' IDENTIFIED BY 'passok' WITH GRANT OPTION;"
2 配置防火牆放開3306端口的限制
CentOS 7.0版本的防火牆,默認使用的是firewall,與之前的版本使用iptables是不一樣,經過我的測試,只要firewall處於開啟狀態,就不可能遠端訪問MYSQL數據庫。
首先將firewall關閉:
[root@bogon 桌面]# systemctl stop firewalld.service #停止firewall
[root@bogon 桌面]# systemctl disable firewalld.service #禁止firewall開機啟動
CentOS雖然默認的不是iptables,但是也是已經安裝好的,然後我按照網上的方法,為3306端口配置開放規則:
[root@bogon 桌面]# vi /etc/sysconfig/iptables
# sample configuration for iptables service
# you can edit this manually or usesystem-config-firewall
# please do not ask us to add additionalports/services to this default configuration
*filter
:INPUT ACCEPT [0:0]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
-A INPUT -m state --stateRELATED,ESTABLISHED -j ACCEPT
-A INPUT -p icmp -j ACCEPT
-A INPUT -i lo -j ACCEPT
-ARH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 3306 -j ACCEPT
-A INPUT -p tcp -m state --state NEW -m tcp--dport 22 -j ACCEPT
-A INPUT -j REJECT --reject-withicmp-host-prohibited
-A FORWARD -j REJECT --reject-withicmp-host-prohibited
COMMIT
然後重啟防火牆:
[root@bogon 桌面]# service iptables restart
然後立刻用mysql workbench測試,發現還是一樣連不上。
然後執行下面命令永久關閉iptables:
[root@bogon bin]# chkconfig iptables off
注意:正在將請求轉發到“systemctl disable iptables.service”。
然後立刻用mysql workbench測試,發現還是一樣連不上。
重啟CentOS系統,連接成功