FAQ-MySQL Admin

    版本為 21:20, 20 Nov 2024

    到這個版本。

    返回到 版本存檔.

    查閱目前版本

    MySQL 資料庫管理問與答。

    求助指令

    mysql> \h
    mysql> help
    mysql> help <command>;
    
    shell> perror <ErrCode#>
    

    Q: 分析 SQL statement

    Ans: explain 的使用範例

    mysql> create table t(a int, b int, c int);
    mysql> create index t_idx on  t (a,b,c);
    mysql> insert into t values (1, 1, 1);
    ... (load 10 more test rows like this) ...
    
    mysql> explain select * from t where a=1 or b=1;
    | table | type  | possible_keys | key   | key_len | ref  
    | t     | index | t_idx         | t_idx |      15 | NULL 

    Q: root 密碼遺失怎辦

    Ans: 以系統的 root 做強制重設密碼步驟

    // 切換到 root
    su -
    // 停止 MySQL 服務
    service mysqld stop
    // 以 --skip-grant-tables 啟動 MySQL
    mysqld_safe --skip-grant-tables --user=root &
    // 不用密碼進入 mysql,修改密碼為空
    mysql -u root
    mysql>UPDATE mysql.user SET Password=PASSWORD('') WHERE User='root';
    mysql>flush privileges;
    mysql>exit;
    // kill 目前的 mysql 服務
    ps -ef | grep mysql
    kill <mysql-pid>
    // 啟動正常模式的 MySQL 服務
    service mysqld start
    // 修改為新密碼
    mysqladmin -u root -p password 'newpass'
    

    Q: 錯誤訊息 [ERROR] Column count of mysql.proc is wrong

    [ERROR] Column count of mysql.proc is wrong. Expected 20, found 16. Created with MySQL 50077, now running 50152. Please use mysql_upgrade to fix this error.

    Ans: 這是因為作過資料庫升級後,沒有執行 mysql_upgrade,解決方法

    # mysql_upgrade -u root -p
    

    Q: 錯誤訊息:Error: 1030 - Got error 28 from storage engine

    Ans:執行指令 perror 分析錯誤發生原因

    #perror 28
    OS error code  28:  No space left on device
    

    原來是資料庫的儲存空間不足所造成。

    // 列出目前資料庫所有連線

    #mysqladmin -u root -p processlist

    Q: 目錄 /var/lib/mysql 有大量的的mysql-bin.00001.....磁碟空間佔滿

    Ans: mysql-bin 是 transaction log,用於資料庫同步或資料回復時使用,預設是一個檔案約 1GB,解決方式如下:

    service mysqld stop
    vi /etc/my.cnf 
    

    /etc/my.cnf:找到 log-bin=mysql-bin 增加這兩行

    # added by alang
    expire_logs_days        = 10
    max_binlog_size         = 100M
    

    啟動 mysql

    service mysqld start
    

    另一種方法

    5.2 MySQL Server Logs :: 5.2.3 The Binary Log
    12.5.1 SQL Statements for Controlling Master Servers :: 12.5.1.1 PURGE BINARY LOGS Syntax

    系統目錄 /var/lib/mysql 底下有很多 mysql-bin.xxxxxxx 的檔案,這些是 MySQL 的 binary log,假設系統並沒有作 replication,而且確定不需要保留這些 transaction log,下列指示可以清除它們:

    // 檢查 log 功能開啟

    mysql> show variables like '%log%';
    名稱為 log_bin

    // 檢查 log 檔

    mysql> show binary logs;
    編號愈大的表示 log 愈新

    // 刪除編號 mysql-bin.000011 以前但不包含 mysql-bin.000011 的所有 binary log files

    mysql> purge binary logs to 'mysql-bin.000011';
    指令結束後,記得在執行一次 show binary logs 檢查看看。

    Q: mysqldump: Got error: 145: Table './.../wp_useronline' is marked as crashed and should be repaired when using LOCK TABLES

    Ans: 這是因為資料庫可能曾經意外中斷服務所造成,執行修復指令如下:

    mysqlcheck -u<db_username> -p --auto-repair --databases <db_name>
    

    NOTE:

    若有多個 Table 損壞,可能要執行多次,直到每一個 Table 顯示 ok。

    如果 ErrCode 是 144,可能必須使用其他修復的指令,例如 myisamchk,參閱教學:http://dev.mysql.com/doc/refman/5.1/...am-repair.html

    Powered by MindTouch Core