我在这里使用本教程使用Ubuntu 16.04,nginx,php7.0,MariaDB,nextcloud和外部DynDNS设置了我的第一个Ubuntu服务器:在Ubuntu 16.04上安装Nextcloud 9
一切正常,但是自从第二天重新启动服务器以来,nextcloud只是显示空白页面。浏览完nginx,MariaDB和nextcloud的所有日志后,我发现mysql服务只是无法启动。因此运行service mysql start,一切都再次正常运行(从服务器以及其他工作站调用nextcloud)。我只是想知道终端没有“关闭”生产线。就像它仍在执行命令一样。大约5分钟后,该行“关闭”,并出现以下消息:
service mysql start
“ mariadb.service的作业失败,因为超过了超时。有关详细信息,请参见“ systemctl status mariadb.service”和“ journalctl -xe”。
然后,客户再次在nextcloud中获得空白页。当我运行命令并立即关闭终端时,客户端也可以访问,但5分钟后仍然丢失。
我尝试备份nextcloud,sql并运行apt-get purge --auto-remove mariadb- server。然后,通过导入备份sql而不是创建新的sql,再次运行本教程中的MariaDB安装步骤。并没有改变一切。
apt-get purge --auto-remove mariadb- server
下一次尝试是update-rc.d mysql defaults和update-rc.d mysql enable。但是重新启动后,仅是空白页。通过启动服务手册,只能访问5分钟。
update-rc.d mysql defaults
update-rc.d mysql enable
我也尝试了BUM-BootUpManager,但是该服务似乎已启用。我看到您也可以手动启动服务。因此,尝试使用mysql并感到惊讶:BUM刚刚挂断时,nextcloud可使用5分钟。
我也找到了mariadb.com/kb/zh-CN/mariadb/starting-and-stopping-mariadb- automatic/,但没有尝试任何操作,因为似乎还有其他问题。
root@s1:~# systemctl status mariadb.service:
root@s1:~# systemctl status mariadb.service
\u25cf mariadb.service - MariaDB database server Loaded: loaded (/lib/systemd/system/mariadb.service; enabled; vendor preset: Drop-In: /etc/systemd/system/mariadb.service.d \u2514\u2500migrated-from-my.cnf-settings.conf Active: failed (Result: timeout) since Di 2016-12-06 14:52:51 CET; 55s ago Process: 3565 ExecStart=/usr/sbin/mysqld $MYSQLD_OPTS $_WSREP_NEW_CLUSTER $_WS Process: 3415 ExecStartPre=/bin/sh -c [ ! -e /usr/bin/galera_recovery ] && VAR Process: 3409 ExecStartPre=/bin/sh -c systemctl unset-environment _WSREP_START Process: 3405 ExecStartPre=/usr/bin/install -m 755 -o mysql -g root -d /var/ru Main PID: 3565 (code=exited, status=0/SUCCESS) Dez 06 14:52:48 s1 mysqld[3565]: 2016-12-06 14:52:48 3067387712 [Note] /usr/sbin Dez 06 14:52:48 s1 mysqld[3565]: 2016-12-06 14:52:48 3067387712 [Note] Event Sch Dez 06 14:52:48 s1 mysqld[3565]: 2016-12-06 14:52:48 2147785536 [Note] InnoDB: F Dez 06 14:52:48 s1 mysqld[3565]: 2016-12-06 14:52:48 3067387712 [Note] InnoDB: S Dez 06 14:52:49 s1 mysqld[3565]: 2016-12-06 14:52:49 3067387712 [Note] InnoDB: W Dez 06 14:52:50 s1 mysqld[3565]: 2016-12-06 14:52:50 3067387712 [Note] InnoDB: S Dez 06 14:52:50 s1 mysqld[3565]: 2016-12-06 14:52:50 3067387712 [Note] /usr/sbin Dez 06 14:52:51 s1 systemd[1]: Failed to start MariaDB database server. Dez 06 14:52:51 s1 systemd[1]: mariadb.service: Unit entered failed state. Dez 06 14:52:51 s1 systemd[1]: mariadb.service: Failed with result 'timeout'.
root@s1:~# journalctl -xe:
root@s1:~# journalctl -xe
Dez 06 14:52:48 s1 mysqld[3565]: 2016-12-06 14:52:48 3067387712 [Note] Event Scheduler: Purging the queue. 0 events Dez 06 14:52:48 s1 mysqld[3565]: 2016-12-06 14:52:48 2147785536 [Note] InnoDB: FTS optimize thread exiting. Dez 06 14:52:48 s1 mysqld[3565]: 2016-12-06 14:52:48 3067387712 [Note] InnoDB: Starting shutdown... Dez 06 14:52:49 s1 mysqld[3565]: 2016-12-06 14:52:49 3067387712 [Note] InnoDB: Waiting for page_cleaner to finish flushing of buffer po Dez 06 14:52:50 s1 mysqld[3565]: 2016-12-06 14:52:50 3067387712 [Note] InnoDB: Shutdown completed; log sequence number 111890806 Dez 06 14:52:50 s1 mysqld[3565]: 2016-12-06 14:52:50 3067387712 [Note] /usr/sbin/mysqld: Shutdown complete Dez 06 14:52:50 s1 audit[3648]: AVC apparmor="DENIED" operation="sendmsg" info="Failed name lookup - disconnected path" error=-13 profi Dez 06 14:52:50 s1 kernel: audit: type=1400 audit(1481032370.973:29): apparmor="DENIED" operation="sendmsg" info="Failed name lookup - Dez 06 14:52:50 s1 audit[3565]: AVC apparmor="DENIED" operation="sendmsg" info="Failed name lookup - disconnected path" error=-13 profi Dez 06 14:52:50 s1 kernel: audit: type=1400 audit(1481032370.973:30): apparmor="DENIED" operation="sendmsg" info="Failed name lookup - Dez 06 14:52:51 s1 systemd[1]: Failed to start MariaDB database server. -- Subject: Unit mariadb.service has failed -- Defined-By: systemd -- Support: http://lists.freedesktop.org/mailman/listinfo/systemd-devel -- -- Unit mariadb.service has failed. -- -- The result is failed. Dez 06 14:52:51 s1 systemd[1]: mariadb.service: Unit entered failed state. Dez 06 14:52:51 s1 systemd[1]: mariadb.service: Failed with result 'timeout'. Dez 06 14:54:54 s1 x11vnc[2665]: 06/12/2016 14:54:54 cursor_noshape_updates_clients: 1 Dez 06 14:55:16 s1 ntpd[1244]: 46.4.1.155 local addr 192.168.178.50 -> <null> Dez 06 14:57:30 s1 ntpd[1244]: 89.238.66.98 local addr 192.168.178.50 -> <null>
/ect/init.d中的内容(如果有用):
#!/bin/bash # ### BEGIN INIT INFO # Provides: mysql # Required-Start: $remote_fs $syslog # Required-Stop: $remote_fs $syslog # Should-Start: $network $named $time # Should-Stop: $network $named $time # Default-Start: 2 3 4 5 # Default-Stop: 0 1 6 # Short-Description: Start and stop the mysql database server daemon # Description: Controls the main MariaDB database server daemon "mysqld" # and its wrapper script "mysqld_safe". ### END INIT INFO # set -e set -u ${DEBIAN_SCRIPT_DEBUG:+ set -v -x} test -x /usr/sbin/mysqld || exit 0 . /lib/lsb/init-functions SELF=$(cd $(dirname $0); pwd -P)/$(basename $0) CONF=/etc/mysql/my.cnf MYADMIN="/usr/bin/mysqladmin --defaults-file=/etc/mysql/debian.cnf" # priority can be overriden and "-s" adds output to stderr ERR_LOGGER="logger -p daemon.err -t /etc/init.d/mysql -i" # Safeguard (relative paths, core dumps..) cd / umask 077 # mysqladmin likes to read /root/.my.cnf. This is usually not what I want # as many admins e.g. only store a password without a username there and # so break my scripts. export HOME=/etc/mysql/ # Source default config file. [ -r /etc/default/mariadb ] && . /etc/default/mariadb ## Fetch a particular option from mysql's invocation. # # Usage: void mysqld_get_param option mysqld_get_param() { /usr/sbin/mysqld --print-defaults \ | tr " " "\n" \ | grep -- "--$1" \ | tail -n 1 \ | cut -d= -f2 } ## Do some sanity checks before even trying to start mysqld. sanity_checks() { # check for config file if [ ! -r /etc/mysql/my.cnf ]; then log_warning_msg "$0: WARNING: /etc/mysql/my.cnf cannot be read. See README.Debian.gz" echo "WARNING: /etc/mysql/my.cnf cannot be read. See README.Debian.gz" | $ERR_LOGGER fi # check for diskspace shortage datadir=`mysqld_get_param datadir` if LC_ALL=C BLOCKSIZE= df --portability $datadir/. | tail -n 1 | awk '{ exit ($4>4096) }'; then log_failure_msg "$0: ERROR: The partition with $datadir is too full!" echo "ERROR: The partition with $datadir is too full!" | $ERR_LOGGER exit 1 fi } ## Checks if there is a server running and if so if it is accessible. # # check_alive insists on a pingable server # check_dead also fails if there is a lost mysqld in the process list # # Usage: boolean mysqld_status [check_alive|check_dead] [warn|nowarn] mysqld_status () { ping_output=`$MYADMIN ping 2>&1`; ping_alive=$(( ! $? )) ps_alive=0 pidfile=`mysqld_get_param pid-file` if [ -f "$pidfile" ] && ps `cat $pidfile` >/dev/null 2>&1; then ps_alive=1; fi if [ "$1" = "check_alive" -a $ping_alive = 1 ] || [ "$1" = "check_dead" -a $ping_alive = 0 -a $ps_alive = 0 ]; then return 0 # EXIT_SUCCESS else if [ "$2" = "warn" ]; then echo -e "$ps_alive processes alive and '$MYADMIN ping' resulted in\n$ping_output\n" | $ERR_LOGGER -p daemon.debug fi return 1 # EXIT_FAILURE fi } # # main() # case "${1:-''}" in 'start') sanity_checks; # Start daemon log_daemon_msg "Starting MariaDB database server" "mysqld" if mysqld_status check_alive nowarn; then log_progress_msg "already running" log_end_msg 0 else # Could be removed during boot test -e /var/run/mysqld || install -m 755 -o mysql -g root -d /var/run/mysqld # Start MariaDB! /usr/bin/mysqld_safe "${@:2}" > /dev/null 2>&1 & # 6s was reported in #352070 to be too little for i in $(seq 1 "${MYSQLD_STARTUP_TIMEOUT:-60}"); do sleep 1 if mysqld_status check_alive nowarn ; then break; fi log_progress_msg "." done if mysqld_status check_alive warn; then log_end_msg 0 # Now start mysqlcheck or whatever the admin wants. output=$(/etc/mysql/debian-start) [ -n "$output" ] && log_action_msg "$output" else log_end_msg 1 log_failure_msg "Please take a look at the syslog" fi fi ;; 'stop') # * As a passwordless mysqladmin (e.g. via ~/.my.cnf) must be possible # at least for cron, we can rely on it here, too. (although we have # to specify it explicit as e.g. sudo environments points to the normal # users home and not /root) log_daemon_msg "Stopping MariaDB database server" "mysqld" if ! mysqld_status check_dead nowarn; then set +e shutdown_out=`$MYADMIN shutdown 2>&1`; r=$? set -e if [ "$r" -ne 0 ]; then log_end_msg 1 [ "$VERBOSE" != "no" ] && log_failure_msg "Error: $shutdown_out" log_daemon_msg "Killing MariaDB database server by signal" "mysqld" killall -15 mysqld server_down= for i in `seq 1 600`; do sleep 1 if mysqld_status check_dead nowarn; then server_down=1; break; fi done if test -z "$server_down"; then killall -9 mysqld; fi fi fi if ! mysqld_status check_dead warn; then log_end_msg 1 log_failure_msg "Please stop MariaDB manually and read /usr/share/doc/mariadb-server-10.1/README.Debian.gz!" exit -1 else log_end_msg 0 fi ;; 'restart') set +e; $SELF stop; set -e $SELF start ;; 'reload'|'force-reload') log_daemon_msg "Reloading MariaDB database server" "mysqld" $MYADMIN reload log_end_msg 0 ;; 'status') if mysqld_status check_alive nowarn; then log_action_msg "$($MYADMIN version)" else log_action_msg "MariaDB is stopped." exit 3 fi ;; 'bootstrap') # Bootstrap the cluster, start the first node # that initiates the cluster log_daemon_msg "Bootstrapping the cluster" "mysqld" $SELF start "${@:2}" --wsrep-new-cluster ;; *) echo "Usage: $SELF start|stop|restart|reload|force-reload|status|bootstrap" exit 1 ;; esac
不幸的是,Google无法帮助我。我尽了最大的努力来解释,也许这可以帮助您。非常感谢!
漫长的问题无话可做…从来没有听说过AppArmor,但这是原因。答案在这里解决了。不用担心apparmor的错误,配置文件将不存在。
sudo aa-status向您显示保镖正在做什么;实际具有强制执行的政策,而不是仅仅抱怨的内容。 sudo apt-get install apparmor-utils 添加了一些使apparmor配置文件更易于处理的命令,例如… sudo aa-complain /usr/sbin/mysqld将个人资料从“强制”转为投诉。(aa-enforce将其返回。) 完成此操作后,sudo service apparmor reload重新启动apparmor,然后瞧……就sudo /etc/init.d/mysql start可以了,服务器保持启动状态。
sudo aa-status向您显示保镖正在做什么;实际具有强制执行的政策,而不是仅仅抱怨的内容。
sudo aa-status
sudo apt-get install apparmor-utils 添加了一些使apparmor配置文件更易于处理的命令,例如…
sudo apt-get install apparmor-utils
sudo aa-complain /usr/sbin/mysqld将个人资料从“强制”转为投诉。(aa-enforce将其返回。)
sudo aa-complain /usr/sbin/mysqld
完成此操作后,sudo service apparmor reload重新启动apparmor,然后瞧……就sudo /etc/init.d/mysql start可以了,服务器保持启动状态。
sudo service apparmor reload
sudo /etc/init.d/mysql start