最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

數(shù)據(jù)庫MySQL/MariaDB安裝與基礎(chǔ)調(diào)優(yōu)過程

 更新時間:2026年04月30日 09:29:29   作者:計(jì)算機(jī)安禾  
文章主要描述了在Ubuntu上安裝MySQL后的安全配置步驟,并介紹了在日常開發(fā)中如何合理管理用戶和權(quán)限,文章還提到了創(chuàng)建數(shù)據(jù)庫、創(chuàng)建用戶和授予精確權(quán)限的操作方法,最后提到了核心調(diào)優(yōu)參數(shù)的并提供了相關(guān)建議,感興趣的朋友跟隨小編一起看看吧

一、引言:裝完就能用,但千萬別直接用

在Ubuntu上安裝MySQL只需一條命令:

sudo apt update && sudo apt install mysql-server -y

CentOS/RHEL上:

sudo dnf install mysql-server -y

安裝完成后,MySQL默認(rèn)已經(jīng)啟動。但如果你認(rèn)為“裝完就能直接用”,那就太危險了。默認(rèn)安裝的MySQL存在幾個嚴(yán)重安全隱患:

  • root用戶可以無密碼登錄(部分版本)
  • 存在匿名用戶,任何人都有一定權(quán)限訪問數(shù)據(jù)庫
  • 存在test數(shù)據(jù)庫,所有人都能訪問

在生產(chǎn)環(huán)境中,這幾個問題中的任何一個都可能導(dǎo)致數(shù)據(jù)泄露。所以安裝后的第一步,永遠(yuǎn)是安全初始化。

二、mysql_secure_install:安全初始化

MySQL提供了一個交互式腳本mysql_secure_installation,專門用來加固初始安裝。運(yùn)行:

sudo mysql_secure_installation

腳本會依次詢問以下問題,這是最關(guān)鍵的部分,請仔細(xì)閱讀每一項(xiàng)的說明

問題一:配置密碼驗(yàn)證插件

VALIDATE PASSWORD COMPONENT: Would you like to setup VALIDATE PASSWORD component?

這個插件會強(qiáng)制密碼必須滿足一定復(fù)雜度(長度、大小寫、數(shù)字、特殊字符)。建議選擇Yes(輸入y)。如果這是個人學(xué)習(xí)環(huán)境、不想太復(fù)雜,也可以選No。

問題二:設(shè)置root密碼

Please set the password for root here.
New password: _
Re-enter new password: _

如果系統(tǒng)沒有要求輸入初始密碼(如Ubuntu較新版本通過auth_socket而不是密碼驗(yàn)證),系統(tǒng)會直接引導(dǎo)你設(shè)置新密碼。如果提示輸入當(dāng)前密碼而你完全不知道,查看本文最后的FAQ。

問題三:刪除匿名用戶

Remove anonymous users? (Press y|Y for Yes)

必須選Yes。匿名用戶允許任何人無需賬號就能連接數(shù)據(jù)庫,是嚴(yán)重的安全漏洞。

問題四:禁止root遠(yuǎn)程登錄

Disallow root login remotely? (Press y|Y for Yes)

強(qiáng)烈建議選Yes。root只允許本地(127.0.0.1)連接,即使數(shù)據(jù)庫被暴露到公網(wǎng),攻擊者也連不上root。如果你的應(yīng)用需要遠(yuǎn)程管理數(shù)據(jù)庫,應(yīng)該創(chuàng)建專門的遠(yuǎn)程用戶而不是開放root。

問題五:刪除test數(shù)據(jù)庫

Remove test database and access to it? (Press y|Y for Yes)

選Yes。test數(shù)據(jù)庫默認(rèn)所有人可訪問,沒有任何保留價值。

問題六:重新加載權(quán)限表

Reload privilege tables now? (Press y|Y for Yes)

選Yes。讓以上所有修改立即生效。

FAQ:忘記或不知道初始root密碼怎么辦?

