MySQL 資料庫管理問與答。
mysql> \h mysql> help mysql> help <command>; shell> perror <ErrCode#>
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
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'
Ans:執行指令 perror 分析錯誤發生原因
#perror 28 OS error code 28: No space left on device
原來是資料庫的儲存空間不足所造成。
// 列出目前資料庫所有連線
#mysqladmin -u root -p processlist
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 檢查看看。
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