MySQL誤刪數(shù)據(jù)恢復(fù)的操作指南
一、文檔說明
本文檔適用于 MySQL 數(shù)據(jù)庫(kù)中數(shù)據(jù)被誤刪(如 TRUNCATE/DELETE 操作)后的恢復(fù)場(chǎng)景,涵蓋 binlog 驗(yàn)證、數(shù)據(jù)提取、格式轉(zhuǎn)換、批量導(dǎo)入 全流程。
本文檔以 labeems 庫(kù)的 meter_data 表為例,適配物聯(lián)網(wǎng)場(chǎng)景下的時(shí)序數(shù)據(jù)恢復(fù),也可通用到其他業(yè)務(wù)表。
二、前置條件
- 服務(wù)器環(huán)境:Linux(CentOS 8/openEuler/Ubuntu 均可)
- MySQL 版本:5.7+ / 8.0+
- 核心依賴:MySQL 已開啟 binlog(二進(jìn)制日志)
- 權(quán)限要求:操作需使用
root用戶,或具備SELECT/FILE/SUPER權(quán)限的數(shù)據(jù)庫(kù)賬戶
三、核心概念
| 術(shù)語(yǔ) | 說明 |
|---|---|
| binlog | MySQL 二進(jìn)制日志,記錄所有數(shù)據(jù)修改操作,是誤刪恢復(fù)的核心依據(jù) |
| ROW 模式 | binlog 的一種格式,記錄行級(jí)數(shù)據(jù)變更,恢復(fù)精度最高,本文檔默認(rèn)此模式 |
mysqlbinlog | MySQL 官方工具,用于解析 binlog 文件內(nèi)容 |
INSERT IGNORE | 插入數(shù)據(jù)時(shí)跳過主鍵/唯一索引重復(fù)的行,避免恢復(fù)時(shí)的 1062 錯(cuò)誤 |
四、恢復(fù)操作全流程
步驟1:驗(yàn)證 binlog 是否開啟(關(guān)鍵前提)
1.1 登錄 MySQL 終端
mysql -u root -p
輸入 root 密碼后進(jìn)入 MySQL 命令行。
1.2 查詢 binlog 狀態(tài)
執(zhí)行以下 SQL 命令,確認(rèn) binlog 配置:
-- 核心查詢:是否開啟 binlog show variables like 'log_bin'; -- 擴(kuò)展查詢:binlog 存儲(chǔ)路徑、格式 show variables like '%binlog%';
- 結(jié)果解讀
log_bin值為ON表示已開啟,OFF表示未開啟(未開啟則無法通過 binlog 恢復(fù))log_bin_basename為 binlog 文件存儲(chǔ)路徑(如/var/lib/mysql/binlog.000032)binlog_format推薦為ROW,行級(jí)日志恢復(fù)精度最高
步驟2:提取 binlog 中的誤刪數(shù)據(jù)
2.1 解析 binlog 到文本文件
使用 mysqlbinlog 工具,篩選目標(biāo)表的日志并導(dǎo)出為文本:
# 替換為實(shí)際的 binlog 文件路徑(如 binlog.000032) mysqlbinlog --base64-output=DECODE-ROWS --verbose /var/lib/mysql/binlog.000032 | grep -A 10 -B 5 'labeems`.`meter_data' > 數(shù)據(jù)記錄2.txt # 恢復(fù)指定時(shí)間前所有數(shù)據(jù)的解析指令(核心補(bǔ)充) # 方式1:僅按時(shí)間篩選(恢復(fù)到指定時(shí)間前的所有數(shù)據(jù)) mysqlbinlog --stop-datetime="2025-12-05 10:00:00" --base64-output=DECODE-ROWS /var/lib/mysql/binlog.000032 > /root/binlog_before_time.sql # 方式2:時(shí)間+表名雙重篩選(精準(zhǔn)恢復(fù)指定表到指定時(shí)間前的數(shù)據(jù)) mysqlbinlog --stop-datetime="2025-12-05 10:00:00" --base64-output=DECODE-ROWS --verbose /var/lib/mysql/binlog.000032 | grep -A 10 -B 5 'labeems`.`meter_data' > /var/lib/mysql/數(shù)據(jù)記錄.txt # 方式3:多binlog文件按時(shí)間篩選(恢復(fù)多個(gè)文件中指定時(shí)間前的所有數(shù)據(jù)) mysqlbinlog --stop-datetime="2025-12-05 10:00:00" /var/lib/mysql/binlog.000030 /var/lib/mysql/binlog.000031 /var/lib/mysql/binlog.000032 > /root/all_binlog_before_time.sql
- 參數(shù)說明
--base64-output=DECODE-ROWS:解碼 ROW 模式的 binlog 內(nèi)容--verbose:輸出詳細(xì)的行數(shù)據(jù)變更記錄--stop-datetime="2025-12-05 10:00:00":核心參數(shù),僅解析/恢復(fù)該時(shí)間點(diǎn)之前的所有數(shù)據(jù)(格式:YYYY-MM-DD HH:MM:SS)grep:篩選目標(biāo)表labeems.meter_data的日志片段
2.2 驗(yàn)證解析結(jié)果
執(zhí)行以下命令,查看解析后的文件是否包含有效數(shù)據(jù)行:
# 查看前 50 行內(nèi)容,確認(rèn)是否有 @1-@8 字段 head -50 /var/lib/mysql/數(shù)據(jù)記錄.txt
- 正常結(jié)果示例
### INSERT INTO `labeems`.`meter_data` ### SET ### @1=415455 ### @2='4006' ### @3=1754579818 ### @4=1754579820 ### @5=4325.81 ### @6=0.00 ### @7=0.00 ### @8=0.00
步驟3:數(shù)據(jù)格式轉(zhuǎn)換(binlog → 可執(zhí)行 SQL)
3.1 編寫轉(zhuǎn)換腳本(批量生成 INSERT 語(yǔ)句)
新建腳本文件 binlog2sql.sh,用于將 binlog 文本轉(zhuǎn)換為批量恢復(fù) SQL:
vim /root/binlog2sql.sh
粘貼以下內(nèi)容:
#!/bin/bash
# 原始 binlog 文件
INPUT="/var/lib/mysql/數(shù)據(jù)記錄.txt"
# 最終批量 SQL 文件
OUTPUT="meter_data_restore.sql"
# 每2000行合并1條INSERT(83萬(wàn)條僅生成415條)
BATCH_SIZE=2000
# 清空文件,寫入基礎(chǔ)配置
> $OUTPUT
echo "USE labeems;" >> $OUTPUT
echo "SET AUTOCOMMIT=0; BEGIN;" >> $OUTPUT
echo "SET FOREIGN_KEY_CHECKS=0; SET UNIQUE_CHECKS=0;" >> $OUTPUT
# 核心:提取@1-@8并批量拼接VALUES(保留原始單引號(hào))
awk -v bs=$BATCH_SIZE '
BEGIN {
# 初始化存儲(chǔ)數(shù)組和計(jì)數(shù)器
vals[1] = ""; vals[2] = ""; vals[3] = ""; vals[4] = "";
vals[5] = ""; vals[6] = ""; vals[7] = ""; vals[8] = "";
count=0; # 累計(jì)行數(shù)
batch_vals=""; # 存儲(chǔ)批量VALUES內(nèi)容
}
# 匹配@1-@8行,提取值(保留所有原始格式)
/### @1=/ { vals[1] = substr($0, index($0,"=")+1); gsub(/ /,"",vals[1]); }
/### @2=/ { vals[2] = substr($0, index($0,"=")+1); gsub(/ /,"",vals[2]); }
/### @3=/ { vals[3] = substr($0, index($0,"=")+1); gsub(/ /,"",vals[3]); }
/### @4=/ { vals[4] = substr($0, index($0,"=")+1); gsub(/ /,"",vals[4]); }
/### @5=/ { vals[5] = substr($0, index($0,"=")+1); gsub(/ /,"",vals[5]); }
/### @6=/ { vals[6] = substr($0, index($0,"=")+1); gsub(/ /,"",vals[6]); }
/### @7=/ { vals[7] = substr($0, index($0,"=")+1); gsub(/ /,"",vals[7]); }
/### @8=/ {
vals[8] = substr($0, index($0,"=")+1); gsub(/ /,"",vals[8]);
# 拼接單條VALUES
single_val = sprintf("(%s, %s, %s, %s, %s, %s, %s, %s)",
vals[1], vals[2], vals[3], vals[4], vals[5], vals[6], vals[7], vals[8]);
# 累計(jì)到批量變量中
batch_vals = batch_vals single_val ",";
count++;
# 每BATCH_SIZE行生成1條批量INSERT
if (count % bs == 0) {
# 去掉最后一個(gè)逗號(hào)
sub(/,$/, "", batch_vals);
# 寫入批量INSERT(用IGNORE跳過重復(fù)主鍵)
print "INSERT IGNORE INTO meter_data (id, meter_code, read_time, insert_time, meter_data, i, u, p) VALUES " batch_vals ";" >> "'"$OUTPUT"'";
batch_vals=""; # 清空批量變量
}
}
# 處理最后一批不足BATCH_SIZE的行
END {
if (batch_vals != "") {
sub(/,$/, "", batch_vals);
print "INSERT IGNORE INTO meter_data (id, meter_code, read_time, insert_time, meter_data, i, u, p) VALUES " batch_vals ";" >> "'"$OUTPUT"'";
}
}
' $INPUT >> $OUTPUT
# 寫入事務(wù)結(jié)束和配置恢復(fù)
echo "COMMIT;" >> $OUTPUT
echo "SET FOREIGN_KEY_CHECKS=1; SET UNIQUE_CHECKS=1;" >> $OUTPUT
echo "SELECT COUNT(*) AS '導(dǎo)入總行數(shù)' FROM meter_data;" >> $OUTPUT
# 驗(yàn)證生成結(jié)果
insert_count=$(grep -c "INSERT IGNORE INTO" $OUTPUT)
total_rows=$(grep -o "(" $OUTPUT | wc -l)
echo "? 批量 SQL 生成完成!文件路徑:$OUTPUT"
echo "?? 批量INSERT數(shù)量:$insert_count 條(每$BATCH_SIZE行1條)"
echo "?? 預(yù)估數(shù)據(jù)總行數(shù):$total_rows 行"
3.2 執(zhí)行轉(zhuǎn)換腳本
# 添加執(zhí)行權(quán)限 chmod +x /root/binlog2sql.sh # 運(yùn)行腳本 /root/binlog2sql.sh
執(zhí)行成功后,會(huì)在 /root 目錄下生成 meter_data_restore.sql 文件。
步驟4:批量導(dǎo)入恢復(fù)數(shù)據(jù)
4.1 執(zhí)行恢復(fù) SQL
# 基礎(chǔ)批量導(dǎo)入(通用) mysql -u root -p < /root/meter_data_restore.sql # 直接恢復(fù)指定時(shí)間前的binlog數(shù)據(jù)(無需生成中間SQL) mysqlbinlog --stop-datetime="2025-12-05 10:00:00" /var/lib/mysql/binlog.000032 | mysql -u root -p
輸入 root 密碼后,等待導(dǎo)入完成。
4.2 驗(yàn)證恢復(fù)結(jié)果
執(zhí)行以下命令,驗(yàn)證數(shù)據(jù)是否恢復(fù)成功:
# 查看恢復(fù)總行數(shù) mysql -u root -p -e "USE labeems; SELECT COUNT(*) AS '實(shí)際恢復(fù)行數(shù)' FROM meter_data;" # 驗(yàn)證指定數(shù)據(jù)行 mysql -u root -p -e "USE labeems; SELECT id, meter_code, meter_data FROM meter_data WHERE id IN (415455,415456);"
- 正常結(jié)果示例
+----------------+ | 實(shí)際恢復(fù)行數(shù) | +----------------+ | 830000 | +----------------+
步驟5:異常處理(常見錯(cuò)誤及解決方案)
| 錯(cuò)誤代碼 | 錯(cuò)誤描述 | 解決方案 |
|---|---|---|
| 1062 | Duplicate entry ‘xxx’ for key ‘PRIMARY’ | 使用 INSERT IGNORE 替代 INSERT,跳過重復(fù)主鍵行;批量替換:sed -i 's/INSERT INTO/INSERT IGNORE INTO/g' 恢復(fù).sql |
| 1136 | Column count doesn’t match value count | 腳本中已增加字段值非空校驗(yàn),跳過缺失值的行;定位錯(cuò)誤行:awk -F'[(),]' '/INSERT/ {if(NF%8!=0) print NR,$0}' 恢復(fù).sql |
| 1290 | –secure-file-priv option 限制 | 將 SQL/CSV 文件移動(dòng)到 secure_file_priv 指定目錄(如 /var/lib/mysql-files/) |
| 權(quán)限不足 | Permission denied | 執(zhí)行 chown mysql:mysql /var/lib/mysql/數(shù)據(jù)記錄.txt 賦予文件權(quán)限 |
步驟6:兜底方案(逐條插入,適配極端場(chǎng)景)
若批量導(dǎo)入持續(xù)報(bào)錯(cuò),改用逐條插入方式(犧牲速度,保證成功率):
# 生成逐條 INSERT IGNORE 語(yǔ)句
awk '
BEGIN {
print "USE labeems; SET FOREIGN_KEY_CHECKS=0; SET UNIQUE_CHECKS=0;"
vals[1] = ""; vals[2] = ""; vals[3] = ""; vals[4] = "";
vals[5] = ""; vals[6] = ""; vals[7] = ""; vals[8] = "";
}
/### @1=/ { vals[1] = substr($0, index($0,"=")+1); gsub(/ /,"",vals[1]); }
/### @2=/ { vals[2] = substr($0, index($0,"=")+1); gsub(/ /,"",vals[2]); }
/### @3=/ { vals[3] = substr($0, index($0,"=")+1); gsub(/ /,"",vals[3]); }
/### @4=/ { vals[4] = substr($0, index($0,"=")+1); gsub(/ /,"",vals[4]); }
/### @5=/ { vals[5] = substr($0, index($0,"=")+1); gsub(/ /,"",vals[5]); }
/### @6=/ { vals[6] = substr($0, index($0,"=")+1); gsub(/ /,"",vals[6]); }
/### @7=/ { vals[7] = substr($0, index($0,"=")+1); gsub(/ /,"",vals[7]); }
/### @8=/ {
vals[8] = substr($0, index($0,"=")+1); gsub(/ /,"",vals[8]);
if (vals[1] != "" && vals[2] != "" && vals[3] != "" && vals[4] != "" &&
vals[5] != "" && vals[6] != "" && vals[7] != "" && vals[8] != "") {
printf "INSERT IGNORE INTO meter_data (id, meter_code, read_time, insert_time, meter_data, i, u, p) VALUES (%s, %s, %s, %s, %s, %s, %s, %s);\n",
vals[1], vals[2], vals[3], vals[4], vals[5], vals[6], vals[7], vals[8];
}
}
END {
print "SET FOREIGN_KEY_CHECKS=1; SET UNIQUE_CHECKS=1; SELECT COUNT(*) FROM meter_data;"
}
' /var/lib/mysql/數(shù)據(jù)記錄.txt > /root/meter_data_single.sql
# 逐條導(dǎo)入(83 萬(wàn)條約 20 分鐘)
mysql -u root -p < /root/meter_data_single.sql
五、預(yù)防措施(關(guān)鍵!避免再次誤刪)
開啟 binlog 并配置合理策略
編輯 /etc/my.cnf 文件,添加以下配置:
[mysqld] log_bin = /var/lib/mysql/mysql-bin # 開啟 binlog server_id = 1 # 必須配置,唯一值 binlog_format = ROW # 行模式,恢復(fù)精度最高 expire_logs_days = 7 # 自動(dòng)清理 7 天前的 binlog
配置完成后,重啟 MySQL 服務(wù):systemctl restart mysqld
定期備份
每日?qǐng)?zhí)行全量備份,結(jié)合 binlog 實(shí)現(xiàn)增量恢復(fù):
# 全量備份腳本示例 mysqldump -u root -p --all-databases > /backup/mysql_full_$(date +%Y%m%d).sql
限制高危操作權(quán)限
普通用戶禁止授予 TRUNCATE/DROP 權(quán)限,僅 DBA 可執(zhí)行高危操作。
操作前校驗(yàn)
執(zhí)行 TRUNCATE/DELETE 前,先執(zhí)行 SELECT 確認(rèn)數(shù)據(jù)范圍,避免誤刪。
使用軟刪除
業(yè)務(wù)層面用 is_delete 字段替代物理刪除,例如:
UPDATE meter_data SET is_delete=1 WHERE id=xxx;
六、附錄
1. binlog 常用命令
# 查看所有 binlog 文件 mysql -u root -p -e "show binary logs;" # 解析指定時(shí)間范圍的 binlog mysqlbinlog --start-datetime="2025-12-01 00:00:00" --stop-datetime="2025-12-10 23:59:59" /var/lib/mysql/binlog.000032 > /root/binlog_range.sql # 恢復(fù)指定時(shí)間前所有數(shù)據(jù)(直接執(zhí)行) mysqlbinlog --stop-datetime="2025-12-05 10:00:00" /var/lib/mysql/binlog.000032 | mysql -u root -p # 多binlog文件按時(shí)間恢復(fù) mysqlbinlog --stop-datetime="2025-12-05 10:00:00" /var/lib/mysql/binlog.000030 /var/lib/mysql/binlog.000031 /var/lib/mysql/binlog.000032 | mysql -u root -p
2. 數(shù)據(jù)備份/恢復(fù)常用工具
| 工具 | 說明 | 適用場(chǎng)景 |
|---|---|---|
mysqldump | 邏輯備份工具 | 中小型數(shù)據(jù)庫(kù)全量備份 |
xtrabackup | 物理備份工具(Percona) | 大型數(shù)據(jù)庫(kù)增量備份 |
mysqlbinlog | binlog 解析工具 | 誤刪數(shù)據(jù)增量恢復(fù)/指定時(shí)間恢復(fù) |
3. 緊急聯(lián)系
若恢復(fù)過程中遇到無法解決的問題,可:
- 查看 MySQL 錯(cuò)誤日志:
tail -f /var/log/mysqld.log - 聯(lián)系 DBA 或數(shù)據(jù)庫(kù)運(yùn)維人員
- 提交 MySQL 官方社區(qū)工單:https://forums.mysql.com/
七、MySQL 誤刪數(shù)據(jù)恢復(fù)速查命令清單
1. binlog 基礎(chǔ)操作命令
| 操作目的 | 執(zhí)行命令 | 說明 |
|---|---|---|
| 查看 binlog 狀態(tài) | mysql -u root -p -e "show variables like 'log_bin%';" | 檢查是否開啟及存儲(chǔ)路徑 |
| 列出所有 binlog 文件 | mysql -u root -p -e "show binary logs;" | 查看文件列表及大小 |
| 解析指定 binlog | mysqlbinlog --base64-output=DECODE-ROWS --verbose 文件名 > 輸出.txt | 解碼為可讀文本 |
| 按時(shí)間篩選解析 | mysqlbinlog --start-datetime="2025-12-01 00:00:00" --stop-datetime="2025-12-10 23:59:59" 文件名 > 輸出.txt | 精準(zhǔn)定位誤刪時(shí)間范圍 |
| 恢復(fù)指定時(shí)間前所有數(shù)據(jù) | `mysqlbinlog --stop-datetime=“2025-12-05 10:00:00” 文件名 | mysql -u root -p` |
| 按表篩選解析 | `mysqlbinlog 文件名 | grep -A 10 -B 5 ‘庫(kù)名.表名’ > 輸出.txt` |
2. 數(shù)據(jù)提取與轉(zhuǎn)換命令
| 操作目的 | 執(zhí)行命令 | 說明 |
|---|---|---|
| 生成批量恢復(fù) SQL | chmod +x /root/binlog2sql.sh && /root/binlog2sql.sh | 執(zhí)行轉(zhuǎn)換腳本生成批量 INSERT |
| 生成逐條恢復(fù) SQL | awk -f /root/single_sql.awk 數(shù)據(jù)記錄.txt > 恢復(fù).sql | 適配極端錯(cuò)誤場(chǎng)景 |
| 檢查 SQL 語(yǔ)法正確性 | `head -100 恢復(fù).sql | mysql -u root -p -v` |
| 統(tǒng)計(jì)恢復(fù)數(shù)據(jù)量 | `grep -o “(” 恢復(fù).sql | wc -l` |
3. 數(shù)據(jù)導(dǎo)入與驗(yàn)證命令
| 操作目的 | 執(zhí)行命令 | 說明 |
|---|---|---|
| 批量導(dǎo)入數(shù)據(jù) | mysql -u root -p < /root/meter_data_restore.sql | 高效導(dǎo)入大批量數(shù)據(jù) |
| 逐條導(dǎo)入數(shù)據(jù) | mysql -u root -p < /root/meter_data_single.sql | 犧牲速度保證成功率 |
| 驗(yàn)證恢復(fù)總行數(shù) | mysql -u root -p -e "USE 庫(kù)名; SELECT COUNT(*) FROM 表名;" | 確認(rèn)整體恢復(fù)情況 |
| 驗(yàn)證指定數(shù)據(jù) | mysql -u root -p -e "USE 庫(kù)名; SELECT * FROM 表名 WHERE id IN (xxx,xxx);" | 精準(zhǔn)校驗(yàn)關(guān)鍵數(shù)據(jù)行 |
| 檢查重復(fù)數(shù)據(jù) | mysql -u root -p -e "USE 庫(kù)名; SELECT id,COUNT(*) FROM 表名 GROUP BY id HAVING COUNT(*)>1;" | 排查主鍵重復(fù)問題 |
4. 異常處理命令
| 錯(cuò)誤類型 | 執(zhí)行命令 | 說明 |
|---|---|---|
| 1062 主鍵重復(fù) | sed -i 's/INSERT INTO/INSERT IGNORE INTO/g' 恢復(fù).sql | 全局替換跳過重復(fù)行 |
| 1136 列數(shù)不匹配 | awk -F'[(),]' '/INSERT/ {if(NF%8!=0) print NR,$0}' 恢復(fù).sql | 定位錯(cuò)誤行并修正 |
| 權(quán)限不足 | chown mysql:mysql 數(shù)據(jù)文件.txt && chmod 644 數(shù)據(jù)文件.txt | 賦予文件正確權(quán)限 |
| 查看錯(cuò)誤日志 | tail -f /var/log/mysqld.log | 實(shí)時(shí)監(jiān)控導(dǎo)入錯(cuò)誤詳情 |
5. 預(yù)防操作命令
| 操作目的 | 執(zhí)行命令 | 說明 |
|---|---|---|
| 開啟 binlog 配置 | echo -e "[mysqld]\nlog_bin=/var/lib/mysql/mysql-bin\nserver_id=1\nbinlog_format=ROW" >> /etc/my.cnf | 配置行模式 binlog |
| 重啟 MySQL 生效 | systemctl restart mysqld && systemctl enable mysqld | 重啟服務(wù)并設(shè)置開機(jī)自啟 |
| 全量備份數(shù)據(jù)庫(kù) | mysqldump -u root -p --all-databases > /backup/mysql_$(date +%Y%m%d).sql | 每日定時(shí)執(zhí)行全量備份 |
| 限制高危權(quán)限 | mysql -u root -p -e "REVOKE TRUNCATE,DELETE ON *.* FROM '普通用戶'@'localhost';" | 回收普通用戶高危權(quán)限 |
以上就是MySQL誤刪數(shù)據(jù)恢復(fù)的操作指南的詳細(xì)內(nèi)容,更多關(guān)于MySQL誤刪數(shù)據(jù)恢復(fù)操作的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
利用phpmyadmin設(shè)置mysql的權(quán)限方法
這篇文章主要介紹了如何利用phpmyadmin設(shè)置mysql的權(quán)限方法,需要的朋友可以參考下2018-03-03
一種簡(jiǎn)單的ID生成策略: Mysql表生成全局唯一ID的實(shí)現(xiàn)
這篇文章主要介紹了一種簡(jiǎn)單的ID生成策略: Mysql表生成全局唯一ID的實(shí)現(xiàn),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2020-11-11
關(guān)于join?on和where執(zhí)行順序分析
這篇文章主要介紹了join?on和where執(zhí)行順序,如果是inner?join,?放on和放where產(chǎn)生的結(jié)果一樣,?執(zhí)行計(jì)劃也是一樣,但推薦使用on,本文對(duì)join?on和where執(zhí)行順序給大家詳細(xì)講解,需要的朋友可以參考下2023-03-03
MYSQL索引建立需要注意以下幾點(diǎn)細(xì)節(jié)
建立MYSQL索引時(shí)需要注意以下幾點(diǎn):建立索引的時(shí)機(jī)/對(duì)于like/對(duì)于有多個(gè)條件的/開啟索引緩存/建立索引是有代價(jià)的等等,感興趣的你可以參考下本文,或許可以幫助到你2013-03-03
Mysql 執(zhí)行一條語(yǔ)句的整個(gè)過程詳細(xì)
這篇文章主要介紹了Mysql 執(zhí)行一條語(yǔ)句的整個(gè)詳細(xì)過程,Mysql的邏輯架構(gòu)整體分為兩部分,Server層和存儲(chǔ)引擎層,下面文章內(nèi)容具有一定的參考價(jià)值,需要的小伙伴可以參考一下,希望對(duì)你有所幫助2022-02-02
關(guān)于mysql中string和number的轉(zhuǎn)換問題
這篇文章主要介紹了關(guān)于mysql中string和number的轉(zhuǎn)換問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-06-06

