sudo netstat -tap | grep mysql
# 輸出含 LISTEN 即啟動成功
# tcp 0 0 localhost:mysql *:* LISTEN 1321/mysqld
若未啟動:sudo systemctl restart mysql(Ubuntu 16.04+)或 sudo /etc/init.d/mysql restart。
mysql -u root -p
# 輸入安裝時設置的密碼
-- 修改密碼(5.7+ 推薦)
ALTER USER 'root'@'localhost' IDENTIFIED BY 'new_strong_pass';
FLUSH PRIVILEGES;
-- 創建庫
CREATE DATABASE app_db CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
-- 唯讀賬號
CREATE USER 'app_read'@'%' IDENTIFIED BY 'read_pass';
GRANT SELECT ON app_db.* TO 'app_read'@'%';
-- 讀寫賬號
CREATE USER 'app_rw'@'%' IDENTIFIED BY 'rw_pass';
GRANT SELECT, INSERT, UPDATE, DELETE ON app_db.* TO 'app_rw'@'%';
-- DDL 賬號(遷腳本用)
CREATE USER 'app_ddl'@'10.0.%.%' IDENTIFIED BY 'ddl_pass';
GRANT CREATE, ALTER, DROP, INDEX ON app_db.* TO 'app_ddl'@'10.0.%.%';
FLUSH PRIVILEGES;
GRANT ... TO 'user'@'%' ...(上文已示例)。sudo vim /etc/mysql/mysql.conf.d/mysqld.cnf
# 找到 bind-address = 127.0.0.1
# 改為 bind-address = 0.0.0.0 (監聽所有網卡)
# 或具體內網 IP:bind-address = 192.168.1.100
sudo systemctl restart mysql
sudo ufw allow from 10.0.0.0/8 to any port 3306 # 僅內網段
# 或
sudo iptables -A INPUT -p tcp --dport 3306 -s 10.0.0.0/8 -j ACCEPT
| 操作 | systemd (Ubuntu 16.04+) | SysVinit (舊版) |
|---|---|---|
| 啟動 | sudo /etc/init.d/mysql start | |
| 停止 | sudo /etc/init.d/mysql stop | |
| 重啟 | sudo /etc/init.d/mysql restart | |
| 狀態 | sudo /etc/init.d/mysql status | |
| 開機自啟 | sudo update-rc.d mysql defaults |
-- 登錄
mysql -u root -p
mysql -h 192.168.1.100 -u app_rw -p
-- 庫操作
SHOW DATABASES;
USE app_db;
CREATE DATABASE new_db CHARSET utf8mb4;
DROP DATABASE old_db;
-- 表操作
SHOW TABLES;
DESC users; -- 或 SHOW COLUMNS FROM users;
CREATE TABLE logs (id BIGINT PRIMARY KEY AUTO_INCREMENT, msg TEXT, created_at DATETIME DEFAULT CURRENT_TIMESTAMP) ENGINE=InnoDB;
DROP TABLE tmp_data;
TRUNCATE TABLE cache_data;
-- 數據操作
SELECT * FROM users LIMIT 10;
INSERT INTO users (name, email) VALUES ('Tom', 'tom@example.com');
UPDATE users SET status=1 WHERE id=100;
DELETE FROM users WHERE last_login < '2023-01-01';
-- 狀態檢查
STATUS; -- 連線資訊、版本、字符集、運行時間
SHOW PROCESSLIST; -- 當前線程
SHOW ENGINE INNODB STATUS\G -- InnoDB 內部狀態
DELETE FROM mysql.user WHERE User='';DELETE FROM mysql.user WHERE User='root' AND Host NOT IN ('localhost','127.0.0.1','::1');DROP DATABASE test; DELETE FROM mysql.db WHERE Db='test' OR Db='test\\_%';validate_password 插件強制密碼複雜度。max_connect_errors=100000 防暴力破解鎖定 Host。FLUSH PRIVILEGES; 同步權限快取。Ubuntu 上 MySQL 從安裝到生產就緒,核心在於 字符集統一 utf8mb4、賬號最小權限、bind-address 開放內網、防火牆精準放行、安全基線加固。掌握上述命令與配置,足以應對 90% 的應用部署場景。