2013-07-13 9 views
8

Quando nel tentativo di inserire un record per la tabella utilizzando phpmyadmin mi dàMySQL errore 1036: tabella è di sola lettura

#1036 - Table 'sch_portfolio' is read only 

Ho visto in alcuni articoli hanno detto che questo potrebbe accadere se il proprietario di questa tabella è qualcosa di diverso da mysql. così ho impostato il proprietario come mysql e riavviato il server. Sto ancora ottenendo lo stesso errore. Qualsiasi aiuto sarebbe molto apprezzato. Grazie in anticipo

drwxrwxrwx 2 mysql mysql  4096 Jul 13 15:27 schooltap 
+0

Si presuppone che il processo 'mysqld' sia in esecuzione con l'utente' mysql'. Quell'utente ha accesso per inserire ogni directory lungo il percorso file? L'utente MySQL con cui ci si collega a mysqld è stato autorizzato a scrivere sul tavolo? – eggyal

+0

Questo succede solo a una tabella/database oa tutti? Forse il server MySQL è in modalità di sola lettura, che è spesso il caso degli slave di replica: controlla http://dev.mysql.com/doc/refman/5.5/en/server-system-variables.html#sysvar_read_only. – Shi

risposta

9

Uno ha bisogno di privilegi di utente super, in genere sudo viene utilizzato per questo.

in ordine Cambiare il proprietario dei file.

sudo chown -R mysql:mysql /var/lib/mysql 

Reboot Mysql per i cambiamenti

sudo service mysql restart 

chi possiede sch_portfolio e quale gruppo sono loro a, dovrebbe essere mysql: mysql. avrete anche bisogno di riavviare mysql per le modifiche abbiano effetto

verificare anche che attualmente connesso utente ha avuto accesso GRANT per aggiornare

Il server MySQL è in esecuzione come user mysql e non come l'utente mi sono collegato in esso con. Per poter accedere ai file che dispongono di soli diritti utente, devono essere di proprietà dell'utente ‘mysql’ poiché è ciò che il server esegue come. Assicurati che la cartella e i file usati da mysql appartengano all'utente 'mysql'. Questi file si trovano nella directory /var/lib/mysql. La directory stessa dovrebbe appartenere anche a ‘mysql’.

+0

Grazie per la tua risposta .. ma l'ho già fatto. sto ancora ricevendo lo stesso errore. – Dilantha

+0

/var/lib/mysql è di proprietà di mysql. e il gruppo utenti è anche impostato come mysql. Come posso controllare che l'utente attualmente loggato abbia l'accesso GRANT per l'aggiornamento? – Dilantha

+0

seleziona * da information_schema.user_privileges dove beneficiario come "'utente'%"; – Ghostman

19

Assicurarsi di non aver impostato innodb_force_recovery> 0 in my.cnf

+1

^QUESTO ha risolto il mio problema quando nessuno degli altri suggerimenti mi è stato di aiuto. Grazie mille! – nathanchere

+0

@dklovedoctor Ho provato questo e ha iniziato a funzionare, ma il problema che sto affrontando è che non posso inserire o aggiornare qualsiasi tabella come il suo dandomi errore # 1036 Tabella "......." è di sola lettura –

+0

Grande ! Ho dimenticato di averlo abilitato!Grazie per il consiglio! – razor7

3

Secondo me, questo è causa di storage engine. Se si è select storage engine as MRG_MYISAM che renderà la tabella solo readable, non è possibile inserire dati. Quindi, select myisam as storage engine ..

0

Ho il sospetto che nel mio caso, questo è stato causato da un anti-malware antivirus nascosto Bytefence (probabilmente, è stato fornito in bundle con qualcos'altro). Il problema era sparito dopo aver disinstallato questo antivirus.