<p>错误信息如下:</p><pre class="brush:bash;toolbar:false">1209-TheMySQLserverisrunningwiththe--read-onlyoptionsoitcannotexecutethisstatement</pre><p>一般这个错误有两种原因:</p><p>1.连到从库了。从库一般设置为只读。</p><p>2.主库的read_only参数被修改为1</p><p>开发人员是普通用户应该没有权限修改这个参数的值。</p><p>DBA也不会去主动修改这个参数。那究竟是什么原因导致开发库不能写入了呢?</p><p>首先确认了不是开发人员的问题,因为部门的200多位研发都遇到了这个问题。</p><p>为了先解决问题,先去查询主库上read_only参数的值。果然read_only被设置为1.</p><p>手工修改为0后,问题解决。问题是read_only为什么会设置为1呢?</p><p>解决步骤如下:</p><pre class="brush:bash;toolbar:false">mysql>select@@read_only;
+-------------+
|@@read_only|
+-------------+
|1|
+-------------+
1rowinset(0.00sec)
mysql>setglobalread_only=0;
QueryOK,0rowsaffected(0.00sec)</pre><p>检查mysql的错误日志发现有如下信息:</p><pre class="brush:bash;toolbar:false">15123113:55:11mysqld_safeNumberofprocessesrunningnow:0
15123113:55:11mysqld_safemysqldrestarted</pre><p></p><p>由此可知MySQL发生了重启。重启的原因是什么呢?</p><p>检查了系统日志,发现了如下错误:</p><pre class="brush:bash;toolbar:false">#tail-100f/var/log/message
Dec3113:55:11mysql2devkernel:[8680]50086802708492300bash
Dec3113:55:11mysql2devkernel:Outofmemory:Killprocess12805(mysqld)score964orsacrificechild
Dec3113:55:11mysql2devkernel:Killedprocess12805,UID500,(mysqld)total-vm:13146848kB,anon-rss:7870704kB,file-rss:16kB
Dec3113:55:11mysql2devkernel:rsyslogdinvokedoom-killer:gfp_mask=0x201da,order=0,oom_adj=0,oom_score_adj=0
Dec3113:55:11mysql2devkernel:rsyslogdcpuset=/mems_allowed=0-1
Dec3113:55:11mysql2devkernel:Pid:21035,comm:rsyslogdNottainted2.6.32-358.el6.x86_64#1
Dec3113:55:11mysql2devkernel:CallTrace:</pre><p><br/></p><p>由这条错误可知,是由于内存溢出导致了mysql的重启</p><pre class="brush:bash;toolbar:false">Outofmemory:Killprocess12805(mysqld)score964orsacrificechild</pre><p>那是什么导致了内存溢出呢?</p><p>查看了系统的历史命令后发现有同事在做备份,而此时的系统的压力又比较大,且次系统没有设置交换分区,以上原因导致了MySQL的重启。<br/></p><p>Swap: 0 0 0</p><p>为什么重启会导致read_only=1呢? 可能是配置文件中设置了read_only ,检查配置文件</p><pre class="brush:bash;toolbar:false">#grepread_onlymy.cnf
read_only=on</pre><p><br/></p><p>这时开发环境突然不能写入的原因终于水落石出了。</p><p>你可能会问,主库为什么设置read_only=on呢,因为原来是一个MMM环境。</p><p>现在已经把MMM环境摘掉,所以将配置文件中的read_only 设置为0,至此开发库不能写入问题宣告解决。<br/></p>