1. 程式人生 > >MariaDB啟動指令碼/etc/init.d/mysql的坑

MariaDB啟動指令碼/etc/init.d/mysql的坑

         最近想把公司的mysql5.5.43遷到mariadb10.0.21上,就在測試環境上搞了一把,具體步驟就不談了,還是蠻簡單的~但是到最後啟動mariadb的時候踩到坑了~

具體情況如下:


      從啟動介面來看MariaDB啟動不起?!!檢視程序看下:


     發現mysql程序已經起來了,但是不知道什麼原因給hang住了,不停的迴圈,再檢視我的日誌和埠

150924 16:57:51 mysqld_safe mysqld from pid file /data/mysql/data/mariadb.pid ended
150924 16:57:54 mysqld_safe Starting mysqld daemon with databases from /data/mysql/data
150924 16:57:54 [Note] /usr/sbin/mysqld (mysqld 10.0.21-MariaDB-log) starting as process 11356 ...
150924 16:57:54 [Note] InnoDB: Using mutexes to ref count buffer pool pages
150924 16:57:54 [Note] InnoDB: The InnoDB memory heap is disabled
150924 16:57:54 [Note] InnoDB: Mutexes and rw_locks use GCC atomic builtins
150924 16:57:54 [Note] InnoDB: Memory barrier is not used
150924 16:57:54 [Note] InnoDB: Compressed tables use zlib 1.2.3
150924 16:57:54 [Note] InnoDB: Using Linux native AIO
150924 16:57:54 [Note] InnoDB: Using CPU crc32 instructions
150924 16:57:54 [Note] InnoDB: Initializing buffer pool, size = 128.0M
150924 16:57:54 [Note] InnoDB: Completed initialization of buffer pool
150924 16:57:54 [Note] InnoDB: Highest supported file format is Barracuda.
150924 16:57:54 [Note] InnoDB: 128 rollback segment(s) are active.
150924 16:57:54 [Note] InnoDB: Waiting for purge to start
150924 16:57:54 [Note] InnoDB:  Percona XtraDB (http://www.percona.com) 5.6.25-73.1 started; log sequence number 1616817
150924 16:57:54 [Note] Plugin 'FEEDBACK' is disabled.
150924 16:57:54 [Note] Server socket created on IP: '::'.
150924 16:57:54 [Warning] 'user' entry '
[email protected]
' ignored in --skip-name-resolve mode. 150924 16:57:54 [Warning] 'proxies_priv' entry '@% [email protected]' ignored in --skip-name-resolve mode. 150924 16:57:54 [Note] Event Scheduler: Loaded 0 events 150924 16:57:54 [Note] /usr/sbin/mysqld: ready for connections. Version: '10.0.21-MariaDB-log' socket: '/data/mysql/mysql.sock' port: 3306 MariaDB Server 150924 16:57:54 [Note] Event Scheduler: scheduler thread started with id 2

連線資料庫什麼的都是正常的~這樣的話就把疑點轉移到了/etc/init.d/mysql啟動指令碼上了,到底是什麼原因將啟動程序迴圈的呢?

檢視MariaDB10.0.21的mysql指令碼發現在啟動的時候會呼叫函式wait_for_ready

case "$mode" in
  'start')
    # Start daemon


    # Start daemon

    # Safeguard (relative paths, core dumps..)
    cd $basedir

    echo $echo_n "Starting MySQL"
    if test -x $bindir/mysqld_safe
    then
      # Give extra arguments to mysqld with the my.cnf file. This script
      # may be overwritten at next upgrade.
      $bindir/mysqld_safe --datadir="$datadir" --pid-file="$mysqld_pid_file_path" $other_args >/dev/null 2>&1 &
      wait_for_ready; return_value=$?

      # Make lock for RedHat / SuSE
      if test -w "$lockdir"
      then
        touch "$lock_file_path"
      fi

      exit $return_value
    else
      log_failure_msg "Couldn't find MySQL server ($bindir/mysqld_safe)"
    fi
    ;;
