mysql主從複製原理及配置
⒈關於主從複製的原理:
簡單的來講就是slave上一個io執行緒去取binlog事件,一個sql執行緒將binlog事件重放至slave上
⒉關於複製賬號許可權
mysql的主伺服器需要有replication slave的許可權
當然在實際環境中,我們需要監控和管理複製,所以需要有replication client許可權
另外如果需要主備切換的,就需要主從都具有replication slave與replication client的許可權
實際操作:GRANT REPLICATION SLAVE,REPLICATION CLIENT ON *.* TO repl@'192.168.101.%' IDENTIFIED BY 'tianqu';
⒊關於複製的方式(binlog_format)
基於語句的複製:通俗一點就是sql語句複製,好處:不會使用大量頻寬(為什麼?一條更新好幾M的資料,binlog中就幾十位元組) 缺點:有存在無法複製的sql語句,儲存過程、觸發器的複製也可能存在問題。
基於行的複製:通俗一點就是物理複製,表中資料基於行復制。優點:能解決語句複製的缺點 缺點:複製資料多,不好檢測複製中問題。
混合複製:結合兩者的優點,能用語句複製的採用語句,其他則基於行的複製
具體的引數設定請看核心三處
⒋關於複製的引數
⑴核心引數(主庫)
#指定log_bin,開啟二進位制,預設在data目錄下
log_bin = /var/lib/data/mysql-bin
#指定sever_id的一個作用是標識sql產生的源主機,防止重複複製,所以兩邊的server_id必須不一致
server_id=10
#複製方式
binlog_format='MIXED'
mysql> select @@binlog_format;
+-----------------+
| @@binlog_format |
+-----------------+
| STATEMENT |
+-----------------+
1 row in set (0.00 sec)
⑵核心引數(備庫)
#指定log_bin,開啟二進位制,預設在data目錄下
log_bin = /var/lib/data/mysql_bin
#指定sever_id的一個作用是標識sql產生的源主機,防止重複複製,所以兩邊的server_id必須不一致
server_id=10
#複製方式
binlog_format='MIXED'
mysql> select @@binlog_format;
+-----------------+
| @@binlog_format |
+-----------------+
| STATEMENT |
+-----------------+
1 row in set (0.00 sec)
#指定中繼日誌的位置
relay_log=/var/lib/mysql-relay-bin
⑶主庫複製其他引數
#該引數控制binlog在事務提交前將二進位制日誌同步到磁碟,該引數最好設定,防止丟失事務
sync_binlog=1
#過濾主庫上面的二進位制,這兩個引數在環境中強烈建議不使用,有可能導致某個時間的資料恢復失敗。
binlog_do_db與binlog_ignore_db
⑷備庫的其他引數
#防止備庫在崩潰後,啟動自動複製
skip_slave_start
#允許備份重放的事件重放到二進位制日誌中,從庫帶從庫是必須的選項
log-slave-updates = 1
#其他重新整理到磁碟的檔案,如果對效能不是很看重,可以配置如下引數,預設是不呼叫fsync的
sync_master_info =1
sync_relay_log =1
sync_relay_log_info=1
#中繼日誌中關於mysql庫操作的資料不進行重放
replicate-wild-ignore-table=mysql%
⒌關於主備配置檔案
主備庫的一個基本配置
主庫:
log_bin = /var/lib/data/mysql-bin
server_id=10
binlog_format='MIXED'
sync_binlog=1
備庫(從庫帶從庫情況下)
log_bin = /var/lib/data/mysql-bin
server_id=8
binlog_format='MIXED'
relay_log=/var/lib/mysql_relay_bin
sync_binlog=1
skip_slave_start
Replicate_Wild_Ignore_Table=mysql.%
⒍配置主從複製
主備庫建立複製賬號
GRANT REPLICATION SLAVE,REPLICATION CLIENT ON *.* TO repl@'192.168.101.%' IDENTIFIED BY 'tianqu';
備庫上:
CHANGE MASTER TO MASTER_HOST='192.168.101.11',MASTER_USER='repl',MASTER_PASSWORD='tianqu',MASTER_LOG_FILE='mysql-bin.00001',MASTER_LOG_POS=0;
然後start salve
⒎關於複製的檢查
在從庫下:
mysql> show slave status\G;
*************************** 1. row ***************************
Slave_IO_State: Waiting for master to send event
Master_Host: 192.168.101.11
Master_User: repl
Master_Port: 3306
Connect_Retry: 60
Master_Log_File: mysql-bin.000119
Read_Master_Log_Pos: 120
Relay_Log_File: relaylog.000123
Relay_Log_Pos: 283
Relay_Master_Log_File: mysql-bin.000119
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
Replicate_Do_DB:
Replicate_Ignore_DB:
Replicate_Do_Table:
Replicate_Ignore_Table:
Replicate_Wild_Do_Table:
Replicate_Wild_Ignore_Table: mysql.%
如果Slave_IO_Running,Slave_SQL_Running為yes說明覆制連線沒問題
⒏關於主主複製
主主複製就是互為主備的關係
在配置時,可以參照主從複製,但為了防止主鍵衝突,必須加入如下引數
主庫A
auto_increment_increment=1,即主鍵從1開始,可以自定義
auto_increment_offset=1,及主鍵的偏移量為1,可以自定義
主庫B
auto_increment_increment=2,即主鍵從2開始
auto_increment_offset=1,及主鍵的偏移量為1
所以主庫A上的主鍵的插入順序為:1 3 5 7 9 ...
而主庫B上的主鍵則為:2 4 6 8 ...
注意主主複製不能保證資料的一致性,如果update同一個語句,可能會導致兩臺的結果不一致
簡單的來講就是slave上一個io執行緒去取binlog事件,一個sql執行緒將binlog事件重放至slave上
⒉關於複製賬號許可權
mysql的主伺服器需要有replication slave的許可權
當然在實際環境中,我們需要監控和管理複製,所以需要有replication client許可權
另外如果需要主備切換的,就需要主從都具有replication slave與replication client的許可權
實際操作:GRANT REPLICATION SLAVE,REPLICATION CLIENT ON *.* TO repl@'192.168.101.%' IDENTIFIED BY 'tianqu';
⒊關於複製的方式(binlog_format)
基於語句的複製:通俗一點就是sql語句複製,好處:不會使用大量頻寬(為什麼?一條更新好幾M的資料,binlog中就幾十位元組) 缺點:有存在無法複製的sql語句,儲存過程、觸發器的複製也可能存在問題。
基於行的複製:通俗一點就是物理複製,表中資料基於行復制。優點:能解決語句複製的缺點 缺點:複製資料多,不好檢測複製中問題。
混合複製:結合兩者的優點,能用語句複製的採用語句,其他則基於行的複製
具體的引數設定請看核心三處
⒋關於複製的引數
⑴核心引數(主庫)
#指定log_bin,開啟二進位制,預設在data目錄下
log_bin = /var/lib/data/mysql-bin
#指定sever_id的一個作用是標識sql產生的源主機,防止重複複製,所以兩邊的server_id必須不一致
server_id=10
#複製方式
binlog_format='MIXED'
mysql> select @@binlog_format;
+-----------------+
| @@binlog_format |
+-----------------+
| STATEMENT |
+-----------------+
1 row in set (0.00 sec)
⑵核心引數(備庫)
#指定log_bin,開啟二進位制,預設在data目錄下
log_bin = /var/lib/data/mysql_bin
#指定sever_id的一個作用是標識sql產生的源主機,防止重複複製,所以兩邊的server_id必須不一致
server_id=10
#複製方式
binlog_format='MIXED'
mysql> select @@binlog_format;
+-----------------+
| @@binlog_format |
+-----------------+
| STATEMENT |
+-----------------+
1 row in set (0.00 sec)
#指定中繼日誌的位置
relay_log=/var/lib/mysql-relay-bin
⑶主庫複製其他引數
#該引數控制binlog在事務提交前將二進位制日誌同步到磁碟,該引數最好設定,防止丟失事務
sync_binlog=1
#過濾主庫上面的二進位制,這兩個引數在環境中強烈建議不使用,有可能導致某個時間的資料恢復失敗。
binlog_do_db與binlog_ignore_db
⑷備庫的其他引數
#防止備庫在崩潰後,啟動自動複製
skip_slave_start
#允許備份重放的事件重放到二進位制日誌中,從庫帶從庫是必須的選項
log-slave-updates = 1
#其他重新整理到磁碟的檔案,如果對效能不是很看重,可以配置如下引數,預設是不呼叫fsync的
sync_master_info =1
sync_relay_log =1
sync_relay_log_info=1
#中繼日誌中關於mysql庫操作的資料不進行重放
replicate-wild-ignore-table=mysql%
⒌關於主備配置檔案
主備庫的一個基本配置
主庫:
log_bin = /var/lib/data/mysql-bin
server_id=10
binlog_format='MIXED'
sync_binlog=1
備庫(從庫帶從庫情況下)
log_bin = /var/lib/data/mysql-bin
server_id=8
binlog_format='MIXED'
relay_log=/var/lib/mysql_relay_bin
sync_binlog=1
skip_slave_start
Replicate_Wild_Ignore_Table=mysql.%
⒍配置主從複製
主備庫建立複製賬號
GRANT REPLICATION SLAVE,REPLICATION CLIENT ON *.* TO repl@'192.168.101.%' IDENTIFIED BY 'tianqu';
備庫上:
CHANGE MASTER TO MASTER_HOST='192.168.101.11',MASTER_USER='repl',MASTER_PASSWORD='tianqu',MASTER_LOG_FILE='mysql-bin.00001',MASTER_LOG_POS=0;
然後start salve
⒎關於複製的檢查
在從庫下:
mysql> show slave status\G;
*************************** 1. row ***************************
Slave_IO_State: Waiting for master to send event
Master_Host: 192.168.101.11
Master_User: repl
Master_Port: 3306
Connect_Retry: 60
Master_Log_File: mysql-bin.000119
Read_Master_Log_Pos: 120
Relay_Log_File: relaylog.000123
Relay_Log_Pos: 283
Relay_Master_Log_File: mysql-bin.000119
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
Replicate_Do_DB:
Replicate_Ignore_DB:
Replicate_Do_Table:
Replicate_Ignore_Table:
Replicate_Wild_Do_Table:
Replicate_Wild_Ignore_Table: mysql.%
如果Slave_IO_Running,Slave_SQL_Running為yes說明覆制連線沒問題
⒏關於主主複製
主主複製就是互為主備的關係
在配置時,可以參照主從複製,但為了防止主鍵衝突,必須加入如下引數
主庫A
auto_increment_increment=1,即主鍵從1開始,可以自定義
auto_increment_offset=1,及主鍵的偏移量為1,可以自定義
主庫B
auto_increment_increment=2,即主鍵從2開始
auto_increment_offset=1,及主鍵的偏移量為1
所以主庫A上的主鍵的插入順序為:1 3 5 7 9 ...
而主庫B上的主鍵則為:2 4 6 8 ...
注意主主複製不能保證資料的一致性,如果update同一個語句,可能會導致兩臺的結果不一致
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/30221425/viewspace-1697587/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- Mysql主從複製原理及搭建MySql
- MySQL 主從複製的原理和配置MySql
- Redis replication主從複製原理及配置Redis
- mysql 5.7 主從複製搭建及原理MySql
- mysql複製--主從複製配置MySql
- MySQL主從複製原理MySql
- MySql 主從複製配置MySql
- MySQL主從複製配置MySql
- MySQL(13)---MYSQL主從複製原理MySql
- mysql replication /mysql 主從複製原理MySql
- 配置mysql5.5主從複製、半同步複製、主主複製MySql
- MYSQL主從複製配置(整理)MySql
- 高效能Mysql主從架構的複製原理及配置詳解MySql架構
- MySQL 主從複製原理不再難MySql
- MYSQL主從複製製作配置方案MySql
- mysql for linux 配置主從複製MySqlLinux
- MySQL主從複製原理及必備知識總結MySql
- 深入挖崛:mysql主從複製原理MySql
- mysql的主從複製 原理講解MySql
- MySQL主從複製與主主複製MySql
- MySQL 主從複製安裝部署配置MySql
- Docker 教程十五配置MySQL 主從複製DockerMySql
- 簡單配置mysql的主從複製MySql
- Linux下配置MySQL主從複製LinuxMySql
- MySQL的主從複製與MySQL的主主複製MySql
- mysql5.7主從複製,主主複製MySql
- 基於 Docker 的 MySQL 主從複製搭建及原理(真正弄懂)DockerMySql
- MySQL主從複製、半同步複製和主主複製MySql
- 深入瞭解MySQL主從複製的原理MySql
- MySQL 主從複製MySql
- 【MySql】主從複製MySql
- MySQL主從複製MySql
- MySQL 5.7的安裝及主從複製(主從同步)MySql主從同步
- Redis 主從複製原理Redis
- mysql主主複製(雙主複製)配置步驟MySql
- MySQL主從複製、半同步複製和主主複製概述MySql
- mysql之 MySQL 主從基於position複製原理概述MySql
- MySQL主從複製配置心跳功能介紹MySql