熱點推薦:
您现在的位置: 電腦知識網 >> 編程 >> MySQL >> 正文

Linux下解決MySQL服務的兩個基本問題

2022-06-13   來源: MySQL 

  使用mysql基本基本上會遇到主要的兩個問題

  第一次起動mysql是沒有問題的對mysql做了一些操作特別是刪除mysql中一些不要的帳號後重新起動mysql會遇到這樣的問題

    #/etc/initd/mysqld restart
stopping mysql     [ok]
Timeout error occurred trying to start MySQL Daemon  [failure]

  但是這個時候mysql實際上已經起動了因為用netstat ln命令去看端口已經起動使用mysql u root p password也能連接到數據庫

  這實際上是mysqlx的一個bug(具體可以去看mysql的bugzilla和redhat的bugzilla)

  是什麼原因導致連接超時呢?

  我們不妨先看看/etc/initd/mysqld起動腳本是如何工作的注意下面的一段

  

  # If youve removed anonymous users this line must be changed to
# use a user that is allowed to ping mysqld
ping=/usr/bin/mysqladmin uUNKNOWN_MYSQL_USER ping
# Spin for a maximum of ten seconds waiting for the server to come up
        if [ $ret eq ]; then
            for x in ; do
            if [ n `$ping > /dev/null` ]; then
                    break;
            else
                    sleep ;
            fi
            done

  if !([ n `$ping > /dev/null` ]); then
                    echo Timeout error occurred trying to start MySQL
Daemon                    action $Starting $prog: /bin/false
            else
                    action $Starting $prog: /bin/true
            fi
        else
            action $Starting $prog: /bin/false
        fi
        [ $ret eq ] && touch /var/lock/subsys/mysqld
        return $ret

  我們看到腳本判斷mysql是否起動使用的是mysqladmin ping命令

  而這個命令想要正確執行是需要能夠登錄mysql的現在一些默認帳號已經刪除而且其它帳號已經設置了密碼(默認沒有設置密碼)於是它沒有辦法連接到mysql

  不妨使用下面的命令測試一下

    #mysqladmin u root ppassword ping
mysql alive

  當你提供了帳號和密碼時它的ping命令就可以正確執行了

  這個bug在mysql新出的mysqlx可以解決

  但是RH到FC一直使用的是mysqlx(不過mysql官方好象才推出mysqlFC需要考慮問題性)

  於是我用了下面的辦法臨時解決

  a)建立一個帳號不設置密碼不給任何權限
    b)修改/etc/initd/mysqld

  下面我給出具體操作

  

  #mysql u root p passwd
mysql>GRANT select ON test* TO daemon@localhost

  mysql>revoke select on test* from daemon@localhost

  打開/etc/initd/mysqld

  把下面這行

  ping=/usr/bin/mysqladmin uUNKNOWN_MYSQL_USER ping

  修改為

  ping=/usr/bin/mysqladmin udaemon ping

  保存退出

  重新起動mysql

  

  #/etc/initd/mysqld restart
Stopping MySQL:                                            [  OK  ]
Starting MySQL:                                            [  OK  ]

  如果你的第二行仍然是failure的話再執行下面的命令

  #/etc/initd/mysqld start

  這時應該式ok了

  如果這樣可以ok的話

  那麼你需要修改/etc/initd/mysqld

  在restart函數的start後面再加一個start就可了

  即使剛安裝的mysql再起動後去看日志給給出下面的這些信息

    Cannot initialize InnoDB as innodb_data_file_path is not set
If you do not want to use transactional InnoDB tables add a line
skipinnodb
to the [mysqld] section of init parameters in your f
or myini If you want to use InnoDB tables add to the [mysqld]
section for example
innodb_data_file_path = ibdata:M:autoextend
But to get good performance you should adjust for your hardware
the InnoDB startup options listed in section at

  這是因為默認的數據庫起動腳本需要加載innodb數據庫但是mysql在做初始話時並沒有初始化時並沒有加載這樣的數據庫

  因此這裡有兩種解決辦法:使用和不使用innodb

  我們先看不使用innodb的辦法

  其實這個方法就是跳過innodb的方法

  在/etc/f文件的mysqld區域增加一行

  skipinnodb就可以了

  如果我們需要使用innodb呢?

  那麼可在/etc/f文件的mysqld區域增加下面幾行

    innodb_data_home_dir = /var/lib/mysql/
innodb_data_file_path = ibdata:M:autoextend
innodb_log_group_home_dir = /var/lib/mysql/
innodb_log_arch_dir = /var/lib/mysql/
setvariable = innodb_buffer_pool_size=M
setvariable = innodb_additional_mem_pool_size=M
setvariable = innodb_log_file_size=M
setvariable = innodb_log_buffer_size=M
innodb_flush_log_at_trx_commit=
setvariable = innodb_lock_wait_timeout=

  保存退出重啟起動mysql再去看日志

  應該不會再提示有關innodb的問題了


From:http://tw.wingwit.com/Article/program/MySQL/201311/29509.html
    推薦文章
    Copyright © 2005-2022 電腦知識網 Computer Knowledge   All rights reserved.