然後再檢視wait_for_ready函式咋寫的呢?
wait_for_ready () {

  i=0
  while test $i -ne $service_startup_timeout ; do

  i=0
  while test $i -ne $service_startup_timeout ; do

    if $bindir/mysqladmin ping >/dev/null 2>&1; then
          log_success_msg
      return 0
    elif kill -0 $! 2>/dev/null ; then
      :  # mysqld_safe is still running
    else
      # mysqld_safe is no longer running, abort the wait loop
      break
    fi

    echo $echo_n ".$echo_c"
    i=`expr $i + 1`
    sleep 1

  done

  log_failure_msg
  return 1
}
看到只有當mysqladmin ping命令通過的時候才會返回success,其他情況只會不停的迴圈.然後900秒後報錯退出,但是mysql實際上是已經起來了的。


知道了原因,這裡面有兩種解決方法

1)在/etc/my.cnf中設定mysqladmin的使用者名稱,密碼和socket路徑

2)修改mysql啟動指令碼

這裡我採用的是修改mysql啟動指令碼,怕密碼洩露啊!參照mysql5.5中的check方式,check一下pid檔案就ok了

wait_for_ready () {

  i=0
  while test $i -ne $service_startup_timeout ; do

    #if $bindir/mysqladmin ping >/dev/null 2>&1; then
    if test -e $mysqld_pid_file_path;then
      log_success_msg
      return 0
    elif kill -0 $! 2>/dev/null ; then
      :  # mysqld_safe is still running
    else
      # mysqld_safe is no longer running, abort the wait loop
      break
    fi

    echo $echo_n ".$echo_c"
    i=`expr $i + 1`
    sleep 1

  done

  log_failure_msg
  return 1
}
然後啟動搞定!


相關推薦

MariaDB啟動指令碼/etc/init.d/mysql

         最近想把公司的mysql5.5.43遷到mariadb10.0.21上,就在測試環境上搞了一把,具體步驟就不談了,還是蠻簡單的~但是到最後啟動mariadb的時候踩到坑了~ 具體情況如下:       從啟動介面來看MariaDB啟動不起?!!檢視程序看

在開機啟動指令碼/etc/init.d/rcS中新增自己的應用程式

開機啟動我們可以把內容新增到/etc/init.d/rcS中, vi把指令新增到最後或者exec /etc/init.d/rc S前邊,記得儲存 此時不要急著重啟驗證,要先sync同步下,因為linux的檔案系統都會有寫入快取,否則更改無法儲存。 重啟後就可以開機執行了

[Mysql啟動報錯]/etc/init.d/mysqld: line 256: my_print_defaults: command not found

啟動Mysql時報錯: [[email protected]]# service mysqld status /etc/init.d/mysqld: line 256: my_print_defaults: command not found MySQL is n

深入探究Linux下ARM啟動指令碼(/etc/init.d/rcS)在什麼位置被呼叫

