服務器遷移後,網站能讀不能寫,報錯:
#1036 - Table 'xxx' is read only
環境:MySQL 數據目錄 /usr/local/mysql/var,遷移方式:打包 data 目錄上傳解壓。
chmod -R 0777 /usr/local/mysql/var/admin/
admin 為具體數據庫目錄名,遞歸授權所有表文件 (.MYD, .MYI, .frm) 可讀寫執行。
chown -R mysql:mysql /usr/local/mysql/var/admin/
關鍵:MySQL 進程以 mysql 用戶運行,文件屬主不匹配會導致只讀或啟動失敗。
cd /usr/local/mysql/bin ./mysqladmin -u root -p flush-tables
輸入 root 密碼後執行,無輸出即成功。此命令關閉所有打開的表句柄,重新以新權限/所有者打開,解除只讀狀態。
FLUSH TABLES 刷新表緩存,重新獲取文件句柄時應用新權限tar --owner=mysql --group=mysql -czf mysql_data.tar.gz /usr/local/mysql/var 保留屬主ls -ld /usr/local/mysql/varmysqldump 或 xtrabackup,避免文件級複製帶來的表空間 ID 衝突# 檢查權限與屬主
ls -l /usr/local/mysql/var/admin/*.MYD | head -5
# 測試寫入
mysql -u root -p -e "INSERT INTO admin.test_table (col) VALUES ('test');"
# 成功無報錯即修復完成