今天莫名的发现网站无法打开,MySQL报错:#1306 Table 'XXX' is read only,此错误明显是数据库目录权限问题,但是之前并没有出现过此错误。经过半天的折腾和分析,终于解决了这个问题。
在说解决过程前,需要先提一下出现此问题的环境。
我的服务器中的MySQL安装目录及MySQL数据目录使用的并非默认的用户权限,而是新建了一个普通用户(如:mysql)进行权限控制,这点也是出于对MySQL数据的安全考虑。使用360云盘同步是采用我前面的博文中提到的采用创建目录联结的方式来进行的,此方法的好处是节约服务器空间,但是现在问题就出现了(所以有时候还是别投机取巧的好)。
现在来具体说一下解决方法。
出现数据表为只读的错误明显是目录权限问题,在仔细查看MySQL数据库安装目录及其子目录的所有权限后,都没发现权限有问题。折腾了半天,在各个表中的文件目录中发现了一点异常,多出了些文件,形如:pre_user(冲突时的文件备份 2014-4-26 09-10-30).MYD,查看此文件以及pre_user.MYD文件的权限可以发现两个文件的用户权限不一致。冲突时的备份文件有权限的用户还是mysql,而没有括号说明的文件有权限的用户则没有mysql,因此可分析出冲突时的文件备份文件是由360云盘在进行文件同步时产生的,但却是将原文件改名为冲突时的文件备份,而pre_user.MYD文件则是由360云盘同步到本地的,所以拥有权限的用户或用户组则有SYSTEM和Users。
删除所有有冲突时的文件备份的新文件,如pre_user.MYD,将冲突时的文件备份改名为这个文件名即可,也可以删除冲突时的文件备份,修改pre_user.MYD文件的权限。
我这里主要是要实现服务器数据的自动备份,所限现在得自己写一个批处理文件来将重要的网站数据定时复制到360云盘的同步文件夹中,实现服务器数据的自动备份。
OK,此问题就算解决了,希望以后不会再出现此类的问题。