每次啟動板子都要重新設定IP地址,很麻煩,就從網上搜搜怎麼設定成開機自動修改IP地址。搜的過程中,想著Linux裡面的啟動指令碼是在哪個地方被呼叫?想想還是自己理一遍。(自己理解的啟動指令碼就是在開機過程中固定呼叫某幾個指令碼,但這樣感覺會不會有點寫死了,Linux可能有更好

sh: /etc/init.d/sshd: not found Docker中的Alpine映象安裝sshd無法啟動

問題描述 在Alpine映象中安裝了openssh-server和openssh之後,無法執行ssh localhost。發現未啟動服務,開啟服務時報以下錯誤 / # ls /etc/init.d/sshd /etc/init.d/sshd / # /etc/init.d/sshd status sh:

理解Linux系統/etc/init.d目錄和/etc/rc.local指令碼

     以下內容是作者自己的翻譯版本,如需轉載到CSDN外其他網站,請註明本文連結。  一、關於/etc/init.d      如果你使用過linux系統,那麼你一定聽說過init.d目錄。這個目錄到底是幹嘛的呢?它歸根結底只做了一件事情,但這件事情非同小可,是為整個

啟動service impala-server start報錯/etc/init.d/impala-server: line 34: /lib/lsb/init-functions: No such

#安裝impala啟動報錯 [[email protected] run]# service impala-server start /etc/init.d/impala-server: line 34: /lib/lsb/init-functions: No su

理解Linux系統/etc/init.d目錄和/etc/rc.local指令碼(轉)

原連結;http://blog.csdn.net/acs713/article/details/7322082  一、關於/etc/init.d      如果你使用過linux系統,那麼你一定聽說過init.d目錄。這個目錄到底是幹嘛的呢?它歸根結底只做了一件事情,但這

/etc/init.d/iptables stop

init.d con nta alt init containe stop lin num /etc/init.d/iptables stop /etc/init.d/iptables stop

Linux根文件皇冠體育平臺開發系統:/etc/init.d/rcS文件分析

mnt 單純 應用程序 類型 hostname con rc.d 節點 fst rcS文件的作用皇冠體育平臺開發論壇:haozbbs.com Q1446595067 rcS是一個腳本文件,在inittab文件中本解析調用,用於配置Linux系統。2.rcS文件分析 #!

CentOS中service命令與/etc/init.d的關系以及centos7的變化

emc web 服務控制 pos mfs 繼承 例如 特性 entos 緣由由於個人經常在ubuntu和centos 系統中切換,習慣了以前的 ubuntu中 通過 /etc/init.d/xxx 進行軟件服務控制。後來發現centos7中換了服務的控制方式:service

/etc/init.d/functions

/etc/init.d/functions: [[email protected] ~]# vim /etc/init.d/functions  #僅展示前幾行 # -*-Shell-script-*- # # functi

安裝mongodb碰到error: unpacking of archive failed on file /etc/init.d/mongod;5bcec214: cpio: open如何解決

今用yum安裝mongodb4.0.3發現一個錯誤,當用yum install 安裝mongo-org 時除了mongodb-org-server 沒有安裝以外其他的都安裝正確,重新安裝mongodb-org-server 時報如下錯誤資訊 在一篇老外 cpio的文章中受到

/etc/rc.local 與 /etc/init.d Linux 開機自動執行程式

轉載地址:https://www.cnblogs.com/fatt/p/4790561.html 1. /etc/rc.local 這是使用者自訂開機啟動程式,把需要開機自動執行的程式寫在這個腳本里 --------引用---------------------- 在完成 run

/etc/inittab,/etc/init.d/rcS和/etc/profile分析

參考部落格https://blog.csdn.net/qiuoooooo/article/details/79300739 在kernel掛載根檔案系統後,執行的第一個程式是根目錄下的linuxrc,實際是一個指向/bin/busybox的連結, 也就是說系統起來後執行的第一個程式是busybo

Shell公共函式:/etc/init.d/functions詳解

在學習Shell的時候看到很多指令碼都會有. /etc/init.d/functions 這一句,在網上查詢了此函式的作用,故收藏在部落格中 functions這個指令碼是給/etc/init.d裡邊的檔案使用的。提供了一些基礎的功能,看看裡邊究竟有些什麼。首先會設定umask,path,還有語言環境,然後

RedHat Enterprise Linux 7關閉防火牆方法 在之前的版本中關閉防火牆等服務的命令是 service iptables stop /etc/init.d/iptables st

RedHat Enterprise Linux 7關閉防火牆方法 在之前的版本中關閉防火牆等服務的命令是 service iptables stop /etc/init.d/iptables stop 在RHEL7中,其實沒有這個服務 [[email

Virtualbox報錯------> '/etc/init.d/vboxdrv setup'解決

Virtualbox報錯------> '/etc/init.d/vboxdrv setup'解決 Ubuntu下VirtualBox本來可以很好地用的,今天早上一來就報錯了,……提示如下內容: ----------------------------------

Linux系列:Linux下/etc/rc.local與/etc/init.d的區別與聯絡

1. /etc/rc.local 這是使用者自定義開機啟動程式,把需要開機自動執行的程式寫在這個腳本里再完成 run level 3 的服務啟動後, 如果我還有其他的動作想要完成時,舉例來說, 我還想要寄一封 mail 給某個系統管理帳號,通知他,系統剛剛重新開機完畢,那

-bash: /etc/init.d/nginx: /bin/bash^M: bad interpreter: No such file or directory

-bash: /etc/init.d/nginx: /bin/bash^M:bad interpreter: No such file or directory這個使為了弄nginx自啟的,然後在官網找