• MySQL DBA 常用手冊

    4
    MySQL SQL 數據庫 C/C++ 27423 次瀏覽

    1.mysql的遠程連接命令可以遠程導入導出數據 
    mysqldump --default-character-set=gb2312 -h255.255.000.00 -uroot -pxxxxxx mydatabase>d:\data.sql 
    將指定的數據庫導出到一個外部SQL文件中去! 
    還原命令: 
    mysql --default-character-set=gb2312 -h255.255.000.00 -uroot -pxxxxxx mydatabase<d:\data.sql 

    2. MYSQL三種升級方法 
    安裝辦法:二進制包編譯安裝 
    第一種:適用于任何一種存儲引擎。 

    1. 下載并安裝好新版本的MySQL數據庫,并將其端口改為3307(避免和舊版本的3306沖突),啟動服務。 

    2. 在新版本下創建同名數據庫。 

    # mysqldump  -p3307  -uroot  create mysqlsystems_com 

    3. 在舊版本下備份該數據庫。 

    # mysqldump  -p3306  -uroot  mysqlsystems_com > mysqlsystems_com.bk 

    Note: 你也可以加上–opt選項,這樣可以使用優化方式將你的數據庫導出,減少未知的問題。 

    4. 將導出的數據庫備份導入到新版本的MySQL數據庫中。 

    # mysql -p3307 -uroot mysqlsystems_com < mysqlsystems_com.bk 

    5. 再將舊版本數據庫中的data目錄下的mysql數據庫全部覆蓋到新版本中。 

    # cp -R /opt/mysql-5.1/data/mysql  /opt/mysql-5.4/data(權限庫保持不變) 

    Note: 大家也都知道這個默認數據庫的重要性。 

    6. 在新版下執行mysql_upgrade命令,其實這個命令包含一下三個命令: 

    # mysqlcheck –check-upgrade –all-databases –auto-repair 
    # mysql_fix_privilege_tables 
    # mysqlcheck –all-databases –check-upgrade –fix-db-names –fix-table-names 

    Note: 在每一次的升級過程中,mysql_upgrade這個命令我們都應該去執行,它通過mysqlcheck命令幫我們去檢查表是否兼容新版本的數據庫同時 作出修復,還有個很重要的作用就是使用mysql_fix_privilege_tables命令去升級權限表。 

    7. 關閉舊版本,將新版的數據庫的使用端口改為3306,重新啟動新版本MySQL數據庫。到此,一個簡單環境下的數據庫升級就結束了。 

    第二種,同樣適用任何存儲引擎。 

    1. 同樣先安裝好新版本的MySQL。 

    2. 在舊版本中,備份數據庫。 

    # mkdir /opt/mysqlsystems_bk  ;  mysqldump -p3306 -uroot –tab=/opt/mysqlsystems_bk  mysqlsystems_com 

    Note: –tab選項可以在備份目錄mysqlsystems_bk下生成后綴為*.sql和*.txt的兩類文件;其中,.sql保存了創建表的SQL語句而.txt保存著原始數據。 

    3. 接下來在新版本的數據庫下更新數據。 

    # mysqladmin -p3307 -uroot create mysqlsystems_com 

    # cat /opt/mysqlsystems_bk/*.sql | mysql -p3307 -uroot  mysqlsystems_com       ( Create Tables ) 

    # mysqlimport mysqlsystems_com /opt/mysqlsystems_bk/*.txt            ( Load Data ) 

    4. 之后的所有步驟與第一種方法的后三步5、6、7相同。 

    第三種,適用于MyISAM存儲引擎,全部是文件間的拷貝。 

    1. 安裝。 

    2. 從舊版本mysqlsystems_com數據庫下將所有.frm、.MYD 和.MYI文件拷貝到新版本的相同目錄下。 

    3.之后的步驟依然同于第一種的后三步。 

    以上就是三種升級MySQL的方法,看似沒有出現什么問題,其實,在實際的生產環境中,為會有諸多問題發生,這就需要我們在升級之前充分了解新版本中增加了哪些新功能,進一步分析升級以后這些新特性是否將會對我們原來應用產生影響。 

    3. MYSQL遠程連接不了的解決方案 

    有可能是這個用戶權限不夠。查看一下權限表。 

    4. MYSQL忘記密碼解決辦法 

    在windows下: 
    打開命令行窗口,停止mysql服務:Net stop mysql 
    到mysql的安裝路徑啟動mysql,在bin目錄下使用mysqld-nt.exe啟動,在命令行窗口執行:mysqld-nt --skip-grant-tables 
    然后另外打開一個命入令行窗口,執行mysql,此時無需輸入密碼即可進入。 
    >use mysql 
    >update user set password=password("new_pass") where user="root"; 
    >flush privileges; 
    >exit 
    使用任務管理器,找到mysqld-nt的進程,結束進程! 
    在重新啟動mysql-nt服務,就可以用新密碼登錄了。 

    在linux下: 
    如果 MySQL 正在運行,首先殺之: killall -TERM mysqld。 
    啟動 MySQL :bin/safe_mysqld --skip-grant-tables & 
    就可以不需要密碼就進入 MySQL 了。 
    然后就是 
    >use mysql 
    >update user set password=password("new_pass") where user="root"; 
    >flush privileges; 
    重新殺 MySQL ,用正常方法啟動 MySQL 。 

    5. 更改MYSQL的默認字符集 

    法1、 用 SET 語法來指定,不加 "GLOBAL" 的話就只對本次會話有效 
    SET [GLOBAL] character_set_client = utf8; 
    SET [GLOBAL] character_set_connection = utf8; 
    SET [GLOBAL] character_set_database = utf8; 
    SET [GLOBAL] character_set_results = utf8; 
    SET [GLOBAL] character_set_server = utf8; 

    方法2、 也用SET語法,只對本次會話有效 
    SET NAMES 'utf8'; 

    方法3、) 直接修改 my.cnf,增加一行內容,然后重啟 MySQL,使之全局生效 
    default-character-set = utf8 

    6.MYSQL慢查詢分析工具:mysqldumpslow 

    mysqldumpslow命令 
    /path/mysqldumpslow -s c -t 10 /database/mysql/slow-log 
    這會輸出記錄次數最多的10條SQL語句,其中: 

        * -s, 是表示按照何種方式排序,c、t、l、r分別是按照記錄次數、時間、查詢時間、返回的記錄數來排序,ac、at、al、ar,表示相應的倒敘; 
        * -t, 是top n的意思,即為返回前面多少條的數據; 
        * -g, 后邊可以寫一個正則匹配模式,大小寫不敏感的; 

    比如 
    /path/mysqldumpslow -s r -t 10 /database/mysql/slow-log 
    得到返回記錄集最多的10個查詢。 
    /path/mysqldumpslow -s t -t 10 -g “left join” /database/mysql/slow-log 
    得到按照時間排序的前10條里面含有左連接的查詢語句。

     

    查看mysql的某個選項
    show variables like ‘%VAR_NAME%’;
    select @@VAR_NAME;

        在Linux下管理MySQL數據庫的時候總有一些很緊急的情況,發現數據庫突然變得壓力很大了,那么作為一個DBA,也許需要一些常用的手段或者說命令去分析問題出現在哪里,然后解決:

    數據庫突然產生壓力時查看正在查詢的SQL:(如果這里內容太多表示并發執行的SQL過多,或許數據庫堵塞了,會越來越慢,正常情況下這里應該很少有東西的,也就是連接都在Sleep狀態)
    /usr/local/mysql/bin/mysql -uroot -ppassword databaseName  -e “show full processlist” | grep -v Sleep

    正在運行的SQL太多了,看不過來,那需要排序了,看持續執行時間最長的那些SQL:
    /usr/local/mysql/bin/mysql -uroot -ppassword databaseName  -e “show full processlist” | grep -v Sleep | sort -k6rn >sort.tmp

    如果發現IOWait很高,請查看臨時表的生成情況,特別是disk tmp table:
    /usr/local/mysql/bin/mysql -uroot -ppassword databaseName  -e “show global status like ‘%tmp%’”

    通過這樣一些辦法可以查看數據庫都在忙什么,那些忙的SQL又具體在哪一個步驟上卡住了,是在創建磁盤臨時文件、Sending Data、statistics?依照不同的原因來解決問題

    —————————————————————
    關于Mysql Replication日常管理,重做,問題分析時常用的辦法:

    重做Slave,或者Master變化等等,需要將Slave與新的Master同步:
    change master to master_host=IP,master_user=’replication userName’,master
    _password=’replication Passwrod’,master_log_file=’log-bin.000001′,master_log_pos=0;

    導出數據成SQL文本,慎用,根據你的DB大小會鎖表,導致堵塞其他訪問:
    nohup /usr/local/mysql/bin/mysqldump –database DATABASEName -uUserName -pPassWord –lock-all-tables -F >DATA20070519.sql &
    -F后會刷新Master Log這樣配合上面的Change Master可以讓Slave進行同步

    只導出數據庫的結構(沒有任何內容)
    /usr/local/mysql/bin/mysqldump -d DATABASEName -uUserName -pPassWord >DATA20070519.structure

    只導出數據庫的數據(沒有創建表結構的語句等等)
    /usr/local/mysql/bin/mysqldump -t DATABASEName -uUserName -pPassWord >DATA20070519.data

    同步的時候出現問題(或者其他問題)了,根據同步出現問題的位置(偏移量),查看Binlog的具體內容
    /usr/local/mysql/bin/mysqlbinlog binlogFileName –start-position=偏移量
    呵呵,我們碰到過Master執行的SQL到了Slave會報語法錯誤,夠詭異吧!不過就是這樣查到了原因:如果通過存儲過程將bit的內容改為1就會出現這樣的問題,后來將bit改為tinyint(1)就好了

    授權給某一臺Slave擁有復制的權限:
    grant replication slave on *.* to 用戶名@IP identified by ‘密碼’;

    查看Slave狀態:
    Show slave status \G
    查看Master狀態:
    Show master status;
    重置Slave(慎用)
    reset slave;
    Slave出現問題了,先跳過這一條語句(請確認所要跳過的具體內容不會影響后面的同步,確認方法查看Binlog文件):
    set global sql_slave_skip_counter=1; (記得先暫停Slave:stop slave; 然后重啟Slave:start slave;)

    ———————————————–
    純粹Linux相關的:
    tcpdump -A “dst port 3306″ 查看3306端口的通信具體內容

    相似問題

    相關經驗

    相關資訊

    相關文檔

  • sesese色