Ubuntu新版本(18.04+)使用auth_socket插件認(rèn)證root,在系統(tǒng)root用戶下可以免密直接登錄MySQL:

sudo mysql   # 以系統(tǒng)root身份直接進(jìn)入MySQL,無需密碼

進(jìn)入后可以修改認(rèn)證方式和密碼(參見第三步)。如果這條命令無效,需要用第14篇學(xué)過的單用戶模式或--skip-grant-tables方式繞過認(rèn)證,再重置密碼。

三、用戶與權(quán)限:給誰看什么,誰又能改什么

安全初始化之后,MySQL只保留了root用戶。日常開發(fā)中,我們需要為每個應(yīng)用創(chuàng)建獨(dú)立的數(shù)據(jù)庫和用戶,并授予精確的最小權(quán)限。

3.1 登錄MySQL

sudo mysql -u root -p
# 輸入安全初始化時設(shè)置的密碼

MySQL的命令需要用;結(jié)束??吹教崾痉兂?code>mysql>,就進(jìn)入了MySQL交互界面。

3.2 創(chuàng)建數(shù)據(jù)庫

-- 創(chuàng)建數(shù)據(jù)庫(字符集設(shè)置為 utf8mb4,支持emoji等4字節(jié)字符)
CREATE DATABASE myapp DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;

兩點(diǎn)說明:

  • utf8mb4是真正的UTF-8(MySQL的utf8是閹割版,只支持最多3字節(jié)字符)。任何新項(xiàng)目都應(yīng)該用utf8mb4
  • utf8mb4_unicode_ci中的ci代表大小寫不敏感(case insensitive),適合大多數(shù)文本排序場景

3.3 創(chuàng)建用戶并授權(quán)

-- 創(chuàng)建用戶('用戶名'@'允許從哪里連接')
CREATE USER 'myapp_user'@'localhost' IDENTIFIED BY 'StrongPassword123!';
-- 授予權(quán)限(把 myapp 數(shù)據(jù)庫的所有權(quán)限授予該用戶)
GRANT ALL PRIVILEGES ON myapp.* TO 'myapp_user'@'localhost';
-- 刷新權(quán)限表(讓授權(quán)立即生效)
FLUSH PRIVILEGES;

@后面的主機(jī)部分決定了這個賬號從哪臺機(jī)器可以連接:

寫法含義使用場景
'user'@'localhost'只能從本機(jī)連接應(yīng)用和數(shù)據(jù)庫在同一臺機(jī)器上
'user'@'192.168.1.%'允許特定網(wǎng)段連接應(yīng)用在另一臺服務(wù)器上,需遠(yuǎn)程訪問
'user'@'%'允許任何IP連接非常危險,盡量避免

權(quán)限最小化原則:不要動不動就ALL PRIVILEGES。如果應(yīng)用只需要讀寫數(shù)據(jù),不需要修改表結(jié)構(gòu),使用:

GRANT SELECT, INSERT, UPDATE, DELETE ON myapp.* TO 'myapp_user'@'localhost';

3.4 驗(yàn)證用戶

-- 查看用戶列表
SELECT user, host FROM mysql.user;
-- 查看某用戶的權(quán)限
SHOW GRANTS FOR 'myapp_user'@'localhost';
-- 退出MySQL
EXIT;

然后用新用戶測試連接:

mysql -u myapp_user -p -h 127.0.0.1

四、my.cnf調(diào)優(yōu):三個必須改的參數(shù)

MySQL的默認(rèn)配置面向兼容性,而不是性能。在使用MySQL之前,至少調(diào)整以下三個參數(shù)。配置文件位置:

# Ubuntu/Debian
sudo vim /etc/mysql/mysql.conf.d/mysqld.cnf
# CentOS/RHEL
sudo vim /etc/my.cnf.d/mysql-server.cnf

[mysqld]段下添加或修改參數(shù),修改后重啟生效:sudo systemctl restart mysql。

4.1 innodb_buffer_pool_size:內(nèi)存的核心參數(shù)

[mysqld]
innodb_buffer_pool_size = 1G

