MySQL|一文解決主庫已有數據的主從複製

  • 2021 年 5 月 12 日
  • 筆記

主從複製配置方案和實際的場景有很多,在之前配置了主從庫都是全新的配置方案

在這一篇會配置主庫存在數據,然後配置主從複製

開始之前,先分享一套MySQL教程👇,小白入門或者學習鞏固都可以看👇

MySQL基礎入門-mysql教程-資料庫實戰(MySQL基礎+MySQL高級+MySQL優化+MySQL34道作業題)_嗶哩嗶哩 (゜-゜)つロ 乾杯~-bilibili

主從複製所需要的環境

【Docker】簡單介紹與安裝
【Docker】安裝MySQL8.0
【MySQL】使用docker配置主從複製(主庫和從庫都是全新的情況)

應用的場景

  • 我們的項目已經運行了一段時間
  • 發現從庫已經不夠用
  • 需要添加的新的從庫
  • 但是現在的主庫已經存在了很多的數據
  • 下來咱們來實現一下這個配置方案

開始配置

可以看到以下三張圖

  • 第一張是mysql-master主庫 存在kaka_test_master_slave
  • 第二張是mysql_slave從庫 存在kaka_test_master_slave
  • 第三張是mysql_slave1從庫 沒有kaka_test_master_slave

 

 

 

 

 

 

給mysql_master主庫添加一條數據測試mysql_slave是否已經開啟了主從複製

在這裡需要注意一下,我是在2020-4-8號配置的,然後把主機關閉了,就出現了主從複製重啟失敗

原因是主機的MASTER_LOG_FILE這個文件名發生了變化,修改一下,然後重啟主從複製即可

我們先在主機插入了一條數據id為6

 

然後去查看master-slave的數據情況(主從複製已經正常)

 

開始給mysql-slave1導入mysql-master的資料庫

配置有倆種方案

  • 第一種是放棄主庫之前的數據,配置主從複製
  • 第二種是複製主庫數據到mysql-slave1這個從庫,然後配置主從複製

在實際案例中,一般第一種情況很少使用,配置主從複製就是為了緩解讀寫讀的壓力。沒有了以前的數據那就沒什麼意義了.

所以本案例主要講第二種

由於為了演示方便所以就只準備了一張表

1. 把mysql-master的資料庫直接鎖住

1 flush tables with read lock;

2.查看主資料庫狀態,並查看file 和 position的值

 

3.備份資料庫

1 docker exec da30bacb60fd /usr/bin/mysqldump -u root --password=123456 kaka_test_master_slave > backup.sql

這個時候會報錯是因為我們在終端輸入的密碼

 

在mysql-master配置文件etc/my.cnf加入下面配置即可

然後在執行一下命令,就可以看到導出的mysql資料庫了

1 docker exec da30bacb60fd /usr/bin/mysqldump kaka_test_master_slave > backup.sql
2 
3 # 或者
4 docker exec -it mysql-master mysqldump -uroot -p123456 kaka_test_master_slave > kaka.sql

 

4.給master-slave1從庫創建資料庫

 

5.把備份資料庫複製到master-slave1容器中

1 # 複製文件到從機容器
2 docker cp backup.sql mysql-slave1:/
3 
4 # 進入到mysql中
5 mysql -u root -p
6 
7 # 導入MySQL
8 source /home/kaka.sql;

 

 

 

配置主從複製

1. 跟之前的操作一樣,先給mysql-slave1的mysql配置文件配置 server_id

這裡配置的是3

或者直接set global server_id=3

2.給予從庫許可權

這裡切記MASTER_LOG_POS這個參數,是在主庫 show master status 獲得的

1 CHANGE MASTER TO
2 -> MASTER_HOST='172.10.0.2',
3 -> MASTER_USER='master',
4 -> MASTER_PASSWORD='123456',
5 -> MASTER_LOG_FILE='mysql-bin.000001',
6 -> MASTER_LOG_POS=472;

3.開啟主從複製

1 start slave

4.查看主從複製狀態

1 show slave status\G

測試

先把主機資料庫解開,然後添加了一條數據 現在的id邊為7了

1 unlock tables;

看我們mysql-slave的數據

 

 

在來看mysql-slave1的數據

 

以上就是配置的全部過程
————————————————