葫蘆島做網(wǎng)站發(fā)帖推廣百度首頁
首先更新軟件包索引運(yùn)行
sudo apt update
命令。然后運(yùn)行
sudo apt install mysql-server
安裝MySQL服務(wù)器。
安裝完成后,MySQL服務(wù)將作為systemd服務(wù)自動(dòng)啟動(dòng)。你可以運(yùn)行
sudo systemctl status mysql
命令驗(yàn)證MySQL服務(wù)器是否正在運(yùn)行。
連接MySQL
當(dāng)MySQL安裝完成后,你可能會(huì)想運(yùn)行命令
mysql -u root -p
登錄到MySQL服務(wù)器
如果你登錄到Ubuntu的用戶不是root用戶你將不能訪問MySQL服務(wù)器。
注意,如果你嘗試使用密碼登錄也將被拒絕連接,MySQL root用戶默認(rèn)是沒有密碼。
你將會(huì)收到類似于這樣的消息
(28000): Access denied for user 'root'@'localhost' (using password: YES)
或者
ERROR 1045 (28000): Access denied for user 'root'@'localhost'。
這是因?yàn)樵贛ySQL 8.0上,對(duì)root用戶使用auth_socket插件進(jìn)行身份驗(yàn)證。auth_socket插件僅對(duì)從localhost連接到Unix socket文件用戶進(jìn)行身份驗(yàn)證。
這意味著您無法通過提供密碼來以root用戶連接到MySQL服務(wù)器。但你可以通過命令
sudo mysql
連接到MySQL服務(wù)器。
sudo mysql
Welcome to the MySQL monitor. Commands end with ; or \g.
mysql>
總結(jié):可以使用 mysql -u root -p 或者 sudo mysql 在本機(jī)登錄到mysql,然后執(zhí)行下一步操作。
修改賬號(hào)密碼
ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY '你的密碼';
FLUSH PRIVILEGES;
補(bǔ)充:
- mysql 5.7 localhost和%的區(qū)別
基礎(chǔ)解釋
localhost 只能本地登錄
% 任何客戶機(jī)都能登錄(不安全,可以在創(chuàng)建用戶時(shí)指定ip)
注:user@%和user@localhost是兩個(gè)不同的用戶
相關(guān)閱讀:
Linux下MySQL出現(xiàn)ERROR 1698 (28000): Access denied for user
‘root‘@‘localhost‘和ERROR 1045 (28000)的一些解決方法
先說原因
因?yàn)樵赨buntu下用apt裝mysql是沒有設(shè)置密碼的環(huán)節(jié)的
所以一開始就是沒有密碼,而且密碼也不是為空值,直接敲回車也進(jìn)不去mysql所以我們這個(gè)時(shí)候可以直接
mysql -u root
直接進(jìn)入mysql,那么如何設(shè)置密碼呢?按照以下命令即可:
mysql> ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY '123456';
Query OK, 0 rows affected (0.00 sec)mysql> ALTER USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY '123456';
Query OK, 0 rows affected (0.00 sec)
然后重啟mysql服務(wù)器
然后你再嘗試進(jìn)入mysql會(huì)發(fā)現(xiàn),
不用密碼已經(jīng)沒辦法進(jìn)入了。
配置遠(yuǎn)程訪問
默認(rèn)情況下,MySQL服務(wù)器僅監(jiān)聽來自本地主機(jī)的連接,這意味著它只能由運(yùn)行在同一主機(jī)上的應(yīng)用程序訪問。
但是,在某些情況下,有必要從遠(yuǎn)程位置訪問MySQL服務(wù)器。例如,當(dāng)您想從本地系統(tǒng)連接到遠(yuǎn)程MySQL服務(wù)器時(shí)。
或者當(dāng)使用多服務(wù)器部署時(shí),應(yīng)用程序與數(shù)據(jù)庫服務(wù)器不在同一臺(tái)計(jì)算機(jī)上運(yùn)行。
- 一種選擇是通過SSH隧道訪問MySQL服務(wù)器,
- 另一種是將MySQL服務(wù)器配置為接受遠(yuǎn)程連接。
在本教程中,我們將向你展示如何配置MySQL服務(wù)器接受遠(yuǎn)程的連接。包括添加或更改bind-address選項(xiàng)指定監(jiān)聽地址0.0.0.0 ,授權(quán)MySQL用戶遠(yuǎn)程訪問權(quán)限。
配置防火墻iptable,UFW,FirewallD允許連接3306端口。驗(yàn)證MySQL數(shù)據(jù)庫服務(wù)器的遠(yuǎn)程連接。相同的說明適用于MariaDB。
配置MySQL服務(wù)器
第一步是設(shè)置MySQL服務(wù)器監(jiān)聽計(jì)算機(jī)所有IP地址。如果MySQL服務(wù)器和客戶端可以通過專用網(wǎng)絡(luò)相互通信,那么最好的選擇是將MySQL服務(wù)器設(shè)置為僅在指定IP上監(jiān)聽。
如果要通過公共網(wǎng)絡(luò)連接到MySQL服務(wù)器,請(qǐng)將MySQL服務(wù)器設(shè)置為監(jiān)聽計(jì)算機(jī)上的所有IP地址。
因此,您需要編輯MySQL配置文件并添加或更改bind-address選項(xiàng)的值。您可以設(shè)置一個(gè)IP地址和IP范圍。
如果地址為0.0.0.0,則MySQL服務(wù)器接受所有遠(yuǎn)程主機(jī)IPv4接口上的連接。如果你需要使用IPv6,請(qǐng)使用::代替0.0.0.0。
MySQL配置文件的位置因Linux發(fā)行版而異。在Ubuntu和Debian中,文件位于/etc/mysql/mysql.conf.d/mysqld.cnf,而在基于Red Hat的發(fā)行版(如CentOS)中,文件位于/etc/my.cnf。
使用你喜歡的文本編輯器打開文件/etc/mysql/mysql.conf.d/mysqld.cnf,在本教程中我們將使用vim打開文件:
sudo vim /etc/mysql/mysql.conf.d/mysqld.cnf
搜索以bind-address開頭的行,并將其值設(shè)置為MySQL服務(wù)器應(yīng)監(jiān)聽的IP地址。默認(rèn)情況下,該值設(shè)置為127.0.0.1即僅在本地主機(jī)中監(jiān)聽。
在此示例中,我們將值更改為0.0.0.0,將MySQL服務(wù)器設(shè)置為監(jiān)聽所有IPv4地址。
bind-address = 0.0.0.0
mysqld.cnf
在MySQL 8.0和更高版本中,bind-address指令可能不存在。在這種情況下,
請(qǐng)將
bind-address = 0.0.0.0
其添加到**[mysqld]**下。
完成后,重新啟動(dòng)MySQL服務(wù)以使更改生效。在現(xiàn)代的Linux發(fā)行版中,MySQL通常使用systemd的服務(wù)在后臺(tái)運(yùn)行,因此你可以使用systemctl命令重啟MySQL服務(wù)。
實(shí)際舉例
找到下面的內(nèi)容:
然后,修改為:
#bind-address = 127.0.0.1
#mysqlx-bind-address = 127.0.0.1
bind-address = 0.0.0.0
mysqlx-bind-address = 0.0.0.0
要使配置生效是需要重啟mysql服務(wù)的,不過,先不用急,因?yàn)槟氵€得設(shè)置可以遠(yuǎn)程訪問數(shù)據(jù)庫的賬號(hào),注意,下面以root能夠遠(yuǎn)程登錄訪問mysql數(shù)據(jù)庫為目的進(jìn)行操作。
設(shè)置允許從遠(yuǎn)程計(jì)算機(jī)訪問的賬號(hào)
下一步是允許遠(yuǎn)程用戶訪問數(shù)據(jù)庫。首先以root用戶登錄到MySQL服務(wù)器。運(yùn)行命令
sudo mysql
或者您使用本地MySQL身份驗(yàn)證插件以root用戶身份登錄,請(qǐng)運(yùn)行
mysql -uroot -p
命令并在出現(xiàn)提示時(shí)輸入密碼。
在MySQL Shell中,使用GRANT語句為用戶授予遠(yuǎn)程訪問權(quán)限。
sudo mysql
mysql -uroot -p
MYSQL5版本具體執(zhí)行
GRANT ALL ON database_name.* TO user_name@'ip_address' IDENTIFIED BY 'user_password';
GRANT命令解釋
- 其中database_name是用戶將連接到的數(shù)據(jù)庫的名稱。
- user_name是MySQL用戶的名稱。
- ip_address是用戶本地計(jì)算機(jī)的IP地址。使用***%***允許用戶從任何IP地址進(jìn)行連接。
- user_password是用戶密碼。
例如,僅允許IP是10.8.0.5的客戶端使用密碼my_passwd和用戶名為foo訪問數(shù)據(jù)庫dbname,請(qǐng)運(yùn)行以下命令,如需允許所有IP,請(qǐng)使用%代替IP地址。命令如下:
GRANT ALL ON dbname.* TO foo@'10.8.0.5' IDENTIFIED BY 'my_passwd';
MYSQL8版本具體執(zhí)行
ps:
上面的是mysql5的,在mysql8下面會(huì)報(bào)錯(cuò),解釋如下:
MySQL8.x使用GRANT為用戶賦權(quán)時(shí)報(bào)錯(cuò)
在 MySQL 5.x 的版本中的操作方式
GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY '123456' WITH GRANT OPTION;
在 MySQL 8.x 中版本中按照以上操作
mysql> GRANT ALL PRIVILEGES ON . TO ‘root’@‘%’ IDENTIFIED BY
‘123456’ WITH GRANT OPTION; ERROR 1064 (42000): You have an error in
your SQL syntax; check the manual that corresponds to your MySQL
server version for the right syntax to use near ‘IDENTIFIED BY
‘123456’ WITH GRANT OPTION’ at line 1
原因分析
通過官網(wǎng)文檔的指引可以知道,新版本的 MySQL 8.x 版本已經(jīng)將創(chuàng)建賬戶和賦權(quán)的方式分開導(dǎo)致以上的命令在 MySQL 8.x 上執(zhí)行報(bào)語法錯(cuò)誤。
解決方案
# 創(chuàng)建賬戶
CREATE USER '用戶名'@'訪問主機(jī)' IDENTIFIED BY '密碼';
# 或者修改賬號(hào)
ALTER USER '用戶名'@'訪問主機(jī)' IDENTIFIED BY '密碼';
# 為創(chuàng)建的賬戶賦權(quán)
GRANT '權(quán)限列表' ON '數(shù)據(jù)庫' TO '用戶名'@'訪問主機(jī)';
# 你想一勞永逸不考慮任何安全性的話,什么都給root就好了:
GRANT ALL ON *.* TO 'root'@'%';
# 刷新
FLUSH PRIVILEGES;
驗(yàn)證更改
要驗(yàn)證遠(yuǎn)程用戶是否可以連接到MySQL服務(wù)器,可以運(yùn)行命令
ps:驗(yàn)證之前請(qǐng)確保已經(jīng)重啟mysql服務(wù)器了,配置已經(jīng)生效了!
root@toowhite-MS-7D48:~# systemctl stop mysql
root@toowhite-MS-7D48:~# systemctl start mysql
使用以上步驟創(chuàng)建的賬號(hào)來進(jìn)行登錄測(cè)試:
mysql -u user_name -h mysql_server_ip -p
譬如:
mysql -u root -h 127.0.0.1 -p
其中user_name是您授予遠(yuǎn)程訪問權(quán)限的用戶名,mysql_server_ip是運(yùn)行MySQL服務(wù)器的主機(jī)的IP地址。如果一切設(shè)置正確,您將能夠登錄到遠(yuǎn)程MySQL服務(wù)器。
如果收到類似以下的錯(cuò)誤,則說明端口3306未打開,或者M(jìn)ySQL服務(wù)器未監(jiān)聽IP地址。ERROR 2003 (HY000): Can’t connect to MySQL server on ‘10.8.0.5’ (111)"
“ERROR 1130 (HY000): Host ‘10.8.0.5’ is not allowed to connect to this MySQL server”。錯(cuò)誤表示您嘗試登錄的用戶無權(quán)訪問遠(yuǎn)程MySQL服務(wù)器。