這個參數(shù)是MySQL調(diào)優(yōu)最重要的參數(shù),沒有之一。

它的作用是:InnoDB用它來緩存數(shù)據(jù)頁和索引。MySQL頻繁讀寫的數(shù)據(jù)如果都緩存在這里,查詢和寫入就是內(nèi)存速度;緩存不夠就只能頻繁讀寫磁盤,慢兩到三個數(shù)量級。

設(shè)置多大合適?

服務(wù)器內(nèi)存建議值說明
1GB512M最低建議,再小MySQL性能嚴(yán)重下降
2GB-4GB總內(nèi)存 × 50%留一半給操作系統(tǒng)和應(yīng)用程序
8GB+總內(nèi)存 × 70%數(shù)據(jù)庫可以多吃內(nèi)存
獨(dú)服/大內(nèi)存總內(nèi)存 × 80%上限,再多操作系統(tǒng)會換頁

驗(yàn)證是否生效

-- 進(jìn)入MySQL后執(zhí)行
SELECT @@innodb_buffer_pool_size/1024/1024 AS pool_size_MB;

輸出應(yīng)該接近你設(shè)置的值。

4.2 innodb_log_file_size:寫入性能的關(guān)鍵

innodb_log_file_size = 256M

這個參數(shù)控制InnoDB的重做日志(redo log)大小。它的作用像一個“寫入緩沖區(qū)”:數(shù)據(jù)修改先記錄到重做日志,然后慢慢寫入實(shí)際數(shù)據(jù)文件。

設(shè)置過小的癥狀:頻繁的磁盤刷新,寫入性能嚴(yán)重下降。設(shè)置過大的代價:崩潰恢復(fù)時間變長,但不會影響正常運(yùn)行。

建議值:256MB到1GB之間。對于大多數(shù)應(yīng)用,256MB是一個安全的起點(diǎn)。如果你有高并發(fā)寫入場景,可以調(diào)到512MB或更大。

4.3 max_connections:最大連接數(shù)

max_connections = 200

MySQL默認(rèn)最大連接數(shù)通常是151。對于Web應(yīng)用,這個值經(jīng)常不夠用——每個PHP進(jìn)程/Python線程都可能占用一個連接。如果達(dá)到上限,新請求會報Too many connections錯誤。

# 查看當(dāng)前連接數(shù)
mysql -u root -p -e "SHOW STATUS LIKE 'Threads_connected';"

注意:連接數(shù)不是越大越好。每個連接占用內(nèi)存(默認(rèn)約2MB),200個連接可能占400MB內(nèi)存。設(shè)置時確保:max_connections × 每個連接內(nèi)存 不會耗盡服務(wù)器內(nèi)存。

完整建議配置(2GB內(nèi)存服務(wù)器)

[mysqld]
innodb_buffer_pool_size = 1G
innodb_log_file_size = 256M
max_connections = 200
character-set-server = utf8mb4
collation-server = utf8mb4_unicode_ci

五、忘記密碼怎么辦?

如果你忘記了MySQL root密碼,可以繞過認(rèn)證重置:

# 1. 停止MySQL
sudo systemctl stop mysql
# 2. 跳過權(quán)限驗(yàn)證啟動
sudo mysqld_safe --skip-grant-tables &
# 3. 無密碼登錄
mysql -u root
# 4. 在MySQL中重置密碼
FLUSH PRIVILEGES;
ALTER USER 'root'@'localhost' IDENTIFIED BY 'NewStrongPassword123!';
# 5. 退出后正常啟動
sudo pkill mysqld
sudo systemctl start mysql

六、本篇小結(jié)

安全初始化(必做)

sudo mysql_secure_installation

依次確認(rèn):驗(yàn)證密碼插件(按需)→ 設(shè)root密碼 → 刪匿名用戶 → 禁用root遠(yuǎn)程登錄 → 刪test數(shù)據(jù)庫 → 重載權(quán)限。

數(shù)據(jù)庫和用戶管理

