MySQL/MariaDB數(shù)據(jù)庫基于binlog的主從同步筹淫,應(yīng)該可以說是一個爛大街的技術(shù)了想际。網(wǎng)上的介紹文章比比皆是皱炉,但大都以Docker為主怀估。
由于本人對Docker不熟悉,所以選擇在Windows環(huán)境里驗證了一下MariaDB的主從同步(基于binlog)合搅,過程雖略有波折多搀,但結(jié)果符合預(yù)期。
為了給這次在Windows環(huán)境下從零開始驗證數(shù)據(jù)庫(MariaDB/MySQL)主從同步的過程留個記錄灾部,也希望能幫到既想了解數(shù)據(jù)庫主從同步康铭,但對Docker操作不甚熟悉的朋友。
前言說完赌髓,進主題从藤。
0.準備工作
? ?a)本地安裝好MariaDB數(shù)據(jù)庫(我裝的是MariaDB10.3.8)催跪,以下簡稱MasterDB,確保MasterDB處于啟動狀態(tài)
? ?b)本地安裝好數(shù)據(jù)庫工具(我裝的是HeidiSQL12.4)呛哟,以下簡稱Heidi
? ?c)用Heidi登錄數(shù)據(jù)庫叠荠,并新建一個database:testdb
? ?d)新建一張表:tb9,參考如下:
? ? ? ? ?create table `tb9`(t9a varchar(100),?t9b varchar(50),?dt9 date default '2021-10-12',?ts9 timestamp default current_timestamp(),?t9d varchar(50),?PRIMARY KEY (`t9a`,`t9b`) USING BTREE);
1.MasterDB打開binlog
? ?找到MariaDB安裝目錄下的data文件夾下的my.ini文件扫责,做好文件備份后榛鼎,在[mysqld]塊的最后追加以下內(nèi)容:
? ?server-id=11
? ?log-bin=mysql-bin
? ?log_basename=master01
? ?max-binlog-size=1G
? ?expire_logs_days=99
? ?binlog_format=row
? ?注意:server-id是用來唯一標識主從(Master/Slave)數(shù)據(jù)庫的,所以不能重復(fù)鳖孤;binlog_format:請到網(wǎng)上查找相關(guān)說明者娱。
2.MasterDB重新啟動并確認binlog正常
? ?往tb9表里插入數(shù)據(jù),查看MariaDB安裝目錄下的data目錄苏揣,確認binlog已經(jīng)打開:
3.創(chuàng)建SlaveDB實例
? ?既然是數(shù)據(jù)庫同步黄鳍,就必然涉及2個甚至更多獨立的數(shù)據(jù)庫實例。網(wǎng)上的教程多通過Docker來實現(xiàn)平匈。前言中提到為了簡化框沟,想在Windows環(huán)境中驗證(不懂Docker有點丟人了)。
? ?復(fù)制MariaDB的data目錄到一個新目錄增炭,比如data4slave(注意testdb目錄不要拷貝忍燥,本次只涉及數(shù)據(jù)同步,建表同步不在范圍內(nèi)):
? ? 修改data4slave目錄下的my.ini隙姿,為了方便區(qū)分梅垄,文件名改成:myslave.ini:
? ? 注冊SlaveDB為Windows的Service:
? ? 用管理員身份打開cmd.exe输玷,執(zhí)行以下命令:"D:\Software\MariaDB 10.3\bin\mysqld.exe" --install mariadb4slave --defaults-file="D:\Software\MariaDB 10.3\data4slave\myslave.ini"
? ? 用services.msc查看:
4.SlaveDB配置
? ?新起一個Heidi队丝,連上SlaveDB,然后新建和MasterDB一模一樣的Database和表:testdb欲鹏,tb9
5.開啟同步
? ?5.1.MasterDB:創(chuàng)建同步用的賬號(并配置權(quán)限):
? ? ? ? ?CREATE USER 'replication_user'@'%' IDENTIFIED BY 'replication';
? ? ? ? ?GRANT REPLICATION SLAVE ON *.* TO 'replication_user'@'%';
? ?5.2.MasterDB:執(zhí)行SQL取得同步用信息:
? ? ? ? ?SHOW MASTER STATUS;
? ?5.3.SlaveDB:執(zhí)行SQL語句机久,指定MasterDB:
? ? ? ? ?CHANGE MASTER TO
? ? ? ? ? ? ? MASTER_HOST='localhost',
? ? ? ? ? ? ? MASTER_USER='replication_user',
? ? ? ? ? ? ? MASTER_PASSWORD='replication',
? ? ? ? ? ? ? MASTER_PORT=3308,
? ? ? ? ? ? ? MASTER_LOG_FILE='master01-bin.000003',
? ? ? ? ? ? ? MASTER_LOG_POS=345,
? ? ? ? ? ? ? MASTER_CONNECT_RETRY=10;
? ? ? ? 基本上每個值的含義都很清楚,就是MasterDB相關(guān)的信息赔嚎,包括所在位置吞加,端口,賬號尽狠,密碼,同步binlog文件名和同步位置及同步連接失敗重試次數(shù)
? ?5.4.SlaveDB:開啟同步
? ? ? ? ?執(zhí)行:START SLAVE;
? ? ? ? ?查看同步狀態(tài):SHOW SLAVE STATUS;
6.數(shù)據(jù)同步的驗證
? ?在Master數(shù)據(jù)庫中往tb9里面insert/update/delete數(shù)據(jù)叶圃,每次操作后都到SlaveDB里面確認數(shù)據(jù)是否正確同步了袄膏。
? ?至此在Windows環(huán)境下檢證MariaDB/MySQL數(shù)據(jù)庫的主從同步驗證算是大功告成。
7.收尾清理
? ?7.1.停止SlaveDB的service
? ?7.2.刪除SlaveDB的service:
? ? ? ? ?用管理員身份打開cmd.exe掺冠,執(zhí)行以下命令:"D:\Software\MariaDB 10.3\bin\mysqld.exe" --remove mariadb4slave
? ?7.3.刪除SlaveDB的data目錄:本文中是data4slave目錄
8.最后
? ?本次檢證把包括testdb在內(nèi)的所有的數(shù)據(jù)庫實例都作為同步的對象了沉馆,而生產(chǎn)環(huán)境中可以設(shè)置僅僅對有需要的數(shù)據(jù)庫做同步:
? ?MasterDB:binlog_do_db码党,binlog_ignore_db:設(shè)置哪些數(shù)據(jù)庫要開啟binlog
? ?SlaveDB:replicate_do_db,replicate_ignore_db:設(shè)置哪些數(shù)據(jù)庫要從主數(shù)據(jù)庫(MasterDB)同步數(shù)據(jù)
? ?比如可以設(shè)置為:主數(shù)據(jù)庫(MasterDB)對testdb1,testdb2開啟binlog斥黑,從數(shù)據(jù)庫(SlaveDB1)同步testdb1揖盘,而另一個從數(shù)據(jù)庫(SlaveDB2)同步testdb2。