Mysql tips

markzy5201190發表於2012-06-03

1. mysql 的一些引數

# -e   這個引數是告訴mysql執行"-e" 後面的某個命令,而不連線到server
#	  此引數在寫一些基本的mysql檢查和監控的指令碼中非常有用
mysql  -uroot -proot -e'show databases'
# --tee  將mysql輸入和輸出內容記錄到檔案裡。便於大資料量的查詢
mysql  -uroot -proot  --tee = /tmp/query.log
# --prompt  在mysql提示符中顯示登入的主機,使用者名稱,當前的資料庫,很有用
mysql  -uroot -proot  --prompt = "\u@\h:\d >"

另外,也可以配置my.cnf,將prompt寫入[mysql]分組裡,這樣就不用每次手動了

[mysql] 
prompt="\u@\h:\d >"

2. mysqladmin 的一些引數

-status #檢測mysql基本狀態
mysqladmin -uroot -proot -hlocalhost  status
    Uptime: 240  Threads: 1  Questions: 90  Slow queries: 5  Opens: 23  Flush tables: 1  Open tables: 17  Queries per second avg: 0.375
-ping #檢測mysql是否正常
mysqladmin -uroot -proot -hlocalhost  ping
    mysqld is alive
-processlist #當前mysql的連線執行緒資訊
mysqladmin -uroot -proot -hlocalhost  processlist
    --------------------------------------------------------------------------
    | Id | User | Host      | db | Command | Time | State | Info             |
    --------------------------------------------------------------------------
    | 8  | root | localhost |    | Query   | 0    |       | show processlist |
    --------------------------------------------------------------------------

3. mysqldump 常用引數

#-d (--no-data) 僅生成結構建立的語句,沒有資料
mysqldump -uroot -proot  test  -d > /tmp/log.log 
#-l (--lock-all-tables) dump的時候鎖表,保持資料一致性
mysqldump -uroot -proot  test  --lock-all-tables > /tmp/log.log 
#指定字符集。這點比較重要,防止生成不可用內容。
mysqldump -uroot -proot  test  --default-character-set=utf8 > /tmp/log.log

4. MySQL主從架構tips

  • 強烈建議ntpdate二臺伺服器的時間,不然來個未來(future)時間就麻煩了
  • 由於MySQL資料庫走的都是內網,所以二臺機器的iptables可以關閉,在配置過程中由於沒關iptables發生了錯誤,直接導致admin在slave資料庫上連不上主資料庫
  • 主MySQL的binlog功能一定要開啟,我們的線上伺服器有次由於PHP程式誤操作,發生了改單錯誤,幸虧用binlog恢復過來了;但開啟此功能要注意binlog的大小,有次Nagios狂報警,binlog日誌都快1T了
  • 平時多檢查MySQL的備份檔案,尤其要關注其真實大小及時間;如果有條件,建議多用備份的資料庫檔案在其餘機器做下恢復實驗,跟真實的執行的資料庫比對,看有無區別
  • 資料庫的主從切換是比較危險的操作,尤其是電子商務的跑單業務,很容易丟失資料,這種操作不到萬不得已不推薦執行

5. shell指令碼分析mysql
使用shell指令碼做日誌分析,然後將分析結果直接儲存到mysql中,除了用perl連線Mysql外,還可以:
將每一步需要執行的語句儲存到 tmp.sql 中,最後在使用

mysql -u uname -p pwd < tmp.sql

6. mysql備份資料指令碼

#! /bin/bash
 
MysqlPATH="/data/app/mysql"
BackupPATH="/data/mysql_bak"
 
nowYear=`date +%Y`
nowMonth=`date +%m`
nowDay=`date +%d`
nowHour=`date +%H`
 
for DatabaseName in `$MysqlPATH/bin/mysqlshow | sed '1,3d; $d' | awk '{print $2}'`; 
    do
        echo "start backup database: "$DatabaseName;
        $MysqlPATH/bin/mysqldump --single-transaction --skip-opt $DatabaseName | gzip &gt; $BackupPATH/$DatabaseName"_"$nowYear$nowMonth$nowDay.gz
    done

http://www.cnblogs.com/wrmfw/archive/2011/09/05/2166928.html

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/26855487/viewspace-731798/,如需轉載,請註明出處,否則將追究法律責任。