編碼的世界 / 優質文選 / 歷史

基於docker搭建的mysql主從複制


2022年7月18日
-   

docker搭建mysql主從複制
  • 拉取mysql鏡像命令:docker pull mysql:5.7

1.啟動master,slave
  • docker run -it -p 3306:3306 name master privileged=true -v /f/DockerServer/mysql3306/conf/conf.d:/etc/mysql/conf.d -v /f/DockerServer/mysql3306/data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=123456 -d mysql:5.7
  • docker run -it -p 3307:3306 name slave privileged=true -v /f/DockerServer/mysql3306/conf/conf.d:/etc/mysql/conf.d -v /f/DockerServer/mysql3307/data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=123456 -d mysql:5.7

2.進入到master修改配置
  • docker exec -it 627a2368c865 bash
  • cd /etc/mysql
  • vim my.cnf
    • 這個時候會報錯 bash: vi: command not found,需要安裝vim
    • apt-get install vim
    • apt-get update
    • apt-get install vim
    • 在my.cnf中添加如下配置
    [mysqld]
    ## 同一局域網內注意要唯一
    server-id=100
    ## 開啟二進制日志功能,可以隨便取(關鍵)
    log-bin=mysql-bin
  • 配置完成之後,需要重啟mysql服務使配置生效。使用service mysql restart完成重啟。重啟mysql服務時會使得docker容器停止,我們還需要docker start master啟動容器。
  • Master數據庫創建數據同步用戶,授予用戶 slave REPLICATION SLAVE權限和REPLICATION CLIENT權限,用於在主從庫之間同步數據。
  • docker exec -it 627a2368c865 bash 進入到master容器中
  • mysql -u root -p
  • 輸入密碼
  • CREATE USER ‘slave’@’%’ IDENTIFIED BY ‘123456’;
  • GRANT REPLICATION SLAVE, REPLICATION CLIENT ON . TO ‘slave’@’%’;

3.進入到slave修改配置
  • docker exec -it 123a2368c123 bash
  • cd /etc/mysql
  • vim my.cnf
  • apt-get install vim
    • 在my.cnf中添加如下配置
    [mysqld]
    ## 設置server_id,注意要唯一
    server-id=101
    ## 開啟二進制日志功能,以備Slave作為其它Slave的Master時使用
    log-bin=mysql-slave-bin
    ## relay_log配置中繼日志
    relay_log=edu-mysql-relay-bin
  • 配置完成之後,需要重啟mysql服務使配置生效。使用service mysql restart完成重啟。重啟mysql服務時會使得docker容器停止,我們還需要docker start slave啟動容器。

4.進入master容器
  • 進入到mysql,mysql -u root -p
  • show master status;
  • 記錄File(mysql-bin.000001), Position(617)

5.退出到docker容器。
  • 查詢master和slave的ip:
  • docker inspect format=’{{.NetworkSettings.IPAddress}}’ master (127.0.0.2)
  • docker inspect format=’{{.NetworkSettings.IPAddress}}’ slave (127.0.0.3)

6.進入slave容器
  • 進入mysql,mysql -u root -p
  • change master to master_host=‘172.17.0.2’, master_user=‘slave’, master_password=‘123456’, master_port=3306, master_log_file=‘mysql-bin.000001’, master_log_pos= 617, master_connect_retry=30;
  • 字段說明

master_port:Master的端口號,指的是容器的端口號
master_user:用於數據同步的用戶
master_password:用於同步的用戶的密碼
master_log_file:指定 Slave 從哪個日志文件開始複制數據,即上文中提到的 File 字段的值
master_log_pos:從哪個 Position 開始讀,即上文中提到的 Position 字段的值
master_connect_retry:如果連接失敗,重試的時間間隔,單位是秒,默認是60秒

7.slave開啟主從複制
  • 在Slave 中的mysql終端執行show slave status G;用於查看主從同步狀態

8.主從複制測試
  • 在master創建一個test數據庫,在slave中也會生成一個test數據庫。

熱門文章