mysql或者mariadb多執行緒複製

  • 2019 年 10 月 5 日
  • 筆記

本頁內容整理自《MySQL管理之道》的讀書筆記。貼出來便於以後查閱。

多執行緒複製演示:

以MySQL5.6為例,

在slave上執行下面幾條命令:

    > stop slave;      > set global slave_parallel_workers = 4;  【MariaDB裡面是slave_parallel_threads】      > start slave;      > show full processlist;可以看到有4個執行緒 Waiting for an event from Coordinator

如果此時在主上有大量的insert操作,可以在slave上執行> select * from mysql.slave_worker_infoG 應該可以查看到worker_id在不斷變化,說明是多執行緒複製在起作用了。

說明:

slave_parallel_workers 即可實現在slave上多執行緒並發複製。不過,它只能支援一個實例下多個 database 間的並發複製,並不能真正做到多表並發複製。因此在較大並發負載時,slave還是沒有辦法及時追上master,需要想辦法進行優化(比如:盡量將一個庫中的表按照業務邏輯拆分成多個庫來保存,這樣在寫操作時候,slave就能開啟多執行緒複製,減少了同步的時延。)

此外,建議修改my.cnf,增加2行(默認這個info_file是文件的,不寫入資料庫的)

relay_log_info_repository = table  master_info_repository = table

單單這樣還不夠,默認這2張表是MyISAM的,不安全還要轉換下

> alter table slave_master_info engine innodb;  > alter table slave_relay_log_info engine innodb;  > alter table slave_worker_info engine innodb;

這樣的話,可防止表損壞,在損壞後可以自行修復。