學習參考鏈接:https://www.runoob.com/mysql/mysql-tutorial.html
Windows 安裝MYSQL服務端的步驟:https://www.runoob.com/w3cnote/windows10-mysql-installer.html
1. 概念學習
MySQL 是一種關聯數據庫管理系統,關聯數據庫將數據保存在不同的表中,而不是將所有數據放在一個大倉庫內,這樣就增加了速度并提高了靈活性。
MySQL 使用標準的 SQL 數據語言形式。
MySQL 是可以定制的,采用了 GPL 協議,你可以修改源碼來開發自己的 MySQL 系統。
- 表頭(header): 每一列的名稱;
- 列(col): 具有相同數據類型的數據的集合;
- 行(row): 每一行用來描述某條記錄的具體信息;
- 值(value): 行的具體信息, 每個值必須與該列的數據類型相同;
- 鍵(key): 鍵的值在當前列中具有唯一性。
2. MySQL權限管理
客戶端連接權限
CREATE USER 'username'@'host' IDENTIFIED BY 'password';
表管理權限
GRANT privileges ON database_name.* TO 'username'@'host';
3. MySQL配置文件
/etc/my.cnf 文件配置
/etc/my.cnf 文件是 MySQL 配置文件,用于配置 MySQL 服務器的各種參數和選項。
一般情況下,你不需要修改該配置文件,該文件默認配置如下:
[mysqld]
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock[mysql.server]
user=mysql
basedir=/var/lib[safe_mysqld]
err-log=/var/log/mysqld.log
pid-file=/var/run/mysqld/mysqld.pid
在配置文件中,你可以指定不同的錯誤日志文件存放的目錄,一般你不需要改動這些配置。
/etc/my.cnf 文件在不同的系統和 MySQL 版本中可能有所不同,但是一般包含以下幾個部分:
- 基本設置
basedir: MySQL 服務器的基本安裝目錄。
datadir: 存儲 MySQL 數據文件的位置。
socket: MySQL 服務器的 Unix 套接字文件路徑。
pid-file: 存儲當前運行的 MySQL 服務器進程 ID 的文件路徑。
port: MySQL 服務器監聽的端口號,默認是 3306。 - 服務器選項
bind-address: 指定 MySQL 服務器監聽的 IP 地址,可以是 IP 地址或主機名。
server-id: 在復制配置中,為每個 MySQL 服務器設置一個唯一的標識符。
default-storage-engine: 默認的存儲引擎,例如 InnoDB 或 MyISAM。
max_connections: 服務器可以同時維持的最大連接數。
thread_cache_size: 線程緩存的大小,用于提高新連接的啟動速度。
query_cache_size: 查詢緩存的大小,用于提高相同查詢的效率。
default-character-set: 默認的字符集。
collation-server: 服務器的默認排序規則。 - 性能調優
innodb_buffer_pool_size: InnoDB 存儲引擎的緩沖池大小,這是 InnoDB 性能調優中最重要的參數之一。
key_buffer_size: MyISAM 存儲引擎的鍵緩沖區大小。
table_open_cache: 可以同時打開的表的緩存數量。
thread_concurrency: 允許同時運行的線程數。 - 安全設置
skip-networking: 禁止 MySQL 服務器監聽網絡連接,僅允許本地連接。
skip-grant-tables: 以無需密碼的方式啟動 MySQL 服務器,通常用于恢復忘記的 root 密碼,但這是一個安全風險。
auth_native_password=1: 啟用 MySQL 5.7 及以上版本的原生密碼認證。 - 日志設置
log_error: 錯誤日志文件的路徑。
general_log: 記錄所有客戶端連接和查詢的日志。
slow_query_log: 記錄執行時間超過特定閾值的慢查詢。
log_queries_not_using_indexes: 記錄未使用索引的查詢。 - 復制設置
master_host 和 master_user: 主服務器的地址和復制用戶。
master_password: 復制用戶的密碼。
master_log_file 和 master_log_pos: 用于復制的日志文件和位置。
4. MySQL表格
表格的列屬性
MySQL 數據類型
MySQL 中定義數據字段的類型對你數據庫的優化是非常重要的。
MySQL 支持多種類型,大致可以分為三類:數值、日期/時間和字符串(字符)類型。
5. MySQL客戶端
安裝 MySQL 后,你可以通過以下幾種方式連接到 MySQL 服務端:
1、使用命令行客戶端連接
2、使用圖形化工具連接
常用 MySQL 圖形化管理工具:
MySQL Workbench(官方工具):https://www.mysql.com/cn/products/workbench/
Navicat(付費):https://www.navicat.com/
DBeaver:https://dbeaver.io/
phpMyAdmin(基于Web):https://www.phpmyadmin.net/
DbGate下載地址:https://dbgate.org/download/
6. python使用MySQL數據庫
pip install mysql-connector-python
pip install pymysql
ORM 框架
對于復雜應用,可以考慮使用 ORM (對象關系映射) 框架,如 SQLAlchemy 或 Django ORM。
7. 防止SQL注入
防范 SQL 注入:
使用參數化查詢或預編譯語句: 使用參數化查詢(Prepared Statements)可以有效防止 SQL 注入,因為它們在執行查詢之前將輸入數據與查詢語句分離。
輸入驗證和轉義: 對用戶輸入進行適當的驗證,并使用合適的轉義函數(如mysqli_real_escape_string)來處理輸入,以防止惡意注入。
最小權限原則: 給予數據庫用戶最小的權限,確保它們只能執行必要的操作,以降低潛在的損害。
使用ORM框架: 使用對象關系映射(ORM)框架(如Hibernate、Sequelize)可以幫助抽象 SQL 查詢,從而降低 SQL 注入的風險。
禁用錯誤消息顯示: 在生產環境中,禁用顯示詳細的錯誤消息,以防止攻擊者獲取有關數據庫結構的敏感信息。