操作命令
創(chuàng)建數(shù)據(jù)庫CREATE DATABASE dbname CHARSET utf8mb4;
創(chuàng)建用戶CREATE USER 'user'@'host' IDENTIFIED BY 'password';
授權(quán)GRANT ALL ON dbname.* TO 'user'@'host';
查看權(quán)限SHOW GRANTS FOR 'user'@'host';
生效FLUSH PRIVILEGES;

核心調(diào)優(yōu)參數(shù)

參數(shù)建議值(2GB內(nèi)存)作用
innodb_buffer_pool_size1G緩存數(shù)據(jù)和索引,最重要
innodb_log_file_size256M寫入緩沖,影響寫性能
max_connections200最大連接數(shù)

動手練習(xí)

# 1. (如果是新環(huán)境)運(yùn)行安全初始化
sudo mysql_secure_installation
# 2. 創(chuàng)建練習(xí)數(shù)據(jù)庫和用戶
sudo mysql -u root -p
CREATE DATABASE testdb CHARSET utf8mb4;
CREATE USER 'testuser'@'localhost' IDENTIFIED BY 'TestPass123!';
GRANT SELECT, INSERT, UPDATE, DELETE ON testdb.* TO 'testuser'@'localhost';
FLUSH PRIVILEGES;
EXIT;
# 3. 用新用戶連接測試
mysql -u testuser -p -h 127.0.0.1
# 在MySQL中查看自己有哪些權(quán)限
SHOW GRANTS FOR CURRENT_USER();
EXIT;

七、下篇預(yù)告

有了Web服務(wù)器(Nginx)和數(shù)據(jù)庫(MySQL),開發(fā)團(tuán)隊(duì)還需要一個地方共享文件。下一篇我們將學(xué)習(xí)搭建FTP與Samba文件共享服務(wù)——FTP適合傳統(tǒng)的文件傳輸,Samba則能讓Linux目錄直接出現(xiàn)在Windows的“網(wǎng)絡(luò)鄰居”中,拖拽上傳就像操作本地文件夾。

延伸思考:敏感數(shù)據(jù)(如密碼字段)應(yīng)該直接存儲在數(shù)據(jù)庫里嗎?絕對不要。即使用GRANT限制了用戶權(quán)限,數(shù)據(jù)庫文件被盜或SQL注入仍然可能暴露這些數(shù)據(jù)。正確的做法是存儲密碼的加鹽哈希(如bcrypt),在應(yīng)用層處理加密邏輯。數(shù)據(jù)庫只管“存”,應(yīng)用層負(fù)責(zé)“保護(hù)”。這也是縱深防御原則的一個體現(xiàn)。

