web-dev-qa-db-ja.com

Ubuntu 16.04へのアップグレード後にMariaDBが起動しない

14.04 x64からUbuntu 16.04にアップグレードしました

mysqldを開始しようとすると失敗し、syslogに

kernel: [ 2336.792423] audit: type=1400 audit(1470265086.730:518): apparmor="DENIED" operation="sendmsg" info="Failed name lookup - disconnected path" error=-13 profile="/usr/sbin/mysqld" name="run/systemd/notify" pid=11850 comm="mysqld" requested_mask="w" denied_mask="w" fsuid=117 ouid=0

/run/systemd/notify/をapparmorに追加しましたが、run/systemd/notifyを追加できません-「/」がありません

どうすれば修正できますか? MariaDBを別のパーティションで実行する必要があります

MariaDBを/home/db/mysqlのデータフォルダーで使用しています。

lrwxrwxrwx 1 mysql mysql 14 iun 22 20:58 /var/lib/mysql -> /home/db/mysql

また、アプリの装甲プロファイルを設定しました:

# vim:syntax=apparmor
# Last Modified: Tue Jun 19 17:37:30 2007
#include <tunables/global>

/usr/sbin/mysqld {
#include <abstractions/base>
#include <abstractions/nameservice>
#include <abstractions/user-tmp>
#include <abstractions/mysql>
#include <abstractions/winbind>

capability dac_override,
capability sys_resource,
capability setgid,
capability setuid,

network tcp,

/etc/hosts.allow r,
/etc/hosts.deny r,

/etc/mysql/*.pem r,
/etc/mysql/conf.d/ r,
/etc/mysql/conf.d/* r,
/etc/mysql/*.cnf r,
/usr/lib/mysql/plugin/ r,
/usr/lib/mysql/plugin/*.so* mr,
/usr/sbin/mysqld mr,
/usr/share/mysql/** r,
/var/log/mysql.log rw,
/var/log/mysql.err rw,
/var/lib/mysql/ r,
/var/lib/mysql/** rwk,
/var/log/mysql/ r,
/var/log/mysql/* rw,
/var/run/mysqld/mysqld.pid rw,
/var/run/mysqld/mysqld.sock w,
/run/mysqld/mysqld.pid rw,
/run/mysqld/mysqld.sock w,
/run/systemd/notify w,
/home/db/** rwk,
/home/db/mysql/** rwk,

/sys/devices/system/cpu/ r,

# Site-specific additions and overrides. See local/README for details.
#include <local/usr.sbin.mysqld>
}

以前はCDで/home/db/mysqlに失敗していましたが、/lib/systemd/system/mariadb.serviceを編集してProtectHome=falseを設定することで修正しました

3
Alex Burdusel

Apparmorの設定に関するいくつかの失敗した試行、/lib/systemd/system/mariadb.serviceおよび/etc/mysql/my.cnfの編集によるdatadirの設定が失敗した後、別のアプローチに進みました。

  1. サービスを停止しました(開始した場合):Sudo service mysqld stop
  2. インストールをパージapt-get purge mysqld*

  3. Mysqlとmariadbに関連するものをすべて削除しました(/etc/varを検索しました)。将来参照する必要があると思われる場合は、それらをバックアップすることをお勧めします。

    • /etc/systemd/systemのmysqlおよびmariadb設定

    • /etc/apparmor.dのmysqlプロファイル

    • dir /etc/mysql

    • /var/libmysqlに持っていたシンボリックリンク(私のデータは/home/db/mysqlで安全です)。データが/var/lib/mysqlにある場合、これをスキップします

  4. 再インストールSudo apt-get install mariadb-server

  5. /var/lib/mysqlの名前を/var/lib/mysql.bkに変更し、/home/db/mysqlから/var/lib/mysqlへのシンボリックリンクを作成しました
  6. Mysql:mysqlのシンボリックリンクと/home/db/mysqlに所有権を設定します

すべては再起動時に機能し、もう死ぬことはありません。

Sudo /etc/init.d/mysql startSudo /etc/init.d/mysql stopでサービスを開始および停止できます

Systemdへの移行がこのようなトラブルを引き起こしたと思います。古いinit.dスクリプトを使用するのが最善の方法ではないかもしれませんが、再起動後にMariaDBを実行し続ける唯一の方法です。そうしないと、

kernel: [ 2336.792423] audit: type=1400 audit(1470265086.730:518): apparmor="DENIED" operation="sendmsg" info="Failed name lookup - disconnected path" error=-13 profile="/usr/sbin/mysqld" name="run/systemd/notify" pid=11850 comm="mysqld" requested_mask="w" denied_mask="w" fsuid=117 ouid=0 

私が使用していたクライアントのいくつかはFailed to connect to database: Error: Can't connect to local MySQL server through socket '/tmp/mysql.sock' (2)を与えたので、シンボリックリンクSudo ln -s /var/run/mysqld/mysqld.sock /tmp/mysql.sockを作成しなければなりませんでした。しかし、リンクは再起動時に削除されました...

そのため、/etc/mysql/my.cnfおよび/etc/mysql/debian.cnfファイルを編集してsocket = /tmp/mysql.sockを設定する必要がありました。 debian.cnfにはDO NOT TOUCH!と書かれていますが、my.cnfにはRemember to edit /etc/mysql/debian.cnf when changing the socket locationと書かれているので、チャンスをつかみました。注:適用された変更を確認するには、再起動が必要でした。サービスを再起動するだけでは適用されませんでした。たぶん、いくつかのデーモンはリロードされるべきでしたが、どのデーモンを知らなかったでしょう。

3
Alex Burdusel

私の場合、MariaDB 10.2をUbuntu Xenial 16.04にインストールし、シンボリックリンクを使用してホームディレクトリのユーザーのデータベースをポイントしました。これは10.0では正常に機能しましたが、現在はエラーを返します

[エラー] InnoDB:ファイル操作のオペレーティングシステムエラー番号13。

[エラー] InnoDB:エラーは、mysqldがディレクトリへのアクセス権を持っていないことを意味します。

[エラー] InnoDB:os_file_readdir_next_file()はディレクトリ./で-1を返しました。一部の.ibdファイルのクラッシュリカバリが失敗した可能性があります。

すべてのファイルとディレクトリはmysql:mysqlが所有していました。しかし、/lib/systemd/system/mariadb.serviceで見つけた質問のポスターのおかげで:

#/home、/ root、および/ run/userへのアクセスを禁止する

ProtectHome = true

これをfalseおよびsystemctl daemon-reloadに設定すると、MariaDBは正常に起動します。

これが誰かの助けになることを願っています。

0
Cris