MySQL處理過的問題

  1. 日常使用
    ##查詢一個庫中每張表大小
    SELECT
    table_name,
    table_rows,
    data_length + index_length,
    CONCAT(
    ROUND(
    (data_length + index_length) / 1024 / 1024,
    2
    ),
    'MB'
    )  DATA
    FROM
    information_schema. TABLES
    WHERE
    TABLE_SCHEMA = 'zhfwpt';

  2. ##設置定時任務 (事件調度器)
    show VARIABLES like '%event_scheduler%';
    SET GLOBAL event_scheduler = 1;

##主從維護(同步排查)
show slave status;
show variables like '%sync_binlog%';
看 Slave_IO_Running和Slave_SQL_Running兩個線程的狀態
Slave_IO線程:負責把主庫的bin日誌(Master_Log)內容,抄寫到從庫的中繼日誌上(Relay_Log)。Slave_IO線程比較簡單,一般不容易出錯,如果Slave_IO_Running顯示爲No,多爲網絡連接不上,權限不夠等環境問題;
Slave_SQL線程:負責把中繼日誌上的語句在從庫上執行一遍,相對於Slave_IO,Slave_SQL線程是比較容易出錯的
示例:

  1. 手動在從庫中插入一條數據,造成主從不一致,此時兩個線程的狀態依舊是正常的;
  2. 然後在主庫也插入一條同樣的數據,通知從庫做相同操作,從庫會出現主鍵重複的錯誤,這時候Slave_SQL_Running的狀態會變爲No,而Last_SQL_Error和Last_SQL_Error_Timestamp會記錄錯誤的原因和發生時間;
  3. Slave_SQL線程會停止後續的SQL語句執行,因爲它意識到往後執行會導致錯誤修復的難度增加;
  4. 但Slave_IO線程會繼續抄log的工作,所以中繼log依然是最新的;
  5. 這時候Master_Log_File: mysql-bin.000145和Relay_Master_Log_File: mysql-bin.000144之間就產生了偏差。
    當錯誤修復後,只需用stop slave和start slave重啓下同步,Slave_SQL線程會重新的嘗試工作,如果沒有問題,那麼Slave_SQL的狀態會變回Yes(但此時主從並沒有完全同步,需要一點時間)。

如何判斷主從完全同步?
首先Master_Log_File和Relay_Master_Log_File所指向的文件必須一致;
其次Relay_Log_Pos和Exec_Master_Log_Pos的位置也要一致才行;
此時,Slave_SQL_Running_State:顯示爲wait 意思是中繼日誌的sql語句已經全部執行完畢,我歇菜了。

  1. ##數據庫表信息查看(INFORMATION_SCHEMA庫中信息查看)
    select * from INFORMATION_SCHEMA.TABLES
    where TABLE_SCHEMA = 'app' --驗檢查的庫名
    and tablename like 'APP%' --要檢查表名的規則
    and (table_name not like '%bak%' and table_name not like '%copy%' and table_name not like '%08%' and table_name not like '%18%')
    order by create_time;

  2. ##數據庫恢復備份
    InnoDB存儲引擎無法修改數據庫名
    MyISAM修改數據庫名只需要停了庫修改數據目錄就行了
    mysqldump -P 3306 -h 127.0.0.1 -uroot -p -q -e flowable > /opt/flowable.sql
    mysqldump -P 3306 -h 127.0.0.1 -uroot -p -q -e zhfwpt_jk --ignore-table=jg_dd_log --ignore-table=jg_dd_log2 > /opt/zhfwpt_jk1024.sql #mysqldump 備份導出數據排除某張表或多張表
    mysql -uroot -p flowable_new < /opt/flowable.sql

  3. 手動刪除binlog日誌
    PURGE MASTER LOGS BEFORE DATE_SUB( NOW( ), INTERVAL 7 DAY); #刪除七天以前的日誌
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章