參考
MySQL 同步(一 至 五) http://imysql.cn/node/58
mysql主从同步 https://blog.csdn.net/z69183787/article/details/70183284
需要將A服務器上的數據庫lxpdc的部份表同步到B服務器的數據庫maildb
一 主服務器(master) 配置(mysql安裝目錄下配置文件my.ini)
#同步記錄日誌存放位置
log_bin = "D:/MySQL-5.7/log/binlog"
#過期時間,過期自動刪除log_bin下的文件
expire_logs_days=10
#最大日誌文件大小
max_binlog_size=100M
#syn database同步數據庫
binlog-do-db=lxpdc
#忽略的數據庫
#binlog-ignore-db=mysql
#Master 服務器標示 值為整形數值
server-id = 1
主服務配置好后,重啟mysql
sqlyong里查詢下SHOW MASTER STATUS;結果如下
記住File欄位和Position欄位 在從服務器需要用到
主服務器需要添加一個供從服務連接的用戶(參考mysql安裝https://blog.csdn.net/losedguest/article/details/80815672)
create user 'lrmis'@'%' identified by '00000';
grant all privileges on *.* to "lrmis"@"%";
二 從服務器(slave) 配置
# 將主服務器的數據庫lxpdc同步到數據庫maildb中
replicate-rewrite-db = lxpdc -> maildb
# 通知slave同步的數據庫
replicate-do-db=maildb
# 通知slave忽略的數據庫
replicate-ignore-db=lxpdc
# 通知slave同步的表名
replicate-do-table=maildb.lrcontact
replicate-do-table=maildb.lrgmember
replicate-do-table=maildb.lrgroup
replicate-do-table=maildb.lrtd00d1
replicate-do-table=maildb.lrtd00h
replicate-do-table=maildb.lrtduser
replicate-do-table=maildb.lxidbind
replicate-do-table=maildb.lxorg
replicate-do-table=maildb.lxorgmember
replicate-do-table=maildb.lxorgobject
replicate-do-table=maildb.lxorgpermission
replicate-do-table=maildb.lxorguser
#Slave從服務器標示,同系列的主從服務需要設置為不同值
server-id = 2
從服務器配置好后重啟mysql
在從服務器 mysql里執行如下sql(注意主服務的IP地址) ,之前主服務器記住File欄位和Position欄位在此處使用
-- 之前主服務器的記住的File和Position值
CHANGE MASTER TO MASTER_HOST='主服務器的ip地址',
MASTER_USER='lrmis',MASTER_PASSWORD='00000',
MASTER_LOG_FILE='binlog.000003',
MASTER_LOG_POS=2418422;
執行后,在從服務器 SHOW SLAVE STATUS ,結果如下
開啟同步 START SLAVE;開啟后 SHOW SLAVE STATUS ,結果如下表名同步正常,後續如果發現同步不正常也是看這兩個值
三.備註
1.主從服務器的表結構需要一樣(包含字段類型(列如blob和longblob不同)和編碼方式(例如utf8和utf8mb4不同))
2.主服務器存在資料做修改或刪除時,從服務器必須得有這筆資料,否則也會報錯
3.從服務設置同步表可以用replicate-do-table和replicate-wild-do-table, replicate-wild-do-table可以採用通配符 `%` 和 `_`, 這樣設置replicate-wild-do-table=maildb.lrgmember時maildb.lrgmember_log表也會同步
4.同步異常檢查 在主服務做了一次Replace的動作,從服務器沒有這筆資料時,顯示同步異常,異常結果如下
解決方案
在啟動同步前,做一次手動導入,保證兩邊資料一樣
後續碰到這種異常可以手動跳過,執行語句如下
-- 停止同步
STOP SLAVE;
-- 跳過此異常
SET GLOBAL sql_slave_skip_counter=1;
-- 重新啟動同步
START SLAVE;