MySQL數據庫性能優化(1):數據庫主從同步

數據庫主從複製是MyCat實現讀寫分離的基礎,所以在實現MyCat讀寫分離前,先簡要敘述MySQL數據庫主從複製的配置方式。

數據庫主從同步前提:

(1)準備兩臺服務器(主192.168.1.100,從192.168.1.200),分佈安裝並啓動mysql服務;

(1)主從數據庫服務器網絡聯通,能相互ping通;

(2)同步前主從數據庫中數據要保持一致。

1、數據庫Master設置

1.1、配置主機Master的my.cnf文件

log-bin=binlog #指定binlog日誌文件名,默認datadir路徑下
server-id=1 #數據庫唯一ID,主從的server-id不能重複
binlog-do-db = evcg_node1 #要同步的數據庫名。如果是多個同步庫,就以此格式另寫幾行即可。如果不指明對某個具體庫同步,就去掉此行,表示同步所有庫(除了ignore忽略的庫)
binlog-ignore-db=mysql #不同步mysql系統數據庫。如果是多個不同步庫,就以此格式另寫幾行;也可以在一行,中間逗號隔開
sync_binlog = 0 #確保binlog日誌寫入後與硬盤同步
binlog_format = mixed #bin-log日誌文件格式,設置爲MIXED可以防止主鍵重複
datadir=/mnt/data
socket=/tmp/mysql.sock

sync_binlog參數說明

sync_binlog這個參數是對於MySQL系統來說是至關重要的,他不僅影響到Binlog對MySQL所帶來的性能損耗,而且還影響到MySQL中數據的完整性。對於sync_binlog參數的各種設置的說明如下:

sync_binlog=0,當事務提交之後,MySQL不做fsync之類的磁盤同步指令刷新binlog_cache中的信息到磁盤,而讓Filesystem自行決定什麼時候來做同步,或者cache滿了之後才同步到磁盤。

sync_binlog=n,當每進行n次事務提交之後,MySQL將進行一次fsync之類的磁盤同步指令來將binlog_cache中的數據強制寫入磁盤。

1.2、設置數據同步權限

[root@master ~]# mysql -uroot -pEVsaas2018
mysql> GRANT REPLICATION SLAVE ON *.* TO repli@'192.168.1.200' IDENTIFIED BY 'repli123456';
mysql> flush privileges;

1.3、主數據庫Master狀態

查看Master狀態,File和Position作爲從機執行同步指令的重要參數。

mysql> show master status;
+-------------------+------------+---------------------+------------------+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+-------------------+------------+---------------------+------------------+
| binlog.000013 | 1794 | evcg_node1 | |
+-------------------+-------------+--------------------+-------------------+
1 row in set (0.00 sec)

2、數據庫Slave設置

2.1、配置從機Slave的my.cnf文件

server-id=2 #設置從服務器id,必須於主服務器不同
replicate-do-db=evcg_node1 #需要同步的數據庫名。如果不指明同步哪些庫,就去掉這行,表示所有庫的同步(除了ignore忽略的庫)。
replicate-wild-do-table=evcg_node1.test #當只同步幾個或少數表時,可以如是設置。注意這要跟上面的庫指定配合使用
replicate-ignore-db=mysql #不同步mysql系統數據庫
slave-skip-errors = all #跳過所有的錯誤錯誤,繼續執行復制操作
#開啓中繼日誌
relay-log=relay-log
relay-log-index=relay-log.index
innodb_file_per_table=ON
skip_name_resolve=ON

#如果需要同步的數據庫名不同

replicate-rewrite-db=evcg_node1->evcg_node2 # master上的數據庫名爲evcg_node1,slave上的庫名爲evcg_node2

2.2、配置主從同步指令

[root@master ~]# mysql -urepli -prepli123456
mysql> stop slave; #停止slave同步
mysql> change master to master_host='192.168.1.100',master_user='repli',master_password='repli123456',master_log_file='binlog.000014',master_log_pos=107;
#master_log_file和master_log_pos通過主機上執行show master status;查看
mysql> start slave; #啓動slave同步
mysql> show slave status\G

#查看show slave status\G顯示Slave_IO_Running: Yes、Slave_SQL_Running: Yes表示設置成功,主從已實現同步

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章