【20180426】 pt-table-sync 和slave中的table中的字段存在表情包亂碼

基於MySQL主從數據不一致

  1. MySQL5.6 binlog statment格式 主從架構,table的字符集是utf8mb4 插入表情符號的時候,slave沒法識別,顯示亂碼
    • 猜測多是由於binlog字符集默認是utf8格式的。寫入binlog的時候就已經亂碼
  2. table的字符集是utf8,而且設置某個字段的字符集類型是utf8mb4。在這個字段插入表情,而且進行pt2.2.19 主從數據同步的時候生成的DML語句也沒法識別表情包顯示亂碼。

實驗結果

  1. 猜測1不成立,由於binlog的寫入都是二進制。從庫出現字段先睡表情是亂碼的現象猜想多是由於在作邏輯備份的時候mysqldump默認的字符集是utf8致使的。
    • mysqldump備份的時候默認的是utf8字符集,致使在備份字符集是utf8mb4的table裏面有些數據是表情包的字段顯示亂碼。在導入數據進入的時候仍是亂碼。
  2. 猜測2成立。
    • table的字符集是utf8
    • table的某個column字符集是utfbmb4
    • table中字符集是utf8mb4的字段有存在表情包
    • 主從複製中這個slave的table的中字段表情包是亂碼
    • 在進行正常的主從同步的時候(即正常的經過binlog傳輸和回放)不會出現slave的表情包顯示是亂碼現象
    • 在pt-table-sync主從數據同步的時候生成的SQL顯示的仍是表情包亂碼現象。
    • pt-table-sync --print --charset=utf8 --sync-to-master h=slave_host,u=username,p='password',P=3306 --databases=schema_name --tables=tables_1,tables_2
    • 在使用pt-table-sync的時候直接使用execute這個參數的時候,假如slave不能同步master,則會修改master的數據使得master同步slave的數據。
    • pt-table-sync --print --charset=utf8 --execute --sync-to-master h=slave_host,u=username,p='password',P=3306 --databases=schema_name --tables=tables_1,tables_2
相關文章
相關標籤/搜索