利用Navicat傻瓜化實現MySQL8.0主從同步

網上的教程大多是通過命令實現的,我比較懶,想着有沒有比較簡單的辦法來實現呢,平時數據庫管理用Navicat用得比較多,就琢磨着試試用navicat來實現。

基本構建思路

1.主從庫的數據庫版本儘量一致
2.確保數據相同
– 從庫必須要有主庫上的數據。
3.配置主服務器
– 啓用binlog 日誌
– 設置server_id
– 設置要同步的數據庫
– 設置授權用戶
– 記錄需要同步的日誌文件名及日誌開始位置。
4.配置從服務器
– 設置 server_id
– 設置要同步的數據庫
– 指定主數據庫服務器信息
5. 測試配置
– 客戶端連接主庫,寫入的數據,在連接從庫的時候也能夠訪問到。

下載並安裝Navicat

下載及安裝激活過程可以查看這篇文章,介紹得很詳細:https://www.jianshu.com/p/5f693b4c9468

下載及安裝MySQL8.0

下載

MySQL8.0下載地址:https://dev.mysql.com/downloads/mysql/

安裝

解壓並配置my.ini

下載後解壓到E盤根目錄,將文件夾重命名爲mysql-master,進入mysql-master文件夾,新建my.ini文件,寫入以下內容:

[client] 
port=3307
#設置客戶端字符集
default-character-set=utf8 
[mysqld]
#綁定IPv4
bind-address = 0.0.0.0
#設置端口號
port=3307 
character_set_server=utf8 
# 設置mysql的安裝目錄,即你解壓縮安裝包的位置
basedir=E:/mysql-master
# 設置mysql數據庫的數據的存放目錄
datadir=E:/mysql-master/data
# 允許最大連接數
max_connections = 200
sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES
default-storage-engine=INNODB
[WinMySQLAdmin] 
Server = E:/mysql-master/bin/mysqld.exe

由於我的3306端口已被佔用,故配置文件寫的3307。

初始化data目錄

"E:/mysql-master/bin/mysqld" --initialize-insecure --user=mysql

安裝mysql服務

"E:/mysql-master/bin/mysqld" install mysql-master --defaults-file="E:/mysql-master/my.ini"

啓動MySQL服務

net start mysql-master

修改root賬號密碼

剛安裝完成時root賬號默認密碼爲空,此時可以將密碼修改爲指定的密碼。如:123456
登錄數據庫:

"E:/mysql-master/bin/mysql" -uroot -P3307

修改密碼:

user mysql;
ALTER user 'root'@'localhost' IDENTIFIED BY '123456'


按相同的方法安裝另一個mysql服務,文件夾和服務命名爲:mysql-slave
PS:從解壓開始,不要爲了方便直接複製文件夾。注意替換命令中的路徑。

安裝完成後,在計算機管理->服務中可以看到兩個mysql服務都爲啓動狀態:

在Navicat中新建兩個數據庫鏈接,分別爲mysql-master和mysql-slave,確保都可以連上。

同時爲兩個數據庫都創建一個名爲test的數據庫,該數據庫將用於同步。

環境說明

主Mysql(mysql-master):
ip:127.0.0.1
端口:3307
賬號:root
密碼:123456
同步數據庫名稱:test

從MySQL(mysql-slave):
ip:127.0.0.1
端口:3308
賬號:root
密碼:123456
同步數據庫名稱:test

目標:mysql-master和mysql-slave實現test數據庫的主從同步。

配置主庫(mysql-master)

修改主庫my.ini配置文件

在my.ini的配置文件中,添加如下信息:

[mysqld]
log-bin=mysql-bin
server-id=3307
binlog-ignore-db=information_schema
binlog-do-db=test

log-bin:表示啓用binlog功能,並指定二進制日誌的存儲目錄
server-id:指定唯一的servr ID,兩臺數據庫的server-id必須是不一樣的數字,這裏爲了方便,用端口號作爲server-id,一般線上環境可以用ip地址的最後一段作爲server-id。
binlog-ignore-db:binlog日誌不記錄指定庫的更新
binlog-do-db:binlog日誌只記錄指定庫的更新

重啓主庫

net stop mysql-master
net start mysql-master

創建用於同步的賬號

在mysql-master創建一個賬號,該賬號用於mysql-slave連接到mysql-master,允許該賬號在mysql-master上讀取日誌,賦予mysql-slave有File權限及REPLICATION SLAVE的權限。

1.選中mysql-master數據庫,點擊“用戶”->“新建用戶”:

2.填寫用戶名及密碼
例如用戶名填寫:slave,密碼填寫:slave123
密碼過期策略設置爲NEVER
主機填寫slave的IP地址,這裏是127.0.0.1

3.切換至“服務器權限”,勾選FileReplication Slave,點擊保存:

4.登錄至mysql-slave數據庫,測試是否可以使用賬號連接到mysql-master
登錄上去後,輸入mysql命令:

show variables like '%server_id%';

如果顯示server_id爲3307則說明從庫可以順利連上主庫。

線上情況如果連不上,需要檢查防火牆是否阻擋或者阿里雲安全組是否限制了。

重啓主庫,登錄mysql,查看主庫信息

重啓mysql-master,登錄mysql,查看mysql-master信息:

show master status;

File是同步會使用到的binlog文件

配置從庫(mysql-slave)

修改mysql-slave的my.ini配置文件

[mysqld]
log-bin=mysql-bin
server-id=3308
binlog-ignore-db=information_schema
replicate-do-db=test
replicate-ignore-db=mysql
log-slave-updates
slave-skip-errors=all
slave-net-timeout=60

replicate-do-db:要進行主從複製的數據庫名
replicate-ignore-db:不進行主從複製的數據庫名
log-slave-updates:記錄從庫更新,允許鏈式複製( A-B-C )。當該從庫作爲其他庫的主庫時,需要添加該參數

重啓mysql-slave,進入mysql,配置同步

stop slave;
change master to master_host='127.0.0.1',master_port=3307,master_user='slave',master_password='slave123',master_log_file='mysql-bin.000001', master_log_pos=0;
start slave;

master_host:主庫的ip地址,這裏爲127.0.0.1
master_port:主庫的端口,默認爲3306,這裏爲3307
master_user:同步賬號,這裏爲slave
master_password:同步賬號的密碼,這裏爲slave123
master_log_file:開始同步的日誌文件
master_log_pos:開始同步的日誌的開始位置

查看同步狀態

show slave status

如果Slave_IO_RunningSlave_SQL_Running的值都是Yes,說明配置成功。

如果Slave_IO_RunningNo,則查看後面的Last_IO_Error字段,裏面會有詳細的出錯原因。
如果Slave_SQL_RunningNo,則查看後面的Last_SQL_Error字段,裏面會有詳細的出錯原因。

測試同步

mysql-master中的test數據庫中新建一個表,然後查看mysql-slave中的test數據庫是否同步也創建了。

從庫IO線程 和SQL線程的作用

IO線程 把主庫binlog日誌裏的sql命令記錄到本機的中繼日誌文件
SQL線程 執行本機中繼日誌文件裏的sql命令,把數據寫進本機。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章