主從複製配置方案和實際的場景有很多,在之前配置了主從庫都是全新的配置方案
在這一篇會配置主庫存在數據
然後配置主從複製
主從複製
主從複製所需要的環境
【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的數據庫直接鎖住
flush tables with read lock;
2.查看主數據庫狀態,並查看file 和 position的值
3.備份數據庫
docker exec da30bacb60fd /usr/bin/mysqldump -u root --password=123456 kaka_test_master_slave > backup.sql
這個時候會報錯是因爲我們在終端輸入的密碼
在mysql-master配置文件etc/my.cnf加入下面配置即可
然後在執行一下命令,就可以看到導出的mysql數據庫了
docker exec da30bacb60fd /usr/bin/mysqldump kaka_test_master_slave > backup.sql
# 或者
docker exec -it mysql-master mysqldump -uroot -p123456 kaka_test_master_slave > kaka.sql
4.給master-slave1從庫創建數據庫
5.把備份數據庫複製到master-slave1容器中
# 複製文件到從機容器
docker cp backup.sql mysql-slave1:/
# 進入到mysql中
mysql -u root -p
# 導入MySQL
source /home/kaka.sql;
配置主從複製
1.跟之前的操作一樣,先給mysql-slave1的mysql配置文件配置 server_id
這裏配置的是3
或者直接set global server_id=3
2.給予從庫權限
這裏切記MASTER_LOG_POS這個參數,是在主庫 show master status 獲得的
CHANGE MASTER TO
-> MASTER_HOST='172.10.0.2',
-> MASTER_USER='master',
-> MASTER_PASSWORD='123456',
-> MASTER_LOG_FILE='mysql-bin.000001',
-> MASTER_LOG_POS=472;
3.開啓主從複製
start slave
4.查看主從複製狀態
show slave status\G
測試
先把主機數據庫解開,然後添加了一條數據 現在的id邊爲7了
unlock tables;
看我們mysql-slave的數據
在來看mysql-slave1的數據
以上就是配置的全部過程