1. 程式人生 > 其它 >[Demo示例]Docker構建本地Mysql主從庫——手動建立。

[Demo示例]Docker構建本地Mysql主從庫——手動建立。

技術標籤:Demo示例mysqldocker

緣起
想在本地使用Docker建立Mysql主從庫,後續要實現全自動化,本次先手動實現功能。

步驟

  1. 下載映象docker pull mysql
  2. 啟動兩個mysql容器。
    此處MYSQL_ROOT_PASSWORD是重點,設定密碼為root否則無法啟動
    第一個:m1
    docker run -p 3306:3306 --name m1 -e MYSQL_ROOT_PASSWORD=root -d mysql
    第二個:slave1
    docker run -p 3307:3306 --name slave1 -e MYSQL_ROOT_PASSWORD=root -d mysql
  3. 修改mysql配置檔案 /etc/mysql/my.cnf
    主要追加3行(可以用linux的sed命令):
    sed '$a第一行\n第二行' my.cnf.bak > my.cnf
    # $表示最後,a表示追加內容,\n表示換行,>表示輸出到文字
    
    # 主庫的配置
    log-bin=mysql-bin #開啟日誌,mysql從庫通過日誌來更新自己的資料。
    server-id=1 
    binlog-do-db=dbName #這裡就是指定要同步的資料庫
    
    # 從庫的配置
    log-bin=mysql-bin #一樣的,同上
    server-id=2 #id不能相同
    replicate-do-db=dbName #唯一區別
    

分割線:到此就配置完了,下面執行mysql語句就可以完成了。


  1. 主庫建立使用者,授權。
    	-- 建立使用者
    	create user 'sync'@'172.17.0.3' identified WITH 'mysql_native_password' BY '123';
    	-- 授權
    	grant replication slave on *.* to 'sync'@'172.17.0.3';
        -- 使生效
    	flush privileges;
    
    注:
    容器的ip可以通過 cat /etc/hosts 檢視;
    mysql_native_password可以避免訪問時對密碼加密的要求;
    mysql8之後的版本,使用者建立、授權不能同時進行,必須先建立再授權。
  2. 從庫開啟同步。
    -- 下面的master_log_file和master_log_pos在主庫show master status命令獲得。
    -- 這兩個標識檔案和偏移,決定了我們從哪開始同步
    change master to master_host='172.17.0.2',master_user='sync',master_password='123',master_log_file='mysql-bin.000005',master_log_pos=865;
    -- 開啟
    start slave;
    -- 檢視狀態
    show slave status;
    
    注:
    show master status;後面可能會有\G,它是把結果旋轉90度,在navicate中會報錯,沒法用。
    show slave status;結果中有錯誤資訊,有問題可以根據它的提示來修改。只要Slave_IO_Running和Slave_SQL_Running是Yes,那就表示正常運行了~

未完待續,下次要做成一鍵全自動的,問題有:

  1. 建立容器時,修改my.cnf檔案
  2. 分配不同的server-id ,容器名帶id
  3. 啟動容器時,獲取容器ip,授權