1. 程式人生 > 其它 >docker的mysql8映象主從複製搭建過程記錄

docker的mysql8映象主從複製搭建過程記錄

mysql

# 版本 mysql:8.0.28
# mysql檔案繫結掛載,使用系統的/Users/jaylen/var/lib/mysql 目錄
# 配置檔案掛載到docker volume
docker run --name mysql-master -v /Users/jaylen/var/lib/mysql:/var/lib/mysql -v mysql-master-home:/etc/mysql -e MYSQL_ROOT_PASSWORD=root -dp 3306:3306 mysql:8.0.28

# slaver
docker run --name mysql-slaver -v /Users/jaylen/var/lib/mysql-slaver:/var/lib/mysql -v mysql-slaver-home:/etc/mysql -e MYSQL_ROOT_PASSWORD=root -dp 3316:3306  mysql:8.0.28

複製

用mysql的docker映象一主一從配置:

假設已經安裝了倆mysql8:mysql-master和mysql-slaver,埠分別為3306,3316。如下是配置步驟:

serverid配置:在mysql配置檔案:conf.d中配置,也可以設定全域性變數。

  1. Mysql.cnf配置
    master上:(server-id預設是1,遞增的整型,可以不配)
    [mysqld]
    log-bin=mysql-bin
    server-id=1
    slaver上:
    [mysqld]
    log-bin=mysql-bin
    server-id=2

  2. 配置一個複製許可權的使用者,專門用來複制bin log
    CREATE USER 'slave'@'%' IDENTIFIED BY 'slave';
    GRANT REPLICATION SLAVE, REPLICATION CLIENT ON .

    TO 'slave'@'%';
    ALTER USER 'slave'@'%' IDENTIFIED WITH mysql_native_password BY 'slave'; // 改為內建的密碼認證方式,否則後面配置同步資料時密碼需要填加密後的
    FLUSH PRIVILEGES;

  3. master資料庫加鎖,防止操作過程中有資料變動。歷史資料遷移:手動匯出master資料庫dump到slaver。(步驟省略)

  4. master上檢視狀態
    show master status;
    得到file和position的值,下面設定時需要。

  5. slaver上認主
    CHANGE MASTER TO
    master_host = '172.17.0.2',
    master_port = 3306,
    master_log_file = 'mysql-bin.000002', // master status 裡的 file
    master_log_pos = 5153, // master status 裡的position 從這裡開始複製
    master_user = 'slave',
    master_password = 'slave';
    這裡埠就是docker暴露出來的埠,但是host需要檢視一下。
    docker inspect containerID|containerName; // 找到容器對應的地方寫著ip
    或者執行下面這句,得到ip
    docker inspect --format='{{.NetworkSettings.IPAddress}}' 容器名或id 檢視master的ip(docker內容器的ip)

  6. slaver開啟及其他操作
    start slave; // 開啟主從複製
    stop slave; // stop
    reset slave; // 停下後重置,完了可以重新設定 第五步(change master to)
    show slave status; // 檢視slaver狀態