問題說明:
在進行mysql數(shù)據(jù)導(dǎo)出到文件時嫁蛇,指定了其他的磁盤目錄夭谤,導(dǎo)致執(zhí)行sql時出現(xiàn)
Can't create/write to file 'xxxx.txt' (Errcode: 13 - Permission denied) 的報錯回窘。
原因分析:
該報錯表示權(quán)限不對,但是我明明給了 chmod -R 777俺猿、chown -R mysql.mysql的權(quán)限乔煞,重啟msyql后還是報錯褂傀。
我的系統(tǒng)是ubunbu16.04啸罢,在ubuntu下有一個apparmor服務(wù)编检,apparmor用來控制應(yīng)用的權(quán)限,所以如果mysql需要指定除默認路徑外的其他路徑時伺糠,也需要修改apparmor的相關(guān)權(quán)限
解決方法:
一蒙谓、備份/etc/apparmor.d/usr.sbin.mysqld文件,注意需要將這個文件備份到其他地方训桶,如果還是備份在/etc/apparmor.d/目錄下會導(dǎo)致沖突,該目錄下不是以文件后綴名來識別的酣倾。
cp /etc/apparmor.d/usr.sbin.mysqld /tmp/
二舵揭、以下是該文件內(nèi)容:vim /etc/apparmor.d/usr.sbin.mysqld
# vim:syntax=apparmor
# Last Modified: Tue Feb 09 15:28:30 2016
#include <tunables/global>
/usr/sbin/mysqld {
#include <abstractions/base>
#include <abstractions/nameservice>
#include <abstractions/user-tmp>
#include <abstractions/mysql>
#include <abstractions/winbind>
# Allow system resource access
/sys/devices/system/cpu/ r,
capability sys_resource,
capability dac_override,
capability setuid,
capability setgid,
# Allow network access
network tcp,
/etc/hosts.allow r,
/etc/hosts.deny r,
# Allow config access
/etc/mysql/** r,
# Allow pid, socket, socket lock file access
/var/run/mysqld/mysqld.pid rw,
/var/run/mysqld/mysqld.sock rw,
/var/run/mysqld/mysqld.sock.lock rw,
/run/mysqld/mysqld.pid rw,
/run/mysqld/mysqld.sock rw,
/run/mysqld/mysqld.sock.lock rw,
# Allow execution of server binary
/usr/sbin/mysqld mr,
/usr/sbin/mysqld-debug mr,
# Allow plugin access
/usr/lib/mysql/plugin/ r,
/usr/lib/mysql/plugin/*.so* mr,
# Allow error msg and charset access
/usr/share/mysql/ r,
/usr/share/mysql/** r,
# Allow data dir access
/var/lib/mysql/ r,
/var/lib/mysql/** rwk,
# Allow data files dir access
/var/lib/mysql-files/ r,
/var/lib/mysql-files/** rwk,
# Allow keyring dir access
/var/lib/mysql-keyring/ r,
/var/lib/mysql-keyring/** rwk,
# Allow log file access
/var/log/mysql.err rw,
/var/log/mysql.log rw,
/var/log/mysql/ r,
/var/log/mysql/** rw,
# Site-specific additions and overrides. See local/README for details.
#include <local/usr.sbin.mysqld>
}
三、修改其中的# Allow data files dir access處如下
/data1/mysql_data_dir/ r,
/data1/mysql_data_dir/** rwk,
其中 /data1/mysql_data_dir/為你自定義的路徑
四躁锡、然后重啟apparmor服務(wù)
systemctl restart apparmor
再重新嘗試做導(dǎo)出文件的操作午绳,應(yīng)該是可以了。
其他的比如ubuntu下遷移mysql數(shù)據(jù)路徑也是要修改apparmor的權(quán)限的映之。