16.04, не может mysqld - инициализировать в месте не по умолчанию

Я выполнял mysqld на 14,04 с нестандартным - datadir (/usr/local/mysqld-test) и порт (33306). После обновления до 16,04, я больше не смог запустить свой тест mysqld, таким образом, следуя инструкциям здесь и в ошибке это связывается со здесь, я волновал движение до:

sudo apt purge mariadb-client-10.0 mariadb-common mysql-client mysql-client-5.7 mysql-client-core-5.7 mysql-common dbconfig-mysql
sudo apt-get install mysql-client mysql-server

(В процессе, это удалило amarok!? клубок)

Это все еще не работало, таким образом, я волновал уничтожение моего всего /usr/local/mysqld-test (намеренно; в теории у меня есть сценарии для восстановления его). mysql_install_db управляйте, чтобы я использовал, прежде удерживается от использования теперь и, кажется, не понимает -P 33306 аргумент, так вместо этого я пытаюсь использовать mysqld --initialize-insecure.

Вот то, что я делаю:

mysqld --initialize-insecure --basedir=/usr/local/mysqld-test --datadir=/usr/local/mysqld-test/data

Это перестало работать:

mysqld: Can't create directory '/usr/local/mysqld-test/data/' (Errcode: 13 - Permission denied)
2016-11-02T10:21:37.547443Z 0 [Warning] TIMESTAMP with implicit DEFAULT value is deprecated. Please use --explicit_defaults_for_timestamp server option (see documentation for more details).
2016-11-02T10:21:37.549183Z 0 [ERROR] Aborting

Ха. Я думал, что сделал это мировым перезаписываемым:

$ ls -al /usr/local/mysqld-test
total 8
drwxrwxrwx  2 kuhrusty kuhrusty 4096 Nov  2 03:13 .
drwxr-xr-x 20 root     root     4096 Nov  2 03:13 ..

WTF? Давайте попробуем это strace:

execve("/usr/sbin/mysqld", ["mysqld", "--initialize-insecure", "--basedir=/usr/local/mysqld-test", "--datadir=/usr/local/mysqld-test"...], [/* 69 vars */]) = 0
...

Это mmaps набор общих библиотек, устанавливает некоторые обработчики сигналов и затем ищет файлы конфигурации (который я не думаю, что смешал с - я запускаю его вручную, передавая --datadir, -P, и т.д.):

