騰訊雲CentOS7.0使用yum安裝mysql及使用遇到的問題
背景:
今天才申請了騰訊雲+校園計劃的1元伺服器,(http://www.qcloud.com/event/qcloudSchool)安裝了Centos7.0,在安裝mysql的時候,使用yum list | grep mysql
來查詢yum源中是否有mysql,結果如下:
[[email protected]_47_56_centos ~]# yum list | grep mysql
akonadi-mysql.x86_64 1.9.2-4.el7 base
apr-util-mysql.x86_64 1.5 .2-6.el7 base
mysql-proxy.x86_64 0.8.5-2.el7 epel
mysql-proxy-devel.x86_64 0.8.5-2.el7 epel
mysql-router.x86_64 2.0.2-1.el7 mysql-tools-community
mysql-router-debuginfo.x 86_64 2.0.2-1.el7 mysql-tools-community
mysql-utilities.noarch 1.5.6-1.el7 mysql-tools-community
mysql-utilities-extra.noarch 1.5.6-1.el7 mysql-tools
mysqlreport.noarch 3.5-11.el7 epel
mysqltuner.noarch 1.2.0-7.el7 epel
省略部分內容。。。。
[[email protected]_47_56_centos ~]#
總之是看不到mysql-server的影子,(PS:據說Centos7.0的源中暫時還沒有mysql,但是相同版本的Centos在阿里雲是可以直接使用yum install mysql-server
來直接安裝mysql的)
於是找了一些mysql的安裝源,安裝過程如下:
安裝過程:
為了解決這個問題,我們要先下載mysql的repo源。
- 1、下載mysql的repo源
$ wget http://repo.mysql.com/mysql-community-release-el7-5.noarch.rpm
- 2、安裝mysql-community-release-el7-5.noarch.rpm包
$ sudo rpm -ivh mysql-community-release-el7-5.noarch.rpm
安裝這個包後,會獲得兩個mysql的yum repo源:
/etc/yum.repos.d/mysql-community.repo和
/etc/yum.repos.d/mysql-community-source.repo。
- 3、安裝mysql
$ sudo yum install mysql-server
這個過程中就會看到有mysql的軟體包存在:
[[email protected]_47_56_centos ~]# sudo yum install mysql-server
已載入外掛:fastestmirror, langpacks
| 2.5 kB 00:00:00
mysql-tools-community | 2.5 kB 00:00:00
mysql56-community | 2.5 kB 00:00:00
(1/3): mysql-connectors-community/x86_64/primary_db | 8.6 kB 00:00:00
(2/3): mysql-tools-community/x86_64/primary_db | 22 kB 00:00:00
(3/3): mysql56-community/x86_64/primary_db | 109 kB 00:00:01
Loading mirror speeds from cached hostfile
* base: mirrors.sina.cn
* extras: mirrors.sina.cn
* updates: mirrors.sina.cn
正在解決依賴關係
--> 正在檢查事務
省略內容。。。
依賴關係解決
=================================================================================================================
Package 架構 版本 源 大小
=================================================================================================================
正在安裝:
mysql-community-libs x86_64 5.6.27-2.el7 mysql56-community 2.0 M
替換 mariadb-libs.x86_64 1:5.5.44-1.el7_1
mysql-community-server x86_64 5.6.27-2.el7 mysql56-community 58 M
為依賴而安裝:
mysql-community-client x86_64 5.6.27-2.el7 mysql56-community 19 M
mysql-community-common x86_64 5.6.27-2.el7 mysql56-community 256 k
numactl-libs x86_64 2.0.9-5.el7_1
事務概要
=================================================================================================================
安裝 2 軟體包 (+9 依賴軟體包)
總下載量:80 M
Is this ok [y/d/N]: y
下邊的安裝和其他安裝一樣,
根據步驟安裝就可以了,不過安裝完成後,沒有密碼,需要重置密碼。
- 4、重置密碼
重置密碼前,首先要登入
$ mysql -u root
登入時有可能報這樣的錯:ERROR 2002 (HY000): Can‘t connect to local MySQL server through socket ‘/var/lib/mysql/mysql.sock‘ (2),原因是/var/lib/mysql的訪問許可權問題。下面的命令把/var/lib/mysql的擁有者改為當前使用者:
$ sudo chown -R mysql:mysql /var/lib/mysql #這裡的mysql是使用者名稱(需要設定使用者組合使用者)
然後,重啟服務:
$ service mysqld restart
接下來登入重置密碼:
$ mysql -u root
mysql > use mysql;
mysql > update user set password=password('xu827928') where user='root';
mysql > exit;
- 5、開放3306埠(可以不用設定)
$ sudo vim /etc/sysconfig/iptables
新增以下內容:
-A INPUT -p tcp -m state --state NEW -m tcp --dport 3306 -j ACCEPT
儲存後重啟防火牆:
$ sudo service iptables restart
這樣從其它客戶機也可以連線上mysql服務了。
- 6、修改許可權可以使其他機器登入:
mysql>mysql -h localhost -u root //這樣應該可以進入MySQL伺服器
mysql>GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' WITH GRANT OPTION //賦予任何主機訪問資料的許可權
mysql>FLUSH PRIVILEGES //修改生效
mysql>EXIT //退出MySQL伺服器
使用時遇到的問題
(1)java.sql.SQLException: Access denied for user ‘root’@’localhost’ (using password:YES)
java.sql.SQLException: Access denied for user 'root'@'localhost' (using password: YES)
at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:946)
at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:2870)
at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:812)
at com.mysql.jdbc.MysqlIO.secureAuth411(MysqlIO.java:3269)
at com.mysql.jdbc.MysqlIO.doHandshake(MysqlIO.java:1182)
問題的場景是:在命令列模式下使用者名稱和密碼都是正確的但是就是出現登陸不了授權失敗的問題。
解決方法:
進入MySQL命令臺:mysql> select user,password,host from mysql.user;
可以看出該表顯示的倒數第二行為:
+--------+-------------------------------------------+--------------------+
| user | password | host |
+--------+-------------------------------------------+--------------------+
| root | | % |
可以看出在root使用者下的任何主機是沒有password的,因此可以採取兩種方式,在遠端使用的時候沒有密碼,顯然是不安全的,然後就是為其在遠端訪問的時候設定密碼。步驟如下:
mysql> grant all privileges on *.* to [email protected]"%" identified by "your password";
Query OK, 0 rows affected (0.00 sec)
mysql> flush privileges;
Query OK, 0 rows affected (0.00 sec)
這相當於是給IP-xxx.xxx.xxx.xxx賦予了所有的許可權,包括遠端訪問許可權。
這樣就可以為其設定密碼,然後就可以使用密碼進行登入。