到此這篇關(guān)于數(shù)據(jù)庫MySQL/MariaDB安裝與基礎(chǔ)調(diào)優(yōu)過程的文章就介紹到這了,更多相關(guān)MySQL MariaDB安裝調(diào)試內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 快速在Windows上安裝MySQL5.7壓縮包

    快速在Windows上安裝MySQL5.7壓縮包

    這篇文章主要介紹了快速在Windows上安裝MySQL5.7壓縮包的方法,非常不錯,具有參考借鑒價值,需要的朋友可以參考下
    2017-06-06
  • Mysql指定日期區(qū)間的提取方法

    Mysql指定日期區(qū)間的提取方法

    這篇文章主要介紹了Mysql指定日期區(qū)間的提取方法,非常不錯,具有一定的參考借鑒價值,需要的朋友可以參考下
    2018-07-07
  • 解決當(dāng)MySQL數(shù)據(jù)庫遇到Syn Flooding問題

    解決當(dāng)MySQL數(shù)據(jù)庫遇到Syn Flooding問題

    Syn攻擊常見于應(yīng)用服務(wù)器,而數(shù)據(jù)庫服務(wù)器在內(nèi)網(wǎng)中,應(yīng)該很難碰到類似的攻擊,這篇文章主要介紹了當(dāng)MySQL數(shù)據(jù)庫遇到Syn Flooding問題 ,需要的朋友可以參考下
    2019-06-06
  • MySQL服務(wù)啟動全平臺指南:從Windows服務(wù)、Linux systemctl到macOS的完全指南

    MySQL服務(wù)啟動全平臺指南:從Windows服務(wù)、Linux systemctl到macOS的完全指南

    啟動MySQL服務(wù)的方法根據(jù)操作系統(tǒng)的不同而有很大差異,下面我將分別介紹在Windows、Linux(主流的 Systemd 系統(tǒng))和macOS上啟動 MySQL的詳細(xì)步驟,本文給大家介紹的非常詳細(xì),感興趣的朋友一起看看吧
    2025-09-09
  • MYSQL中鎖的分類與加鎖方式小結(jié)

    MYSQL中鎖的分類與加鎖方式小結(jié)

    MySQL通過表級鎖和行級鎖兩種機(jī)制來控制并發(fā)事務(wù)對數(shù)據(jù)的訪問,以避免數(shù)據(jù)不一致、臟讀和幻讀等問題,表級鎖包括顯式鎖、元數(shù)據(jù)鎖和意向鎖,而行級鎖包括記錄鎖、間隙鎖和臨鍵鎖,本文介紹MYSQL中鎖的分類與加鎖方式小結(jié),感興趣的朋友跟隨小編一起看看吧
    2026-03-03
  • MySQL中Innodb的事務(wù)隔離級別和鎖的關(guān)系的講解教程

    MySQL中Innodb的事務(wù)隔離級別和鎖的關(guān)系的講解教程

    這篇文章主要介紹了MySQL中Innodb的事務(wù)隔離級別和鎖的關(guān)系講解教程,來自于美團(tuán)技術(shù)團(tuán)隊(duì)的經(jīng)驗(yàn)實(shí)際經(jīng)驗(yàn)分享,需要的朋友可以參考下
    2015-11-11
  • 一文了解MySQL事務(wù)隔離級別

    一文了解MySQL事務(wù)隔離級別

    這篇文章主要介紹了一文了解MySQL事務(wù)隔離級別,MySQL?事務(wù)隔離級別是為了解決并發(fā)事務(wù)互相干擾的問題的,文章介紹?4?種事物隔離,需要的小伙伴可以學(xué)習(xí)一下
    2022-07-07
  • MySQL數(shù)據(jù)庫存儲引擎的應(yīng)用

    MySQL數(shù)據(jù)庫存儲引擎的應(yīng)用

    存儲引擎是MySQL將數(shù)據(jù)存儲在文件系統(tǒng)中的存儲方式,本文主要介紹了MySQL數(shù)據(jù)庫的存儲引擎的應(yīng)用,具有一定的參考價值,感興趣的可以了解一下
    2024-03-03
  • mysql中json的使用方式詳解

    mysql中json的使用方式詳解

    這篇文章主要介紹了mysql中json的使用,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2023-04-04
  • MySQL如何更改用戶權(quán)限

    MySQL如何更改用戶權(quán)限

    MySQL更改用戶權(quán)限從localhost到%,涉及登錄MySQL、使用GRANT語句更新權(quán)限及RENAMEUSER修改用戶主機(jī)名,強(qiáng)調(diào)安全考慮與數(shù)據(jù)備份的重要性
    2026-05-05

最新評論

秦皇岛市| 灵山县| 峡江县| 京山县| 唐山市| 同仁县| 潞西市| 泰和县| 河东区| 西乌| 四子王旗| 稷山县| 舟山市| 林芝县| 岳阳县| 葫芦岛市| 罗源县| 五大连池市| 友谊县| 宝坻区| 油尖旺区| 大余县| 桃园县| 塔城市| 汽车| 揭东县| 山阴县| 安岳县| 阳信县| 长顺县| 黑河市| 高尔夫| 乌鲁木齐市| 兴海县| 股票| 凤冈县| 马龙县| 郸城县| 瓦房店市| 湘潭县| 喀什市|