目標:自動同步Master 服務器上面的Demo數據庫到Slave 服務器的Demo數據庫中。
對於一些操作系統比較強而使用頻率又不高的東西,往往好久不去弄就忘記了,所以要經常記錄起來,方便日后查閱。
環境
數據庫版本:mysql5.7.17
Master 服務器(Windows server2012 R2):192.168.1.18
Slave 服務器 (win7 64bit):192.168.1.95
mysql5.7.17 winx64免安裝版下載地址:http://dev.mysql.com/downloads/file/?id=467269
具體配置方法請參考:https://www.cnblogs.com/c3gen/p/6168765.html
工具:Cmder(window神器)。你也可以直接用window的CMD。
注意:主從服務器的防火牆都要給mysql端口添加例外。也就是說兩台服務器的mysql數據庫可以互連。
修改配置文件
主庫
開始——運行—services.msc,打開主庫的服務列表,找到服務MYSQL57 ,查看該服務的配置文件所在路徑。
打開配置文件my.ini,添加如下配置項
log-bin=mysql.bin # 使binlog在每N次binlog寫入后與硬盤同步 sync-binlog=1 # 1天時間自動清理二進制日志 expire_logs_days=1 # 需要同步的數據庫 binlog-do-db=demo # 不需要同步的數據庫 binlog-ignore-db = mysql binlog-ignore-db = test binlog-ignore-db = information_schema binlog-ignore-db = bak binlog-ignore-db = sys binlog-ignore-db = omserver binlog-ignore-db = sakila binlog-ignore-db = smp_base_1_0 binlog-ignore-db = smp_base_2 binlog-ignore-db = smp_emx_1_0 binlog-ignore-db = smp_emx_2 binlog-ignore-db = smp_maint_1_0 binlog-ignore-db = smp_maint_2 # Error Logging. log-error="WIN-1QQDRPR5R2M.err" # Server Id. server-id=1
主服務器上面有很多數據庫,而我們只需要同步其中一個數據庫demo。
從庫
以同樣的方式找到並打開mysql數據庫配置文件my.ini。
修改配置如下:
# Server Id. server-id=95 # bind-address=192.168.1.95 log_bin=mysql-bin # 二進制日志自動刪除的天數 expire_logs_days=1
需要注意的是:主庫和從庫的Server Id不能相同,通常我們將其設置為IP地址的末尾數值,假如IP是192.168.1.95,那么我們設置95.
命令操作
主庫
1.連接到主庫
mysql -h 192.168.1.18 -uroot -p
2.創建授權用戶
grant replication slave on *.* to 'test'@'192.168.1.95' identified by 'yujie' ;
說明:test是mysql用戶名,yujie是密碼,192.168.1.95是從庫的IP地址。
3. 刷新權限
flush privileges;
6.創建測試數據
create database test; use test; create table test(id int(11), value varchar(20)); insert into test values(1, 'aa'),(2, 'bb'),(3, 'cc') ,(4, 'dd') ,(5, 'ff') ,(6, 'gg') ,(7, '77');
7. 顯示主服務器的狀態信息,並且找到File 和 Position 的值記錄下來
從庫
1.登錄從庫
mysql -uroot -p
2 .將主庫的demo數據庫克隆一份到從庫,並給test用戶重新賦權限。
grant all privileges on *.* to 'test'@'%' identified by 'yujie' with grant option;
3.重啟mysql服務
4.slave
與 master
建立連接,進行數據同步
change master to master_host='192.168.1.18',master_user='test',master_password='yujie', master_log_file='mysql.000001',master_log_pos=937;
注意這里的master_log_file和master_log_pos的值就是前面在主庫中查到的File和Position。
5.查看從數據庫狀態
show slave status \G;
Slave_IO_Running: Yes Slave_SQL_Running: Yes以上兩項都為Yes說明配置成功。
驗證主從
在master
插入一條數據,然后再slave
查看是否同步成功。
主庫:
mysql> use demo; Database changed mysql> insert into test values(8, '88'); Query OK, 1 row affected (0.14 sec)
從庫:
mysql> use demo; Database changed mysql> select * from test; +------+-------+ | id | value | +------+-------+ | 1 | aa | | 2 | bb | | 3 | cc | | 5 | ff | | 6 | gg | | 7 | 77 | | 8 | 88 | +------+-------+ 7 rows in set (0.00 sec)
如上圖表示同步成功。
其實在mysql5.7之后還有另一種復制方式,那就是基於事務的復制,並且你可以在這兩種復制方式之間進行切換,我這里只演示了通過二進制日志的形式進行復制。
參考資料:
mysql-5.7.17-winx64免安裝版,win10環境下安裝配置:https://www.cnblogs.com/c3gen/p/6168765.html
mysql 5.7 主從同步配置(windows):https://blog.csdn.net/natahew/article/details/71122569
MySQL5.7 主從復制配置:https://segmentfault.com/a/1190000010199283