以下操作是在 Windows Web Server 2008 R2 操作系統下
一、環境介紹及說明
主庫的版本:mysql-5.6.42-winx64.zip
主庫的ip地址:127.0.0.1
主庫的端口:3306
從庫的版本:和主庫一樣
從庫的ip地址:127.0.0.1
從庫的端口:3307
如果有多余的服務器也可以不用都配置到一台電腦上,只需要各服務器ip能ping通就行。
注:主庫和從庫版本可以一致也可以不一致,需要說明一點,如果兩者版本不一致,一般主庫的版本需要比從庫的版本低,這樣就可以避免由於版本問題,有些sql不能執行的問題。
二、下載安裝MySQL
MySQL官網給出的安裝包有兩種格式,一個是msi格式,一個是zip格式的,這里使用zip格式的進行安裝。
MySQL5.6下載鏈接:https://dev.mysql.com/downloads/mysql/5.6.html#downloads
下載完成后解壓,解壓后的目錄:
三、配置MySQL主從
(1)主庫(MySQL-Master)的安裝與配置
主庫根目錄下有一個 my-default.ini 命名的配置文件復制一個,改名為 my.ini,用文本編輯器打開,進行配置以下基本信息:
[mysqld]
# 服務端使用的字符集默認為8比特編碼的latin1字符集,設置為utf8字符
character-set-server=utf8
# 創建新表時將使用的默認存儲引擎
default-storage-engine=INNODB
# 設置mysql的安裝目錄
basedir = D:\MySQL-5.6\mysql-1
# 設置 mysql數據庫的數據的存放目錄,MySQL 8+ 不需要以下配置,系統自己生成即可,否則有可能報錯
datadir = D:\MySQL-5.6\mysql-1\data
# 設置3306端口
port = 3306
server_id = 1 # 主庫和從庫需要不一致,分別配一個唯一的ID編號
log_bin=master-bin # 二進制文件存放路徑,存放在根目錄data文件夾下
# binlog-do-db=test # 需要復制的庫,多個庫用逗號隔開,如果此項不配置所有主庫都參與復制,這里要是配置了,同時也要在Slave(也就是你的從庫) 上設定。
# binlog-ignore-db=mysql # 不需要復制的庫,和上項同理
[mysql]
# 設置mysql客戶端默認字符集
default-character-set=utf8
[client]
default-character-set=utf8
配置好的截圖:
配置好主數據庫后,復制,粘貼一個,作為從數據庫
打開cmd,進入主庫的bin文件夾中
輸入以下安裝命令:
mysqld -install MySQL-Master
注:其中的MySQL-Master為主庫MySQL的服務名稱
這里遇到一個如下圖所示的錯誤提示:
解決方法:在別的Windows系統的下 C:\Windows\System32 中搜索找到 msvcp100.dll,復制到服務器相同的文件夾中即可。
出現以下提示,表示安裝成功。
安裝成功之后,輸入以下命令啟動MySQL:
net start mysql-master
注:net stop mysql-master 為停止命令
服務啟動成功之后,就可以登錄了,如下圖所示,輸入 mysql -u root -p(第一次登錄沒有密碼,直接按回車),登錄成功!
登錄上之后設置root用戶的密碼(這里修改成123456)
執行命令
use mysql;
update user set password=password("123456") where user="root";
flush privileges;
執行完畢后如下圖所示:
這樣就設置好了root用戶的密碼了。
查看設置的字符集(my.ini配置文件里把字符集設置成了utf8,為了能正常顯示中文)
show variables like "%character%";show variables like "%collation%";
(2)從庫(MySQL-Slave)的安裝與配置
進入從庫目錄中,修改 my.ini 配置文件,具體文件內容如下,將里面的路徑修改成你自己的從庫路徑。
安裝從庫服務。
打開cmd,進入從庫的bin文件夾下
執行命令:mysqld -install MySQL-Slave
注:其中的MySQL-Slave為從庫MySQL的服務名稱
出現以下提示,表示安裝成功。
啟動從的mysql服務器
執行命令:net start mysql-slave
注:net stop mysql-slave為停止命令
出現以下提示信息表示從庫啟動成功
同樣的,登錄從庫設置從庫root用戶的密碼(這里修改成123456)
這里特別需要注意:在cmd下登錄從庫時需要指定設置的端口號,否則會報以下錯誤
ERROR 2003 (HY000): Can't connect to MySQL server on 'localhost' (10061)
mysql -u root -P 3307 -p(大寫的P代表端口號,小寫的p代表密碼)
執行命令
use mysql;
update user set password=password("123456") where user="root";
flush privileges;
執行完畢后如下圖所示:
至此,主、從數據庫的安裝及配置就完成了。
進入Windows的服務管理(進入服務管理方法,快鍵鍵Win+R打開運行框窗口,輸入services.msc),即可看到主從MySQL,以及它們的狀態
四、關聯主庫(MySQL-Master)與從庫(MySQL-Slave)
上面我們已經把MySQL-Master和MySQL-Slave相關配置都已配置完成,並分別啟動了,現在我們在cmd下分別登錄到主庫和從庫中。
注意:登錄主庫,需要先進入到主庫的bin文件夾下,再登錄MySQL,然后,執行命令 show master status 查看master的狀態
下圖中的 File 和Position 記錄下來,在從庫配置中會用到 (注意:每次重啟主數據庫 File 和 Position 參數都會變),如下圖所示:
從庫,也需要先進入到從庫的bin文件夾下,再登錄MySQL,然后,執行命令 show slave status 查看slave的狀態
我們可以發現 ,master的狀態下,生成了一個二進制的日志文件,而slave下是空的,所以我們現在就要把主庫與從庫關聯起來。只需要讓從庫(slave)知道主庫(master)的地址就可以了。
首先我們需要在主庫(master)中創建一個用戶用於與從庫同步的用戶名和密碼(這里我創建一個test用戶,密碼為mysql),並給test用戶授權,以用於主庫操作從庫。
注意:是在主庫中建立一個用戶(專門用給從庫連接的,可別迷迷糊糊的到從庫的命令界面敲):
具體如下:
相關命令:
create user test;
grant replication slave on *.* to '從庫用戶名(test)'@'從庫主機地址(127.0.0.1)'identified by '密碼(mysql)';
flush privileges; # 刷新權限
現在我們切到從庫(slave),把主庫與從庫聯系起來。
執行以下命令:
change master to master_host='127.0.0.1',master_port=3306,master_user='test',master_password='mysql',master_log_file='master-bin.000015',master_log_pos=120;
然后執行命令 start slave 開啟主從同步,如下圖所示:
stop slave # 關閉主從同步
然后執行下列命令查看 slave 的狀態
show slave status \G(注意:\G后面沒有分號的)
這里出現了錯誤,如下圖所示:
這里還有uuid的概念,配置mysql主從時,由於是直接拷貝的mysql目錄,導致主從mysql uuid相同, Slave_IO無法啟動,所以報錯,各個數據庫的server_uuid得保證不一樣,用以下命令分別查看主從數據庫的server_uuid
show variables like '%server_uuid%';
show variables like 'server_id'; # 查看server_id
可以看到主從數據庫的server_uuid是相同的
解決方法:
找到data文件夾下的auto.cnf文件,修改里面的uuid值,保證各個數據庫的uuid不一樣,修改后重啟數據庫即可
再依次執行以下命令:
stop slave # 關閉主從同步
start slave # 開啟主從同步
show slave status \G(注意:\G后面沒有分號的) # 查看 slave 的狀態
出現如下圖所示,則開啟主從跟蹤成功
至此,主從跟蹤已經開啟,並全部配置完成
五、驗證主從同步
分別進入主庫和從庫並查看它們的數據庫,然后在主庫中創建一個數據庫web,看一下從庫有沒有變化,如下圖所示:
至此,主從同步已配置完畢。
說明:注意不要往從庫中寫數據,如果從庫寫入數據,master_log_pos是不會變化的,主庫的信息沒有發生變化,當主庫又變化和從庫一樣的操作時就有可能會產生沖突,因此,只能在主庫中寫數據,從庫只能讀數據,當然主庫也可以讀數據。
還有一點,如果想同步主庫里在之前就有的數據庫的數據,需要手動從主庫中導出數據庫,然后在從庫里再導入,就能同步了。
六、其他一些相關命令
查看binlog日志里面的內容
列表:show master logs
清空:reset master
刷新:flush logs
查看指定日志:show binlog events in '日志鍵名'
本文參考自其他博客:
(1)https://www.cnblogs.com/naruto123/p/8138708.html
(2)https://www.cnblogs.com/jpfss/p/8143720.html