stat("/etc/my.cnf", 0x7ffe13e99af0)     = -1 ENOENT (No such file or directory)
stat("/etc/mysql/my.cnf", {st_mode=S_IFREG|0644, st_size=682, ...}) = 0
open("/etc/mysql/my.cnf", O_RDONLY)     = 3
fstat(3, {st_mode=S_IFREG|0644, st_size=682, ...}) = 0
read(3, "#\n# The MySQL database server co"..., 4096) = 682
open("/etc/mysql/conf.d/", O_RDONLY|O_NONBLOCK|O_DIRECTORY|O_CLOEXEC) = 4
fstat(4, {st_mode=S_IFDIR|0755, st_size=4096, ...}) = 0
brk(0x271d000)                          = 0x271d000
getdents(4, /* 4 entries */, 32768)     = 120
getdents(4, /* 0 entries */, 32768)     = 0
close(4)                                = 0
stat("/etc/mysql/conf.d/mysql.cnf", {st_mode=S_IFREG|0644, st_size=8, ...}) = 0
open("/etc/mysql/conf.d/mysql.cnf", O_RDONLY) = 4
fstat(4, {st_mode=S_IFREG|0644, st_size=8, ...}) = 0
read(4, "[mysql]\n", 4096)              = 8
read(4, "", 4096)                       = 0
close(4)                                = 0
stat("/etc/mysql/conf.d/mysqldump.cnf", {st_mode=S_IFREG|0644, st_size=55, ...}) = 0
open("/etc/mysql/conf.d/mysqldump.cnf", O_RDONLY) = 4
fstat(4, {st_mode=S_IFREG|0644, st_size=55, ...}) = 0
read(4, "[mysqldump]\nquick\nquote-names\nma"..., 4096) = 55
read(4, "", 4096)                       = 0
close(4)                                = 0
brk(0x2713000)                          = 0x2713000
brk(0x270a000)                          = 0x270a000
open("/etc/mysql/mysql.conf.d/", O_RDONLY|O_NONBLOCK|O_DIRECTORY|O_CLOEXEC) = 4
fstat(4, {st_mode=S_IFDIR|0755, st_size=4096, ...}) = 0
getdents(4, /* 4 entries */, 32768)     = 128
getdents(4, /* 0 entries */, 32768)     = 0
close(4)                                = 0
stat("/etc/mysql/mysql.conf.d/mysqld.cnf", {st_mode=S_IFREG|0644, st_size=3028, ...}) = 0
open("/etc/mysql/mysql.conf.d/mysqld.cnf", O_RDONLY) = 4
fstat(4, {st_mode=S_IFREG|0644, st_size=3028, ...}) = 0
read(4, "#\n# The MySQL database server co"..., 4096) = 3028
read(4, "", 4096)                       = 0
close(4)                                = 0
stat("/etc/mysql/mysql.conf.d/mysqld_safe_syslog.cnf", {st_mode=S_IFREG|0644, st_size=21, ...}) = 0
open("/etc/mysql/mysql.conf.d/mysqld_safe_syslog.cnf", O_RDONLY) = 4
fstat(4, {st_mode=S_IFREG|0644, st_size=21, ...}) = 0
read(4, "[mysqld_safe]\nsyslog\n", 4096) = 21
read(4, "", 4096)                       = 0
close(4)                                = 0
read(3, "", 4096)                       = 0
close(3)                                = 0
stat("/home/kuhrusty/.my.cnf", 0x7ffe13e99af0) = -1 ENOENT (No such file or directory)
stat("/home/kuhrusty/.mylogin.cnf", 0x7ffe13e99af0) = -1 ENOENT (No such file or directory)
getrlimit(RLIMIT_NOFILE, {rlim_cur=1024, rlim_max=64*1024}) = 0
setrlimit(RLIMIT_NOFILE, {rlim_cur=5000, rlim_max=5000}) = 0
getrlimit(RLIMIT_NOFILE, {rlim_cur=5000, rlim_max=5000}) = 0
umask(026)                              = 02
open("/etc/localtime", O_RDONLY|O_CLOEXEC) = 3
fstat(3, {st_mode=S_IFREG|0644, st_size=2845, ...}) = 0
fstat(3, {st_mode=S_IFREG|0644, st_size=2845, ...}) = 0
read(3, "TZif2\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\5\0\0\0\5\0\0\0\0"..., 4096) = 2845
lseek(3, -1811, SEEK_CUR)               = 1034
read(3, "TZif2\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\5\0\0\0\5\0\0\0\0"..., 4096) = 1811
close(3)                                = 0
uname({sysname="Linux", nodename="tentacle", ...}) = 0
brk(0x2732000)                          = 0x2732000
brk(0x2724000)                          = 0x2724000
lstat("/usr", {st_mode=S_IFDIR|0755, st_size=4096, ...}) = 0
lstat("/usr/local", {st_mode=S_IFDIR|0755, st_size=4096, ...}) = 0
lstat("/usr/local/mysqld-test", {st_mode=S_IFDIR|0777, st_size=4096, ...}) = 0
lstat("/usr", {st_mode=S_IFDIR|0755, st_size=4096, ...}) = 0
lstat("/usr/local", {st_mode=S_IFDIR|0755, st_size=4096, ...}) = 0
lstat("/usr/local/mysqld-test", {st_mode=S_IFDIR|0777, st_size=4096, ...}) = 0
lstat("/usr/local/mysqld-test/data", 0x7ffe13e9d1d0) = -1 ENOENT (No such file or directory)
open("/usr/share/mysql/english/errmsg.sys", O_RDONLY) = 3
read(3, "\376\376\3\1\1\0\335\26\1\0008\4\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\10\0", 32) = 32
read(3, "\0\0\0\0\10\0\0\0\20\0\0\0\23\0\0\0\27\0\0\0D\0\0\0m\0\0\0\231\0\0\0"..., 4320) = 4320
read(3, "hashchk\0isamchk\0NO\0YES\0Can't cre"..., 71389) = 71389
close(3)                                = 0
stat("/usr/local/mysqld-test/share/mysql/charsets/Index.xml", 0x7ffe13e9e2e0) = -1 ENOENT (No such file or directory)
futex(0x1ddcf48, FUTEX_WAKE_PRIVATE, 2147483647) = 0
brk(0x2745000)                          = 0x2745000
open("/usr/local/mysqld-test/data/", O_RDONLY|O_NONBLOCK|O_DIRECTORY|O_CLOEXEC) = -1 ENOENT (No such file or directory)
mkdir("/usr/local/mysqld-test/data/", 0750) = -1 EACCES (Permission denied)

Хорошо, теперь, я думаю, что это - то, где вещи идут не так, как надо (примечание: удостоверьтесь, что Вы прокручиваете к нижней части)..., но почему? Любой может создать файл там!

write(2, "mysqld: ", 8)                 = 8
write(2, "Can't create directory '/usr/loc"..., 87) = 87
write(2, "\n", 1)                       = 1
mysqld: Can't create directory '/usr/local/mysqld-test/data/' (Errcode: 13 - Permission denied)

WTF?? С этой проблемой 14.04-> 16,04 обновлений теперь занимают место как о третьей по величине ошибке моей жизни... Я чувствую, что получил одно из тех травматических повреждений головного мозга, где Вы забываете, как читать. Те полномочия являются правильными, правильно?? Выполнение mysqld --initialize под sudo не имеет значения. Есть ли некоторая невероятно глупая вещь, которую я делаю неправильно?

3
задан 13 April 2017 в 15:23

1 ответ

ARGHH AppArmor - то, что полило из шланга меня. Второй ответ здесь - то, что дало мне подсказку, я должен был посмотреть в журнале:

[137519.814104] audit: type=1400 audit(1478218238.219:177): apparmor="DENIED" operation="mkdir" profile="/usr/sbin/mysqld" name="/usr/local/mysqld-test/data/" pid=7126 comm="mysqld" requested_mask="c" denied_mask="c" fsuid=1000 ouid=1000

Следуя этим инструкциям, я отключил AppArmor для MySQL:

sudo apparmor_parser -R /etc/apparmor.d/usr.sbin.mysqld
cd /etc/apparmor.d/disable
sudo ln -s /etc/apparmor.d/usr.sbin.mysqld .

И затем подтвердил, что mysqld больше не был в, осуществляют режим:

sudo aa-status

И затем mysqld --initialize-insecure запущенный и выполнил его способ, которым я ожидал, что это будет работать два дня назад.

(Как/почему сделал AppArmor, установлены/включены во время 14.04-> 16,04 обновлений? Я не думаю, что услышал о AppArmor перед этим; "Ваш материал больше не собирается работать способ, которым он привык для", походит на вид информации, которую мне нужно было дать во время обновления!)

4
ответ дан 1 December 2019 в 15:53

Другие вопросы по тегам:

Похожие вопросы: