# mysql主從複製邏輯: 1.從庫執行start slave 開啟主從複製。 2.從庫請求連接到主庫,並且指定binlog文件以及位置後發出請求。 3.主庫收到從庫請求後,將信息返回給從庫,除了信息日誌外,還包含新的文件名稱以及下一個更新節點。 4.從庫接收到主庫發送的信息後,會將信息更新至自身... ...
# mysql主從複製邏輯: 1.從庫執行start slave 開啟主從複製。 2.從庫請求連接到主庫,並且指定binlog文件以及位置後發出請求。 3.主庫收到從庫請求後,將信息返回給從庫,除了信息日誌外,還包含新的文件名稱以及下一個更新節點。 4.從庫接收到主庫發送的信息後,會將信息更新至自身的relay log中,並且將新的文件名記錄到master-info中。 5.從庫SQL線程會檢測本地relay-log,如有變化,會將信息解析為SQL可執行語句並且執行該語句,同時在relay-log.info中記錄當前文件名以及位置點。 mysql 主從複製操作方法: # 主庫: 1.保證bin-log的開啟(可在mysql中利用 show variables where variable_name like 'bin%' 中查看,其中欄位值為ON則為開啟,OFF則為關閉 bin-log具體邏輯取決於my.cnf設定值中的bin-log) 2.新建用戶並且設定其為replication slave賬戶(grant replication slave on db_name.tb_name to 'user_name'@'host_name' identified by 'password';) 3.對主庫鎖表只讀(flush table with read lock;) 4.收集master的信息,包括(replication slave username and password , master status filename and master status position(get master status: show master status ) ) 5.導出主庫數據,解鎖(unlock tables;) # 從庫: 1.將主庫數據導入從庫 2.將從庫連接主庫(change master to master_host='host_name',master_port='master_port',master_user='master_user',paster_password='master_password',master_log_file='master_status_log_file',master_log_pos='master_status_log_position'); 3.開啟主從複製,start slave; 查看從庫狀態是否OK(show slave status\G;)如果確定狀態為NO時,則需要重新啟動master和slave,再次檢查狀態是否OK
# 主庫配置 vim /etc/my.cnf ############################################## [mysqld] datadir = /data/mysql socket = /tmp/mysql.sock basedir = /usr/local/mysql user = mysql port = 3306 server-id = 97 log-bin = mysql-bin slow_query_log_file = /var/log/mysql/slow.log slow_query_log = 1 symbolic-links = 0 log-error=/var/log/mysql/mysql_error.log ############################################## # 從庫配置 vim /etc/my.cnf ############################################## [mysqld] datadir = /data/mysql socket = /tmp/mysql.sock basedir = /usr/local/mysql user = mysql port = 3306 server-id = 98 log-bin = mysql-bin # slave開啟只讀許可權 read_only = 1 # 打開中繼日誌 relay_log = /var/log/mysql-relay-bin slow_query_log_file = /var/log/mysql/slow.log slow_query_log = 1 symbolic-links = 0 log-error=/var/log/mysql/mysql_error.log ############################################## #在master授權遠程登錄方式 mysql > GRANT REPLICATION SLAVE ON *.* to 'root'@'%' identified by ' Password1!'; mysql > FLUSH PRIVILEGES; # 在slave上連接master mysql > change master to master_host='172.50.1.97',master_user='root',master_password='Password1!',master_log_file='mysql-bin.000001',master_log_pos=687; # 在slave上開啟slave功能 mysql > start slave; # 在slave上查詢狀態 mysql > show slave status;